Skip to content

Commit b31c2ed

Browse files
Merge branch 'master' into nmc/2267-rename-customisation
2 parents 07306a1 + 6d0a5a4 commit b31c2ed

327 files changed

Lines changed: 8297 additions & 9136 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/xcode.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ jobs:
3737
- name: Setup Xcode
3838
uses: maxim-lobanov/setup-xcode@60606e260d2fc5762a71e64e74b2174e8ea3c8bd # v1.6.0
3939
with:
40-
xcode-version: 16.4
40+
xcode-version: '26.0.1'
4141

4242
- name: Run Xcode Build
4343
run: |

.swiftlint.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ disabled_rules:
3838
- void_function_in_ternary
3939
- switch_case_alignment
4040
- unavailable_condition
41+
- orphaned_doc_comment
4142
excluded:
4243
- Carthage
4344
- Pods

Animation.gif

-254 KB
Loading

Brand/Database.swift

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,4 @@ import Foundation
88
//
99
let databaseName = "nextcloud.realm"
1010
let tableAccountBackup = "tableAccountBackup.json"
11-
let fileTransferStore = "transfer.json"
12-
let databaseSchemaVersion: UInt64 = 403
11+
let databaseSchemaVersion: UInt64 = 407

Brand/NCBrand.swift

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ final class NCBrandOptions: @unchecked Sendable {
7676
let httpMaximumConnectionsPerHostInUpload: Int = 8
7777

7878
// Max request/download/upload process
79-
let numMaximumProcess: Int = 50
79+
let numMaximumProcess: Int = 20
8080

8181
// Number of failed attempts after reset app
8282
let resetAppPasscodeAttempts: Int = 10
@@ -127,6 +127,22 @@ final class NCBrandOptions: @unchecked Sendable {
127127
@objc func getUserAgent() -> String {
128128
return userAgent
129129
}
130+
131+
func isServerVersion(_ capabilities: NKCapabilities.Capabilities,
132+
greaterOrEqualTo major: Int,
133+
_ minor: Int,
134+
_ micro: Int) -> Bool {
135+
136+
let server = (
137+
capabilities.serverVersionMajor,
138+
capabilities.serverVersionMinor,
139+
capabilities.serverVersionMicro
140+
)
141+
142+
let required = (major, minor, micro)
143+
144+
return server >= required
145+
}
130146
}
131147

132148
final class NCBrandColor: @unchecked Sendable {

File Provider Extension/FileProviderData.swift

Lines changed: 40 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,14 @@
44

55
import UIKit
66
import NextcloudKit
7+
import FileProvider
78

89
class FileProviderData: NSObject {
910
static let shared = FileProviderData()
1011

11-
let utilityFileSystem = NCUtilityFileSystem()
12-
let global = NCGlobal.shared
13-
let database = NCManageDatabase.shared
14-
1512
var domain: NSFileProviderDomain?
1613
var session: NCSession.Session?
14+
private var isPaginated: Bool?
1715

1816
var listFavoriteIdentifierRank: [String: NSNumber] = [:]
1917
var fileProviderSignalDeleteContainerItemIdentifier: [NSFileProviderItemIdentifier: NSFileProviderItemIdentifier] = [:]
@@ -40,8 +38,8 @@ class FileProviderData: NSObject {
4038
func setupAccount(domain: NSFileProviderDomain? = nil,
4139
tblAccount: tableAccount? = nil,
4240
providerExtension: NSFileProviderExtension) -> tableAccount? {
43-
let version = NSString(format: NCBrandOptions.shared.textCopyrightNextcloudiOS as NSString, NCUtility().getVersionBuild()) as String
44-
let tblAccounts = self.database.getAllTableAccount()
41+
let version = NSString(format: NCBrandOptions.shared.textCopyrightNextcloudiOS as NSString, fileProviderUtility().getVersionBuild()) as String
42+
let tblAccounts = NCManageDatabase.shared.getAllTableAccount()
4543
var matchAccount: tableAccount?
4644

4745
NextcloudKit.configureLogger(logLevel: (NCBrandOptions.shared.disable_log ? .disabled : NCPreferences().log))
@@ -55,9 +53,9 @@ class FileProviderData: NSObject {
5553
}
5654
let accountDomain = "\($0.userId) (\(host))"
5755
return accountDomain == domain.identifier.rawValue
58-
}) ?? self.database.getActiveTableAccount()
56+
}) ?? NCManageDatabase.shared.getActiveTableAccount()
5957
} else {
60-
matchAccount = self.database.getActiveTableAccount()
58+
matchAccount = NCManageDatabase.shared.getActiveTableAccount()
6159
}
6260

