diff --git a/sevenkeys/cmd/printinglist/main.go b/sevenkeys/cmd/printinglist/main.go index a0c9d80..8343d81 100644 --- a/sevenkeys/cmd/printinglist/main.go +++ b/sevenkeys/cmd/printinglist/main.go @@ -2,19 +2,40 @@ package main import ( "fmt" + "io" "log" + "os" + "os/exec" "sevenkeys/database" "sevenkeys/database/operations" ) -func main() { - db := database.GetDatabaseFromConfig("config.json") - allCardNames, err := operations.GetAllCardNames(db) +func check(err error) { if err != nil { log.Fatal(err) } - - for _, name := range allCardNames { - fmt.Println(name) - } +} + +func main() { + db := database.GetDatabaseFromConfig("config.json") + cardSearchOptions, err := operations.GetCardSearchOptions(db) + check(err) + + cmd := exec.Command("fzf") + cmd.Stderr = os.Stderr + + fzfStdin, err := cmd.StdinPipe() + check(err) + + go func() { + defer fzfStdin.Close() + for _, option := range cardSearchOptions { + io.WriteString(fzfStdin, option+"\n") + } + }() + + fzfOutput, err := cmd.Output() + check(err) + + fmt.Println("Output:", string(fzfOutput)) } diff --git a/sevenkeys/database/entities/cardprinting.go b/sevenkeys/database/entities/cardprinting.go index ac7887d..da1456b 100644 --- a/sevenkeys/database/entities/cardprinting.go +++ b/sevenkeys/database/entities/cardprinting.go @@ -1,8 +1,14 @@ package entities type CardPrinting struct { - Id int - GamepieceId int - SetId string - ImageUrl string + Id string + Name string + SetCode string + HasFoil bool + HasNonFoil bool + IsReserved bool + IsRacist bool + IsPromo bool + CollectorNumber string + Language string } diff --git a/sevenkeys/database/entities/cardstorage.go b/sevenkeys/database/entities/cardstorage.go index 47835d9..58d0630 100644 --- a/sevenkeys/database/entities/cardstorage.go +++ b/sevenkeys/database/entities/cardstorage.go @@ -3,6 +3,7 @@ package entities type CardStorageLocation struct { Id int CardPrintingId string + IsFoil bool StorageBox string Source string Position int diff --git a/sevenkeys/database/operations/inserts.go b/sevenkeys/database/operations/inserts.go index c74e8ac..0b67742 100644 --- a/sevenkeys/database/operations/inserts.go +++ b/sevenkeys/database/operations/inserts.go @@ -66,7 +66,7 @@ func InsertCard(db *sql.DB, card types.Card) error { return nil } -func InsertCardStorageLocation(db *sql.DB, cardPrintingId string, storageBox string, source string) error { +func InsertCardStorageLocation(db *sql.DB, cardPrintingId string, isFoil bool, storageBox string, source string) error { var lastPosition int getLastPositionQuery := `SELECT Position FROM CardStorageLocation WHERE StorageBox = ? ORDER BY Position DESC LIMIT 1;` err := db.QueryRow(getLastPositionQuery, storageBox).Scan(&lastPosition) @@ -79,14 +79,14 @@ func InsertCardStorageLocation(db *sql.DB, cardPrintingId string, storageBox str } insertQuery := `INSERT INTO CardStorageLocation - (CardPrintingId, StorageBox, Source, Position) - VALUES (?, ?, ?, ?);` + (CardPrintingId, IsFoil, StorageBox, Source, Position) + VALUES (?, ?, ?, ?, ?);` insert, err := db.Prepare(insertQuery) if err != nil { return err } - _, err = insert.Exec(cardPrintingId, storageBox, source, nextPosition) + _, err = insert.Exec(cardPrintingId, isFoil, storageBox, source, nextPosition) if err != nil { return err } diff --git a/sevenkeys/database/operations/selects.go b/sevenkeys/database/operations/selects.go index d950c48..0758d47 100644 --- a/sevenkeys/database/operations/selects.go +++ b/sevenkeys/database/operations/selects.go @@ -2,7 +2,9 @@ package operations import ( "database/sql" + "fmt" "sevenkeys/database/entities" + "strings" "time" ) @@ -33,24 +35,52 @@ func GetCacheTimestampByType(db *sql.DB, cacheType string) (time.Time, error) { return stamp, err } -func GetAllCardNames(db *sql.DB) ([]string, error) { - var cardNames []string - query := "SELECT Name FROM CardPrinting;" +func GetCardSearchOptions(db *sql.DB) ([]string, error) { + var searchOptions []string + + query := "SELECT Id, Name, SetCode, HasFoil, HasNonFoil, CollectorNumber, Language FROM CardPrinting;" rows, err := db.Query(query) defer rows.Close() if err != nil { - return cardNames, err + return searchOptions, err } - var cardName string + var printing entities.CardPrinting for rows.Next() { - err := rows.Scan(&cardName) + err := rows.Scan(&printing.Id, + &printing.Name, + &printing.SetCode, + &printing.HasFoil, + &printing.HasNonFoil, + &printing.CollectorNumber, + &printing.Language) if err != nil { - return cardNames, err + return searchOptions, err } - cardNames = append(cardNames, cardName) + // TODO: Make this configurable to be able to handle non-English cards + if printing.Language != "en" { + continue + } + + if printing.HasNonFoil { + searchOption := fmt.Sprintf("%s | %s (%s %s)", + printing.Id, + printing.Name, + strings.ToUpper(printing.SetCode), + printing.CollectorNumber) + searchOptions = append(searchOptions, searchOption) + } + + if printing.HasFoil { + searchOption := fmt.Sprintf("%s | %s (%s %s) FOIL", + printing.Id, + printing.Name, + strings.ToUpper(printing.SetCode), + printing.CollectorNumber) + searchOptions = append(searchOptions, searchOption) + } } - return cardNames, nil + return searchOptions, nil } diff --git a/sevenkeys/printinglist b/sevenkeys/printinglist deleted file mode 100755 index cd105c9..0000000 Binary files a/sevenkeys/printinglist and /dev/null differ diff --git a/sevenkeys/sql/createdb.sql b/sevenkeys/sql/createdb.sql index 290b10a..21b8d81 100644 --- a/sevenkeys/sql/createdb.sql +++ b/sevenkeys/sql/createdb.sql @@ -32,6 +32,7 @@ CREATE TABLE IF NOT EXISTS CardStorageLocation ( Id INT AUTO_INCREMENT PRIMARY KEY, CardPrintingId VARCHAR(36) NOT NULL, FOREIGN KEY (CardPrintingId) REFERENCES CardPrinting(Id), + IsFoil BOOLEAN NOT NULL, StorageBox VARCHAR(20) NOT NULL, Source VARCHAR(100) NULL, Position INT NOT NULL diff --git a/sevenkeys/storagemanager b/sevenkeys/storagemanager deleted file mode 100755 index 573390c..0000000 --- a/sevenkeys/storagemanager +++ /dev/null @@ -1,51 +0,0 @@ -#!/bin/bash - -printLastInsertedCard() { - printf "Last inserted card: " - - if test -n "$1"; then - printf "$1" - else - printf "None" - fi - - printf "\n" -} - -searchForCard() { - # TODO: Add keybinding to show card image with feh - ./printinglist | fzf -} - -declare g_lastInsertedCardId -declare g_lastInsertedCardName - -while true; do - clear - - printLastInsertedCard "$g_lastInsertedCardName" - - printf "search? (y/N)" - read response - if [[ "$response" == "y" ]]; then - selection="$(searchForCard)" - case "$?" in - 0) - # Insert the card - printf "$selection\n" - # TODO: set last inserted card name and id - ;; - 1) - # Print "no match" error - ;; - 2) - # Print error - ;; - 130) - # User cancelled search - ;; - esac - else - break - fi -done