omakase/state/state.go
2025-07-24 19:31:03 -03:00

75 lines
1.6 KiB
Go

package state
import (
"fmt"
"goreader/gallery"
"slices"
_ "golang.org/x/image/webp"
)
type State struct {
Port string
Root string
CacheDir string
Galleries []gallery.Gallery
GalleryNames []string
// UniqueTags map[gallery.Tag]int
UniqueTags map[string]int
UniqueArtists map[string]int
UniqueGroups map[string]int
UniqueParodies map[string]int
TagKeys []gallery.Tag
Filtered []gallery.Tag
Done bool
}
func (s *State) AddGallery(g gallery.Gallery) error {
s.Galleries = append(s.Galleries, g)
s.GalleryNames = append(s.GalleryNames, g.Name())
slices.SortFunc(s.Galleries, func(a, b gallery.Gallery) int {
return -a.CTime.Compare(b.CTime)
})
for _, tag := range g.Tags() {
s.UniqueTags[tag.Name]++
}
for _, artist := range g.Artists() {
s.UniqueArtists[artist]++
}
for _, group := range g.Groups() {
s.UniqueGroups[group]++
}
for _, parody := range g.Parodies() {
s.UniqueParodies[parody]++
}
return nil
}
func (s *State) FilterGalleries() []gallery.Gallery {
var ret []gallery.Gallery
for _, g := range s.Galleries {
galleryTags := g.Tags()
count := 0
for _, f := range s.Filtered {
if i := slices.Index(galleryTags, f); i < 0 {
break
}
count++
}
if len(s.Filtered) == count {
ret = append(ret, g)
}
}
return ret
}
func (s *State) FindTitle(uuid string) (gallery.Gallery, error) {
index := slices.IndexFunc(s.Galleries, func(g gallery.Gallery) bool {
return g.Uuid() == uuid
})
if index == -1 {
return gallery.Gallery{}, fmt.Errorf("gallery not found")
}
return s.Galleries[index], nil
}