74 lines
1.3 KiB
Go
74 lines
1.3 KiB
Go
package logic
|
|
|
|
import (
|
|
"database/sql"
|
|
"io"
|
|
"os"
|
|
"os/exec"
|
|
"sevenkeys/database"
|
|
"strings"
|
|
)
|
|
|
|
type Triadic int
|
|
|
|
const (
|
|
True Triadic = iota
|
|
False
|
|
Either
|
|
)
|
|
|
|
type SearchCriteria struct {
|
|
SetCode string
|
|
CollectorNumber string
|
|
Promo Triadic
|
|
Language string
|
|
}
|
|
|
|
type CardPrintingSearchOptions map[string]string
|
|
|
|
type StorageSearchOptions map[string]int
|
|
|
|
func GetAllStorageSearchOptions(db *sql.DB) (StorageSearchOptions, error) {
|
|
var searchOptions StorageSearchOptions = make(StorageSearchOptions)
|
|
|
|
storedCards, err := database.GetAllStoredCards(db)
|
|
if err != nil {
|
|
return searchOptions, nil
|
|
}
|
|
|
|
for _, storedCard := range storedCards {
|
|
searchString := GetLocationDescription(storedCard)
|
|
searchOptions[searchString] = storedCard.CardLocationId
|
|
}
|
|
|
|
return searchOptions, nil
|
|
}
|
|
|
|
func GenericSearch[pk string | int](options map[string]pk) (pk, string, error) {
|
|
var value pk
|
|
|
|
cmd := exec.Command("fzf")
|
|
cmd.Stderr = os.Stderr
|
|
|
|
fzfStdin, err := cmd.StdinPipe()
|
|
if err != nil {
|
|
return value, "", err
|
|
}
|
|
|
|
go func() {
|
|
defer fzfStdin.Close()
|
|
for option, _ := range options {
|
|
io.WriteString(fzfStdin, option+"\n")
|
|
}
|
|
}()
|
|
|
|
fzfOutput, err := cmd.Output()
|
|
if err != nil {
|
|
return value, "", err
|
|
}
|
|
|
|
searchResult := strings.TrimSuffix(string(fzfOutput), "\n")
|
|
value = options[searchResult]
|
|
return value, searchResult, nil
|
|
}
|