Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix x code16 i os18 #3068

Merged
merged 22 commits into from
Sep 22, 2024
4 changes: 2 additions & 2 deletions Nextcloud.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -5715,7 +5715,7 @@
repositoryURL = "https://github.com/realm/realm-swift";
requirement = {
kind = exactVersion;
version = 10.53.1;
version = 10.54.0;
};
};
F72CD01027A7E92400E59476 /* XCRemoteSwiftPackageReference "JGProgressHUD" */ = {
Expand Down Expand Up @@ -5819,7 +5819,7 @@
repositoryURL = "https://github.com/krzyzanowskim/OpenSSL";
requirement = {
kind = exactVersion;
version = 3.3.1000;
version = 3.3.2000;
};
};
F77BC3E9293E5268005F2B08 /* XCRemoteSwiftPackageReference "swifter" */ = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -120,16 +120,20 @@
debugServiceExtension = "internal"
allowLocationSimulation = "YES"
launchAutomaticallySubstyle = "2">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<RemoteRunnable
runnableDebuggingMode = "0"
BundleIdentifier = "it.twsweb.Nextcloud"
RemotePath = "/var/containers/Bundle/Application/92F13FE8-7056-4509-8468-5856675AB1CA/Nextcloud.app">
</RemoteRunnable>
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "F77B0DEB1D118A16002130FE"
BuildableName = "Nextcloud.app"
BlueprintName = "Nextcloud"
ReferencedContainer = "container:Nextcloud.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</MacroExpansion>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
Expand Down
28 changes: 23 additions & 5 deletions iOSClient/Data/NCManageDatabase+Metadata.swift
Original file line number Diff line number Diff line change
Expand Up @@ -939,7 +939,7 @@ extension NCManageDatabase {
return []
}

