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 284a4f217..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() } @@ -73,7 +76,10 @@ 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("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 5b7386284..d256bcbfe 100644 --- a/kDriveCore/Data/Cache/DriveFileManager/DriveFileManager.swift +++ b/kDriveCore/Data/Cache/DriveFileManager/DriveFileManager.swift @@ -501,6 +501,23 @@ 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 + } + + for child in lastPicturesRootInContext.children { + removeFileInDatabase(fileUid: child.uid, cascade: false, writableRealm: writableRealm) + } + 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)