Skip to content

alexiscn/SynologyKit

Repository files navigation

SynologyKit

Synology File API for Swift.

Table of Contents

Features

  • Support QuickConnect Sign In
  • Support IP/Port Sign In
  • List Share Folders
  • List Share Files
  • Get file info
  • List Virtual Folder
  • Favorites management (list/add/delete/edit/replaceAll)
  • Get thumbnail of a file
  • Get directory size
  • Calculate file md5
  • Directory management (create/rename/list)
  • Copy move file
  • Delete file (folder)
  • Extract(compress) file
  • Background task management(list/clearFinished)
  • Download file
  • Upload file

Installation

CocoaPods

SynologyKit is available through CocoaPods. To install it, simply add the following line to your Podfile:

pod 'SynologyKit', '~>1.3.8'

Swift Package Manager

The Swift Package Manager is a tool for automating the distribution of Swift code and is integrated into the swift compiler.

Once you have your Swift package set up, adding SynologyKit as a dependency is as easy as adding it to the dependencies value of your Package.swift.

dependencies: [
    .package(url: "https://github.com/alexiscn/SynologyKit.git", from: "1.3.8")
]

Get Started

Other api can refer Synology Official Document

Create SynologyClient

let address = "192.168.1.5"
let port = 5000
client = SynologyClient(host: address, port: port, enableHTTPS: false)

or via Quick Connect ID

client = SynologyClient(host: "your_quick_connect_id")

Login in

After create SynologyClient, you can now sign in with following code:

let account = "your_synology_account"
let password = "your_synology_password"
client.login(account: account, passwd: password) { [weak self] response in
      switch response {
      case .success(let authRes):
          self?.client?.updateSessionID(authRes.sid)
          self?.handleLoginSuccess()
          print(authRes.sid)
      case .failure(let error):
          print(error.description)
      }
  }

When sid is got, you should update SynologyClient with SessionID. And then you can have access to all rest apis.

List Share Folders

Before your list folder files, you should first list share folders.

client.listShareFolders { response in
    switch response {
    case .success(let result):
        if let shares = result.shares {
            print("share folders count:\(shares.count)")
        }
    case .failure(let error):
        print(error)
    }
}

List Folder

client.listFolder(folder) { response in
    switch response {
    case .success(let result):
        if let files = result.files {
            for file in files {
                print("filename: \(file.name), path:\(file.path), isDirectory:\(file.isdir)")
            }
        }
    case .failure(let error):
        print(error)
    }
}

Download file

Download file just as easy as using Alamofire.

let destination: DownloadRequest.Destination = { (temporaryURL, response)  in
    let options = DownloadRequest.Options.removePreviousFile
    let localURL = URL(fileURLWithPath: NSHomeDirectory().appending("/Documents/\(file.name)"))
    return (localURL,options)
}

client.downloadFile(path: file.path, to: destination).downloadProgress { progress in
    print(progress)
}.response { response in
    if response.error == nil, let path = response.fileURL?.path {
        print("File Downloaded to :\(path)")
    }
}

Upload file

Upload file is done with Alamofire.

client.upload(data: data, filename: "test.json", destinationFolderPath: folder, createParents: true, options: nil) { result in
    switch result {
    case .success(let request, _, _):
        request.uploadProgress { progress in
            print(progress)
        }.response { response in
            if response.error == nil {
                print("Uploaded")
            }
        }
    case .failure(let error):
        print(error)
    }
}

Search file

Search file

var options = SynologyClient.SearchOptions();
options.pattern = "*.jpg";
client.search(atFolderPath: folderPath, options: options) { result in
    switch result {
    case .success(let task):
        for file in task.files {
            print(file.path)
        } 
    case .failure(let error):
        print(error.description)
    }
}

LICENSE

SynologyKit is MIT-licensed. LICENSE

About

Synology File Station SDK for Swift

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published