Add --interactive mode for add
This commit is contained in:
parent
096b76a350
commit
dd4b3e4a72
1
go.mod
1
go.mod
@ -3,6 +3,7 @@ module github.com/noqqe/serra
|
||||
go 1.14
|
||||
|
||||
require (
|
||||
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e
|
||||
github.com/mitchellh/mapstructure v1.4.3
|
||||
github.com/schollz/progressbar/v3 v3.8.5
|
||||
github.com/spf13/cobra v1.3.0
|
||||
|
||||
3
go.sum
3
go.sum
@ -69,8 +69,11 @@ github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA
|
||||
github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
|
||||
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
||||
github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
||||
github.com/chzyer/logex v1.1.10 h1:Swpa1K6QvQznwJRcfTfQJmTE72DqScAa40E+fbHEXEE=
|
||||
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
|
||||
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e h1:fY5BOSpyZCqRo5OhCuC+XN+r/bBCmeuuJtjz+bCNIf8=
|
||||
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
|
||||
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1 h1:q763qf9huN11kDQavWsoZXJNW3xEE4JJyHa5Q25/sd8=
|
||||
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
|
||||
github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag=
|
||||
github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I=
|
||||
|
||||
129
src/serra/add.go
129
src/serra/add.go
@ -2,8 +2,10 @@ package serra
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
"github.com/chzyer/readline"
|
||||
"github.com/spf13/cobra"
|
||||
"go.mongodb.org/mongo-driver/bson"
|
||||
)
|
||||
@ -11,6 +13,8 @@ import (
|
||||
func init() {
|
||||
addCmd.Flags().Int64VarP(&count, "count", "c", 1, "Amount of cards to add")
|
||||
addCmd.Flags().BoolVarP(&unique, "unique", "u", false, "Only add card if not existent yet")
|
||||
addCmd.Flags().BoolVarP(&interactive, "interactive", "i", false, "Spin up interactive terminal")
|
||||
addCmd.Flags().StringVarP(&set, "set", "s", "", "Filter by set code (usg/mmq/vow)")
|
||||
rootCmd.AddCommand(addCmd)
|
||||
}
|
||||
|
||||
@ -22,51 +26,88 @@ var addCmd = &cobra.Command{
|
||||
SilenceErrors: true,
|
||||
RunE: func(cmd *cobra.Command, cards []string) error {
|
||||
|
||||
client := storage_connect()
|
||||
coll := &Collection{client.Database("serra").Collection("cards")}
|
||||
defer storage_disconnect(client)
|
||||
|
||||
// Loop over different cards
|
||||
for _, card := range cards {
|
||||
|
||||
// Check if card is already in collection
|
||||
co, _ := coll.storage_find(bson.D{{"set", strings.Split(card, "/")[0]}, {"collectornumber", strings.Split(card, "/")[1]}}, bson.D{})
|
||||
|
||||
if len(co) >= 1 {
|
||||
c := co[0]
|
||||
|
||||
if unique {
|
||||
LogMessage(fmt.Sprintf("Not adding \"%s\" (%s, %.2f %s) to Collection because it already exists.", c.Name, c.Rarity, c.getValue(), getCurrency()), "red")
|
||||
continue
|
||||
}
|
||||
|
||||
modify_count_of_card(coll, &c, count)
|
||||
// Give feedback of successfully added card
|
||||
LogMessage(fmt.Sprintf("%dx \"%s\" (%s, %.2f %s) added to Collection.", c.SerraCount, c.Name, c.Rarity, c.getValue(), getCurrency()), "green")
|
||||
|
||||
// If card is not already in collection, fetching from scyfall
|
||||
} else {
|
||||
|
||||
// Fetch card from scryfall
|
||||
c, err := fetch_card(card)
|
||||
if err != nil {
|
||||
LogMessage(fmt.Sprintf("%v", err), "red")
|
||||
continue
|
||||
}
|
||||
|
||||
// Write card to mongodb
|
||||
c.SerraCount = count
|
||||
err = coll.storage_add(c)
|
||||
if err != nil {
|
||||
LogMessage(fmt.Sprintf("%v", err), "red")
|
||||
continue
|
||||
}
|
||||
|
||||
// Give feedback of successfully added card
|
||||
LogMessage(fmt.Sprintf("%dx \"%s\" (%s, %.2f %s) added to Collection.", c.SerraCount, c.Name, c.Rarity, c.getValue(), getCurrency()), "green")
|
||||
}
|
||||
if interactive {
|
||||
addCardsInteractive(unique, set)
|
||||
} else {
|
||||
addCards(cards, unique, count)
|
||||
}
|
||||
storage_disconnect(client)
|
||||
return nil
|
||||
},
|
||||
}
|
||||
|
||||
func addCardsInteractive(unique bool, set string) {
|
||||
|
||||
if len(set) == 0 {
|
||||
LogMessage("Error: --set must be given in interactive mode", "red")
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
rl, err := readline.New(fmt.Sprintf("%s> ", set))
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
defer rl.Close()
|
||||
|
||||
for {
|
||||
line, err := rl.Readline()
|
||||
if err != nil { // io.EOF
|
||||
break
|
||||
}
|
||||
|
||||
// construct card input for addCards
|
||||
card := []string{}
|
||||
card = append(card, fmt.Sprintf("%s/%s", set, strings.TrimSpace(line)))
|
||||
|
||||
addCards(card, unique, count)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func addCards(cards []string, unique bool, count int64) error {
|
||||
client := storage_connect()
|
||||
coll := &Collection{client.Database("serra").Collection("cards")}
|
||||
defer storage_disconnect(client)
|
||||
|
||||
// Loop over different cards
|
||||
for _, card := range cards {
|
||||
|
||||
// Check if card is already in collection
|
||||
co, _ := coll.storage_find(bson.D{{"set", strings.Split(card, "/")[0]}, {"collectornumber", strings.Split(card, "/")[1]}}, bson.D{})
|
||||
|
||||
if len(co) >= 1 {
|
||||
c := co[0]
|
||||
|
||||
if unique {
|
||||
LogMessage(fmt.Sprintf("Not adding \"%s\" (%s, %.2f %s) to Collection because it already exists.", c.Name, c.Rarity, c.getValue(), getCurrency()), "red")
|
||||
continue
|
||||
}
|
||||
|
||||
modify_count_of_card(coll, &c, count)
|
||||
// Give feedback of successfully added card
|
||||
LogMessage(fmt.Sprintf("%dx \"%s\" (%s, %.2f %s) added to Collection.", c.SerraCount, c.Name, c.Rarity, c.getValue(), getCurrency()), "green")
|
||||
|
||||
// If card is not already in collection, fetching from scyfall
|
||||
} else {
|
||||
|
||||
// Fetch card from scryfall
|
||||
c, err := fetch_card(card)
|
||||
if err != nil {
|
||||
LogMessage(fmt.Sprintf("%v", err), "red")
|
||||
continue
|
||||
}
|
||||
|
||||
// Write card to mongodb
|
||||
c.SerraCount = count
|
||||
err = coll.storage_add(c)
|
||||
if err != nil {
|
||||
LogMessage(fmt.Sprintf("%v", err), "red")
|
||||
continue
|
||||
}
|
||||
|
||||
// Give feedback of successfully added card
|
||||
LogMessage(fmt.Sprintf("%dx \"%s\" (%s, %.2f %s) added to Collection.", c.SerraCount, c.Name, c.Rarity, c.getValue(), getCurrency()), "green")
|
||||
}
|
||||
}
|
||||
storage_disconnect(client)
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -11,6 +11,7 @@ var Version = "unknown"
|
||||
|
||||
var count int64
|
||||
var limit float64
|
||||
var interactive bool
|
||||
var name string
|
||||
var oracle string
|
||||
var rarity string
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user