Skip to content

Commit

Permalink
Merge pull request #89 from nextcloud/develop
Browse files Browse the repository at this point in the history
Develop
  • Loading branch information
Ivansss committed Jul 14, 2021
2 parents d07477d + f326388 commit 06d7865
Show file tree
Hide file tree
Showing 6 changed files with 101 additions and 17 deletions.
4 changes: 2 additions & 2 deletions NCCommunication.xcodeproj/project.pbxproj
Expand Up @@ -451,7 +451,7 @@
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
MARKETING_VERSION = 0.98.0;
MARKETING_VERSION = 0.99.0;
PLIST_FILE_OUTPUT_FORMAT = "same-as-input";
PRODUCT_BUNDLE_IDENTIFIER = it.twsweb.NCCommunication;
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
Expand Down Expand Up @@ -486,7 +486,7 @@
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
MARKETING_VERSION = 0.98.0;
MARKETING_VERSION = 0.99.0;
PLIST_FILE_OUTPUT_FORMAT = "same-as-input";
PRODUCT_BUNDLE_IDENTIFIER = it.twsweb.NCCommunication;
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
Expand Down
36 changes: 36 additions & 0 deletions NCCommunication/NCCommunication+API.swift
Expand Up @@ -770,4 +770,40 @@ extension NCCommunication {
}
}
}

//MARK: -

