Create printing search and pipe to fzf for selection
This commit is contained in:
parent
2fd868ee9c
commit
33001f7421
|
@ -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))
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@ package entities
|
|||
type CardStorageLocation struct {
|
||||
Id int
|
||||
CardPrintingId string
|
||||
IsFoil bool
|
||||
StorageBox string
|
||||
Source string
|
||||
Position int
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
||||
return cardNames, nil
|
||||
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 searchOptions, nil
|
||||
}
|
||||
|
|
Binary file not shown.
|
@ -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
|
||||
|
|
|
@ -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
|
Loading…
Reference in New Issue