From 7e1b78ccb757260783ebb8657be9b6fd52101326 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrien=20Coye=20de=20Brune=CC=81lis?= Date: Tue, 30 Jul 2024 12:29:08 +0200 Subject: [PATCH 1/4] fix: Only display in gallery items that can be displayed without refreshing File entity --- kDrive/UI/Controller/Menu/PhotoList/PhotoListViewModel.swift | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/kDrive/UI/Controller/Menu/PhotoList/PhotoListViewModel.swift b/kDrive/UI/Controller/Menu/PhotoList/PhotoListViewModel.swift index 284a4f217..03b5d687a 100644 --- a/kDrive/UI/Controller/Menu/PhotoList/PhotoListViewModel.swift +++ b/kDrive/UI/Controller/Menu/PhotoList/PhotoListViewModel.swift @@ -73,7 +73,9 @@ class PhotoListViewModel: FileListViewModel { currentDirectory: DriveFileManager.lastPicturesRootFile) let fetchedFiles = driveFileManager.database.fetchResults(ofType: File.self) { lazyCollection in - lazyCollection.filter("extensionType IN %@", [ConvertedType.image.rawValue, ConvertedType.video.rawValue]) + lazyCollection + .filter("extensionType IN %@", [ConvertedType.image.rawValue, ConvertedType.video.rawValue]) + .filter("ANY supportedBy CONTAINS %@", FileSupportedBy.thumbnail.rawValue) .sorted(by: [SortType.newer.value.sortDescriptor]) } From f9091c536c66c2cfbb2eaab350e87d16cc7324d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrien=20Coye=20de=20Brune=CC=81lis?= Date: Tue, 30 Jul 2024 16:09:42 +0200 Subject: [PATCH 2/4] fix: Make sure PhotoListVC tracks only its Files fix: Make sure PhotoListViewModel clears all on force refresh --- .../Menu/PhotoList/PhotoListViewController.swift | 7 +++++++ .../Menu/PhotoList/PhotoListViewModel.swift | 1 + .../Cache/DriveFileManager/DriveFileManager.swift | 15 +++++++++++++++ 3 files changed, 23 insertions(+) diff --git a/kDrive/UI/Controller/Menu/PhotoList/PhotoListViewController.swift b/kDrive/UI/Controller/Menu/PhotoList/PhotoListViewController.swift index 0b2d397a3..272f7b2ce 100644 --- a/kDrive/UI/Controller/Menu/PhotoList/PhotoListViewController.swift +++ b/kDrive/UI/Controller/Menu/PhotoList/PhotoListViewController.swift @@ -156,6 +156,13 @@ final class PhotoListViewController: FileListViewController { } } + @objc override func forceRefresh() { + Task { + driveFileManager.removeLocalFiles(root: DriveFileManager.lastPicturesRootFile) + super.forceRefresh() + } + } + override static func instantiate(viewModel: FileListViewModel) -> Self { let viewController = Storyboard.menu .instantiateViewController(withIdentifier: "PhotoListViewController") as! PhotoListViewController diff --git a/kDrive/UI/Controller/Menu/PhotoList/PhotoListViewModel.swift b/kDrive/UI/Controller/Menu/PhotoList/PhotoListViewModel.swift index 03b5d687a..bc9d64a3c 100644 --- a/kDrive/UI/Controller/Menu/PhotoList/PhotoListViewModel.swift +++ b/kDrive/UI/Controller/Menu/PhotoList/PhotoListViewModel.swift @@ -74,6 +74,7 @@ class PhotoListViewModel: FileListViewModel { let fetchedFiles = driveFileManager.database.fetchResults(ofType: File.self) { lazyCollection in lazyCollection + .filter("ANY parentLink.id == %@", DriveFileManager.lastPicturesRootFile.id) .filter("extensionType IN %@", [ConvertedType.image.rawValue, ConvertedType.video.rawValue]) .filter("ANY supportedBy CONTAINS %@", FileSupportedBy.thumbnail.rawValue) .sorted(by: [SortType.newer.value.sortDescriptor]) diff --git a/kDriveCore/Data/Cache/DriveFileManager/DriveFileManager.swift b/kDriveCore/Data/Cache/DriveFileManager/DriveFileManager.swift index a194ccc89..b76cbafa0 100644 --- a/kDriveCore/Data/Cache/DriveFileManager/DriveFileManager.swift +++ b/kDriveCore/Data/Cache/DriveFileManager/DriveFileManager.swift @@ -503,6 +503,21 @@ public final class DriveFileManager { } } + /// Remove all children of to a root File with a transaction + public func removeLocalFiles(root: File) { + try? database.writeTransaction { writableRealm in + guard let lastPicturesRootInContext = writableRealm + .objects(File.self) + .filter("id == %@", DriveFileManager.lastPicturesRootFile.id) + .first else { + return + } + + lastPicturesRootInContext.children.removeAll() + writableRealm.add(lastPicturesRootInContext, update: .modified) + } + } + public func lastModifiedFiles(cursor: String? = nil) async throws -> (files: [File], nextCursor: String?) { do { let lastModifiedFilesResponse = try await apiFetcher.lastModifiedFiles(drive: drive, cursor: cursor) From 225b19d4812c026e25e7bb4182372c402f8b618c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrien=20Coye=20de=20Brune=CC=81lis?= Date: Wed, 31 Jul 2024 11:48:20 +0200 Subject: [PATCH 3/4] fix(PhotoListViewModel): Property moreComing was hard set to false --- kDrive/UI/Controller/Menu/PhotoList/PhotoListViewModel.swift | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/kDrive/UI/Controller/Menu/PhotoList/PhotoListViewModel.swift b/kDrive/UI/Controller/Menu/PhotoList/PhotoListViewModel.swift index bc9d64a3c..de818e5be 100644 --- a/kDrive/UI/Controller/Menu/PhotoList/PhotoListViewModel.swift +++ b/kDrive/UI/Controller/Menu/PhotoList/PhotoListViewModel.swift @@ -53,7 +53,10 @@ class PhotoListViewModel: FileListViewModel { private static let emptySections = [Section(model: Group(referenceDate: Date(), sortMode: .day), elements: [])] var sections = emptySections - private var moreComing = false + private var moreComing: Bool { + nextCursor != nil + } + private var nextCursor: String? private var sortMode: PhotoSortMode = UserDefaults.shared.photoSortMode { didSet { sortingChanged() } From fa550e3842d1aea32ddd6496b9c21af41aa76530 Mon Sep 17 00:00:00 2001 From: Philippe Weidmann Date: Wed, 31 Jul 2024 13:24:53 +0200 Subject: [PATCH 4/4] fix: Call removeFileInDatabase instead of removing children Signed-off-by: Philippe Weidmann --- kDriveCore/Data/Cache/DriveFileManager/DriveFileManager.swift | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/kDriveCore/Data/Cache/DriveFileManager/DriveFileManager.swift b/kDriveCore/Data/Cache/DriveFileManager/DriveFileManager.swift index b76cbafa0..1f4525e71 100644 --- a/kDriveCore/Data/Cache/DriveFileManager/DriveFileManager.swift +++ b/kDriveCore/Data/Cache/DriveFileManager/DriveFileManager.swift @@ -513,7 +513,9 @@ public final class DriveFileManager { return } - lastPicturesRootInContext.children.removeAll() + for child in lastPicturesRootInContext.children { + removeFileInDatabase(fileUid: child.uid, cascade: false, writableRealm: writableRealm) + } writableRealm.add(lastPicturesRootInContext, update: .modified) } }