func getResultsMetadatas(predicate: NSPredicate, sortedByKeyPath: String, ascending: Bool, arraySlice: Int = 0) -> [tableMetadata] {
func getResultsMetadatas(predicate: NSPredicate, sortedByKeyPath: String, ascending: Bool, arraySlice: Int) -> [tableMetadata] {
do {
let realm = try Realm()
let results = realm.objects(tableMetadata.self).filter(predicate).sorted(byKeyPath: sortedByKeyPath, ascending: ascending).prefix(arraySlice)
Expand Down Expand Up @@ -1059,26 +1059,44 @@ extension NCManageDatabase {
}

func getResultMetadataFromFileId(_ fileId: String?) -> tableMetadata? {
guard let fileId else { return nil }

do {
let realm = try Realm()
guard let fileId = fileId else { return nil }
guard let result = realm.objects(tableMetadata.self).filter("fileId == %@", fileId).first else { return nil }
return result
return realm.objects(tableMetadata.self).filter("fileId == %@", fileId).first
} catch let error as NSError {
NextcloudKit.shared.nkCommonInstance.writeLog("[ERROR] Could not access database: \(error)")
}
return nil
}

func getResultsMetadatas(predicate: NSPredicate, sortedByKeyPath: String? = nil, ascending: Bool = false) -> Results<tableMetadata>? {
func getResultMetadataFromOcId(_ ocId: String?) -> tableMetadata? {
guard let ocId else { return nil }

do {
let realm = try Realm()
return realm.objects(tableMetadata.self).filter("ocId == %@", ocId).first
} catch let error as NSError {
NextcloudKit.shared.nkCommonInstance.writeLog("[ERROR] Could not access database: \(error)")
}
return nil
}

func getResultsMetadatas(predicate: NSPredicate, sortedByKeyPath: String? = nil, ascending: Bool = false, freeze: Bool = false) -> Results<tableMetadata>? {
do {
let realm = try Realm()
realm.refresh()
if let sortedByKeyPath {
let results = realm.objects(tableMetadata.self).filter(predicate).sorted(byKeyPath: sortedByKeyPath, ascending: ascending)
if freeze {
return results.freeze()
}
return results
} else {
let results = realm.objects(tableMetadata.self).filter(predicate)
if freeze {
return results.freeze()
}
return results
}
} catch let error as NSError {
Expand Down
3 changes: 2 additions & 1 deletion iOSClient/Data/NCManageDatabase.swift
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,8 @@ class NCManageDatabase: NSObject {

if isAppex {
if bundleFileName == "File Provider Extension.appex" {
objectTypesAppex = [tableMetadata.self,
objectTypesAppex = [NCKeyValue.self,
tableMetadata.self,
tableLocalFile.self,
tableDirectory.self,
tableTag.self,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ struct PreviewStore {
var image: UIImage
}

class NCUploadAssetsModel: NSObject, ObservableObject, NCCreateFormUploadConflictDelegate {
class NCUploadAssetsModel: ObservableObject, NCCreateFormUploadConflictDelegate {
@Published var serverUrl: String
@Published var assets: [TLPHAsset]
@Published var previewStore: [PreviewStore] = []
Expand All @@ -65,13 +65,14 @@ class NCUploadAssetsModel: NSObject, ObservableObject, NCCreateFormUploadConflic
self.serverUrl = serverUrl
self.controller = controller
self.showHUD = true
super.init()

DispatchQueue.global(qos: .userInteractive).async {
for asset in self.assets {
guard let image = asset.fullResolutionImage?.resizeImage(size: CGSize(width: 300, height: 300), isAspectRation: true),
let localIdentifier = asset.phAsset?.localIdentifier else { continue }
self.previewStore.append(PreviewStore(id: localIdentifier, asset: asset, assetType: asset.type, fileName: "", image: image))
DispatchQueue.main.async {
self.previewStore.append(PreviewStore(id: localIdentifier, asset: asset, assetType: asset.type, fileName: "", image: image))
}
}
DispatchQueue.main.async {
self.showHUD = false
Expand Down Expand Up @@ -208,12 +209,9 @@ class NCUploadAssetsModel: NSObject, ObservableObject, NCCreateFormUploadConflic

// Check if is in upload
if let results = database.getResultsMetadatas(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@ AND fileName == %@ AND session != ''",
session.account,
serverUrl,
fileName),
sortedByKeyPath: "fileName",
ascending: false),
!results.isEmpty {
session.account,
serverUrl,
fileName), sortedByKeyPath: "fileName", ascending: false), !results.isEmpty {
continue
}

Expand Down
67 changes: 33 additions & 34 deletions iOSClient/Main/Create cloud/Upload Assets/NCUploadAssetsView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import NextcloudKit

struct NCUploadAssetsView: View {
@ObservedObject var model: NCUploadAssetsModel

@State private var showSelect = false
@State private var showUploadConflict = false
@State private var showQuickLook = false
Expand All @@ -23,12 +24,11 @@ struct NCUploadAssetsView: View {
var metadata: tableMetadata?
let gridItems: [GridItem] = [GridItem()]
let fileNamePath = NSTemporaryDirectory() + "Photo.jpg"
let utilityFileSystem = NCUtilityFileSystem()

@Environment(\.presentationMode) var presentationMode

var body: some View {
let utilityFileSystem = NCUtilityFileSystem()

NavigationView {
ZStack(alignment: .top) {
List {
Expand Down Expand Up @@ -160,40 +160,42 @@ struct NCUploadAssetsView: View {
}
}

Button(NSLocalizedString("_save_", comment: "")) {
if model.useAutoUploadFolder, model.useAutoUploadSubFolder {
model.showHUD = true
}
model.uploadInProgress.toggle()
model.save { metadatasNOConflict, metadatasUploadInConflict in
if metadatasUploadInConflict.isEmpty {
model.dismissCreateFormUploadConflict(metadatas: metadatasNOConflict)
} else {
model.metadatasNOConflict = metadatasNOConflict
model.metadatasUploadInConflict = metadatasUploadInConflict
showUploadConflict = true
Section {
Button(NSLocalizedString("_save_", comment: "")) {
if model.useAutoUploadFolder, model.useAutoUploadSubFolder {
model.showHUD = true
}
model.uploadInProgress.toggle()
model.save { metadatasNOConflict, metadatasUploadInConflict in
if metadatasUploadInConflict.isEmpty {
model.dismissCreateFormUploadConflict(metadatas: metadatasNOConflict)
} else {
model.metadatasNOConflict = metadatasNOConflict
model.metadatasUploadInConflict = metadatasUploadInConflict
showUploadConflict = true
}
}
}
.frame(maxWidth: .infinity)
.buttonStyle(ButtonRounded(disabled: model.uploadInProgress, account: model.session.account))
.listRowBackground(Color(UIColor.systemGroupedBackground))
.disabled(model.uploadInProgress)
.hiddenConditionally(isHidden: model.hiddenSave)
}
.frame(maxWidth: .infinity)
.buttonStyle(ButtonRounded(disabled: model.uploadInProgress, account: model.session.account))
.listRowBackground(Color(UIColor.systemGroupedBackground))
.disabled(model.uploadInProgress)
.hiddenConditionally(isHidden: model.hiddenSave)
}
.navigationTitle(NSLocalizedString("_upload_photos_videos_", comment: ""))
.navigationBarTitleDisplayMode(.inline)
.navigationBarItems(trailing: Button(action: {
presentationMode.wrappedValue.dismiss()
}) {
Image(systemName: "xmark")
.font(Font.system(.body).weight(.light))
.foregroundStyle(Color(NCBrandColor.shared.iconImageColor))
})
NCHUDView(showHUD: $model.showHUD, textLabel: NSLocalizedString("_wait_", comment: ""), image: "doc.badge.arrow.up", color: NCBrandColor.shared.getElement(account: model.session.account))
.offset(y: model.showHUD ? 5 : -200)
.animation(.easeOut, value: model.showHUD)
}
.navigationTitle(NSLocalizedString("_upload_photos_videos_", comment: ""))
.navigationBarTitleDisplayMode(.inline)
.navigationBarItems(trailing: Button(action: {
model.dismissView = true
}) {
Image(systemName: "xmark")
.font(Font.system(.body).weight(.light))
.foregroundStyle(Color(NCBrandColor.shared.iconImageColor))
})
NCHUDView(showHUD: $model.showHUD, textLabel: NSLocalizedString("_wait_", comment: ""), image: "doc.badge.arrow.up", color: NCBrandColor.shared.getElement(account: model.session.account))
.offset(y: model.showHUD ? 5 : -200)
.animation(.easeOut, value: model.showHUD)
}
.navigationViewStyle(StackNavigationViewStyle())
.sheet(isPresented: $showSelect) {
Expand All @@ -211,9 +213,6 @@ struct NCUploadAssetsView: View {
presentationMode.wrappedValue.dismiss()
}
}
.onTapGesture {
SceneManager.shared.getWindow(controller: model.controller)?.endEditing(true)
}
.onDisappear {
model.dismissView = true
}
Expand Down
9 changes: 5 additions & 4 deletions iOSClient/Main/NCPickerViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -45,10 +45,11 @@ class NCPhotosPickerViewController: NSObject {

self.openPhotosPickerViewController { assets in
if !assets.isEmpty {
let serverUrl = controller.currentServerUrl()
let view = NCUploadAssetsView(model: NCUploadAssetsModel(assets: assets, serverUrl: serverUrl, controller: controller))
DispatchQueue.main.asyncAfter(deadline: .now() + 0.4) {
controller.present(UIHostingController(rootView: view), animated: true, completion: nil)
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
let model = NCUploadAssetsModel(assets: assets, serverUrl: controller.currentServerUrl(), controller: controller)
let view = NCUploadAssetsView(model: model)
let viewController = UIHostingController(rootView: view)
controller.present(viewController, animated: true, completion: nil)
}
}
}
Expand Down
14 changes: 11 additions & 3 deletions iOSClient/Media/NCMedia+CollectionViewDataSource.swift
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,15 @@ extension NCMedia: UICollectionViewDataSource {
}
}

func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {
guard let metadata = dataSource.getMetadata(indexPath: indexPath) else { return }

if !utilityFileSystem.fileProviderStorageImageExists(metadata.ocId, etag: metadata.etag),
NCNetworking.shared.downloadThumbnailQueue.operations.filter({ ($0 as? NCMediaDownloadThumbnail)?.metadata.ocId == metadata.ocId }).isEmpty {
NCNetworking.shared.downloadThumbnailQueue.addOperation(NCMediaDownloadThumbnail(metadata: metadata, media: self))
}
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
guard let cell = (collectionView.dequeueReusableCell(withReuseIdentifier: "gridCell", for: indexPath) as? NCGridMediaCell) else {
fatalError("Unable to dequeue NCGridMediaCell with identifier gridCell")
Expand All @@ -94,7 +103,6 @@ extension NCMedia: UICollectionViewDataSource {

let ext = NCGlobal.shared.getSizeExtension(column: self.numberOfColumns)
let imageCache = imageCache.getImageCache(ocId: metadata.ocId, etag: metadata.etag, ext: ext)
let cost = indexPath.row

cell.backgroundColor = .secondarySystemBackground
cell.imageItem.image = imageCache
Expand All @@ -117,10 +125,10 @@ extension NCMedia: UICollectionViewDataSource {

if cell.imageItem.image == nil {
if isPinchGestureActive || ext == NCGlobal.shared.previewExt512 || ext == NCGlobal.shared.previewExt1024 {
cell.imageItem.image = getImage(metadata: metadata, cost: cost)
cell.imageItem.image = utility.getImage(ocId: metadata.ocId, etag: metadata.etag, ext: ext)
} else {
DispatchQueue.global(qos: .userInteractive).async {
let image = self.getImage(metadata: metadata, cost: cost)
let image = self.utility.getImage(ocId: metadata.ocId, etag: metadata.etag, ext: ext)
DispatchQueue.main.async {
if let currentCell = collectionView.cellForItem(at: indexPath) as? NCGridMediaCell,
currentCell.ocId == metadata.ocId, let image {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ import UIKit

extension NCMedia: UICollectionViewDataSourcePrefetching {
func collectionView(_ collectionView: UICollectionView, prefetchItemsAt indexPaths: [IndexPath]) {
guard !imageCache.isLoadingCache else { return }

let cost = indexPaths.first?.row ?? 0
let metadatas = self.dataSource.getMetadatas(indexPaths: indexPaths)
let ext = NCGlobal.shared.getSizeExtension(column: self.numberOfColumns)
Expand Down
3 changes: 2 additions & 1 deletion iOSClient/Media/NCMedia+CollectionViewDelegate.swift
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,8 @@ extension NCMedia: UICollectionViewDelegate {
// ACTIVE SERVERURL
serverUrl = metadata.serverUrl
if let results = dataSource.getTableMetadatas() {
NCViewer().view(viewController: self, metadata: metadata, metadatas: Array(results), indexMetadatas: indexPath.row, image: getImage(metadata: metadataDatasource, cost: indexPath.row, forceExt: NCGlobal.shared.previewExt1024))
let image = utility.getImage(ocId: metadata.ocId, etag: metadata.etag, ext: NCGlobal.shared.previewExt1024)
NCViewer().view(viewController: self, metadata: metadata, metadatas: Array(results), indexMetadatas: indexPath.row, image: image)
}
}
}
Expand Down
29 changes: 1 addition & 28 deletions iOSClient/Media/NCMedia.swift
Original file line number Diff line number Diff line change
Expand Up @@ -71,11 +71,7 @@ class NCMedia: UIViewController {

var lastScale: CGFloat = 1.0
var currentScale: CGFloat = 1.0
#if DEBUG
let maxColumns: Int = 10
#else
let maxColumns: Int = 7
#endif
var transitionColumns = false
var numberOfColumns: Int = 0
var lastNumberOfColumns: Int = 0
Expand Down Expand Up @@ -149,10 +145,8 @@ class NCMedia: UIViewController {
self.loadDataSource()
}

#if DEBUG
pinchGesture = UIPinchGestureRecognizer(target: self, action: #selector(handlePinchGesture(_:)))
collectionView.addGestureRecognizer(pinchGesture)
#endif

NotificationCenter.default.addObserver(forName: NSNotification.Name(rawValue: NCGlobal.shared.notificationCenterChangeUser), object: nil, queue: nil) { _ in
self.layoutType = self.database.getLayoutForView(account: self.session.account, key: NCGlobal.shared.layoutViewMedia, serverUrl: "")?.layout ?? NCGlobal.shared.mediaLayoutRatio
Expand Down Expand Up @@ -250,10 +244,9 @@ class NCMedia: UIViewController {

Task {
let tasks = await NCNetworking.shared.getAllDataTask()
for task in tasks.filter({ $0.description == NCGlobal.shared.taskDescriptionRetrievesProperties }) {
for task in tasks.filter({ $0.taskDescription == NCGlobal.shared.taskDescriptionRetrievesProperties }) {
task.cancel()
}

}
}

Expand Down Expand Up @@ -324,26 +317,6 @@ class NCMedia: UIViewController {
}
}

// MARK: - Image

func getImage(metadata: NCMediaDataSource.Metadata, cost: Int, forceExt: String? = nil) -> UIImage? {
var returnImage: UIImage?
var ext = NCGlobal.shared.getSizeExtension(column: self.numberOfColumns)
if let forceExt { ext = forceExt }

if let image = imageCache.getImageCache(ocId: metadata.ocId, etag: metadata.etag, ext: ext) {
returnImage = image
} else if let image = utility.getImage(ocId: metadata.ocId, etag: metadata.etag, ext: ext) {
returnImage = image
} else if NCNetworking.shared.downloadThumbnailQueue.operations.filter({ ($0 as? NCMediaDownloadThumbnail)?.metadata.ocId == metadata.ocId }).isEmpty {
DispatchQueue.main.async {
NCNetworking.shared.downloadThumbnailQueue.addOperation(NCMediaDownloadThumbnail(metadata: metadata, collectionView: self.collectionView, media: self, cost: cost))
}
}

return returnImage
}

func buildMediaPhotoVideo(columnCount: Int) {
var pointSize: CGFloat = 0

Expand Down
Loading
Loading