123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- //
- // NCShareExtension.swift
- // Share
- //
- // Created by Marino Faggiana on 04.01.2022.
- // Copyright © 2022 Henrik Storch. All rights reserved.
- //
- // Author Henrik Storch <henrik.storch@nextcloud.com>
- //
- // This program is free software: you can redistribute it and/or modify
- // it under the terms of the GNU General Public License as published by
- // the Free Software Foundation, either version 3 of the License, or
- // (at your option) any later version.
- //
- // This program is distributed in the hope that it will be useful,
- // but WITHOUT ANY WARRANTY; without even the implied warranty of
- // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- // GNU General Public License for more details.
- //
- // You should have received a copy of the GNU General Public License
- // along with this program. If not, see <http://www.gnu.org/licenses/>.
- //
- import NextcloudKit
- import UIKit
- extension NCShareExtension: NCEmptyDataSetDelegate, NCAccountRequestDelegate {
- // MARK: - Empty
- func emptyDataSetView(_ view: NCEmptyView) {
- if networkInProgress {
- view.emptyImage.image = UIImage(named: "networkInProgress")?.image(color: .gray, size: UIScreen.main.bounds.width)
- view.emptyTitle.text = NSLocalizedString("_request_in_progress_", comment: "")
- view.emptyDescription.text = ""
- } else {
- view.emptyImage.image = UIImage(named: "folder")?.image(color: NCBrandColor.shared.brandElement, size: UIScreen.main.bounds.width)
- view.emptyTitle.text = NSLocalizedString("_files_no_folders_", comment: "")
- view.emptyDescription.text = ""
- }
- }
- // MARK: - Account
- func showAccountPicker() {
- let accounts = NCManageDatabase.shared.getAllAccountOrderAlias()
- guard accounts.count > 1,
- let vcAccountRequest = UIStoryboard(name: "NCAccountRequest", bundle: nil).instantiateInitialViewController() as? NCAccountRequest else { return }
- // Only here change the active account
- for account in accounts {
- account.active = account.account == self.activeAccount.account
- }
- vcAccountRequest.activeAccount = self.activeAccount
- vcAccountRequest.accounts = accounts.sorted { sorg, dest -> Bool in
- return sorg.active && !dest.active
- }
- vcAccountRequest.enableTimerProgress = false
- vcAccountRequest.enableAddAccount = false
- vcAccountRequest.delegate = self
- vcAccountRequest.dismissDidEnterBackground = true
- let screenHeighMax = UIScreen.main.bounds.height - (UIScreen.main.bounds.height / 5)
- let height = min(CGFloat(accounts.count * Int(vcAccountRequest.heightCell) + 45), screenHeighMax)
- let popup = NCPopupViewController(contentController: vcAccountRequest, popupWidth: 300, popupHeight: height + 20)
- self.present(popup, animated: true)
- }
- func accountRequestChangeAccount(account: String) {
- guard let activeAccount = NCManageDatabase.shared.getAccount(predicate: NSPredicate(format: "account == %@", account)) else {
- cancel(with: NCShareExtensionError.noAccount)
- return
- }
- self.activeAccount = activeAccount
- // CAPABILITIES
- NCManageDatabase.shared.setCapabilities(account: account)
- // COLORS
- NCBrandColor.shared.settingThemingColor(account: activeAccount.account)
- NCBrandColor.shared.createUserColors()
- // NETWORKING
- NextcloudKit.shared.setup(
- account: activeAccount.account,
- user: activeAccount.user,
- userId: activeAccount.userId,
- password: CCUtility.getPassword(activeAccount.account),
- urlBase: activeAccount.urlBase,
- userAgent: userAgent,
- nextcloudVersion: 0,
- delegate: NCNetworking.shared)
- // get auto upload folder
- autoUploadFileName = NCManageDatabase.shared.getAccountAutoUploadFileName()
- autoUploadDirectory = NCManageDatabase.shared.getAccountAutoUploadDirectory(urlBase: activeAccount.urlBase, userId: activeAccount.userId, account: activeAccount.account)
- serverUrl = NCUtilityFileSystem.shared.getHomeServer(urlBase: activeAccount.urlBase, userId: activeAccount.userId)
- layoutForView = NCManageDatabase.shared.getLayoutForView(account: activeAccount.account, key: keyLayout, serverUrl: serverUrl)
- reloadDatasource(withLoadFolder: true)
- setNavigationBar(navigationTitle: NCBrandOptions.shared.brand)
- }
- }
- extension NCShareExtension: NCShareCellDelegate, NCRenameFileDelegate, NCListCellDelegate {
- func removeFile(named fileName: String) {
- guard let index = self.filesName.firstIndex(of: fileName) else {
- return showAlert(title: "_file_not_found_", description: fileName)
- }
- self.filesName.remove(at: index)
- if self.filesName.isEmpty {
- cancel(with: NCShareExtensionError.noFiles)
- } else {
- self.setCommandView()
- }
- }
- func renameFile(named fileName: String) {
- guard let vcRename = UIStoryboard(name: "NCRenameFile", bundle: nil).instantiateInitialViewController() as? NCRenameFile else { return }
- let resultInternalType = NextcloudKit.shared.nkCommonInstance.getInternalType(fileName: fileName, mimeType: "", directory: false)
- vcRename.delegate = self
- vcRename.fileName = fileName
- vcRename.indexPath = IndexPath()
- if let previewImage = UIImage.downsample(imageAt: URL(fileURLWithPath: NSTemporaryDirectory() + fileName), to: CGSize(width: 140, height: 140)) {
- vcRename.imagePreview = previewImage
- } else {
- vcRename.imagePreview = UIImage(named: resultInternalType.iconName) ?? NCBrandColor.cacheImages.file
- }
- let popup = NCPopupViewController(contentController: vcRename, popupWidth: vcRename.width, popupHeight: vcRename.height)
- self.present(popup, animated: true)
- }
- func rename(fileName: String, fileNameNew: String) {
- guard fileName != fileNameNew else { return }
- guard let fileIx = self.filesName.firstIndex(of: fileName),
- !self.filesName.contains(fileNameNew),
- NCUtilityFileSystem.shared.moveFile(atPath: (NSTemporaryDirectory() + fileName), toPath: (NSTemporaryDirectory() + fileNameNew)) else {
- return showAlert(title: "_single_file_conflict_title_", description: "'\(fileName)' -> '\(fileNameNew)'")
- }
- filesName[fileIx] = fileNameNew
- tableView.reloadData()
- }
- }
- extension NCShareExtension: NCCreateFormUploadConflictDelegate {
- func dismissCreateFormUploadConflict(metadatas: [tableMetadata]?) {
- guard let metadatas = metadatas else {
- uploadStarted = false
- uploadMetadata.removeAll()
- return
- }
- self.uploadMetadata.append(contentsOf: metadatas)
- self.upload()
- }
- }
|