Skip to content

Commit

Permalink
Versione 6.1.0 (#3140)
Browse files Browse the repository at this point in the history
  • Loading branch information
marinofaggiana authored Oct 29, 2024
1 parent 574ab7e commit 60f9f92
Show file tree
Hide file tree
Showing 146 changed files with 269 additions and 162 deletions.
2 changes: 1 addition & 1 deletion Brand/Database.swift
Original file line number Diff line number Diff line change
Expand Up @@ -26,4 +26,4 @@ import Foundation
// Database Realm
//
let databaseName = "nextcloud.realm"
let databaseSchemaVersion: UInt64 = 365
let databaseSchemaVersion: UInt64 = 366
8 changes: 4 additions & 4 deletions Nextcloud.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -5682,7 +5682,7 @@
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 36;
CURRENT_PROJECT_VERSION = 4;
DEBUG_INFORMATION_FORMAT = dwarf;
DEVELOPMENT_TEAM = NKUJUXUJ3B;
ENABLE_STRICT_OBJC_MSGSEND = YES;
Expand All @@ -5709,7 +5709,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 6.0.0;
MARKETING_VERSION = 6.1.0;
ONLY_ACTIVE_ARCH = YES;
OTHER_CFLAGS = "-v";
OTHER_LDFLAGS = "";
Expand Down Expand Up @@ -5748,7 +5748,7 @@
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 36;
CURRENT_PROJECT_VERSION = 4;
DEVELOPMENT_TEAM = NKUJUXUJ3B;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
Expand All @@ -5772,7 +5772,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 6.0.0;
MARKETING_VERSION = 6.1.0;
ONLY_ACTIVE_ARCH = YES;
OTHER_CFLAGS = "-v";
OTHER_LDFLAGS = "";
Expand Down
4 changes: 2 additions & 2 deletions Share/NCShareExtension+Files.swift
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,9 @@ import NextcloudKit
extension NCShareExtension {
@objc func reloadDatasource(withLoadFolder: Bool) {
let predicate = NSPredicate(format: "account == %@ AND serverUrl == %@ AND directory == true", session.account, serverUrl)
let results = self.database.getResultsMetadatasPredicate(predicate, layoutForView: NCDBLayoutForView())
let metadatas = self.database.getResultsMetadatasPredicate(predicate, layoutForView: NCDBLayoutForView())

self.dataSource = NCCollectionViewDataSource(results: results)
self.dataSource = NCCollectionViewDataSource(metadatas: metadatas)

if withLoadFolder {
loadFolder()
Expand Down
2 changes: 1 addition & 1 deletion iOSClient/Color/NCColorPicker.swift
Original file line number Diff line number Diff line change
Expand Up @@ -212,7 +212,7 @@ class NCColorPicker: UIViewController {
func updateColor(hexColor: String?) {
if let metadata = metadata {
let serverUrl = metadata.serverUrl + "/" + metadata.fileName
NCManageDatabase.shared.setDirectory(serverUrl: serverUrl, colorFolder: hexColor, metadata: metadata)
NCManageDatabase.shared.updateDirectoryColorFolder(hexColor, metadata: metadata, serverUrl: serverUrl)
self.dismiss(animated: true)
NotificationCenter.default.postOnMainThread(name: NCGlobal.shared.notificationCenterReloadDataSource, userInfo: ["serverUrl": metadata.serverUrl, "clearDataSource": true])
}
Expand Down
1 change: 1 addition & 0 deletions iOSClient/Data/NCManageDatabase+Account.swift
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ class tableAccount: Object {
@objc dynamic var autoUploadFull: Bool = false
@objc dynamic var autoUploadImage: Bool = false
@objc dynamic var autoUploadVideo: Bool = false
@objc dynamic var autoUploadFavoritesOnly: Bool = false
@objc dynamic var autoUploadWWAnPhoto: Bool = false
@objc dynamic var autoUploadWWAnVideo: Bool = false
@objc dynamic var backend = ""
Expand Down
53 changes: 28 additions & 25 deletions iOSClient/Data/NCManageDatabase+Directory.swift
Original file line number Diff line number Diff line change
Expand Up @@ -76,16 +76,6 @@ extension NCManageDatabase {
}
}

func addDirectory(directory: tableDirectory, metadata: tableMetadata) {
directory.account = metadata.account
directory.e2eEncrypted = metadata.e2eEncrypted
directory.favorite = metadata.favorite
directory.fileId = metadata.fileId
directory.ocId = metadata.ocId
directory.permissions = metadata.permissions
directory.richWorkspace = metadata.richWorkspace
}

func deleteDirectoryAndSubDirectory(serverUrl: String, account: String) {
#if !EXTENSION
DispatchQueue.main.async {
Expand All @@ -101,11 +91,15 @@ extension NCManageDatabase {
do {
let realm = try Realm()
let results = realm.objects(tableDirectory.self).filter("account == %@ AND serverUrl BEGINSWITH %@", account, serverUrl)
for result in results {
self.deleteMetadata(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@", result.account, result.serverUrl))
self.deleteLocalFileOcId(result.ocId)
}
try realm.write {
for result in results {
let metadatas = realm.objects(tableMetadata.self).filter("account == %@ AND serverUrl == %@", account, result.serverUrl)
for metadata in metadatas {
let localFile = realm.objects(tableLocalFile.self).filter("ocId == %@", metadata.ocId)
realm.delete(localFile)
}
realm.delete(metadatas)
}
realm.delete(results)
}
} catch let error {
Expand Down Expand Up @@ -216,9 +210,17 @@ extension NCManageDatabase {
result.offline = offline
} else {
let directory = tableDirectory()

directory.account = metadata.account
directory.serverUrl = serverUrl
directory.offline = offline
addDirectory(directory: directory, metadata: metadata)
directory.e2eEncrypted = metadata.e2eEncrypted
directory.favorite = metadata.favorite
directory.fileId = metadata.fileId
directory.ocId = metadata.ocId
directory.permissions = metadata.permissions
directory.richWorkspace = metadata.richWorkspace

realm.add(directory, update: .all)
}
}
Expand All @@ -239,8 +241,7 @@ extension NCManageDatabase {
}
}

@discardableResult
func setDirectory(serverUrl: String, richWorkspace: String?, account: String) -> tableDirectory? {
func updateDirectoryRichWorkspace(_ richWorkspace: String?, account: String, serverUrl: String) {
var result: tableDirectory?

do {
Expand All @@ -252,25 +253,27 @@ extension NCManageDatabase {
} catch let error {
NextcloudKit.shared.nkCommonInstance.writeLog("[ERROR] Could not write to database: \(error)")
}

if let result = result {
return tableDirectory.init(value: result)
} else {
return nil
}
}

func setDirectory(serverUrl: String, colorFolder: String?, metadata: tableMetadata) {
func updateDirectoryColorFolder(_ colorFolder: String?, metadata: tableMetadata, serverUrl: String) {
do {
let realm = try Realm()
try realm.write {
if let result = realm.objects(tableDirectory.self).filter("account == %@ AND serverUrl == %@", metadata.account, serverUrl).first {
result.colorFolder = colorFolder
} else {
let directory = tableDirectory()

directory.account = metadata.account
directory.serverUrl = serverUrl
directory.colorFolder = colorFolder
addDirectory(directory: directory, metadata: metadata)
directory.e2eEncrypted = metadata.e2eEncrypted
directory.favorite = metadata.favorite
directory.fileId = metadata.fileId
directory.ocId = metadata.ocId
directory.permissions = metadata.permissions
directory.richWorkspace = metadata.richWorkspace

realm.add(directory)
}
}
Expand Down
62 changes: 50 additions & 12 deletions iOSClient/Data/NCManageDatabase+Metadata.swift
Original file line number Diff line number Diff line change
Expand Up @@ -564,18 +564,33 @@ extension NCManageDatabase {

// MARK: - Set

@discardableResult
func addMetadata(_ metadata: tableMetadata) -> tableMetadata? {
func createMetadata(_ metadata: tableMetadata) -> tableMetadata? {
do {
let realm = try Realm()
var managedMetadata: tableMetadata?
try realm.write {
realm.add(tableMetadata(value: metadata), update: .all)
managedMetadata = realm.create(tableMetadata.self, value: metadata, update: .all)
}
if let managedMetadata {
return tableMetadata(value: managedMetadata)
}
} catch let error {
NextcloudKit.shared.nkCommonInstance.writeLog("[ERROR] Could not write to database: \(error)")
}

return nil
}

func addMetadata(_ metadata: tableMetadata) {
let metadata = tableMetadata(value: metadata)
do {
let realm = try Realm()
try realm.write {
realm.add(metadata, update: .all)
}
} catch let error {
NextcloudKit.shared.nkCommonInstance.writeLog("[ERROR] Could not write to database: \(error)")
return nil
}
return tableMetadata(value: metadata)
}

func addMetadatas(_ metadatas: [tableMetadata]) {
Expand Down Expand Up @@ -1046,22 +1061,45 @@ extension NCManageDatabase {

// MARK: - GetResult(s)Metadata

func getResultsMetadatasPredicate(_ predicate: NSPredicate, layoutForView: NCDBLayoutForView?) -> Results<tableMetadata>? {
func getResultsMetadatasPredicate(_ predicate: NSPredicate, layoutForView: NCDBLayoutForView?) -> [tableMetadata] {
do {
let realm = try Realm()
var results = realm.objects(tableMetadata.self).filter(predicate)
var results = realm.objects(tableMetadata.self).filter(predicate).freeze()
if let layoutForView {
if layoutForView.directoryOnTop {
results = results.sorted(byKeyPath: layoutForView.sort, ascending: layoutForView.ascending).sorted(byKeyPath: "directory", ascending: false).sorted(byKeyPath: "favorite", ascending: false)
if layoutForView.sort == "fileName" {
let sortedResults = results.sorted {
// 1. favorite order
if $0.favorite == $1.favorite {
// 2. directory order TOP
if layoutForView.directoryOnTop {
if $0.directory == $1.directory {
// 3. natural fileName
return $0.fileNameView.localizedStandardCompare($1.fileNameView) == .orderedAscending
} else {
return $0.directory && !$1.directory
}
} else {
return $0.fileNameView.localizedStandardCompare($1.fileNameView) == .orderedAscending
}
} else {
return $0.favorite && !$1.favorite
}
}
return sortedResults
} else {
results = results.sorted(byKeyPath: layoutForView.sort, ascending: layoutForView.ascending).sorted(byKeyPath: "favorite", ascending: false)
if layoutForView.directoryOnTop {
results = results.sorted(byKeyPath: layoutForView.sort, ascending: layoutForView.ascending).sorted(byKeyPath: "directory", ascending: false).sorted(byKeyPath: "favorite", ascending: false)
} else {
results = results.sorted(byKeyPath: layoutForView.sort, ascending: layoutForView.ascending).sorted(byKeyPath: "favorite", ascending: false)
}
}
}
return results
return Array(results)

} catch let error as NSError {
NextcloudKit.shared.nkCommonInstance.writeLog("[ERROR] Could not access database: \(error)")
}
return nil
return []
}

func getResultsMetadatas(predicate: NSPredicate, sortedByKeyPath: String, ascending: Bool, arraySlice: Int) -> [tableMetadata] {
Expand Down
7 changes: 4 additions & 3 deletions iOSClient/Favorites/NCFavorite.swift
Original file line number Diff line number Diff line change
Expand Up @@ -59,11 +59,12 @@ class NCFavorite: NCCollectionViewCommon {
var predicate = self.defaultPredicate

if self.serverUrl.isEmpty {
predicate = NSPredicate(format: "account == %@ AND favorite == true", session.account)
predicate = NSPredicate(format: "account == %@ AND favorite == true AND NOT (status IN %@)", session.account, global.metadataStatusHideInView)
}

let results = self.database.getResultsMetadatasPredicate(predicate, layoutForView: layoutForView)
self.dataSource = NCCollectionViewDataSource(results: results, layoutForView: layoutForView)
let metadatas = self.database.getResultsMetadatasPredicate(predicate, layoutForView: layoutForView)

self.dataSource = NCCollectionViewDataSource(metadatas: metadatas, layoutForView: layoutForView)

super.reloadDataSource()
}
Expand Down
11 changes: 6 additions & 5 deletions iOSClient/Files/NCFiles.swift
Original file line number Diff line number Diff line change
Expand Up @@ -131,13 +131,13 @@ class NCFiles: NCCollectionViewCommon {
self.metadataFolder = database.getMetadataFolder(session: session, serverUrl: self.serverUrl)
self.richWorkspaceText = database.getTableDirectory(predicate: predicateDirectory)?.richWorkspace

let results = self.database.getResultsMetadatasPredicate(predicate, layoutForView: layoutForView)
self.dataSource = NCCollectionViewDataSource(results: results, layoutForView: layoutForView)
let metadatas = self.database.getResultsMetadatasPredicate(predicate, layoutForView: layoutForView)

guard let results else {
self.dataSource = NCCollectionViewDataSource(metadatas: metadatas, layoutForView: layoutForView)

if metadatas.isEmpty {
return super.reloadDataSource()
}
let metadatas = Array(results.freeze())

self.dataSource.caching(metadatas: metadatas, dataSourceMetadatas: dataSourceMetadatas) { updated in
if updated || self.isNumberOfItemsInAllSectionsNull || self.numberOfItemsInAllSections != metadatas.count {
Expand Down Expand Up @@ -201,7 +201,8 @@ class NCFiles: NCCollectionViewCommon {
return completion(nil, false, error)
}
/// Check change eTag or E2EE or DataSource empty
let tableDirectory = self.database.setDirectory(serverUrl: self.serverUrl, richWorkspace: metadata.richWorkspace, account: account)
self.database.updateDirectoryRichWorkspace(metadata.richWorkspace, account: account, serverUrl: self.serverUrl)
let tableDirectory = self.database.getTableDirectory(ocId: metadata.ocId)
guard tableDirectory?.etag != metadata.etag || metadata.e2eEncrypted || self.dataSource.isEmpty() else {
return completion(nil, false, NKError())
}
Expand Down
10 changes: 6 additions & 4 deletions iOSClient/Groupfolders/NCGroupfolders.swift
Original file line number Diff line number Diff line change
Expand Up @@ -56,15 +56,17 @@ class NCGroupfolders: NCCollectionViewCommon {
// MARK: - DataSource

override func reloadDataSource() {
var results: Results<tableMetadata>?
var metadatas: [tableMetadata] = []

if self.serverUrl.isEmpty {
results = database.getResultsMetadatasFromGroupfolders(session: session)
if let results = database.getResultsMetadatasFromGroupfolders(session: session) {
metadatas = Array(results.freeze())
}
} else {
results = self.database.getResultsMetadatasPredicate(self.defaultPredicate, layoutForView: layoutForView)
metadatas = self.database.getResultsMetadatasPredicate(self.defaultPredicate, layoutForView: layoutForView)
}

self.dataSource = NCCollectionViewDataSource(results: results, layoutForView: layoutForView)
self.dataSource = NCCollectionViewDataSource(metadatas: metadatas, layoutForView: layoutForView)

super.reloadDataSource()
}
Expand Down
13 changes: 7 additions & 6 deletions iOSClient/Main/Collection Common/NCCollectionViewCommon.swift
Original file line number Diff line number Diff line change
Expand Up @@ -1073,7 +1073,7 @@ class NCCollectionViewCommon: UIViewController, UIGestureRecognizerDelegate, UIS
} providers: { _, searchProviders in
self.providers = searchProviders
self.searchResults = []
self.dataSource = NCCollectionViewDataSource(results: nil, layoutForView: self.layoutForView, providers: self.providers, searchResults: self.searchResults)
self.dataSource = NCCollectionViewDataSource(metadatas: [], layoutForView: self.layoutForView, providers: self.providers, searchResults: self.searchResults)
} update: { _, _, searchResult, metadatas in
guard let metadatas, !metadatas.isEmpty, self.isSearchingMode, let searchResult else { return }
NCNetworking.shared.unifiedSearchQueue.addOperation(NCCollectionViewUnifiedSearch(collectionViewCommon: self, metadatas: metadatas, searchResult: searchResult))
Expand All @@ -1085,16 +1085,17 @@ class NCCollectionViewCommon: UIViewController, UIGestureRecognizerDelegate, UIS
NCNetworking.shared.searchFiles(literal: literalSearch, account: session.account) { task in
self.dataSourceTask = task
self.reloadDataSource()
} completion: { metadatas, error in
} completion: { metadatasSearch, error in
DispatchQueue.main.async {
self.refreshControl.endRefreshing()
self.reloadDataSource()
}
guard let metadatas, error == .success, self.isSearchingMode else { return }
let ocId = metadatas.map { $0.ocId }
let results = self.database.getResultsMetadatasPredicate(NSPredicate(format: "ocId IN %@", ocId), layoutForView: self.layoutForView)
guard let metadatasSearch, error == .success, self.isSearchingMode else { return }
let ocId = metadatasSearch.map { $0.ocId }

self.dataSource = NCCollectionViewDataSource(results: results, layoutForView: self.layoutForView, providers: self.providers, searchResults: self.searchResults)
let metadatas = self.database.getResultsMetadatasPredicate(NSPredicate(format: "ocId IN %@", ocId), layoutForView: self.layoutForView)

self.dataSource = NCCollectionViewDataSource(metadatas: metadatas, layoutForView: self.layoutForView, providers: self.providers, searchResults: self.searchResults)
}
}
}
Expand Down
Loading

0 comments on commit 60f9f92

Please sign in to comment.