Recently added, shop sorting, and outfit cards with T5 products
CI / build (push) Successful in 34s

- The inventory's Recently Added puts T5 products added to the library in the last 30 days first.
- The shop's T5 listing follows its sort menu: Best Match ranks by name, Newest by upload date
  (oldest first ascending); ratings and prices (T5 products have neither) sort by newest.
- Outfit cards: outfit_products.php gets the outfit's community products added (not for sale),
  find_bundle.php is asked about IMVU's products only, and removing one in the card (remove_pids)
  keeps it from IMVU and forgets it in the outfit.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
dhkatzandClaude Opus 5.5 committed 2026-10-30 02:45:02 -07:00
1 parent af9158513b
commit 171e8173af
11 files changed
+463 -7

No files matched your search

+9 -1
View File
@@ -47,6 +47,7 @@ type Fetcher struct {
mu sync.Mutex
library map[string]bool // the person's library, as last read
entries []hub.LibraryEntry
inflight map[string]bool
failed map[string]time.Time // products that failed lately (not retried for a while)
access string
@@ -77,7 +78,7 @@ func (f *Fetcher) SyncLibrary(ctx context.Context) {
ids[e.Product.ID] = true
}
f.mu.Lock()
f.library = ids
f.library, f.entries = ids, lib
f.mu.Unlock()
defer func() {
if f.OnLibrary != nil {
@@ -313,3 +314,10 @@ func (f *Fetcher) Owned(id string) bool {
defer f.mu.Unlock()
return f.library[id]
}
// Library is the person's library, as last read.
func (f *Fetcher) Library() []hub.LibraryEntry {
f.mu.Lock()
defer f.mu.Unlock()
return append([]hub.LibraryEntry(nil), f.entries...)
}