From 29a51bce02a2976c96ae5334bd06c43ad8eb0643 Mon Sep 17 00:00:00 2001 From: Florian Baumann Date: Mon, 10 Jan 2022 08:09:40 +0100 Subject: [PATCH] missing feature with bugs --- serra.go | 4 ++++ src/serra/root.go | 51 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+) diff --git a/serra.go b/serra.go index 3d2b858..67d3483 100644 --- a/serra.go +++ b/serra.go @@ -18,6 +18,7 @@ var opts struct { Set bool `docopt:"set"` Sets bool `docopt:"sets"` Stats bool `docopt:"stats"` + Missing bool `docopt:"missing"` Update bool `docopt:"update"` CardId []string `docopt:""` SetCode string `docopt:",--set"` @@ -35,6 +36,7 @@ Usage: serra remove ... serra cards [--rarity=] [--set=] serra card ... + serra missing serra set serra sets serra update @@ -63,6 +65,8 @@ Options: serra.ShowCard(opts.CardId) } else if opts.Sets { serra.Sets() + } else if opts.Missing { + serra.Missing(opts.SetCode) } else if opts.Set { serra.ShowSet(opts.SetCode) } else if opts.Update { diff --git a/src/serra/root.go b/src/serra/root.go index 51d5e68..ec23e47 100644 --- a/src/serra/root.go +++ b/src/serra/root.go @@ -2,6 +2,7 @@ package serra import ( "fmt" + "strconv" "strings" "time" @@ -156,6 +157,56 @@ func Sets() { } +func Missing(setname string) error { + + client := storage_connect() + coll := &Collection{client.Database("serra").Collection("cards")} + defer storage_disconnect(client) + + // fetch all cards in set + cards, err := coll.storage_find(bson.D{{"set", setname}}, bson.D{{"collectornumber", 1}}) + if (err != nil) || len(cards) == 0 { + LogMessage(fmt.Sprintf("Error: Set %s not found or no card in your collection.", setname), "red") + return err + } + + // fetch set informations + setcoll := &Collection{client.Database("serra").Collection("sets")} + sets, _ := setcoll.storage_find_set(bson.D{{"code", setname}}, bson.D{{"_id", 1}}) + set := sets[0] + + LogMessage(fmt.Sprintf("Missing cards in %s", sets[0].Name), "green") + var i int64 + // iterate over all cards in set + for i = 1; i < set.CardCount; i++ { + fmt.Printf("Checking usg/%d\n", i) + var found bool + found = false + + // iterate over all cards in collection + for _, c := range cards { + found = false + // check if current card has collector number that we look for + if c.CollectorNumber == strconv.FormatInt(i, 16) { + + // if yes, set found to true, and stop looking + found = true + break + } + } + if !found { + ncard, err := fetch_card(fmt.Sprintf("%s/%s", setname, strconv.FormatInt(i, 16))) + if err != nil { + continue + } + + fmt.Printf("%s (%s)\n", ncard.Name, ncard.SetName) + } + + } + return nil +} + func ShowSet(setname string) error { client := storage_connect()