diff --git a/cli/cascade.go b/cli/cascade.go index 90ce3fa..de21365 100644 --- a/cli/cascade.go +++ b/cli/cascade.go @@ -19,7 +19,7 @@ func Cascade() error { props := []string{data.TitleProperty, data.BookCompletedProperty, data.MyBooksIdsProperty, data.MyBooksOrderProperty} - rxa, err := kvas.ConnectReduxAssets(data.AbsReduxDir(), nil, props...) + rxa, err := kvas.ConnectReduxAssets(data.AbsReduxDir(), props...) if err != nil { return ca.EndWithError(err) } @@ -48,7 +48,7 @@ func Cascade() error { mboa := nod.NewProgress(" " + data.MyBooksOrderProperty) defer mboa.End() - myBooksIds, _ := rxa.GetAllUnchangedValues(data.MyBooksIdsProperty, data.MyBooksIdsProperty) + myBooksIds, _ := rxa.GetAllValues(data.MyBooksIdsProperty, data.MyBooksIdsProperty) mboa.TotalInt(len(myBooksIds)) order := make(map[string][]string) diff --git a/cli/complete.go b/cli/complete.go index 1277f2b..f1960ed 100644 --- a/cli/complete.go +++ b/cli/complete.go @@ -29,7 +29,7 @@ func Complete(ids []string, action string) error { ca := nod.NewProgress("%s complete...", action) defer ca.End() - rxa, err := kvas.ConnectReduxAssets(data.AbsReduxDir(), nil, data.TitleProperty, data.BookCompletedProperty) + rxa, err := kvas.ConnectReduxAssets(data.AbsReduxDir(), data.TitleProperty, data.BookCompletedProperty) if err != nil { return err } diff --git a/cli/dehydrate.go b/cli/dehydrate.go index 6d521ff..5534f0f 100644 --- a/cli/dehydrate.go +++ b/cli/dehydrate.go @@ -37,7 +37,6 @@ func Dehydrate(idSet map[string]bool, all, overwrite bool) error { rxa, err := kvas.ConnectReduxAssets( data.AbsReduxDir(), - nil, data.DehydratedListImageProperty, data.DehydratedListImageModifiedProperty, data.DehydratedItemImageProperty, diff --git a/cli/download_litres.go b/cli/download_litres.go index e2d525b..c75081a 100644 --- a/cli/download_litres.go +++ b/cli/download_litres.go @@ -52,7 +52,7 @@ func DownloadLitRes(ids []string, hc *http.Client) error { da := nod.NewProgress("downloading LitRes books...") defer da.End() - rxa, err := kvas.ConnectReduxAssets(data.AbsReduxDir(), nil, + rxa, err := kvas.ConnectReduxAssets(data.AbsReduxDir(), data.MyBooksIdsProperty, data.TitleProperty, data.AuthorsProperty, @@ -65,7 +65,7 @@ func DownloadLitRes(ids []string, hc *http.Client) error { if ids == nil { var ok bool - ids, ok = rxa.GetAllUnchangedValues(data.MyBooksIdsProperty, data.MyBooksIdsProperty) + ids, ok = rxa.GetAllValues(data.MyBooksIdsProperty, data.MyBooksIdsProperty) if !ok { err = errors.New("no my books found") return da.EndWithError(err) @@ -84,9 +84,9 @@ func DownloadLitRes(ids []string, hc *http.Client) error { } title, _ := rxa.GetFirstVal(data.TitleProperty, id) - authors, _ := rxa.GetAllUnchangedValues(data.AuthorsProperty, id) + authors, _ := rxa.GetAllValues(data.AuthorsProperty, id) - dls, ok := rxa.GetAllUnchangedValues(data.DownloadLinksProperty, id) + dls, ok := rxa.GetAllValues(data.DownloadLinksProperty, id) if !ok { nod.Log("book %s is missing download links", id) continue diff --git a/cli/export.go b/cli/export.go index 2c2e2a7..184aafa 100644 --- a/cli/export.go +++ b/cli/export.go @@ -23,7 +23,7 @@ func Export(ids []string) error { ea := nod.Begin("exporting books...") defer ea.End() - rxa, err := kvas.ConnectReduxAssets(data.AbsReduxDir(), nil, data.ReduxProperties()...) + rxa, err := kvas.ConnectReduxAssets(data.AbsReduxDir(), data.ReduxProperties()...) if err != nil { return ea.EndWithError(err) } diff --git a/cli/get_litres_covers.go b/cli/get_litres_covers.go index 4047c1b..51ccf05 100644 --- a/cli/get_litres_covers.go +++ b/cli/get_litres_covers.go @@ -26,7 +26,7 @@ func GetLitResCovers(ids []string, forceImported bool) error { gca := nod.NewProgress("fetching LitRes covers...") defer gca.End() - rxa, err := kvas.ConnectReduxAssets(data.AbsReduxDir(), nil, + rxa, err := kvas.ConnectReduxAssets(data.AbsReduxDir(), data.MyBooksIdsProperty, data.ImportedProperty) if err != nil { @@ -35,7 +35,7 @@ func GetLitResCovers(ids []string, forceImported bool) error { if len(ids) == 0 { var ok bool - ids, ok = rxa.GetAllUnchangedValues(data.MyBooksIdsProperty, data.MyBooksIdsProperty) + ids, ok = rxa.GetAllValues(data.MyBooksIdsProperty, data.MyBooksIdsProperty) if !ok { err = errors.New("no my books found") return gca.EndWithError(err) diff --git a/cli/get_litres_details.go b/cli/get_litres_details.go index cac8439..a6af7a8 100644 --- a/cli/get_litres_details.go +++ b/cli/get_litres_details.go @@ -46,7 +46,7 @@ func GetLitResDetails(ids []string, hc *http.Client, newOnly, noThrottle bool) e gmbda := nod.NewProgress("getting LitRes my books details...") defer gmbda.End() - rxa, err := kvas.ConnectReduxAssets(data.AbsReduxDir(), nil, + rxa, err := kvas.ConnectReduxAssets(data.AbsReduxDir(), data.MyBooksIdsProperty, data.HrefProperty, data.ImportedProperty) diff --git a/cli/import.go b/cli/import.go index 46f5db9..9c220b9 100644 --- a/cli/import.go +++ b/cli/import.go @@ -32,7 +32,7 @@ func Import() error { ia := nod.Begin("importing books...") defer ia.End() - rxa, err := kvas.ConnectReduxAssets(data.AbsReduxDir(), nil, data.ReduxProperties()...) + rxa, err := kvas.ConnectReduxAssets(data.AbsReduxDir(), data.ReduxProperties()...) if err != nil { return ia.EndWithError(err) } diff --git a/cli/reduce_litres_details.go b/cli/reduce_litres_details.go index 561bca8..9b10bff 100644 --- a/cli/reduce_litres_details.go +++ b/cli/reduce_litres_details.go @@ -33,7 +33,7 @@ func ReduceLitResBooksDetails(scoreData bool) error { missingDetails := make([]string, 0) - rxa, err := kvas.ConnectReduxAssets(data.AbsReduxDir(), nil, reduxProps...) + rxa, err := kvas.ConnectReduxAssets(data.AbsReduxDir(), reduxProps...) if err != nil { return rmbda.EndWithError(err) } @@ -70,7 +70,7 @@ func ReduceLitResBooksDetails(scoreData bool) error { if scoreData { for lp, vals := range lrdx { if p, ok := data.LitResPropertyMap[lp]; ok { - if evs, ok := rxa.GetAllUnchangedValues(p, id); ok { + if evs, ok := rxa.GetAllValues(p, id); ok { dataScore[id] = len(vals) - len(evs) } } diff --git a/cli/reduce_litres_my_books.go b/cli/reduce_litres_my_books.go index 6d96b50..f13e8eb 100644 --- a/cli/reduce_litres_my_books.go +++ b/cli/reduce_litres_my_books.go @@ -70,7 +70,7 @@ func ReduceLitResMyBooks() error { } } - rxa, err := kvas.ConnectReduxAssets(data.AbsReduxDir(), nil, + rxa, err := kvas.ConnectReduxAssets(data.AbsReduxDir(), data.MyBooksIdsProperty, data.HrefProperty, data.ImportedProperty) diff --git a/cli/sync.go b/cli/sync.go index 5b96691..aaa02ae 100644 --- a/cli/sync.go +++ b/cli/sync.go @@ -64,7 +64,7 @@ func Sync(completionWebhookUrl string, newOnly, noThrottle bool) error { return err } - rxa, err := kvas.ConnectReduxAssets(data.AbsReduxDir(), nil, data.SyncCompletedProperty) + rxa, err := kvas.ConnectReduxAssets(data.AbsReduxDir(), data.SyncCompletedProperty) if err != nil { return err } diff --git a/data/properties.go b/data/properties.go index cd76704..6535177 100644 --- a/data/properties.go +++ b/data/properties.go @@ -46,8 +46,6 @@ const ( BookCompletedProperty = "book-completed" ImageProperty = "image" LanguageProperty = "language" - // aggregate - AnyTextProperty = "any-text" // sorting SortProperty = "sort" DescendingProperty = "desc" diff --git a/go.mod b/go.mod index 7669056..3ff8189 100644 --- a/go.mod +++ b/go.mod @@ -6,12 +6,12 @@ require ( github.com/beauxarts/scrinium v0.1.16 github.com/boggydigital/clo v0.3.6 github.com/boggydigital/coost v0.3.8 - github.com/boggydigital/dolo v0.2.10 - github.com/boggydigital/kvas v0.3.27 + github.com/boggydigital/dolo v0.2.11 + github.com/boggydigital/kvas v0.3.28 github.com/boggydigital/match_node v0.1.11 github.com/boggydigital/middleware v0.1.7 github.com/boggydigital/nod v0.1.21 - github.com/boggydigital/stencil v0.1.88 + github.com/boggydigital/stencil v0.1.91 github.com/boggydigital/wits v0.2.3 golang.org/x/exp v0.0.0-20230728194245-b0cb94b80691 golang.org/x/net v0.12.0 diff --git a/go.sum b/go.sum index 5e4086a..e46da98 100644 --- a/go.sum +++ b/go.sum @@ -12,6 +12,8 @@ github.com/boggydigital/dolo v0.2.5 h1:Ux0JNW4U1L2QLII013ajhnbPC96NGNV/wo2ka9F30 github.com/boggydigital/dolo v0.2.5/go.mod h1:KyIaQOp2cV85hC6lTMRwHtzofzjxXr+msOgcs89t078= github.com/boggydigital/dolo v0.2.10 h1:QNv4DTF/hvzXXBs6UkFBEVf80KF6xKnbqfDEBvwzoGM= github.com/boggydigital/dolo v0.2.10/go.mod h1:KyIaQOp2cV85hC6lTMRwHtzofzjxXr+msOgcs89t078= +github.com/boggydigital/dolo v0.2.11 h1:L/VotXRJbuV7VN7H+eW4HQinYZHzUCeUOQ01++MFsPE= +github.com/boggydigital/dolo v0.2.11/go.mod h1:KyIaQOp2cV85hC6lTMRwHtzofzjxXr+msOgcs89t078= github.com/boggydigital/issa v0.1.5 h1:3thLinhaXNHYcmF3T5y3wOEvhxq+GyhW8WtNDcl0OC0= github.com/boggydigital/issa v0.1.5/go.mod h1:evu3blQmQe6xJy9NRFJGIU+91IWy4/YCROVvUZi5k14= github.com/boggydigital/issa v0.1.6 h1:XpsnIwAxeHh4VNXkNqB+dO4g9xXFfbP3onWETbS7ARg= @@ -24,6 +26,8 @@ github.com/boggydigital/issa v0.1.9 h1:Na0WO1gdF6wKGnoNXADBINLlUultOHY9x2F3qVSjk github.com/boggydigital/issa v0.1.9/go.mod h1:TNYZ7A1mx+Ib7/o4nGQ/G9QLm3JPKV2xP8qBy+DA+ck= github.com/boggydigital/kvas v0.3.27 h1:9Oczfp5GFkAsZqLyiIsEp/0cCVfTXA6V6/3MEAw+zyw= github.com/boggydigital/kvas v0.3.27/go.mod h1:I+wVKLxOqWhzw0X8nez/ec/GVXcQY5GUksFJBx+G7Yc= +github.com/boggydigital/kvas v0.3.28 h1:BfWdJwzbqLMOHrqdCSSgB3nIHEX4xRkH/5fHyyeNrj4= +github.com/boggydigital/kvas v0.3.28/go.mod h1:I+wVKLxOqWhzw0X8nez/ec/GVXcQY5GUksFJBx+G7Yc= github.com/boggydigital/match_node v0.1.11 h1:Uxm5tlrDAXGeHDf8EMVpyazZ5UHzRS0DUkN65HfsEDs= github.com/boggydigital/match_node v0.1.11/go.mod h1:LmKtZy8YgBYC14BStAS4g17MglrLqqUF6dehrBX7Zwc= github.com/boggydigital/middleware v0.1.7 h1:BOgctgkbtPkWoIBgHYOuOwdQnpZYa0NrB0gpP66IHwE= @@ -78,6 +82,8 @@ github.com/boggydigital/stencil v0.1.84 h1:g52gncZ1/ebn1o6Tfx360LCEHQwjvSOa4ZUdS github.com/boggydigital/stencil v0.1.84/go.mod h1:yUJAeXbGWxnbWWqPnRgbctYXf3YPA5bfh48igehwpss= github.com/boggydigital/stencil v0.1.88 h1:lnHr0tyHrFjheIV82MijOMKC532sHhUWsWd9+7CRjKo= github.com/boggydigital/stencil v0.1.88/go.mod h1:yUJAeXbGWxnbWWqPnRgbctYXf3YPA5bfh48igehwpss= +github.com/boggydigital/stencil v0.1.91 h1:QZNwHmSnK6Pnhc2kp1dJ59TeD3QnctL9Cu2//EVTjig= +github.com/boggydigital/stencil v0.1.91/go.mod h1:qmu+FvjF8kq0/eGGiVu4huCTS2D9i40rQhjXHcGNOtw= github.com/boggydigital/testo v0.1.7 h1:Sa5GIAwCyQNeGGXi8XgVpIpLQqWVeqBKQRcv0gkL098= github.com/boggydigital/wits v0.2.3 h1:Z0eB+QlIA18fJmblyV6ZJQ/swPYSFhOxfgMXOQz4/c8= github.com/boggydigital/wits v0.2.3/go.mod h1:aR/z0vfMLtg0b4hcts0qiSTZcA51O8A2N3U9laqd2Lc= diff --git a/rest/get_books.go b/rest/get_books.go index a97f4e8..d6dacbe 100644 --- a/rest/get_books.go +++ b/rest/get_books.go @@ -26,13 +26,13 @@ func GetBooks(w http.ResponseWriter, r *http.Request) { return } - myBooks, ok := rxa.GetAllUnchangedValues(data.MyBooksIdsProperty, data.MyBooksIdsProperty) + myBooks, ok := rxa.GetAllValues(data.MyBooksIdsProperty, data.MyBooksIdsProperty) if !ok { http.Error(w, nod.ErrorStr("no my books found"), http.StatusInternalServerError) return } - if missingDetails, ok := rxa.GetAllUnchangedValues(data.MissingDetailsIdsProperty, data.MissingDetailsIdsProperty); ok { + if missingDetails, ok := rxa.GetAllValues(data.MissingDetailsIdsProperty, data.MissingDetailsIdsProperty); ok { filteredBooks := make([]string, 0, len(myBooks)) for _, id := range myBooks { if slices.Contains(missingDetails, id) { diff --git a/rest/get_digest.go b/rest/get_digest.go index f12ac7e..08a114a 100644 --- a/rest/get_digest.go +++ b/rest/get_digest.go @@ -3,6 +3,7 @@ package rest import ( "encoding/json" "github.com/beauxarts/fedorov/data" + "github.com/beauxarts/fedorov/stencil_app" "github.com/boggydigital/nod" "net/http" ) @@ -16,27 +17,36 @@ func GetDigest(w http.ResponseWriter, r *http.Request) { return } - var digests map[string][]string + var values []string + valueTitles := make(map[string]string) switch property { case data.SortProperty: - digests = map[string][]string{data.SortProperty: { + values = []string{ data.TitleProperty, data.DateCreatedProperty, data.DateTranslatedProperty, data.DateReleasedProperty, - data.MyBooksOrderProperty}} + data.MyBooksOrderProperty} case data.DescendingProperty: - digests = map[string][]string{data.DescendingProperty: { + values = []string{ "true", - "false"}} + "false"} default: - digests = getDigests(property) + values = getDigests(property)[property] + } + + for _, v := range values { + if title, ok := stencil_app.PropertyTitles[v]; ok { + valueTitles[v] = title + } else { + valueTitles[v] = v + } } DefaultHeaders(w) - if err := json.NewEncoder(w).Encode(digests[property]); err != nil { + if err := json.NewEncoder(w).Encode(valueTitles); err != nil { http.Error(w, nod.Error(err).Error(), http.StatusInternalServerError) return } diff --git a/rest/get_downloads.go b/rest/get_downloads.go index c88f601..5e4a6a5 100644 --- a/rest/get_downloads.go +++ b/rest/get_downloads.go @@ -29,8 +29,8 @@ func GetDownloads(w http.ResponseWriter, r *http.Request) { return } - links, ok := rxa.GetAllUnchangedValues(data.DownloadLinksProperty, idstr) - titles, _ := rxa.GetAllUnchangedValues(data.DownloadTitlesProperty, idstr) + links, ok := rxa.GetAllValues(data.DownloadLinksProperty, idstr) + titles, _ := rxa.GetAllValues(data.DownloadTitlesProperty, idstr) if !ok { http.Error(w, nod.ErrorStr("book has no downloads"), http.StatusInternalServerError) diff --git a/rest/get_local_tags_edit.go b/rest/get_local_tags_edit.go index f3e6789..3bfb5a0 100644 --- a/rest/get_local_tags_edit.go +++ b/rest/get_local_tags_edit.go @@ -4,7 +4,6 @@ import ( "github.com/beauxarts/fedorov/data" "github.com/beauxarts/fedorov/stencil_app" "github.com/boggydigital/nod" - "golang.org/x/exp/maps" "net/http" ) @@ -14,17 +13,17 @@ func GetLocalTagsEdit(w http.ResponseWriter, r *http.Request) { id := r.URL.Query().Get("id") - allValues := make(map[string]bool) + allValues := make(map[string]string) for _, id := range rxa.Keys(data.LocalTagsProperty) { - if values, ok := rxa.GetAllUnchangedValues(data.LocalTagsProperty, id); ok { + if values, ok := rxa.GetAllValues(data.LocalTagsProperty, id); ok { for _, v := range values { - allValues[v] = true + allValues[v] = v } } } selectedValues := make(map[string]bool) - if values, ok := rxa.GetAllUnchangedValues(data.LocalTagsProperty, id); ok { + if values, ok := rxa.GetAllValues(data.LocalTagsProperty, id); ok { for _, v := range values { selectedValues[v] = true } @@ -39,7 +38,7 @@ func GetLocalTagsEdit(w http.ResponseWriter, r *http.Request) { true, "", selectedValues, - maps.Keys(allValues), + allValues, true, "/local-tags/apply", w); err != nil { diff --git a/rest/get_search.go b/rest/get_search.go index 7d9034b..ab73028 100644 --- a/rest/get_search.go +++ b/rest/get_search.go @@ -59,7 +59,7 @@ func GetSearch(w http.ResponseWriter, r *http.Request) { if len(query) > 0 { - ids = maps.Keys(rxa.Match(query, true)) + ids = maps.Keys(rxa.Match(query, true, true)) if sort := r.URL.Query().Get(data.SortProperty); sort != "" { desc := r.URL.Query().Get(data.DescendingProperty) == "true" diff --git a/rest/init.go b/rest/init.go index 13345e7..5c347e7 100644 --- a/rest/init.go +++ b/rest/init.go @@ -42,16 +42,8 @@ func InitTemplates(templatesFS fs.FS, stencilAppStyles fs.FS) { func Init() error { - fbr := &kvas.ReduxFabric{ - Aggregates: map[string][]string{ - data.AnyTextProperty: data.AnyTextProperties(), - }, - Transitives: nil, - Atomics: nil, - } - var err error - if rxa, err = kvas.ConnectReduxAssets(data.AbsReduxDir(), fbr, data.ReduxProperties()...); err != nil { + if rxa, err = kvas.ConnectReduxAssets(data.AbsReduxDir(), data.ReduxProperties()...); err != nil { return err } diff --git a/stencil_app/formatters.go b/stencil_app/formatters.go index bb6afdc..d39a8ce 100644 --- a/stencil_app/formatters.go +++ b/stencil_app/formatters.go @@ -18,8 +18,8 @@ func fmtSequenceNameNumber(id, name string, rxa kvas.ReduxAssets) string { return name } - names, _ := rxa.GetAllUnchangedValues(data.SequenceNameProperty, id) - numbers, _ := rxa.GetAllUnchangedValues(data.SequenceNumberProperty, id) + names, _ := rxa.GetAllValues(data.SequenceNameProperty, id) + numbers, _ := rxa.GetAllValues(data.SequenceNumberProperty, id) for ii, sn := range names { if sn == name { diff --git a/stencil_app/property_titles.go b/stencil_app/property_titles.go index a8e668d..164f89d 100644 --- a/stencil_app/property_titles.go +++ b/stencil_app/property_titles.go @@ -3,7 +3,6 @@ package stencil_app import "github.com/beauxarts/fedorov/data" var PropertyTitles = map[string]string{ - data.AnyTextProperty: "Любой текст", data.TitleProperty: "Название", data.BookTypeProperty: "Тип", data.BookCompletedProperty: "Прочитано", @@ -40,4 +39,9 @@ var PropertyTitles = map[string]string{ // sorting properties data.SortProperty: "Порядок", data.DescendingProperty: "По убыванию", + // sorting values + data.MyBooksOrderProperty: "Мои книги", + // Yes/No + "true": "Да", + "false": "Нет", } diff --git a/stencil_app/search_properties.go b/stencil_app/search_properties.go index a0c900f..3d34d93 100644 --- a/stencil_app/search_properties.go +++ b/stencil_app/search_properties.go @@ -3,7 +3,6 @@ package stencil_app import "github.com/beauxarts/fedorov/data" var SearchProperties = []string{ - data.AnyTextProperty, data.TitleProperty, data.AuthorsProperty, data.BookTypeProperty,