diff options
| author | Xe Iaso <me@xeiaso.net> | 2023-08-13 10:25:53 -0400 |
|---|---|---|
| committer | Xe Iaso <me@xeiaso.net> | 2023-08-13 10:25:53 -0400 |
| commit | 07cd5a82210a34ed71ca40057d4bf68cd2d70459 (patch) | |
| tree | 6f4de93386040264d7acf4daff28a2d19fc655d2 /cmd | |
| parent | f940520e74d2ac589f231d3386346534035effd3 (diff) | |
| download | x-07cd5a82210a34ed71ca40057d4bf68cd2d70459.tar.xz x-07cd5a82210a34ed71ca40057d4bf68cd2d70459.zip | |
cmd/sanguisuga: fix lock hang
Signed-off-by: Xe Iaso <me@xeiaso.net>
Diffstat (limited to 'cmd')
| -rw-r--r-- | cmd/sanguisuga/main.go | 5 | ||||
| -rw-r--r-- | cmd/x/main.go | 22 | ||||
| -rw-r--r-- | cmd/x/sanguisuga.go | 60 |
3 files changed, 85 insertions, 2 deletions
diff --git a/cmd/sanguisuga/main.go b/cmd/sanguisuga/main.go index 1f6a630..88d0906 100644 --- a/cmd/sanguisuga/main.go +++ b/cmd/sanguisuga/main.go @@ -290,9 +290,10 @@ func (s *Sanguisuga) HandleIRCMessage(ev *irc.Event) { stateKey := fmt.Sprintf("%s %s", ti.Title, id) + s.dbLock.Lock() + defer s.dbLock.Unlock() + for _, show := range s.Config.Shows { - s.dbLock.Lock() - defer s.dbLock.Unlock() if s.db.Data == nil { s.db.Data = &State{ Seen: map[string]TorrentAnnouncement{}, diff --git a/cmd/x/main.go b/cmd/x/main.go new file mode 100644 index 0000000..706cd9c --- /dev/null +++ b/cmd/x/main.go @@ -0,0 +1,22 @@ +package main + +import ( + "context" + "os" + + "github.com/google/subcommands" + "within.website/x/internal" +) + +func main() { + subcommands.Register(subcommands.HelpCommand(), "") + subcommands.Register(subcommands.FlagsCommand(), "") + subcommands.Register(subcommands.CommandsCommand(), "") + + subcommands.Register(&sanguisugaAnimeList{}, "sanguisuga") + + internal.HandleStartup() + ctx := context.Background() + + os.Exit(int(subcommands.Execute(ctx))) +} diff --git a/cmd/x/sanguisuga.go b/cmd/x/sanguisuga.go new file mode 100644 index 0000000..667412c --- /dev/null +++ b/cmd/x/sanguisuga.go @@ -0,0 +1,60 @@ +package main + +import ( + "context" + "encoding/json" + "flag" + "fmt" + "log" + "net/http" + + "github.com/google/subcommands" + "github.com/rodaine/table" +) + +var ( + sanguisugaURL = flag.String("url", "http://sanguisuga", "Base sanguisuga URL") +) + +type Show struct { + Title string `json:"title"` + DiskPath string `json:"diskPath"` + Quality string `json:"quality"` +} + +type sanguisugaAnimeList struct { + URL string +} + +func (*sanguisugaAnimeList) Name() string { return "anime-list" } +func (*sanguisugaAnimeList) Synopsis() string { return "Print list of anime tracked by sanguisuga." } +func (*sanguisugaAnimeList) Usage() string { + return `anime-list [--url]: + Print list of anime tracked by sanguisuga.` +} + +func (sal *sanguisugaAnimeList) SetFlags(f *flag.FlagSet) {} + +func (sal *sanguisugaAnimeList) Execute(ctx context.Context, f *flag.FlagSet, _ ...interface{}) subcommands.ExitStatus { + resp, err := http.Get(fmt.Sprintf("%s/api/anime/list", *sanguisugaURL)) + if err != nil { + log.Fatal(err) + } + + var shows []Show + + defer resp.Body.Close() + if err := json.NewDecoder(resp.Body).Decode(&shows); err != nil { + log.Fatal(err) + } + + tbl := table.New("Name", "Disk Path", "Quality") + + for _, show := range shows { + tbl.AddRow(show.Title, show.DiskPath, show.Quality) + } + + tbl.Print() + + return subcommands.ExitSuccess +} |
