mirror of
				https://github.com/yattee/yattee.git
				synced 2025-10-31 04:31:54 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			84 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Swift
		
	
	
	
	
	
			
		
		
	
	
			84 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Swift
		
	
	
	
	
	
| import Defaults
 | |
| import Foundation
 | |
| 
 | |
| final class InstancesModel: ObservableObject {
 | |
|     static var shared = InstancesModel()
 | |
| 
 | |
|     var all: [Instance] {
 | |
|         Defaults[.instances]
 | |
|     }
 | |
| 
 | |
|     var forPlayer: Instance? {
 | |
|         guard let id = Defaults[.playerInstanceID] else {
 | |
|             return nil
 | |
|         }
 | |
| 
 | |
|         return InstancesModel.shared.find(id)
 | |
|     }
 | |
| 
 | |
|     var lastUsed: Instance? {
 | |
|         guard let id = Defaults[.lastInstanceID] else {
 | |
|             return nil
 | |
|         }
 | |
| 
 | |
|         return InstancesModel.shared.find(id)
 | |
|     }
 | |
| 
 | |
|     func find(_ id: Instance.ID?) -> Instance? {
 | |
|         guard id != nil else {
 | |
|             return nil
 | |
|         }
 | |
| 
 | |
|         return Defaults[.instances].first { $0.id == id }
 | |
|     }
 | |
| 
 | |
|     func accounts(_ id: Instance.ID?) -> [Account] {
 | |
|         Defaults[.accounts].filter { $0.instanceID == id }
 | |
|     }
 | |
| 
 | |
|     func add(app: VideosApp, name: String, url: String) -> Instance {
 | |
|         let instance = Instance(
 | |
|             app: app, id: UUID().uuidString, name: name, apiURLString: standardizedURL(url)
 | |
|         )
 | |
|         Defaults[.instances].append(instance)
 | |
| 
 | |
|         return instance
 | |
|     }
 | |
| 
 | |
|     func setFrontendURL(_ instance: Instance, _ url: String) {
 | |
|         if let index = Defaults[.instances].firstIndex(where: { $0.id == instance.id }) {
 | |
|             var instance = Defaults[.instances][index]
 | |
|             instance.frontendURL = standardizedURL(url)
 | |
| 
 | |
|             Defaults[.instances][index] = instance
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     func setProxiesVideos(_ instance: Instance, _ proxiesVideos: Bool) {
 | |
|         guard let index = Defaults[.instances].firstIndex(where: { $0.id == instance.id }) else {
 | |
|             return
 | |
|         }
 | |
| 
 | |
|         var instance = Defaults[.instances][index]
 | |
|         instance.proxiesVideos = proxiesVideos
 | |
| 
 | |
|         Defaults[.instances][index] = instance
 | |
|     }
 | |
| 
 | |
|     func remove(_ instance: Instance) {
 | |
|         let accounts = accounts(instance.id)
 | |
|         if let index = Defaults[.instances].firstIndex(where: { $0.id == instance.id }) {
 | |
|             Defaults[.instances].remove(at: index)
 | |
|             accounts.forEach { AccountsModel.remove($0) }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     func standardizedURL(_ url: String) -> String {
 | |
|         if url.count > 7, url.last == "/" {
 | |
|             return String(url.dropLast())
 | |
|         } else {
 | |
|             return url
 | |
|         }
 | |
|     }
 | |
| }
 | 
