From 4580748ebe165ba3aa6451a40e2deabdb64165fd Mon Sep 17 00:00:00 2001 From: Florian Baumann Date: Tue, 27 Jun 2023 16:17:14 +0200 Subject: [PATCH] add check command --- imgs/check.png | Bin 0 -> 30031 bytes readme.md | 7 +++++ src/serra/check.go | 66 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 73 insertions(+) create mode 100644 imgs/check.png create mode 100644 src/serra/check.go diff --git a/imgs/check.png b/imgs/check.png new file mode 100644 index 0000000000000000000000000000000000000000..81aa2f0446ff852fa0ba76ae1b35bfbd10cda045 GIT binary patch literal 30031 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�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 literal 0 HcmV?d00001 diff --git a/readme.md b/readme.md index 1cde896..8c6a79c 100644 --- a/readme.md +++ b/readme.md @@ -69,6 +69,7 @@ Usage: Available Commands: add Add a card to your collection card Search & show cards from your collection + check Check if a card is in your collection completion Generate the autocompletion script for the specified shell flops What cards lost most value help Help about any command @@ -137,6 +138,12 @@ update. After all Sets are updated, the whole collection value is updated. ![](https://github.com/noqqe/serra/blob/main/imgs/update.png) +## Check + +To add a card to your collection. + +![](https://github.com/noqqe/serra/blob/main/imgs/check.png) + ## Adding all those cards, manually? Yes. While there are serveral OCR/Photo Scanners for mtg cards, I found they diff --git a/src/serra/check.go b/src/serra/check.go new file mode 100644 index 0000000..a2ece66 --- /dev/null +++ b/src/serra/check.go @@ -0,0 +1,66 @@ +package serra + +import ( + "fmt" + "strings" + + "github.com/spf13/cobra" + "go.mongodb.org/mongo-driver/bson" +) + +func init() { + checkCmd.Flags().StringVarP(&set, "set", "s", "", "Filter by set code (usg/mmq/vow)") + checkCmd.Flags().BoolVarP(&detail, "detail", "d", false, "Show details for cards (url)") + rootCmd.AddCommand(checkCmd) +} + +var checkCmd = &cobra.Command{ + Aliases: []string{"c"}, + Use: "check", + Short: "Check if a card is in your collection", + Long: "Check if a card is in your collection. Useful for list comparsions", + SilenceErrors: true, + RunE: func(cmd *cobra.Command, cards []string) error { + checkCards(cards, detail) + return nil + }, +} + +func checkCards(cards []string, detail bool) error { + client := storageConnect() + coll := &Collection{client.Database("serra").Collection("cards")} + defer storageDisconnect(client) + + // Loop over different cards + for _, card := range cards { + + // Extract collector number and set name from card input & trim any leading 0 from collector number + collectorNumber := strings.TrimLeft(strings.Split(card, "/")[1], "0") + setName := strings.Split(card, "/")[0] + + // Check if card is already in collection + co, err := coll.storageFind(bson.D{{"set", setName}, {"collectornumber", collectorNumber}}, bson.D{}, 0, 0) + if err != nil { + LogMessage(fmt.Sprintf("%v", err), "red") + continue + } + + // If Card is in collection, print yes. + if len(co) >= 1 { + c := co[0] + LogMessage(fmt.Sprintf("Yes - %s \"%s\" (%s, %.2f%s) is in your Collection", card, c.Name, c.Rarity, c.getValue(foil), getCurrency()), "green") + continue + } else { + if detail { + // fetch card from scyrfall if --detail was given + c, _ := fetchCard(setName, collectorNumber) + LogMessage(fmt.Sprintf("No - %s \"%s\" (%s, %.2f%s) is not in your Collection.", card, c.Name, c.Rarity, c.getValue(foil), getCurrency()), "red") + } else { + // Just print, the card name was not found + LogMessage(fmt.Sprintf("No \"%s\" is not in your Collection.", card), "red") + } + } + } + storageDisconnect(client) + return nil +}