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
↓ haven-28727ecf.tar.gzatlas at this save
files changed1 file
Sources/Haven/UI/AppState.swift+46 −3Sources/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,