From 9472da7e559f079cb797fe56f892dec37397846d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrien=20Coye=20de=20Brune=CC=81lis?= Date: Wed, 18 Dec 2024 11:47:13 +0100 Subject: [PATCH 1/2] fix: Check for invalidation of the File realm object --- kDriveCore/Data/Models/Drive/Drive.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kDriveCore/Data/Models/Drive/Drive.swift b/kDriveCore/Data/Models/Drive/Drive.swift index 1aeefd808..df3a24d25 100644 --- a/kDriveCore/Data/Models/Drive/Drive.swift +++ b/kDriveCore/Data/Models/Drive/Drive.swift @@ -179,7 +179,7 @@ public final class Drive: Object, Codable { } public func categories(for file: File) -> [Category] { - guard !isInvalidated else { + guard !isInvalidated, !file.isInvalidated else { return [] } From ed4daf9a346f61417823b133a0bde94c1ab4e834 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrien=20Coye=20de=20Brune=CC=81lis?= Date: Wed, 18 Dec 2024 12:38:41 +0100 Subject: [PATCH 2/2] refactor: Rollback old optimisation that was not the source of the bug --- kDriveCore/Data/Models/Drive/Drive.swift | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/kDriveCore/Data/Models/Drive/Drive.swift b/kDriveCore/Data/Models/Drive/Drive.swift index df3a24d25..5a67e138b 100644 --- a/kDriveCore/Data/Models/Drive/Drive.swift +++ b/kDriveCore/Data/Models/Drive/Drive.swift @@ -183,9 +183,12 @@ public final class Drive: Object, Codable { return [] } - // If File is not managed by Realm: cannot use the `.sorted(by:)` method :( - // Also the Realm sort can crash if managed by realm - let fileCategoriesIds = file.categories.sorted { $0.addedAt.compare($1.addedAt) == .orderedAscending }.map(\.categoryId) + let fileCategoriesIds: [Int] + if file.isManagedByRealm { + fileCategoriesIds = Array(file.categories.sorted(by: \.addedAt, ascending: true)).map(\.categoryId) + } else { + fileCategoriesIds = file.categories.sorted { $0.addedAt.compare($1.addedAt) == .orderedAscending }.map(\.categoryId) + } let filteredCategories = categories.filter("id IN %@", fileCategoriesIds) // Sort the categories