diff --git a/ownCloud/Settings/LogFilesViewController.swift b/ownCloud/Settings/LogFilesViewController.swift index 88b2bcb0f..0828e063e 100644 --- a/ownCloud/Settings/LogFilesViewController.swift +++ b/ownCloud/Settings/LogFilesViewController.swift @@ -17,7 +17,10 @@ */ import UIKit +import CoreServices + import ownCloudSDK +import ownCloudApp import ownCloudAppShared class LogFileTableViewCell : ThemeTableViewCell { @@ -57,7 +60,7 @@ extension OCLogFileRecord { } } -class LogFilesViewController : UITableViewController, Themeable { +class LogFilesViewController : UITableViewController, UITableViewDragDelegate, Themeable { var logRecords = [OCLogFileRecord]() @@ -87,6 +90,8 @@ class LogFilesViewController : UITableViewController, Themeable { super.viewDidLoad() Theme.shared.register(client: self, applyImmediately: true) self.tableView.register(LogFileTableViewCell.self, forCellReuseIdentifier: LogFileTableViewCell.identifier) + self.tableView.dragDelegate = self + self.tableView.dragInteractionEnabled = true self.title = "Log Files".localized } @@ -165,6 +170,40 @@ class LogFilesViewController : UITableViewController, Themeable { ] } + // MARK: - Table view drag & drop support + func tableView(_ tableView: UITableView, itemsForBeginning session: UIDragSession, at indexPath: IndexPath) -> [UIDragItem] { + if DisplaySettings.shared.preventDraggingFiles { + return [UIDragItem]() + } + + var logURL : URL? + var logName : String? + + provideLogURL(at: indexPath, makeNamedCopy: false) { (url, name, completionHandler) in + logURL = url + logName = name + + // Since we use false for makeNamedCopy, this should be safe + completionHandler?() + } + + if let logURL = logURL { + let itemProvider = NSItemProvider() + itemProvider.registerFileRepresentation(forTypeIdentifier: kUTTypeUTF8PlainText as String, fileOptions: [], visibility: .all, loadHandler: { (completionHandler) -> Progress? in + completionHandler(logURL, true, nil) + return nil + }) + itemProvider.suggestedName = logName + + let dragItem = UIDragItem(itemProvider: itemProvider) + + return [dragItem] + } + + return [UIDragItem]() + } + + // MARK: - Private Helpers private func populateLogFileList() { @@ -179,8 +218,8 @@ class LogFilesViewController : UITableViewController, Themeable { self.tableView.reloadData() } } - - private func shareLogRecord(at indexPath:IndexPath, sender: UITableViewCell) { + + private func provideLogURL(at indexPath: IndexPath, makeNamedCopy: Bool, completionHandler: (_ fileURL: URL?, _ name: String?, _ doneBlock: (()->Void)?) -> Void) { let logRecord = self.logRecords[indexPath.row] // Create a file name for sharing with format ownCloud__