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: 4 additions & 4 deletions iOSClient/Data/NCManageDatabase+Avatar.swift
Original file line number Diff line number Diff line change
Expand Up @@ -163,16 +163,16 @@ extension NCManageDatabase {
func getImageAvatarLoaded(fileName: String,
dispatchOnMainQueue: Bool = true,
completion: @escaping (_ image: UIImage?, _ tblAvatar: tableAvatar?) -> Void) {
let directoryUserData = utilityFileSystem.directoryUserData
let fileNameLocalPath = utilityFileSystem.createServerUrl(serverUrl: directoryUserData, fileName: fileName)
let image = UIImage(contentsOfFile: fileNameLocalPath)

performRealmRead({ realm in
return realm.objects(tableAvatar.self)
.filter("fileName == %@", fileName)
.first
.map { tableAvatar(value: $0) }
}, sync: false) { result in
let directoryUserData = self.utilityFileSystem.directoryUserData
let fileNameLocalPath = self.utilityFileSystem.createServerUrl(serverUrl: directoryUserData, fileName: fileName)
let image = UIImage(contentsOfFile: fileNameLocalPath)

if result == nil {
self.utilityFileSystem.removeFile(atPath: fileNameLocalPath)
}
Expand Down
16 changes: 9 additions & 7 deletions iOSClient/Data/NCManageDatabase+Metadata+Create.swift
Original file line number Diff line number Diff line change
Expand Up @@ -175,13 +175,15 @@ extension NCManageDatabase {
metadata.ocIdTransfer = file.ocId
metadata.ownerId = file.ownerId
metadata.ownerDisplayName = file.ownerDisplayName
metadata.lock = file.lock
metadata.lockOwner = file.lockOwner
metadata.lockOwnerEditor = file.lockOwnerEditor
metadata.lockOwnerType = file.lockOwnerType
metadata.lockOwnerDisplayName = file.lockOwnerDisplayName
metadata.lockTime = file.lockTime
metadata.lockTimeOut = file.lockTimeOut
if let lock = file.lock {
metadata.lock = true
metadata.lockOwner = lock.owner
metadata.lockOwnerEditor = lock.ownerEditor
metadata.lockOwnerType = lock.ownerType.rawValue
metadata.lockOwnerDisplayName = lock.ownerDisplayName
metadata.lockTime = lock.time
metadata.lockTimeOut = lock.time
}
metadata.path = file.path
metadata.permissions = file.permissions
metadata.placePhotos = file.placePhotos
Expand Down
10 changes: 5 additions & 5 deletions iOSClient/Data/NCManageDatabase.swift
Original file line number Diff line number Diff line change
Expand Up @@ -182,7 +182,7 @@ final class NCManageDatabase: @unchecked Sendable {

let configuration = Realm.Configuration(fileURL: databaseFileUrl, schemaVersion: databaseSchemaVersion, objectTypes: objectTypes)

realmQueue.async {
realmQueue.async(qos: .userInitiated, flags: .enforceQoS) {
do {
Realm.Configuration.defaultConfiguration = configuration
let realm = try Realm()
Expand Down Expand Up @@ -285,7 +285,7 @@ final class NCManageDatabase: @unchecked Sendable {
}
}
} else {
realmQueue.async {
realmQueue.async(qos: .userInitiated, flags: .enforceQoS) {
autoreleasepool {
do {
let realm = try Realm()
Expand Down Expand Up @@ -331,7 +331,7 @@ final class NCManageDatabase: @unchecked Sendable {
realmQueue.sync(execute: executionBlock)
}
} else {
realmQueue.async(execute: executionBlock)
realmQueue.async(qos: .userInitiated, flags: .enforceQoS, execute: executionBlock)
}
}

Expand All @@ -346,7 +346,7 @@ final class NCManageDatabase: @unchecked Sendable {
#endif

return await withCheckedContinuation { continuation in
realmQueue.async {
realmQueue.async(qos: .userInitiated, flags: .enforceQoS) {
autoreleasepool {
do {
let realm = try Realm()
Expand All @@ -370,7 +370,7 @@ final class NCManageDatabase: @unchecked Sendable {
#endif

await withCheckedContinuation { continuation in
realmQueue.async {
realmQueue.async(qos: .userInitiated, flags: .enforceQoS) {
autoreleasepool {
do {
let realm = try Realm()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -299,16 +299,21 @@ extension NCCollectionViewCommon: UICollectionViewDataSource {
if !metadata.iconUrl.isEmpty {
if let ownerId = getAvatarFromIconUrl(metadata: metadata) {
let fileName = NCSession.shared.getFileName(urlBase: metadata.urlBase, user: ownerId)
self.database.getImageAvatarLoaded(fileName: fileName) { image, tblAvatar in
if let image {
cell.filePreviewImageView?.image = image
} else {
cell.filePreviewImageView?.image = self.utility.loadUserImage(for: ownerId, displayName: nil, urlBase: metadata.urlBase)
}

if !(tblAvatar?.loaded ?? false),
self.networking.downloadAvatarQueue.operations.filter({ ($0 as? NCOperationDownloadAvatar)?.fileName == fileName }).isEmpty {
self.networking.downloadAvatarQueue.addOperation(NCOperationDownloadAvatar(user: ownerId, fileName: fileName, account: metadata.account, view: collectionView, isPreviewImageView: true))
if let image = NCImageCache.shared.getImageCache(key: fileName) {
cell.filePreviewImageView?.image = image
} else {
self.database.getImageAvatarLoaded(fileName: fileName) { image, tblAvatar in
if let image {
cell.filePreviewImageView?.image = image
NCImageCache.shared.addImageCache(image: image, key: fileName)
} else {
cell.filePreviewImageView?.image = self.utility.loadUserImage(for: ownerId, displayName: nil, urlBase: metadata.urlBase)
}

if !(tblAvatar?.loaded ?? false),
self.networking.downloadAvatarQueue.operations.filter({ ($0 as? NCOperationDownloadAvatar)?.fileName == fileName }).isEmpty {
self.networking.downloadAvatarQueue.addOperation(NCOperationDownloadAvatar(user: ownerId, fileName: fileName, account: metadata.account, view: collectionView, isPreviewImageView: true))
}
}
}
}
Expand Down Expand Up @@ -383,19 +388,25 @@ extension NCCollectionViewCommon: UICollectionViewDataSource {

// AVATAR
if !metadata.ownerId.isEmpty, metadata.ownerId != metadata.userId {
cell.fileAvatarImageView?.contentMode = .scaleAspectFill

let fileName = NCSession.shared.getFileName(urlBase: metadata.urlBase, user: metadata.ownerId)
self.database.getImageAvatarLoaded(fileName: fileName) { image, tblAvatar in
if let image {
cell.fileAvatarImageView?.image = image
} else {
cell.fileAvatarImageView?.image = self.utility.loadUserImage(for: metadata.ownerId, displayName: metadata.ownerDisplayName, urlBase: metadata.urlBase)
}
if let image = NCImageCache.shared.getImageCache(key: fileName) {
cell.fileAvatarImageView?.contentMode = .scaleAspectFill
cell.fileAvatarImageView?.image = image
} else {
self.database.getImageAvatarLoaded(fileName: fileName) { image, tblAvatar in
if let image {
cell.fileAvatarImageView?.contentMode = .scaleAspectFill
cell.fileAvatarImageView?.image = image
NCImageCache.shared.addImageCache(image: image, key: fileName)
} else {
cell.fileAvatarImageView?.contentMode = .scaleAspectFill
cell.fileAvatarImageView?.image = self.utility.loadUserImage(for: metadata.ownerId, displayName: metadata.ownerDisplayName, urlBase: metadata.urlBase)
}

if !(tblAvatar?.loaded ?? false),
self.networking.downloadAvatarQueue.operations.filter({ ($0 as? NCOperationDownloadAvatar)?.fileName == fileName }).isEmpty {
self.networking.downloadAvatarQueue.addOperation(NCOperationDownloadAvatar(user: metadata.ownerId, fileName: fileName, account: metadata.account, view: collectionView))
if !(tblAvatar?.loaded ?? false),
self.networking.downloadAvatarQueue.operations.filter({ ($0 as? NCOperationDownloadAvatar)?.fileName == fileName }).isEmpty {
self.networking.downloadAvatarQueue.addOperation(NCOperationDownloadAvatar(user: metadata.ownerId, fileName: fileName, account: metadata.account, view: collectionView))
}
}
}
}
Expand Down
14 changes: 10 additions & 4 deletions iOSClient/NCImageCache.swift
Original file line number Diff line number Diff line change
Expand Up @@ -106,10 +106,18 @@ final class NCImageCache: @unchecked Sendable {
cache.setValue(image, forKey: ocId + etag + ext, cost: cost)
}

func addImageCache(image: UIImage, key: String) {
cache.setValue(image, forKey: key)
}

func getImageCache(ocId: String, etag: String, ext: String) -> UIImage? {
return cache.value(forKey: ocId + etag + ext)
}

func getImageCache(key: String) -> UIImage? {
return cache.value(forKey: key)
}

func removeImageCache(ocIdPlusEtag: String) {
for i in 0..<allowExtensions.count {
cache.removeValue(forKey: ocIdPlusEtag + allowExtensions[i])
Expand All @@ -128,10 +136,8 @@ final class NCImageCache: @unchecked Sendable {
showOnlyVideos: Bool) -> NSPredicate {
var predicate = NSPredicate()
let startServerUrl = self.utilityFileSystem.getHomeServer(session: session) + mediaPath

var showBothPredicateMediaString = "account == %@ AND serverUrl BEGINSWITH %@ AND mediaSearch == true AND hasPreview == true AND (classFile == '\(NKTypeClassFile.image.rawValue)' OR classFile == '\(NKTypeClassFile.video.rawValue)') AND NOT (status IN %@)"

var showOnlyPredicateMediaString = "account == %@ AND serverUrl BEGINSWITH %@ AND mediaSearch == true AND hasPreview == true AND classFile == %@ AND NOT (status IN %@)"
let showBothPredicateMediaString = "account == %@ AND serverUrl BEGINSWITH %@ AND mediaSearch == true AND hasPreview == true AND (classFile == '\(NKTypeClassFile.image.rawValue)' OR classFile == '\(NKTypeClassFile.video.rawValue)') AND NOT (status IN %@)"
let showOnlyPredicateMediaString = "account == %@ AND serverUrl BEGINSWITH %@ AND mediaSearch == true AND hasPreview == true AND classFile == %@ AND NOT (status IN %@)"

if showOnlyImages {
predicate = NSPredicate(format: showOnlyPredicateMediaString, session.account, startServerUrl, NKTypeClassFile.image.rawValue, global.metadataStatusHideInView)
Expand Down
3 changes: 3 additions & 0 deletions iOSClient/Networking/NCNetworking+WebDAV.swift
Original file line number Diff line number Diff line change
Expand Up @@ -844,6 +844,9 @@ class NCOperationDownloadAvatar: ConcurrentOperation, @unchecked Sendable {

if error == .success, let image {
NCManageDatabase.shared.addAvatar(fileName: self.fileName, etag: etag ?? "")
#if !EXTENSION
NCImageCache.shared.addImageCache(image: image, key: self.fileName)
#endif

DispatchQueue.main.async {
let visibleCells: [UIView] = (self.view as? UICollectionView)?.visibleCells ?? (self.view as? UITableView)?.visibleCells ?? []
Expand Down
Loading