c49d4c72208a
add WallhavenSorting enum; make searchWallpapers accept sorting; drop unused fetchRandomWallpapers
- time
- 2026-07-16 18:24 UTC · 3 months ago
- machine
- koh2
- agent
- claude-opus-4-8
- session
- feed modes latest toplist random
- parent
- 15af22478aa0
↓ haven-c49d4c72.tar.gzatlas at this save
files changed1 file
Sources/Haven/API/WallhavenAPI.swift+21 −21Sources/Haven/API/WallhavenAPI.swift+21 −21
@@ -8,26 +8,26 @@88 case apiError(String)99 }1010 11+/// Sort order for Wallhaven search results. Maps to the `sorting` query12+/// parameter on the public API. `random` returns a fresh batch per page.13+enum WallhavenSorting: String {14+ case dateAdded = "date_added"15+ case toplist16+ case random17+}18+1119 class WallhavenAPI {1220 private let session: URLSession13- 21+1422 init(session: URLSession = .shared) {1523 self.session = session1624 }17- 18- func fetchRandomWallpapers(limit: Int = 1) async throws -> [Wallpaper] {19- let queryItems = [20- URLQueryItem(name: "sorting", value: "random"),21- URLQueryItem(name: "limit", value: String(limit))22- ]23- let (data, _) = try await performSearch(queryItems: queryItems)24- return data25- }26- 25+2726 func searchWallpapers(2827 query: String,2928 categories: String = "111",3029 purity: String = "100",30+ sorting: WallhavenSorting = .dateAdded,3131 resolutions: [String] = [],3232 ratios: [String] = [],3333 limit: Int = 24,@@ -37,37 +37,37 @@3737 URLQueryItem(name: "q", value: query),3838 URLQueryItem(name: "categories", value: categories),3939 URLQueryItem(name: "purity", value: purity),40- URLQueryItem(name: "sorting", value: "date_added"),40+ URLQueryItem(name: "sorting", value: sorting.rawValue),4141 URLQueryItem(name: "limit", value: String(limit)),4242 URLQueryItem(name: "page", value: String(page))4343 ]44- 44+4545 if !resolutions.isEmpty {4646 queryItems.append(URLQueryItem(name: "resolutions", value: resolutions.joined(separator: ",")))4747 }48- 48+4949 if !ratios.isEmpty {5050 queryItems.append(URLQueryItem(name: "ratios", value: ratios.joined(separator: ",")))5151 }52- 52+5353 return try await performSearch(queryItems: queryItems)5454 }55- 55+5656 private func performSearch(queryItems: [URLQueryItem]) async throws -> ([Wallpaper], Meta?) {5757 var urlComponents = URLComponents(url: Configuration.baseURL.appendingPathComponent("search"), resolvingAgainstBaseURL: true)!5858 urlComponents.queryItems = queryItems59- 59+6060 guard let url = urlComponents.url else {6161 throw WallhavenError.invalidURL6262 }63- 63+6464 let (data, response) = try await session.data(from: url)65- 66- guard let httpResponse = response as? HTTPURLResponse, 65+66+ guard let httpResponse = response as? HTTPURLResponse,6767 (200...299).contains(httpResponse.statusCode) else {6868 throw WallhavenError.apiError("Server returned an error")6969 }70- 70+7171 do {7272 let decodedResponse = try JSONDecoder().decode(WallhavenResponse.self, from: data)7373 return (decodedResponse.data, decodedResponse.meta)