aboutsummaryrefslogtreecommitdiff
path: root/Hotline/Models/Hotline.swift
diff options
context:
space:
mode:
authorDustin Mierau <dustin@mierau.me>2024-01-05 19:46:13 -0800
committerDustin Mierau <dustin@mierau.me>2024-01-05 19:46:37 -0800
commit2f8f71d0410f59d5d303a4c221a628630168bfe2 (patch)
tree6a18ae2e4dbd72a688667bd9e819ecee72d76b52 /Hotline/Models/Hotline.swift
parent57c33eb798f6802fe5af8fcd3d1992a4b63a448f (diff)
Add image preview to Files so you don't have to download images to view them, works with animated GIFs too. Added cmd-R shortcut for Servers window. More work on login view.
Diffstat (limited to 'Hotline/Models/Hotline.swift')
-rw-r--r--Hotline/Models/Hotline.swift98
1 files changed, 81 insertions, 17 deletions
diff --git a/Hotline/Models/Hotline.swift b/Hotline/Models/Hotline.swift
index 3e3bf26..e88c267 100644
--- a/Hotline/Models/Hotline.swift
+++ b/Hotline/Models/Hotline.swift
@@ -1,6 +1,7 @@
import SwiftUI
-@Observable final class Hotline: HotlineClientDelegate, HotlineFileClientDelegate {
+@Observable
+final class Hotline: HotlineClientDelegate, HotlineFileClientDelegate {
let trackerClient: HotlineTrackerClient
let client: HotlineClient
@@ -239,13 +240,15 @@ import SwiftUI
self.trackerClient.disconnect()
}
- @MainActor func login(server: Server, login: String, password: String, username: String, iconID: Int, callback: ((Bool) -> Void)? = nil) {
+ @MainActor func login(server: Server, username: String, iconID: Int, callback: ((Bool) -> Void)? = nil) {
self.server = server
self.serverName = server.name
self.username = username
self.iconID = iconID
- self.client.login(server.address, port: UInt16(server.port), login: login, password: password, username: username, iconID: UInt16(iconID)) { [weak self] err, serverName, serverVersion in
+ print("CLIENT LOGIN: '\(server.login)' '\(server.password == nil)'")
+
+ self.client.login(server.address, port: UInt16(server.port), login: server.login, password: server.password, username: username, iconID: UInt16(iconID)) { [weak self] err, serverName, serverVersion in
self?.serverVersion = serverVersion
if serverName != nil {
self?.serverName = serverName
@@ -519,16 +522,21 @@ import SwiftUI
})
}
- @MainActor func previewFile(_ fileName: String, path: [String], addTransfer: Bool = false, complete callback: ((TransferInfo, Data) -> Void)? = nil) {
+ @MainActor func previewFile(_ fileName: String, path: [String], complete callback: ((PreviewFileInfo?) -> Void)? = nil) {
var fullPath: [String] = []
if path.count > 1 {
fullPath = Array(path[0..<path.count-1])
}
- self.client.sendDownloadFile(name: fileName, path: fullPath, preview: true, sent: { _ in
+ self.client.sendDownloadFile(name: fileName, path: fullPath, preview: true, sent: { success in
+ if !success {
+ callback?(nil)
+ return
+ }
}, reply: { [weak self] success, downloadReferenceNumber, downloadTransferSize, downloadFileSize, downloadWaitingCount in
guard success else {
+ callback?(nil)
return
}
@@ -539,24 +547,27 @@ import SwiftUI
print("REFERENCE NUM: \(downloadReferenceNumber.debugDescription)")
print("WAITING COUNT: \(downloadWaitingCount.debugDescription)")
+ var info: PreviewFileInfo? = nil
+
if
- let self = self,
- let address = self.server?.address,
- let port = self.server?.port,
+ let address = self?.server?.address,
+ let port = self?.server?.port,
let referenceNumber = downloadReferenceNumber,
let transferSize = downloadTransferSize {
- let fileClient = HotlineFileClient(address: address, port: UInt16(port), reference: referenceNumber, size: UInt32(transferSize), type: .preview)
- fileClient.delegate = self
- self.downloads.append(fileClient)
+ info = PreviewFileInfo(id: referenceNumber, address: address, port: port, size: transferSize, name: fileName)
- if addTransfer {
- let transfer = TransferInfo(id: referenceNumber, title: fileName, size: UInt(transferSize))
- transfer.previewCallback = callback
- self.transfers.append(transfer)
- }
+// let fileClient = HotlineFileClient(address: address, port: UInt16(port), reference: referenceNumber, size: UInt32(transferSize), type: .preview)
+// fileClient.delegate = self
+// self.downloads.append(fileClient)
- fileClient.downloadToMemory()
+// if addTransfer {
+// let transfer = TransferInfo(id: referenceNumber, title: fileName, size: UInt(transferSize))
+// transfer.previewCallback = callback
+// self.transfers.append(transfer)
+// }
+
+// fileClient.downloadToMemory()
print("DOWNLOADING TO MEMORY")
// fileClient.downloadToMemory({ [weak self] fileData in
@@ -567,9 +578,62 @@ import SwiftUI
// self.downloads.append(fileClient)
}
+
+ callback?(info)
})
}
+// @MainActor func previewFile(_ fileName: String, path: [String], addTransfer: Bool = false, complete callback: ((TransferInfo, Data) -> Void)? = nil) {
+// var fullPath: [String] = []
+// if path.count > 1 {
+// fullPath = Array(path[0..<path.count-1])
+// }
+//
+// self.client.sendDownloadFile(name: fileName, path: fullPath, preview: true, sent: { _ in
+//
+// }, reply: { [weak self] success, downloadReferenceNumber, downloadTransferSize, downloadFileSize, downloadWaitingCount in
+// guard success else {
+// return
+// }
+//
+// print("GOT DOWNLOAD REPLY:")
+// print("SUCCESS?", success)
+// print("TRANSFER SIZE: \(downloadTransferSize.debugDescription)")
+// print("FILE SIZE: \(downloadFileSize.debugDescription)")
+// print("REFERENCE NUM: \(downloadReferenceNumber.debugDescription)")
+// print("WAITING COUNT: \(downloadWaitingCount.debugDescription)")
+//
+// if
+// let self = self,
+// let address = self.server?.address,
+// let port = self.server?.port,
+// let referenceNumber = downloadReferenceNumber,
+// let transferSize = downloadTransferSize {
+//
+// let fileClient = HotlineFileClient(address: address, port: UInt16(port), reference: referenceNumber, size: UInt32(transferSize), type: .preview)
+// fileClient.delegate = self
+// self.downloads.append(fileClient)
+//
+// if addTransfer {
+// let transfer = TransferInfo(id: referenceNumber, title: fileName, size: UInt(transferSize))
+// transfer.previewCallback = callback
+// self.transfers.append(transfer)
+// }
+//
+// fileClient.downloadToMemory()
+//
+// print("DOWNLOADING TO MEMORY")
+//// fileClient.downloadToMemory({ [weak self] fileData in
+//// print("DOWNLOADED PREVIEW DATA", fileData?.count)
+//// self?.downloads.removeAll { $0.referenceNumber == referenceNumber }
+//// callback?(fileData != nil, fileData)
+//// })
+//
+//// self.downloads.append(fileClient)
+// }
+// })
+// }
+
@MainActor func deleteTransfer(id: UInt32) {
if let b = self.bannerClient, b.referenceNumber == id {
b.cancel()