@@ -20,7 +20,7 @@ class DeepLinks {
20
20
print ( " Invalid deep link URL " )
21
21
return
22
22
}
23
-
23
+
24
24
switch components. host {
25
25
case " authorize " :
26
26
deepLinkAuth ( components, context: context, sessionManager: sessionManager, hasExistingSessions: hasExistingSessions, showingServerConfirmation: showingServerConfirmation, pendingAuthURL: pendingAuthURL, pendingAuthSignature: pendingAuthSignature)
@@ -38,7 +38,7 @@ class DeepLinks {
38
38
39
39
private func handlePreviewLink( _ components: URLComponents , context: ModelContext , sessionManager: SessionManager , previewStateManager: PreviewStateManager , selectedTab: Binding < TabViewWindow . Tab > ) {
40
40
print ( " 🔍 Handling preview deep link with components: \( components) " )
41
-
41
+
42
42
guard let urlString = components. queryItems? . first ( where: { $0. name == " url " } ) ? . value? . removingPercentEncoding,
43
43
let serverURL = URL ( string: urlString) ,
44
44
let fileIDString = components. queryItems? . first ( where: { $0. name == " file_id " } ) ? . value,
@@ -47,11 +47,13 @@ class DeepLinks {
47
47
print ( " ❌ Invalid preview deep link parameters " )
48
48
return
49
49
}
50
-
51
- print ( " 📡 Parsed deep link - Server: \( serverURL) , FileID: \( fileID) , FileName: \( fileName) " )
52
-
50
+
51
+ let filePassword = components. queryItems? . first ( where: { $0. name == " file_password " } ) ? . value? . removingPercentEncoding
52
+
53
+ print ( " 📡 Parsed deep link - Server: \( serverURL) , FileID: \( fileID) , FileName: \( fileName) , HasPassword: \( filePassword != nil ) " )
54
+
53
55
let descriptor = FetchDescriptor < DjangoFilesSession > ( )
54
-
56
+
55
57
Task {
56
58
do {
57
59
let existingSessions = try context. fetch ( descriptor)
@@ -66,24 +68,26 @@ class DeepLinks {
66
68
}
67
69
return
68
70
}
69
-
71
+
70
72
let api = DFAPI ( url: serverURL, token: session. token)
71
73
72
- if let fileDetails = await api. getFileDetails ( fileID: fileID) {
74
+ if let fileDetails = await api. getFileDetails ( fileID: fileID, password : filePassword ) {
73
75
if fileDetails. user != session. userID {
74
76
print ( " ❌ File does not belong to current user " )
75
77
await MainActor . run {
76
78
selectedTab. wrappedValue = . files
77
79
previewStateManager. deepLinkFile = fileDetails
78
80
previewStateManager. showingDeepLinkPreview = true
81
+ previewStateManager. deepLinkFilePassword = filePassword
79
82
}
80
83
return
81
84
}
82
-
85
+
83
86
await MainActor . run {
84
87
sessionManager. selectedSession = session
85
88
selectedTab. wrappedValue = . files
86
89
previewStateManager. deepLinkTargetFileID = fileID
90
+ previewStateManager. deepLinkFilePassword = filePassword
87
91
}
88
92
} else {
89
93
print ( " ❌ Failed to fetch file details " )
@@ -93,18 +97,19 @@ class DeepLinks {
93
97
}
94
98
} else {
95
99
print ( " 🔑 Preview link for unknown server: \( serverURL. absoluteString) " )
96
-
100
+
97
101
let api = DFAPI ( url: serverURL, token: " " )
98
102
print ( " 🌐 Created API instance for server: \( serverURL) " )
99
-
103
+
100
104
print ( " 📥 Attempting to fetch file details for ID: \( fileID) " )
101
- if let fileDetails = await api. getFileDetails ( fileID: fileID) {
105
+ if let fileDetails = await api. getFileDetails ( fileID: fileID, password : filePassword ) {
102
106
print ( " ✅ Successfully fetched file details: \( fileDetails. name) " )
103
107
await MainActor . run {
104
108
print ( " 🎯 Setting up preview view " )
105
109
selectedTab. wrappedValue = . files
106
110
previewStateManager. deepLinkFile = fileDetails
107
111
previewStateManager. showingDeepLinkPreview = true
112
+ previewStateManager. deepLinkFilePassword = filePassword
108
113
print ( " 🎯 Preview view setup complete " )
109
114
}
110
115
} else {
@@ -129,9 +134,9 @@ class DeepLinks {
129
134
print ( " Invalid server URL in filelist deep link " )
130
135
return
131
136
}
132
-
137
+
133
138
let descriptor = FetchDescriptor < DjangoFilesSession > ( )
134
-
139
+
135
140
Task {
136
141
do {
137
142
let existingSessions = try context. fetch ( descriptor)
@@ -157,7 +162,7 @@ class DeepLinks {
157
162
}
158
163
159
164
let descriptor = FetchDescriptor < DjangoFilesSession > ( )
160
-
165
+
161
166
Task {
162
167
do {
163
168
let existingSessions = try context. fetch ( descriptor)
@@ -180,7 +185,7 @@ class DeepLinks {
180
185
}
181
186
}
182
187
}
183
-
188
+
184
189
@MainActor func handleServerConfirmation( confirmed: Bool , setAsDefault: Bool , pendingAuthURL: Binding < URL ? > , pendingAuthSignature: Binding < String ? > , context: ModelContext , sessionManager: SessionManager , hasExistingSessions: Binding < Bool > , selectedTab: Binding < TabViewWindow . Tab > ) async {
185
190
guard let serverURL = pendingAuthURL. wrappedValue,
186
191
let signature = pendingAuthSignature. wrappedValue else {
@@ -220,7 +225,7 @@ class DeepLinks {
220
225
ToastManager . shared. showToast ( message: " Problem signing into server \( error) " )
221
226
print ( " Error creating new session: \( error) " )
222
227
}
223
-
228
+
224
229
pendingAuthURL. wrappedValue = nil
225
230
pendingAuthSignature. wrappedValue = nil
226
231
}
0 commit comments