Skip to content

Commit e2633ed

Browse files
committed
fix: Not creating unnecessary "Database" subdirectory in file provider extension container.
Signed-off-by: Iva Horn <iva.horn@icloud.com>
1 parent 58c1b19 commit e2633ed

2 files changed

Lines changed: 15 additions & 23 deletions

File tree

Sources/NextcloudFileProviderKit/Database/FilesDatabaseManager.swift

Lines changed: 8 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -62,40 +62,29 @@ public final class FilesDatabaseManager: Sendable {
6262
var itemMetadatas: Results<RealmItemMetadata> { ncDatabase().objects(RealmItemMetadata.self) }
6363

6464
///
65-
/// Check for the existence of the directory where to place database files and attempt to create it if it does not exist yet.
65+
/// Check for the existence of the directory where to place database files and return it.
6666
///
67-
/// - Returns: The location of the database files directory. Otherwise, failing assertions cause a crash because the extension would be completely dysfunctional anyway.
67+
/// - Returns: The location of the database files directory.
6868
///
6969
private static func assertDatabaseDirectory() -> URL {
7070
Self.logger.debug("Asserting existence of database directory...")
7171

7272
let manager = FileManager.default
7373

74-
guard let extensionData = urlForFileProviderExtensionData() else {
74+
guard let fileProviderExtensionDataDirectory = urlForFileProviderExtensionData() else {
7575
Self.logger.fault("Failed to resolve the file provider extension data directory!")
7676
assertionFailure("Failed to resolve the file provider extension data directory!")
7777
return manager.temporaryDirectory // Only to satisfy the non-optional return type. The extension is unusable at this point anyway.
7878
}
7979

80-
let databaseDirectory = extensionData.appendingPathComponent("Database", isDirectory: true)
81-
var isDirectory: ObjCBool = false
82-
let exists = manager.fileExists(atPath: databaseDirectory.path, isDirectory: &isDirectory)
80+
let databaseDirectory = fileProviderExtensionDataDirectory.appendingPathComponent("Database", isDirectory: true)
81+
let exists = manager.fileExists(atPath: databaseDirectory.path)
8382

8483
if exists {
85-
if isDirectory.boolValue {
86-
Self.logger.info("Database directory exists at: \(databaseDirectory.path, privacy: .public)")
87-
} else {
88-
Self.logger.fault("Database directory exists but is a file at: \(databaseDirectory.path, privacy: .public)")
89-
assertionFailure("Failed to ensure file provider extension database directory exists as expected!")
90-
}
84+
Self.logger.info("Database directory exists at: \(databaseDirectory.path, privacy: .public)")
9185
} else {
92-
do {
93-
try manager.createDirectory(at: databaseDirectory, withIntermediateDirectories: true)
94-
Self.logger.info("Created database directory at: \(databaseDirectory.path, privacy: .public)")
95-
} catch {
96-
Self.logger.fault("Failed to create database directory at \"\(databaseDirectory.path, privacy: .public)\" because of error: \(error.localizedDescription, privacy: .public)")
97-
assertionFailure("Failed to ensure file provider extension database directory exists as expected!")
98-
}
86+
Self.logger.info("Due to nonexistent \"Database\" directory, assume it is not a legacy location and returning file provider extension data directory at: \(fileProviderExtensionDataDirectory.path, privacy: .public)")
87+
return fileProviderExtensionDataDirectory
9988
}
10089

10190
// Disable file protection for database directory.

Sources/NextcloudFileProviderKit/Utilities/LocalFiles.swift

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,14 +51,17 @@ public func urlForFileProviderExtensionData() -> URL? {
5151
}
5252
}
5353

54-
return try! FileManager.default.url(for: .applicationSupportDirectory, in: .userDomainMask, appropriateFor: nil, create: true)
54+
do {
55+
return try FileManager.default.url(for: .applicationSupportDirectory, in: .userDomainMask, appropriateFor: nil, create: true)
56+
} catch {
57+
lfuLogger.error("Failed to get URL for application support directory in user mask!")
58+
return nil
59+
}
5560
}
5661

5762
public func pathForFileProviderTempFilesForDomain(_ domain: NSFileProviderDomain) throws -> URL? {
5863
guard let fpManager = NSFileProviderManager(for: domain) else {
59-
lfuLogger.error(
60-
"Unable to get file provider manager for domain: \(domain.displayName, privacy: .public)"
61-
)
64+
lfuLogger.error("Unable to get file provider manager for domain: \(domain.displayName, privacy: .public)")
6265
throw NSFileProviderError(.providerNotFound)
6366
}
6467

0 commit comments

Comments
 (0)