}
func modifyItem(_ item: NSFileProviderItem, baseVersion version: NSFileProviderItemVersion, changedFields: NSFileProviderItemFields, contents newContents: URL?, options: NSFileProviderModifyItemOptions = [], request: NSFileProviderRequest, completionHandler: @escaping (NSFileProviderItem?, NSFileProviderItemFields, Bool, Error?) -> Void) -> Progress {
- // TODO: an item was modified on disk, process the item's modification
+ // An item was modified on disk, process the item's modification
+ // TODO: Handle finder things like tags, other possible item changed fields
NSLog("Received modify item request for item with identifier: %@ and filename: %@", item.itemIdentifier.rawValue, item.filename)
var modifiedItem = item
- // TODO: Also handle reparenting here
- if changedFields.contains(.filename) {
+ if changedFields.contains(.filename) || changedFields.contains(.parentItemIdentifier) {
let ocId = item.itemIdentifier.rawValue
guard let metadata = dbManager.itemMetadataFromOcId(ocId) else {
return
}
+ // Remember that a folder metadata's serverUrl is its direct server URL, while for
+ // an item metadata the server URL is the parent folder's URL
if itemTemplateIsFolder {
dbManager.renameDirectoryAndPropagateToChildren(ocId: ocId, newServerUrl: newServerUrlFileName, newFileName: item.filename)
} else {
- dbManager.renameItemMetadata(ocId: ocId, newFileName: item.filename)
+ dbManager.renameItemMetadata(ocId: ocId, newServerUrl: parentItemMetadata.serverUrl, newFileName: item.filename)
}
guard let newMetadata = dbManager.itemMetadataFromOcId(ocId) else {
}
}
- func renameItemMetadata(ocId: String, newFileName: String) {
+ func renameItemMetadata(ocId: String, newServerUrl: String, newFileName: String) {
let database = ncDatabase()
do {
}
let oldFileName = itemMetadata.fileName
+ let oldServerUrl = itemMetadata.serverUrl
+
itemMetadata.fileName = newFileName
itemMetadata.fileNameView = newFileName
+ itemMetadata.serverUrl = newServerUrl
+
database.add(itemMetadata, update: .all)
- NSLog("Renamed item %@ to %@", oldFileName, newFileName)
+
+ NSLog("Renamed item %@ to %@, moved from serverUrl: %@ to serverUrl: %@", oldFileName, newFileName, oldServerUrl, newServerUrl)
}
} catch let error {
NSLog("Could not rename filename of item metadata with ocID: %@ to proposed name %@, received error: %@", ocId, newFileName, error.localizedDescription)