aboutsummaryrefslogtreecommitdiff
path: root/Hotline/Models/Bookmark.swift
diff options
context:
space:
mode:
authorRuben Beltran del Rio <git@r.bdr.sh>2025-11-27 23:38:04 +0100
committerRuben Beltran del Rio <git@r.bdr.sh>2025-11-27 23:38:04 +0100
commit213710bf5bd6413c747bf126db50816ef5de5a6e (patch)
tree912f8cf87955a08077c92fea8ad934f50b7ab975 /Hotline/Models/Bookmark.swift
parentf466b21dc02f78c984ba6748e703f6780a7a0db4 (diff)
parent6a95b53616a4abfa306ddce43151cf4fefbd20ed (diff)
Merge remote-tracking branch 'upstream/main'
Diffstat (limited to 'Hotline/Models/Bookmark.swift')
-rw-r--r--Hotline/Models/Bookmark.swift112
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
}
}