123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306 |
- //
- // DocumentPickerViewController.swift
- // Picker
- //
- // Created by Marino Faggiana on 27/12/16.
- // Copyright © 2016 TWS. All rights reserved.
- //
- // Author Marino Faggiana <m.faggiana@twsweb.it>
- //
- // 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 UIKit
- class DocumentPickerViewController: UIDocumentPickerExtensionViewController, CCNetworkingDelegate, OCNetworkingDelegate {
-
- // MARK: - Properties
-
- var provider : providerSession?
-
- var metadata : CCMetadata?
- var recordsTableMetadata : [TableMetadata]?
- var titleFolder : String?
-
- var activeAccount : String?
- var activeUrl : String?
- var activeUser : String?
- var activePassword : String?
- var activeUID : String?
- var activeAccessToken : String?
- var directoryUser : String?
- var typeCloud : String?
- var serverUrl : String?
-
- var localServerUrl : String?
-
- lazy var networkingOperationQueue : OperationQueue = {
-
- var queue = OperationQueue()
- queue.name = netQueueName
- queue.maxConcurrentOperationCount = 1
-
- return queue
- }()
-
- var hud : CCHud!
-
- // MARK: - IBOutlets
-
- @IBOutlet weak var tableView: UITableView!
-
- // MARK: - View Life Cycle
-
- override func viewDidLoad() {
-
- provider = providerSession.sharedInstance
-
- if let record = CCCoreData.getActiveAccount() {
-
- activeAccount = record.account!
- activePassword = record.password!
- activeUrl = record.url!
- activeUser = record.user!
- typeCloud = record.typeCloud!
- directoryUser = CCUtility.getDirectoryActiveUser(activeUser, activeUrl: activeUrl)
-
- if (localServerUrl == nil) {
-
- localServerUrl = CCUtility.getHomeServerUrlActiveUrl(activeUrl, typeCloud: typeCloud)
-
- } else {
-
- self.navigationItem.title = titleFolder
- }
-
- } else {
-
- // Close error no account return nil
-
- let deadlineTime = DispatchTime.now() + 0.1
- DispatchQueue.main.asyncAfter(deadline: deadlineTime) {
-
- let alert = UIAlertController(title: NSLocalizedString("_error_", comment: ""), message: NSLocalizedString("_no_active_account_", comment: ""), preferredStyle: .alert)
- alert.addAction(UIAlertAction(title: NSLocalizedString("_ok_", comment: ""), style: .default) { action in
- self.dismissGrantingAccess(to: nil)
- })
-
- self.present(alert, animated: true, completion: nil)
- }
- return
- }
-
- // MARK: - init Object
- CCNetworking.shared().settingDelegate(self)
- hud = CCHud.init(view: self.navigationController?.view)
-
- // COLOR_SEPARATOR_TABLE
- self.tableView.separatorColor = UIColor(colorLiteralRed: 153.0/255.0, green: 153.0/255.0, blue: 153.0/255.0, alpha: 0.2)
-
- readFolder()
- }
-
- // MARK: - Read folder
-
- func readFolder() {
-
- let metadataNet = CCMetadataNet.init(account: activeAccount)!
- metadataNet.action = actionReadFolder
- metadataNet.serverUrl = self.localServerUrl
- metadataNet.selector = selectorReadFolder
-
- let ocNetworking : OCnetworking = OCnetworking.init(delegate: self, metadataNet: metadataNet, withUser: activeUser, withPassword: activePassword, withUrl: activeUrl, withTypeCloud: typeCloud, oneByOne: true, activityIndicator: false)
- networkingOperationQueue.addOperation(ocNetworking)
-
- hud.visibleIndeterminateHud()
- }
-
- func readFolderFailure(_ metadataNet: CCMetadataNet!, message: String!, errorCode: Int) {
-
- hud.hideHud()
-
- let alert = UIAlertController(title: NSLocalizedString("_error_", comment: ""), message: message, preferredStyle: .alert)
- alert.addAction(UIAlertAction(title: NSLocalizedString("_ok_", comment: ""), style: .default) { action in
- self.dismissGrantingAccess(to: nil)
- })
-
- self.present(alert, animated: true, completion: nil)
- }
-
- func readFolderSuccess(_ metadataNet: CCMetadataNet!, permissions: String!, rev: String!, metadatas: [Any]!) {
-
- // remove all record
- let predicate = NSPredicate(format: "(account == '\(activeAccount!)') AND (directoryID == '\(metadataNet.directoryID!)') AND ((session == NULL) OR (session == ''))")
- CCCoreData.deleteMetadata(with: predicate)
-
- for metadata in metadatas as! [CCMetadata] {
-
- // do not insert crypto file
- if CCUtility.isCryptoString(metadata.fileName) {
- continue
- }
-
- // plist + crypto = completed ?
- if CCUtility.isCryptoPlistString(metadata.fileName) && metadata.directory == false {
-
- var isCryptoComplete = false
-
- for completeMetadata in metadatas as! [CCMetadata] {
- if completeMetadata.fileName == CCUtility.trasformedFileNamePlist(inCrypto: metadata.fileName) {
- isCryptoComplete = true
- }
- }
- if isCryptoComplete == false {
- continue
- }
- }
-
- // Add record
- CCCoreData.add(metadata, activeAccount: activeAccount, activeUrl: activeUrl, typeCloud: typeCloud, context: nil)
- }
-
- // Get Datasource
- recordsTableMetadata = CCCoreData.getTableMetadata(with: NSPredicate(format: "(account == '\(activeAccount!)') AND (directoryID == '\(metadataNet.directoryID!)')"), fieldOrder: CCUtility.getOrderSettings(), ascending: CCUtility.getAscendingSettings()) as? [TableMetadata]
-
- tableView.reloadData()
-
- hud.hideHud()
- }
-
- // MARK: - Download Thumbnail
- func downloadThumbnail(_ metadata : CCMetadata) {
-
- let metadataNet = CCMetadataNet.init(account: activeAccount)!
-
- metadataNet.action = actionDownloadThumbnail
- metadataNet.fileID = metadata.fileID
-
- //let fileName =
-
-
-
- metadataNet.fileNameLocal = metadata.fileID;
- metadataNet.fileNamePrint = metadata.fileNamePrint;
- metadataNet.options = "m";
- metadataNet.selector = selectorDownloadThumbnail;
- metadataNet.serverUrl = self.localServerUrl
- let ocNetworking : OCnetworking = OCnetworking.init(delegate: self, metadataNet: metadataNet, withUser: activeUser, withPassword: activePassword, withUrl: activeUrl, withTypeCloud: typeCloud, oneByOne: true, activityIndicator: false)
- networkingOperationQueue.addOperation(ocNetworking)
-
- hud.visibleIndeterminateHud()
- }
- }
- // MARK: - UITableViewDelegate
- extension DocumentPickerViewController: UITableViewDelegate {
- func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
-
- return 60
- }
- }
- // MARK: - UITableViewDataSource
- extension DocumentPickerViewController: UITableViewDataSource {
-
- func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
-
- if (recordsTableMetadata == nil) {
- return 0
- } else {
- return recordsTableMetadata!.count
- }
- }
-
- func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
-
- let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! recordMetadataCell
-
- cell.separatorInset = UIEdgeInsetsMake(0, 60, 0, 0)
-
- let recordTableMetadata = recordsTableMetadata?[(indexPath as NSIndexPath).row]
- let metadata = CCCoreData.insertEntity(in: recordTableMetadata)!
-
- // File Image View
- let filePath = directoryUser! + "/" + metadata.fileID + ".ico"
-
- if (FileManager.default.fileExists(atPath: filePath)) {
-
- cell.fileImageView.image = UIImage(contentsOfFile: filePath)
-
- } else {
-
- cell.fileImageView.image = UIImage(named: metadata.iconName!)
- }
-
- // File Name
- cell.FileName.text = metadata.fileNamePrint
-
- return cell
- }
-
- func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
-
- let recordTableMetadata = recordsTableMetadata?[(indexPath as NSIndexPath).row]
-
- let nextViewController = self.storyboard?.instantiateViewController(withIdentifier: "DocumentPickerViewController") as! DocumentPickerViewController
-
- nextViewController.localServerUrl = CCUtility.stringAppendServerUrl(localServerUrl!, addServerUrl: recordTableMetadata!.fileName)
- nextViewController.titleFolder = recordTableMetadata?.fileNamePrint
-
- self.navigationController?.pushViewController(nextViewController, animated: true)
-
- }
- }
- // MARK: - Class UITableViewCell
- class recordMetadataCell: UITableViewCell {
-
- @IBOutlet weak var fileImageView: UIImageView!
- @IBOutlet weak var FileName : UILabel!
- }
- // MARK: - Class providerSession
- class providerSession {
-
- class var sharedInstance : providerSession {
-
- struct Static {
-
- static let instance = providerSession()
- }
-
- return Static.instance
- }
-
- private init() {
-
- let dirGroup = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: capabilitiesGroups)
- let pathDB = dirGroup?.appendingPathComponent(appDatabase).appendingPathComponent("cryptocloud")
-
- MagicalRecord.setupCoreDataStackWithAutoMigratingSqliteStore(at: pathDB!)
- MagicalRecord.setLoggingLevel(MagicalRecordLoggingLevel.off)
- }
- }
|