6361
guard let matchAccount else {
@@ -86,11 +84,24 @@ class FileProviderData: NSObject {
8684
return matchAccount
8785
}
8886

87+
// Get capabilities -> Paginate is availible from NC server 32.0.2
88+
func isPaginatedAvailabile(serverUrl: String, session: NCSession.Session) async -> Bool {
89+
if let isPaginated {
90+
return isPaginated
91+
} else if serverUrl == NCUtilityFileSystem().getHomeServer(session: session),
92+
let capabilities = await NextcloudKit.shared.getCapabilitiesAsync(account: session.account).capabilities,
93+
NCBrandOptions.shared.isServerVersion(capabilities, greaterOrEqualTo: 32, 0, 2) {
94+
isPaginated = true
95+
return true
96+
}
97+
return false
98+
}
99+
89100
// MARK: -
90101

91102
@discardableResult
92103
func signalEnumerator(ocId: String, type: TypeSignal) async -> FileProviderItem? {
93-
guard let metadata = await self.database.getMetadataFromOcIdAsync(ocId),
104+
guard let metadata = await NCManageDatabase.shared.getMetadataFromOcIdAsync(ocId),
94105
let parentItemIdentifier = await fileProviderUtility().getParentItemIdentifierAsync(metadata: metadata) else {
95106
return nil
96107
}
@@ -143,7 +154,7 @@ class FileProviderData: NSObject {
143154
task: URLSessionTask,
144155
error: NKError) async {
145156
let taskIdentifier = task.taskIdentifier
146-
let metadata = await self.database.getMetadataAsync(predicate: NSPredicate(format: "serverUrl == %@ AND fileName == %@", serverUrl, fileName))
157+
let metadata = await NCManageDatabase.shared.getMetadataAsync(predicate: NSPredicate(format: "serverUrl == %@ AND fileName == %@", serverUrl, fileName))
147158

148159
guard let metadata else {
149160
downloadPendingCompletionHandlers[taskIdentifier]?(nil)
@@ -155,16 +166,16 @@ class FileProviderData: NSObject {
155166

156167
let ocId = metadata.ocId
157168

158-
await self.database.setMetadataSessionAsync(ocId: ocId,
159-
session: "",
160-
sessionTaskIdentifier: 0,
161-
sessionError: "",
162-
status: self.global.metadataStatusNormal,
163-
etag: etag)
169+
await NCManageDatabase.shared.setMetadataSessionAsync(ocId: ocId,
170+
session: "",
171+
sessionTaskIdentifier: 0,
172+
sessionError: "",
173+
status: NCGlobal.shared.metadataStatusNormal,
174+
etag: etag)
164175

165176
if error == .success {
166-
if let metadata = await self.database.getMetadataFromOcIdAsync(ocId) {
167-
await self.database.addLocalFilesAsync(metadatas: [metadata])
177+
if let metadata = await NCManageDatabase.shared.getMetadataFromOcIdAsync(ocId) {
178+
await NCManageDatabase.shared.addLocalFilesAsync(metadatas: [metadata])
168179
}
169180
}
170181

@@ -188,24 +199,25 @@ class FileProviderData: NSObject {
188199
size: Int64,
189200
task: URLSessionTask,
190201
error: NKError) async {
191-
guard let metadata = await self.database.getMetadataAsync(predicate: NSPredicate(format: "serverUrl == %@ AND fileName == %@ AND sessionTaskIdentifier == %d", serverUrl, fileName, task.taskIdentifier)) else {
202+
guard let metadata = await NCManageDatabase.shared.getMetadataAsync(predicate: NSPredicate(format: "serverUrl == %@ AND fileName == %@ AND sessionTaskIdentifier == %d", serverUrl, fileName, task.taskIdentifier)) else {
192203
let predicate = NSPredicate(format: "fileName == %@ AND serverUrl == %@", fileName, serverUrl)
193-
await self.database.deleteMetadataAsync(predicate: predicate)
204+
await NCManageDatabase.shared.deleteMetadataAsync(predicate: predicate)
194205

195206
return
196207
}
197208

198209
if let ocId, !metadata.ocIdTransfer.isEmpty {
199-
let atPath = self.utilityFileSystem.getDirectoryProviderStorageOcId(metadata.ocIdTransfer, userId: metadata.userId, urlBase: metadata.urlBase)
200-
let toPath = self.utilityFileSystem.getDirectoryProviderStorageOcId(ocId, userId: metadata.userId, urlBase: metadata.urlBase)
201-
self.utilityFileSystem.copyFile(atPath: atPath, toPath: toPath)
210+
let utilityFileSystem = NCUtilityFileSystem()
211+
let atPath = utilityFileSystem.getDirectoryProviderStorageOcId(metadata.ocIdTransfer, userId: metadata.userId, urlBase: metadata.urlBase)
212+
let toPath = utilityFileSystem.getDirectoryProviderStorageOcId(ocId, userId: metadata.userId, urlBase: metadata.urlBase)
213+
utilityFileSystem.copyFile(atPath: atPath, toPath: toPath)
202214
}
203215

204216
if error == .success, let ocId {
205217
await signalEnumerator(ocId: metadata.ocIdTransfer, type: .delete)
206218

207219
if !metadata.ocIdTransfer.isEmpty, ocId != metadata.ocIdTransfer {
208-
await self.database.deleteMetadataAsync(id: metadata.ocIdTransfer)
220+
await NCManageDatabase.shared.deleteMetadataAsync(id: metadata.ocIdTransfer)
209221
}
210222

211223
metadata.fileName = fileName
@@ -214,7 +226,7 @@ class FileProviderData: NSObject {
214226
metadata.etag = etag ?? ""
215227
metadata.ocId = ocId
216228
metadata.size = size
217-
if let fileId = NCUtility().ocIdToFileId(ocId: ocId) {
229+
if let fileId = fileProviderUtility().ocIdToFileId(ocId: ocId) {
218230
metadata.fileId = fileId
219231
}
220232

@@ -224,17 +236,16 @@ class FileProviderData: NSObject {
224236
metadata.sessionSelector = ""
225237
metadata.sessionDate = nil
226238
metadata.sessionTaskIdentifier = 0
227-
metadata.progress = 0
228239
metadata.status = NCGlobal.shared.metadataStatusNormal
229240

230-
await self.database.addMetadataAsync(metadata)
231-
await self.database.addLocalFilesAsync(metadatas: [metadata])
241+
await NCManageDatabase.shared.addMetadataAsync(metadata)
242+
await NCManageDatabase.shared.addLocalFilesAsync(metadatas: [metadata])
232243

233244
await signalEnumerator(ocId: ocId, type: .update)
234245

235246
} else {
236247

237-
await self.database.deleteMetadataAsync(id: metadata.ocIdTransfer)
248+
await NCManageDatabase.shared.deleteMetadataAsync(id: metadata.ocIdTransfer)
238249

239250
await signalEnumerator(ocId: metadata.ocIdTransfer, type: .delete)
240251
}

0 commit comments

Comments
 (0)