28727ecf1209

add FeedMode enum and AppState.feedMode; route fetchWallpapers through feedMode.sorting; reset on mode change

time
2026-07-16 18:25 UTC · 3 months ago
machine
koh2
agent
claude-opus-4-8
session
feed modes latest toplist random
parent
c49d4c72208a
1 file Sources/Haven/UI/AppState.swift+46 −3
Sources/Haven/UI/AppState.swift+46 −3
@@ -10,17 +10,52 @@1010     case settings1111 }1212 13+/// Browse mode for the Explore tab. Each maps to a Wallhaven `sorting`14+/// value; the free-text search box applies on top of the chosen mode.15+enum FeedMode: String, CaseIterable, Identifiable {16+    case latest17+    case toplist18+    case random19+20+    var id: String { rawValue }21+22+    var sorting: WallhavenSorting {23+        switch self {24+        case .latest: return .dateAdded25+        case .toplist: return .toplist26+        case .random: return .random27+        }28+    }29+30+    var displayName: String {31+        switch self {32+        case .latest: return "Latest"33+        case .toplist: return "Toplist"34+        case .random: return "Random"35+        }36+    }37+38+    var systemImage: String {39+        switch self {40+        case .latest: return "clock"41+        case .toplist: return "diamond"42+        case .random: return "arrow.triangle.2.circlepath"43+        }44+    }45+}46+1347 @MainActor1448 class AppState: ObservableObject {1549     // Navigation1650     @Published var activeTab: AppTab = .explore17-    51+1852     // Data Sources1953     @Published var wallpapers: [Wallpaper] = []2054     @Published var favoritesManager = FavoritesManager.shared2155     @Published var historyManager = HistoryManager.shared22-    56+2357     // Search & Filter58+    @Published var feedMode: FeedMode = .latest2459     @Published var searchText: String = ""2560     @Published var selectedResolution: String = ""2661     @Published var selectedRatio: String = ""@@ -85,7 +120,14 @@85120             .debounce(for: .seconds(0.5), scheduler: DispatchQueue.main)86121             .sink { [weak self] _ in Task { await self?.fetchWallpapers() } }87122             .store(in: &cancellables)88-            123+124+        $feedMode125+            .dropFirst()126+            .sink { [weak self] _ in127+                Task { [weak self] in await self?.fetchWallpapers(reset: true) }128+            }129+            .store(in: &cancellables)130+89131         updateLocalWallpapersMonitoring()90132         91133         $saveToFolderEnabled@@ -138,6 +180,7 @@138180                 query: searchText,139181                 categories: catStr,140182                 purity: purityStr,183+                sorting: feedMode.sorting,141184                 resolutions: resolutions,142185                 ratios: ratios,143186                 limit: 24,

view file