Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions Nextcloud.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -709,6 +709,8 @@
F7A03E2F2D425A14007AA677 /* NCFavoriteNavigationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7A03E2E2D425A14007AA677 /* NCFavoriteNavigationController.swift */; };
F7A03E332D426115007AA677 /* NCMoreNavigationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7A03E322D426115007AA677 /* NCMoreNavigationController.swift */; };
F7A03E352D427312007AA677 /* NCMainNavigationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7A03E342D427308007AA677 /* NCMainNavigationController.swift */; };
F7A08A7A3017439900470AD3 /* NCMedia+ScrollViewDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7A08A793017438800470AD3 /* NCMedia+ScrollViewDelegate.swift */; };
F7A08A7C3017441D00470AD3 /* NCMedia+SelectDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7A08A7B3017440C00470AD3 /* NCMedia+SelectDelegate.swift */; };
F7A0D1352591FBC5008F8A13 /* String+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7A0D1342591FBC5008F8A13 /* String+Extension.swift */; };
F7A0D1362591FBC5008F8A13 /* String+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7A0D1342591FBC5008F8A13 /* String+Extension.swift */; };
F7A1050E29E587AF00FFD92B /* TagListView in Frameworks */ = {isa = PBXBuildFile; productRef = F7A1050D29E587AF00FFD92B /* TagListView */; };
Expand Down Expand Up @@ -1696,6 +1698,8 @@
F7A03E2E2D425A14007AA677 /* NCFavoriteNavigationController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCFavoriteNavigationController.swift; sourceTree = "<group>"; };
F7A03E322D426115007AA677 /* NCMoreNavigationController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCMoreNavigationController.swift; sourceTree = "<group>"; };
F7A03E342D427308007AA677 /* NCMainNavigationController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCMainNavigationController.swift; sourceTree = "<group>"; };
F7A08A793017438800470AD3 /* NCMedia+ScrollViewDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NCMedia+ScrollViewDelegate.swift"; sourceTree = "<group>"; };
F7A08A7B3017440C00470AD3 /* NCMedia+SelectDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NCMedia+SelectDelegate.swift"; sourceTree = "<group>"; };
F7A0D1342591FBC5008F8A13 /* String+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "String+Extension.swift"; sourceTree = "<group>"; };
F7A3DB8F2DDE238C008F7EC8 /* NCDebouncer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCDebouncer.swift; sourceTree = "<group>"; };
F7A48414297028FC00BD1B49 /* Nextcloud Hub.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Nextcloud Hub.png"; sourceTree = SOURCE_ROOT; };
Expand Down Expand Up @@ -3465,6 +3469,8 @@
F72408322B8A27C900F128E2 /* NCMedia+Command.swift */,
F7802B312BD5584F00D74270 /* NCMedia+DragDrop.swift */,
F7BD0A032C4689E9003A4A6D /* NCMedia+MediaLayout.swift */,
F7A08A793017438800470AD3 /* NCMedia+ScrollViewDelegate.swift */,
F7A08A7B3017440C00470AD3 /* NCMedia+SelectDelegate.swift */,
F7E2B64E2DDCC5C30075B4D0 /* NCMedia+TransferDelegate.swift */,
F78B87E62B62527100C65ADC /* NCMediaDataSource.swift */,
F755CB3F2B8CB13C00CE27E9 /* NCMediaLayout.swift */,
Expand Down Expand Up @@ -4931,6 +4937,7 @@
F7D4BF3E2CA2E8D800A5E746 /* TOPasscodeSettingsKeypadView.m in Sources */,
F7132C722D085AD200B42D6A /* NCTermOfServiceModel.swift in Sources */,
F7132C732D085AD200B42D6A /* NCTermOfServiceView.swift in Sources */,
F7A08A7C3017441D00470AD3 /* NCMedia+SelectDelegate.swift in Sources */,
F7D4BF3F2CA2E8D800A5E746 /* TOPasscodeFixedInputView.m in Sources */,
F7D4BF402CA2E8D800A5E746 /* TOPasscodeButtonLabel.m in Sources */,
F70898692EDDB51700EF85BD /* NCSelectOpen+SelectDelegate.swift in Sources */,
Expand Down Expand Up @@ -5075,6 +5082,7 @@
F70CAE3A1F8CF31A008125FD /* NCEndToEndEncryption.m in Sources */,
AA8D316E2D4123B200FE2775 /* NCShareDownloadLimitTableViewControllerDelegate.swift in Sources */,
F36C514F2E89393C0097E5F7 /* UIView+BlurVibrancy.swift in Sources */,
F7A08A7A3017439900470AD3 /* NCMedia+ScrollViewDelegate.swift in Sources */,
AA8D316F2D4123B200FE2775 /* NCShareDownloadLimitTableViewController.swift in Sources */,
F78448BE2FB1C33B00F2909A /* NCVideoVLCViewController.swift in Sources */,
AA8D31702D4123B200FE2775 /* DownloadLimitViewModel.swift in Sources */,
Expand Down
65 changes: 29 additions & 36 deletions iOSClient/Activity/NCActivity.swift
Original file line number Diff line number Diff line change
Expand Up @@ -302,45 +302,38 @@ extension NCActivity: UITableViewDataSource {
cell.configureAvatarMenu()

let fileName = NCSession.shared.getFileName(urlBase: session.urlBase, user: activity.user)
if let image = NCImageCache.shared.getImageCache(key: fileName) {
let fileNameLocalPath = self.utilityFileSystem.createServerUrl(serverUrl: utilityFileSystem.directoryUserData, fileName: fileName)
if let image = UIImage(contentsOfFile: fileNameLocalPath) {
cell.avatar?.image = image
} else {
let fileNameLocalPath = self.utilityFileSystem.createServerUrl(serverUrl: utilityFileSystem.directoryUserData, fileName: fileName)
if let image = UIImage(contentsOfFile: fileNameLocalPath) {
cell.avatar?.image = image
NCImageCache.shared.addImageCache(image: image, key: fileName)
}

let user = activity.user
let idActivity = activity.idActivity
let account = session.account
}
let user = activity.user
let idActivity = activity.idActivity
let account = session.account

Task {
let etagResource = await database.getTableAvatarAsync(fileName: fileName)?.etag
await NCTransferCoordinator.shared.start(identifier: fileName,
priority: .userInitiated) {
let results = await NextcloudKit.shared.downloadAvatarAsync(
user: user,
fileNameLocalPath: fileNameLocalPath,
sizeImage: NCGlobal.shared.avatarSize,
avatarSizeRounded: NCGlobal.shared.avatarSizeRounded,
etagResource: etagResource,
account: account)

if results.error == .success,
let image = results.imageAvatar,
let etag = results.etag,
etag != etagResource {
NCImageCache.shared.addImageCache(image: image, key: fileName)
await self.database.addAvatarAsync(fileName: fileName, etag: etag)
await MainActor.run {
guard
let cell = self.tableView.cellForRow(at: indexPath) as? NCActivityTableViewCell,
cell.idActivity == idActivity else {
return
}
cell.avatar?.image = image
Task {
let etagResource = await database.getTableAvatarAsync(fileName: fileName)?.etag
await NCTransferCoordinator.shared.start(identifier: fileName,
priority: .userInitiated) {
let results = await NextcloudKit.shared.downloadAvatarAsync(
user: user,
fileNameLocalPath: fileNameLocalPath,
sizeImage: NCGlobal.shared.avatarSize,
avatarSizeRounded: NCGlobal.shared.avatarSizeRounded,
etagResource: etagResource,
account: account)

if results.error == .success,
let image = results.imageAvatar,
let etag = results.etag,
etag != etagResource {
await self.database.addAvatarAsync(fileName: fileName, etag: etag)
await MainActor.run {
guard
let cell = self.tableView.cellForRow(at: indexPath) as? NCActivityTableViewCell,
cell.idActivity == idActivity else {
return
}
cell.avatar?.image = image
}
}
}
Expand Down
2 changes: 0 additions & 2 deletions iOSClient/Favorites/NCFavorite.swift
Original file line number Diff line number Diff line change
Expand Up @@ -65,8 +65,6 @@ class NCFavorite: NCCollectionViewCommon {
layoutForView: layoutForView,
account: session.account)
await super.reloadDataSource()

cachingAsync(metadatas: metadatas)
}

override func getServerData(forced: Bool = false) async {
Expand Down
2 changes: 0 additions & 2 deletions iOSClient/Files/NCFiles.swift
Original file line number Diff line number Diff line change
Expand Up @@ -152,8 +152,6 @@ class NCFiles: NCCollectionViewCommon {
layoutForView: layoutForView,
account: session.account)
await super.reloadDataSource()

cachingAsync(metadatas: metadatas)
}

override func getServerData(forced: Bool = false) async {
Expand Down
2 changes: 0 additions & 2 deletions iOSClient/Groupfolders/NCGroupfolders.swift
Original file line number Diff line number Diff line change
Expand Up @@ -83,8 +83,6 @@ class NCGroupfolders: NCCollectionViewCommon {
layoutForView: layoutForView,
account: session.account)
await super.reloadDataSource()

cachingAsync(metadatas: metadatas)
}

override func getServerData(forced: Bool = false) async {
Expand Down
49 changes: 22 additions & 27 deletions iOSClient/Main/Collection Common/Cell/NCCellMain.swift
Original file line number Diff line number Diff line change
Expand Up @@ -179,34 +179,29 @@ extension NCCollectionViewCommon {
if let user = getAvatarFromIconUrl(metadata: metadata) {
let fileName = NCSession.shared.getFileName(urlBase: metadata.urlBase, user: user)
let fileNameLocalPath = self.utilityFileSystem.createServerUrl(serverUrl: utilityFileSystem.directoryUserData, fileName: fileName)
if let image = NCImageCache.shared.getImageCache(key: fileName) {
cell.previewImg?.image = image
} else {
let account = metadata.account
let ocId = metadata.ocId

Task {
let etagResource = await database.getTableAvatarAsync(fileName: fileName)?.etag
let results = await NextcloudKit.shared.downloadAvatarAsync(
user: user,
fileNameLocalPath: fileNameLocalPath,
sizeImage: NCGlobal.shared.avatarSize,
avatarSizeRounded: NCGlobal.shared.avatarSizeRounded,
etagResource: etagResource,
account: account)

if results.error == .success,
let image = results.imageAvatar,
let etag = results.etag,
etag != etagResource {
NCImageCache.shared.addImageCache(image: image, key: fileName)
await self.database.addAvatarAsync(fileName: fileName, etag: etag)
await MainActor.run {
guard cell.metadata?.ocId == ocId else {
return
}
cell.previewImg?.image = image
let account = metadata.account
let ocId = metadata.ocId

Task {
let etagResource = await database.getTableAvatarAsync(fileName: fileName)?.etag
let results = await NextcloudKit.shared.downloadAvatarAsync(
user: user,
fileNameLocalPath: fileNameLocalPath,
sizeImage: NCGlobal.shared.avatarSize,
avatarSizeRounded: NCGlobal.shared.avatarSizeRounded,
etagResource: etagResource,
account: account)

if results.error == .success,
let image = results.imageAvatar,
let etag = results.etag,
etag != etagResource {
await self.database.addAvatarAsync(fileName: fileName, etag: etag)
await MainActor.run {
guard cell.metadata?.ocId == ocId else {
return
}
cell.previewImg?.image = image
}
}
}
Expand Down
67 changes: 30 additions & 37 deletions iOSClient/Main/Collection Common/Cell/NCListCell.swift
Original file line number Diff line number Diff line change
Expand Up @@ -501,45 +501,38 @@ extension NCCollectionViewCommon {
// AVATAR
if !metadata.ownerId.isEmpty, metadata.ownerId != metadata.userId {
let fileName = NCSession.shared.getFileName(urlBase: metadata.urlBase, user: metadata.ownerId)
if let image = NCImageCache.shared.getImageCache(key: fileName) {
let fileNameLocalPath = self.utilityFileSystem.createServerUrl(serverUrl: utilityFileSystem.directoryUserData, fileName: fileName)
if let image = UIImage(contentsOfFile: fileNameLocalPath) {
cell.setSharedAvatarImage(image)
} else {
let fileNameLocalPath = self.utilityFileSystem.createServerUrl(serverUrl: utilityFileSystem.directoryUserData, fileName: fileName)
if let image = UIImage(contentsOfFile: fileNameLocalPath) {
cell.setSharedAvatarImage(image)
NCImageCache.shared.addImageCache(image: image, key: fileName)
}

let user = metadata.ownerId
let ocId = metadata.ocId
let account = metadata.account

Task {
let etagResource = await database.getTableAvatarAsync(fileName: fileName)?.etag
await NCTransferCoordinator.shared.start(identifier: fileName,
priority: .userInitiated) {
let results = await NextcloudKit.shared.downloadAvatarAsync(
user: user,
fileNameLocalPath: fileNameLocalPath,
sizeImage: NCGlobal.shared.avatarSize,
avatarSizeRounded: NCGlobal.shared.avatarSizeRounded,
etagResource: etagResource,
account: account)

if results.error == .success,
let image = results.imageAvatar,
let etag = results.etag,
etag != etagResource {
NCImageCache.shared.addImageCache(image: image, key: fileName)
await self.database.addAvatarAsync(fileName: fileName, etag: etag)
await MainActor.run {
guard
let cell = self.collectionView.cellForItem(at: indexPath) as? NCListCell,
cell.metadata?.ocId == ocId else {
return
}
cell.setSharedAvatarImage(image)
}
let user = metadata.ownerId
let ocId = metadata.ocId
let account = metadata.account

Task {
let etagResource = await database.getTableAvatarAsync(fileName: fileName)?.etag
await NCTransferCoordinator.shared.start(identifier: fileName,
priority: .userInitiated) {
let results = await NextcloudKit.shared.downloadAvatarAsync(
user: user,
fileNameLocalPath: fileNameLocalPath,
sizeImage: NCGlobal.shared.avatarSize,
avatarSizeRounded: NCGlobal.shared.avatarSizeRounded,
etagResource: etagResource,
account: account)

if results.error == .success,
let image = results.imageAvatar,
let etag = results.etag,
etag != etagResource {
await self.database.addAvatarAsync(fileName: fileName, etag: etag)
await MainActor.run {
guard
let cell = self.collectionView.cellForItem(at: indexPath) as? NCListCell,
cell.metadata?.ocId == ocId else {
return
}
cell.setSharedAvatarImage(image)
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -304,45 +304,4 @@ extension NCCollectionViewCommon: UICollectionViewDataSource {
}
return ownerId
}

/// Caches preview images asynchronously for the provided metadata entries.
/// - Parameters:
/// - metadatas: The list of metadata entries to cache.
/// - priority: The task priority to use (default is `.utility`).
func cachingAsync(metadatas: [tableMetadata], priority: TaskPriority = .utility) {
let previewExt = global.previewExt256

Task.detached(priority: priority) { [utility] in
for metadata in metadatas {
guard !Task.isCancelled,
metadata.isImageOrVideo,
NCImageCache.shared.getImageCache(ocId: metadata.ocId,
etag: metadata.etag,
ext: previewExt) == nil else {
continue
}

guard let image = utility.getImage(ocId: metadata.ocId,
etag: metadata.etag,
ext: previewExt,
userId: metadata.userId,
urlBase: metadata.urlBase) else {
continue
}

NCImageCache.shared.addImageCache(ocId: metadata.ocId,
etag: metadata.etag,
image: image,
ext: previewExt)
}
}
}

func removeImageCache(metadatas: [tableMetadata]) {
DispatchQueue.global().async {
for metadata in metadatas {
NCImageCache.shared.removeImageCache(ocId: metadata.ocId, etag: metadata.etag)
}
}
}
}
2 changes: 0 additions & 2 deletions iOSClient/Main/Collection Common/NCCollectionViewCommon.swift
Original file line number Diff line number Diff line change
Expand Up @@ -375,8 +375,6 @@ class NCCollectionViewCommon: UIViewController, NCAccountSettingsModelDelegate,

NotificationCenter.default.removeObserver(self, name: UIApplication.willResignActiveNotification, object: nil)
NotificationCenter.default.removeObserver(self, name: NSNotification.Name(rawValue: global.notificationCenterCloseRichWorkspaceWebView), object: nil)

removeImageCache(metadatas: self.dataSource.getMetadatas())
}

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
Expand Down
Loading
Loading