@objc public func getDirectDownload(fileId: String, customUserAgent: String? = nil, addCustomHeaders: [String: String]? = nil, completionHandler: @escaping (_ account: String, _ url: String?, _ errorCode: Int, _ errorDescription: String) -> Void) {

let account = NCCommunicationCommon.shared.account
let endpoint = "ocs/v2.php/apps/dav/api/v1/direct"
let parameters: [String: Any] = [
"fileId": fileId,
"format": "json"
]

guard let url = NCCommunicationCommon.shared.createStandardUrl(serverUrl: NCCommunicationCommon.shared.urlBase, endpoint: endpoint) else {
completionHandler(account, nil, NSURLErrorBadURL, NSLocalizedString("_invalid_url_", value: "Invalid server url", comment: ""))
return
}

let method = HTTPMethod(rawValue: "POST")

let headers = NCCommunicationCommon.shared.getStandardHeaders(addCustomHeaders, customUserAgent: customUserAgent)

sessionManager.request(url, method: method, parameters: parameters, encoding: URLEncoding.default, headers: headers, interceptor: nil).validate(statusCode: 200..<300).responseJSON { (response) in
debugPrint(response)

switch response.result {
case .failure(let error):
let error = NCCommunicationError().getError(error: error, httResponse: response.response)
completionHandler(account, nil, error.errorCode, error.description ?? "")
case .success(let json):
let json = JSON(json)
let ocsdata = json["ocs"]["data"]
let url = ocsdata["url"].string
completionHandler(account, url, 0, "")
}
}
}
}
6 changes: 5 additions & 1 deletion NCCommunication/NCCommunication+Share.swift
Expand Up @@ -296,10 +296,11 @@ extension NCCommunication {
* For instance, for Re-Share, delete, read, update, add 16+8+2+1 = 27.
* @param publicUpload If false (default) public cannot upload to a public shared folder. If true public can upload to a shared folder. Only available for public link shares
* @param note Note
* @param label Label
* @param hideDownload Permission if file can be downloaded via share link (only for single file)
*/

@objc public func updateShare(idShare: Int, password: String? = nil, expireDate: String? = nil, permissions: Int = 1, publicUpload: Bool = false, note: String? = nil, hideDownload: Bool, customUserAgent: String? = nil, addCustomHeaders: [String: String]? = nil, completionHandler: @escaping (_ account: String, _ share: NCCommunicationShare?, _ errorCode: Int, _ errorDescription: String) -> Void) {
@objc public func updateShare(idShare: Int, password: String? = nil, expireDate: String? = nil, permissions: Int = 1, publicUpload: Bool = false, note: String? = nil, label: String? = nil, hideDownload: Bool, customUserAgent: String? = nil, addCustomHeaders: [String: String]? = nil, completionHandler: @escaping (_ account: String, _ share: NCCommunicationShare?, _ errorCode: Int, _ errorDescription: String) -> Void) {

let account = NCCommunicationCommon.shared.account
let endpoint = "ocs/v2.php/apps/files_sharing/api/v1/shares/" + String(idShare) + "?format=json"
Expand All @@ -325,6 +326,9 @@ extension NCCommunication {
if note != nil {
parameters["note"] = note
}
if label != nil {
parameters["label"] = label
}
parameters["publicUpload"] = publicUpload == true ? "true" : "false"
parameters["hideDownload"] = hideDownload == true ? "true" : "false"

Expand Down
23 changes: 11 additions & 12 deletions NCCommunication/NCCommunication.swift
Expand Up @@ -141,8 +141,8 @@ import SwiftyJSON
//MARK: - download / upload

@objc public func download(serverUrlFileName: Any, fileNameLocalPath: String, customUserAgent: String? = nil, addCustomHeaders: [String: String]? = nil,
taskHandler: @escaping (_ task: URLSessionTask) -> Void,
progressHandler: @escaping (_ progress: Progress) -> Void,
taskHandler: @escaping (_ task: URLSessionTask) -> () = { _ in },
progressHandler: @escaping (_ progress: Progress) -> () = { _ in },
completionHandler: @escaping (_ account: String, _ etag: String?, _ date: NSDate?, _ lenght: Int64, _ allHeaderFields: [AnyHashable : Any]?, _ errorCode: Int, _ errorDescription: String) -> Void) {

download(serverUrlFileName: serverUrlFileName, fileNameLocalPath: fileNameLocalPath, customUserAgent: customUserAgent, addCustomHeaders: addCustomHeaders) { (request) in
Expand All @@ -157,11 +157,10 @@ import SwiftyJSON
}
}

public func download(serverUrlFileName: Any, fileNameLocalPath: String, customUserAgent: String? = nil,
addCustomHeaders: [String: String]? = nil,
requestHandler: @escaping (_ request: DownloadRequest) -> Void,
taskHandler: @escaping (_ task: URLSessionTask) -> Void,
progressHandler: @escaping (_ progress: Progress) -> Void,
public func download(serverUrlFileName: Any, fileNameLocalPath: String, customUserAgent: String? = nil, addCustomHeaders: [String: String]? = nil,
requestHandler: @escaping (_ request: DownloadRequest) -> () = { _ in },
taskHandler: @escaping (_ task: URLSessionTask) -> () = { _ in },
progressHandler: @escaping (_ progress: Progress) -> () = { _ in },
completionHandler: @escaping (_ account: String, _ etag: String?, _ date: NSDate?, _ lenght: Int64, _ allHeaderFields: [AnyHashable : Any]?, _ error: AFError?, _ errorCode: Int, _ errorDescription: String) -> Void) {

let account = NCCommunicationCommon.shared.account
Expand Down Expand Up @@ -236,8 +235,8 @@ import SwiftyJSON
}

@objc public func upload(serverUrlFileName: String, fileNameLocalPath: String, dateCreationFile: Date? = nil, dateModificationFile: Date? = nil, customUserAgent: String? = nil, addCustomHeaders: [String: String]? = nil,
taskHandler: @escaping (_ task: URLSessionTask) -> Void,
progressHandler: @escaping (_ progress: Progress) -> Void,
taskHandler: @escaping (_ task: URLSessionTask) -> () = { _ in },
progressHandler: @escaping (_ progress: Progress) -> () = { _ in },
completionHandler: @escaping (_ account: String, _ ocId: String?, _ etag: String?, _ date: NSDate?, _ size: Int64, _ allHeaderFields: [AnyHashable : Any]?, _ errorCode: Int, _ errorDescription: String) -> Void) {

upload(serverUrlFileName: serverUrlFileName, fileNameLocalPath: fileNameLocalPath, dateCreationFile: dateCreationFile, dateModificationFile: dateModificationFile, customUserAgent: customUserAgent, addCustomHeaders: addCustomHeaders) { (request) in
Expand All @@ -253,9 +252,9 @@ import SwiftyJSON
}

public func upload(serverUrlFileName: Any, fileNameLocalPath: String, dateCreationFile: Date? = nil, dateModificationFile: Date? = nil, customUserAgent: String? = nil, addCustomHeaders: [String: String]? = nil,
requestHandler: @escaping (_ request: UploadRequest) -> Void,
taskHandler: @escaping (_ task: URLSessionTask) -> Void,
progressHandler: @escaping (_ progress: Progress) -> Void,
requestHandler: @escaping (_ request: UploadRequest) -> () = { _ in },
taskHandler: @escaping (_ task: URLSessionTask) -> () = { _ in },
progressHandler: @escaping (_ progress: Progress) -> () = { _ in },
completionHandler: @escaping (_ account: String, _ ocId: String?, _ etag: String?, _ date: NSDate?, _ size: Int64, _ allHeaderFields: [AnyHashable : Any]?, _ error: AFError?, _ errorCode: Int, _ errorDescription: String) -> Void) {

let account = NCCommunicationCommon.shared.account
Expand Down
4 changes: 4 additions & 0 deletions NCCommunication/NCCommunicationCommon.swift
Expand Up @@ -305,6 +305,10 @@ import MobileCoreServices
resultTypeFile = typeFile.audio.rawValue
resultIconName = iconName.audio.rawValue
resultFileName = "audio"
} else if UTTypeConformsTo(inUTI, kUTTypeHTML) {
resultTypeFile = typeFile.document.rawValue
resultIconName = iconName.code.rawValue
resultFileName = "document"
} else if UTTypeConformsTo(inUTI, kUTTypePDF) {
resultTypeFile = typeFile.document.rawValue
resultIconName = iconName.pdf.rawValue
Expand Down
45 changes: 43 additions & 2 deletions NCCommunication/NCCommunicationModel.swift
Expand Up @@ -105,10 +105,12 @@ import SwiftyJSON

@objc public var commentsUnread: Bool = false
@objc public var contentType = ""
@objc public var date = NSDate()
@objc public var checksums = ""
@objc public var creationDate: NSDate?
@objc public var uploadDate: NSDate?
@objc public var dataFingerprint = ""
@objc public var date = NSDate()
@objc public var directory: Bool = false
@objc public var downloadURL = ""
@objc public var e2eEncrypted: Bool = false
@objc public var etag = ""
@objc public var ext = ""
Expand All @@ -120,6 +122,7 @@ import SwiftyJSON
@objc public var iconName = ""
@objc public var livePhoto: Bool = false
@objc public var mountType = ""
@objc public var note = ""
@objc public var ocId = ""
@objc public var ownerId = ""
@objc public var ownerDisplayName = ""
Expand All @@ -129,12 +132,14 @@ import SwiftyJSON
@objc public var quotaAvailableBytes: Int64 = 0
@objc public var resourceType = ""
@objc public var richWorkspace: String?
@objc public var sharePermissions = ""
@objc public var size: Int64 = 0
@objc public var serverUrl = ""
@objc public var trashbinFileName = ""
@objc public var trashbinOriginalLocation = ""
@objc public var trashbinDeletionTime = NSDate()
@objc public var typeFile = ""
@objc public var uploadDate: NSDate?
@objc public var urlBase = ""
}

Expand Down Expand Up @@ -346,13 +351,21 @@ class NCDataFileXML: NSObject {
<owner-id xmlns=\"http://owncloud.org/ns\"/>
<owner-display-name xmlns=\"http://owncloud.org/ns\"/>
<comments-unread xmlns=\"http://owncloud.org/ns\"/>
<checksums xmlns=\"http://owncloud.org/ns\"/>
<downloadURL xmlns=\"http://owncloud.org/ns\"/>
<data-fingerprint xmlns=\"http://owncloud.org/ns\"/>
<creation_time xmlns=\"http://nextcloud.org/ns\"/>
<upload_time xmlns=\"http://nextcloud.org/ns\"/>
<is-encrypted xmlns=\"http://nextcloud.org/ns\"/>
<has-preview xmlns=\"http://nextcloud.org/ns\"/>
<mount-type xmlns=\"http://nextcloud.org/ns\"/>
<rich-workspace xmlns=\"http://nextcloud.org/ns\"/>
<note xmlns=\"http://nextcloud.org/ns\"/>
<share-permissions xmlns=\"http://open-collaboration-services.org/ns\"/>
<share-permissions xmlns=\"http://open-cloud-mesh.org/ns\"/>
</d:prop>
</d:propfind>
"""
Expand Down Expand Up @@ -390,13 +403,21 @@ class NCDataFileXML: NSObject {
<owner-id xmlns=\"http://owncloud.org/ns\"/>
<owner-display-name xmlns=\"http://owncloud.org/ns\"/>
<comments-unread xmlns=\"http://owncloud.org/ns\"/>
<checksums xmlns=\"http://owncloud.org/ns\"/>
<downloadURL xmlns=\"http://owncloud.org/ns\"/>
<data-fingerprint xmlns=\"http://owncloud.org/ns\"/>
<creation_time xmlns=\"http://nextcloud.org/ns\"/>
<upload_time xmlns=\"http://nextcloud.org/ns\"/>
<is-encrypted xmlns=\"http://nextcloud.org/ns\"/>
<has-preview xmlns=\"http://nextcloud.org/ns\"/>
<mount-type xmlns=\"http://nextcloud.org/ns\"/>
<rich-workspace xmlns=\"http://nextcloud.org/ns\"/>
<note xmlns=\"http://nextcloud.org/ns\"/>
<share-permissions xmlns=\"http://open-collaboration-services.org/ns\"/>
<share-permissions xmlns=\"http://open-cloud-mesh.org/ns\"/>
</d:prop>
<oc:filter-rules>
<oc:favorite>1</oc:favorite>
Expand Down Expand Up @@ -760,6 +781,26 @@ class NCDataFileXML: NSObject {
file.contentType = getcontenttype
}

if let dataFingerprint = propstat["d:prop", "d:data-fingerprint"].text {
file.dataFingerprint = dataFingerprint
}

if let downloadURL = propstat["d:prop", "d:downloadURL"].text {
file.downloadURL = downloadURL
}

if let note = propstat["d:prop", "d:note"].text {
file.note = note
}

if let sharePermissions = propstat["d:prop", "d:share-permissions"].text {
file.sharePermissions = sharePermissions
}

if let checksums = propstat["d:prop", "d:checksums"].text {
file.checksums = checksums
}

let resourcetypeElement = propstat["d:prop", "d:resourcetype"]
if resourcetypeElement["d:collection"].error == nil {
file.directory = true
Expand Down

0 comments on commit 06d7865

Please sign in to comment.