diff options
| author | Ruben Beltran del Rio <git@r.bdr.sh> | 2025-11-27 23:38:04 +0100 |
|---|---|---|
| committer | Ruben Beltran del Rio <git@r.bdr.sh> | 2025-11-27 23:38:04 +0100 |
| commit | 213710bf5bd6413c747bf126db50816ef5de5a6e (patch) | |
| tree | 912f8cf87955a08077c92fea8ad934f50b7ab975 /Hotline/Models/Bookmark.swift | |
| parent | f466b21dc02f78c984ba6748e703f6780a7a0db4 (diff) | |
| parent | 6a95b53616a4abfa306ddce43151cf4fefbd20ed (diff) | |
Merge remote-tracking branch 'upstream/main'
Diffstat (limited to 'Hotline/Models/Bookmark.swift')
| -rw-r--r-- | Hotline/Models/Bookmark.swift | 112 |
1 files changed, 39 insertions, 73 deletions
diff --git a/Hotline/Models/Bookmark.swift b/Hotline/Models/Bookmark.swift index 5afc2c0..4c2a28b 100644 --- a/Hotline/Models/Bookmark.swift +++ b/Hotline/Models/Bookmark.swift @@ -4,7 +4,27 @@ import SwiftData enum BookmarkType: String, Codable { case tracker = "tracker" case server = "server" - case temporary = "temporary" +} + +struct BookmarkServer: Hashable, Identifiable { + let id = UUID() + let name: String? + let address: String + let port: Int + let description: String? + let users: Int + + var server: Server { + Server(name: self.name, description: self.description, address: self.address, port: self.port, users: self.users) + } + + init(server: Server) { + self.name = server.name + self.address = server.address + self.port = server.port + self.description = server.description + self.users = server.users + } } @Model @@ -25,25 +45,6 @@ final class Bookmark { @Attribute var autoconnect: Bool = false - @Attribute(.ephemeral) - var expanded: Bool = false - - @Attribute(.ephemeral) - var loading: Bool = false - - @Attribute(.ephemeral) - var serverDescription: String? = nil - - @Attribute(.ephemeral) - var serverUserCount: Int? = nil - - @Transient - var servers: [Bookmark] = [] - - func hash(into hasher: inout Hasher) { - - } - @Transient var displayAddress: String { switch self.type { @@ -54,7 +55,7 @@ final class Bookmark { return "\(self.address):\(String(self.port))" } - case .server, .temporary: + case .server: if self.port == HotlinePorts.DefaultServerPort { return self.address } else { @@ -69,23 +70,15 @@ final class Bookmark { case .tracker: return nil - case .server, .temporary: - return Server( - name: self.name, description: self.serverDescription, address: self.address, - port: self.port, login: self.login, password: self.password, autoconnect: self.autoconnect) + case .server: + return Server(name: self.name, description: nil, address: self.address, port: self.port, login: self.login, password: self.password) } } static let DefaultBookmarks: [Bookmark] = [ - Bookmark( - type: .server, name: "The Mobius Strip", address: "67.174.208.111", - port: HotlinePorts.DefaultServerPort), - Bookmark( - type: .server, name: "System 7 Today", address: "hotline.system7today.com", - port: HotlinePorts.DefaultServerPort), - Bookmark( - type: .tracker, name: "Featured Servers", address: "hltracker.com", - port: HotlinePorts.DefaultTrackerPort), + Bookmark(type: .server, name: "The Mobius Strip", address: "mobius.trtphotl.com", port: HotlinePorts.DefaultServerPort), + Bookmark(type: .server, name: "MacDomain", address: "hotline.system7today.com", port: HotlinePorts.DefaultServerPort), + Bookmark(type: .tracker, name: "Featured Servers", address: "hltracker.com", port: HotlinePorts.DefaultTrackerPort) ] init( @@ -103,17 +96,6 @@ final class Bookmark { self.autoconnect = autoconnect } - init(temporaryServer server: Server) { - self.type = .temporary - - self.name = server.name ?? server.address - self.address = server.address - self.port = server.port - - self.serverDescription = server.description - self.serverUserCount = server.users - } - init?(fileData: Data, name: String? = nil) { guard fileData.count <= 2000 else { return nil @@ -264,11 +246,6 @@ final class Bookmark { } static func add(_ bookmark: Bookmark, context: ModelContext) { - guard bookmark.type != .temporary else { - print("Bookmark: Attempting to add temporary bookmark to store. Aborting.") - return - } - let existingBookmarks = Bookmark.fetchAll(context: context) // Reindex bookmarks before insert. @@ -361,38 +338,27 @@ final class Bookmark { print("Bookmark: Failed to save bookmark reordering") } } - - func fetchServers() async { + + func fetchServers() async -> [BookmarkServer] { guard self.type == .tracker else { - // self.loading = false - return - } - - DispatchQueue.main.sync { - self.loading = true + return [] } - var fetchedBookmarks: [Bookmark] = [] + var fetchedBookmarks: [BookmarkServer] = [] let client = HotlineTrackerClient() - if let fetchedServers: [HotlineServer] = try? await client.fetchServers( - address: self.address, port: self.port) - { - for fetchedServer in fetchedServers { + do { + for try await fetchedServer in client.fetchServers(address: self.address, port: self.port) { + print("FETCHED SERVER", fetchedServer) if let serverName = fetchedServer.name { - let server = Server( - name: serverName, description: fetchedServer.description, - address: fetchedServer.address, port: Int(fetchedServer.port), - users: Int(fetchedServer.users)) - fetchedBookmarks.append(Bookmark(temporaryServer: server)) + let server = Server(name: serverName, description: fetchedServer.description, address: fetchedServer.address, port: Int(fetchedServer.port), users: Int(fetchedServer.users)) + fetchedBookmarks.append(BookmarkServer(server: server)) } } + } catch { + print("Failed to fetch servers from tracker: \(error)") } - let newServers = fetchedBookmarks - DispatchQueue.main.sync { - self.servers = newServers - self.loading = false - } + return fetchedBookmarks } } |