troubles searching in it quickly. So here are the indexer, that extracts
titles, sizes, hashes and XML offsets:
- $ cmd/index < rutracker-XXX.xml > rutracker.gob
+ $ cmd/index < rutracker-XXX.xml | cmd/repack > rutracker.gob
-On my computer is works for several minutes, that is pretty fast.
+On my computer that takes seven minutes.
After that, you can search the desired title like that:
--- /dev/null
+package main
+
+import (
+ "bufio"
+ "encoding/gob"
+ "io"
+ "os"
+
+ "go.stargrave.org/rutrackerer"
+)
+
+func main() {
+ gobDec := gob.NewDecoder(bufio.NewReader(os.Stdin))
+ torrents := make([]*rutrackerer.Torrent, 0, 1<<20)
+ var err error
+ for {
+ var torrent rutrackerer.Torrent
+ if err = gobDec.Decode(&torrent); err != nil {
+ if err == io.EOF {
+ break
+ }
+ panic(err)
+ }
+ torrents = append(torrents, &torrent)
+ }
+ gobEnc := gob.NewEncoder(os.Stdout)
+ if err = gobEnc.Encode(torrents); err != nil {
+ panic(err)
+ }
+}
"encoding/gob"
"encoding/hex"
"fmt"
- "io"
"os"
"os/exec"
"strconv"
if err = cmd.Start(); err != nil {
panic(err)
}
- torrents := make([]*rutrackerer.Torrent, 0, 1<<20)
+ var torrents []*rutrackerer.Torrent
+ gobDec := gob.NewDecoder(bufio.NewReader(os.Stdin))
+ if err = gobDec.Decode(&torrents); err != nil {
+ panic(err)
+ }
printer := make(chan struct{})
go func() {
scanner := bufio.NewScanner(grepStdout)
}
close(printer)
}()
- gobDec := gob.NewDecoder(bufio.NewReader(os.Stdin))
- for {
- var torrent rutrackerer.Torrent
- if err = gobDec.Decode(&torrent); err != nil {
- if err == io.EOF {
- break
- }
- panic(err)
- }
- torrents = append(torrents, &torrent)
- if _, err = grepStdin.Write([]byte(torrent.Title + "\n")); err != nil {
+ for _, t := range torrents {
+ if _, err = grepStdin.Write([]byte(t.Title + "\n")); err != nil {
panic(err)
}
}