aboutsummaryrefslogtreecommitdiff
path: root/Hotline/macOS/ServerView.swift
diff options
context:
space:
mode:
Diffstat (limited to 'Hotline/macOS/ServerView.swift')
-rw-r--r--Hotline/macOS/ServerView.swift92
1 files changed, 52 insertions, 40 deletions
diff --git a/Hotline/macOS/ServerView.swift b/Hotline/macOS/ServerView.swift
index d4b3407..98ab976 100644
--- a/Hotline/macOS/ServerView.swift
+++ b/Hotline/macOS/ServerView.swift
@@ -107,13 +107,10 @@ struct ServerView: View {
if self.model.status == .disconnected {
VStack(alignment: .center) {
Spacer()
-// if self.connectionDisplayed {
- self.connectForm
-// }
+ self.connectForm
Spacer()
}
.navigationTitle("Connect to Server")
-// .animation(.default.delay(0.25), value: self.connectionDisplayed)
}
else if self.model.status.isLoggingIn {
HStack {
@@ -281,7 +278,7 @@ struct ServerView: View {
var transfersSection: some View {
ForEach(model.transfers) { transfer in
- TransferItemView(transfer: transfer)
+ ServerTransferRow(transfer: transfer)
}
}
@@ -421,7 +418,7 @@ struct ServerView: View {
}
-struct TransferItemView: View {
+struct ServerTransferRow: View {
let transfer: TransferInfo
@Environment(\.controlActiveState) private var controlActiveState
@@ -429,29 +426,11 @@ struct TransferItemView: View {
@State private var hovered: Bool = false
@State private var buttonHovered: Bool = false
- private func formattedProgressHelp() -> String {
- if self.transfer.completed {
- return "File transfer complete"
- }
- else if self.transfer.failed {
- return "File transfer failed"
- }
- else if self.transfer.progress > 0.0 {
- if let estimate = self.transfer.timeRemaining, estimate > 0.0 {
- return "\(round(self.transfer.progress * 100.0))% – \(estimate) seconds left"
- }
- else {
- return "\(round(self.transfer.progress * 100.0))% complete"
- }
- }
- return ""
- }
-
var body: some View {
HStack(alignment: .center, spacing: 5) {
HStack(spacing: 0) {
Spacer()
- if transfer.isFolder {
+ if self.transfer.isFolder {
Image("Folder")
.resizable()
.scaledToFit()
@@ -467,11 +446,26 @@ struct TransferItemView: View {
}
.frame(width: 20)
- Text(transfer.title)
+ Text(self.transfer.folderName ?? self.transfer.title)
.lineLimit(1)
.truncationMode(.middle)
- Spacer()
+ Spacer(minLength: 0)
+
+ if !self.transfer.done {
+ if self.transfer.progress == 0.0 {
+ ProgressView()
+ .progressViewStyle(.linear)
+ .controlSize(.extraLarge)
+ .frame(maxWidth: 40)
+ }
+ else {
+ ProgressView(value: self.transfer.progress, total: 1.0)
+ .progressViewStyle(.linear)
+ .controlSize(.extraLarge)
+ .frame(maxWidth: 40)
+ }
+ }
if self.hovered {
Button {
@@ -509,19 +503,9 @@ struct TransferItemView: View {
.frame(width: 16, height: 16)
.opacity(controlActiveState == .inactive ? 0.5 : 1.0)
}
- else if transfer.progress == 0.0 {
- ProgressView()
- .progressViewStyle(.circular)
- .controlSize(.small)
- }
- else {
- ProgressView(value: transfer.progress, total: 1.0)
- .progressViewStyle(.circular)
- .controlSize(.small)
- }
}
.onHover { hovered in
- withAnimation(.easeOut(duration: 0.25)) {
+ withAnimation(.snappy(duration: 0.25, extraBounce: 0.3)) {
self.hovered = hovered
}
}
@@ -529,9 +513,37 @@ struct TransferItemView: View {
guard transfer.completed, let url = transfer.fileURL else {
return
}
-
+
NSWorkspace.shared.activateFileViewerSelecting([url])
}
- .help(formattedProgressHelp())
+ .help(self.formattedProgressHelp)
+ }
+
+ private var formattedProgressHelp: String {
+ if self.transfer.completed {
+ return "File transfer complete"
+ }
+ else if self.transfer.failed {
+ return "File transfer failed"
+ }
+ else if self.transfer.cancelled {
+ return "File transfer cancelled"
+ }
+ else if self.transfer.progress > 0.0 {
+ var parts: [String] = []
+
+ if let speed = self.transfer.displaySpeed {
+ parts.append(speed)
+ }
+
+ if let timeRemaining = self.transfer.displayTimeRemaining {
+ parts.append(timeRemaining)
+ }
+
+ if parts.count > 0 {
+ return parts.joined(separator: " • ")
+ }
+ }
+ return ""
}
}