mirror of
				https://github.com/yattee/yattee.git
				synced 2025-10-31 20:52:04 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			75 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Swift
		
	
	
	
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Swift
		
	
	
	
	
	
| import Defaults
 | |
| import Foundation
 | |
| 
 | |
| final class SearchQuery: ObservableObject {
 | |
|     enum Date: String, CaseIterable, Identifiable {
 | |
|         case any, hour, today, week, month, year
 | |
| 
 | |
|         var id: SearchQuery.Date.RawValue {
 | |
|             rawValue
 | |
|         }
 | |
| 
 | |
|         var name: String {
 | |
|             rawValue.capitalized.localized()
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     enum Duration: String, CaseIterable, Identifiable {
 | |
|         case any, short, long
 | |
| 
 | |
|         var id: SearchQuery.Duration.RawValue {
 | |
|             rawValue
 | |
|         }
 | |
| 
 | |
|         var name: String {
 | |
|             rawValue.capitalized.localized()
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     enum SortOrder: String, CaseIterable, Identifiable {
 | |
|         case relevance, rating, uploadDate, viewCount
 | |
| 
 | |
|         var id: SearchQuery.SortOrder.RawValue {
 | |
|             rawValue
 | |
|         }
 | |
| 
 | |
|         var name: String {
 | |
|             switch self {
 | |
|             case .uploadDate:
 | |
|                 return "Date".localized()
 | |
|             case .viewCount:
 | |
|                 return "Views".localized()
 | |
|             default:
 | |
|                 return rawValue.capitalized.localized()
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         var parameter: String {
 | |
|             switch self {
 | |
|             case .uploadDate:
 | |
|                 return "upload_date"
 | |
|             case .viewCount:
 | |
|                 return "view_count"
 | |
|             default:
 | |
|                 return rawValue
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     @Published var query: String
 | |
|     @Published var sortBy: SearchQuery.SortOrder = .relevance
 | |
|     @Published var date: SearchQuery.Date? = .month
 | |
|     @Published var duration: SearchQuery.Duration?
 | |
| 
 | |
|     init(query: String = "", sortBy: SearchQuery.SortOrder = .relevance, date: SearchQuery.Date? = nil, duration: SearchQuery.Duration? = nil) {
 | |
|         self.query = query
 | |
|         self.sortBy = sortBy
 | |
|         self.date = date
 | |
|         self.duration = duration
 | |
|     }
 | |
| 
 | |
|     var isEmpty: Bool {
 | |
|         query.isEmpty
 | |
|     }
 | |
| }
 | 
