2 // EnhancementListItemDownloader.swift
5 // Created by Hori,Masaki on 2017/12/22.
6 // Copyright © 2017年 Hori,Masaki. All rights reserved.
11 final class EnhancementListItemDownloader: NSObject, URLSessionDownloadDelegate {
13 private let resourceName: String
14 private let resourceExtension: String
16 init(name: String, extension ext: String) {
18 self.resourceName = name
19 self.resourceExtension = ext
23 plistDownloadQueue = OperationQueue()
24 plistDownloadQueue.name = "StrengthenListViewControllerPlistDownloadQueue"
25 plistDownloadQueue.maxConcurrentOperationCount = 1
26 plistDownloadQueue.qualityOfService = .background
28 let configuration = URLSessionConfiguration.default
30 plistDownloadSession = URLSession(configuration: configuration,
32 delegateQueue: plistDownloadQueue)
35 private var plistDownloadSession: URLSession!
36 private var plistDownloadQueue: OperationQueue!
37 private var plistDownloadTask: URLSessionDownloadTask?
38 private var finishOperation: (([EnhancementListItem]) -> Void)?
40 func download(completeHandler: @escaping ([EnhancementListItem]) -> Void) {
42 if let _ = plistDownloadTask {
47 guard let plistURL = URL(string: "https://osdn.net/projects/kcd/scm/git/KCD/blobs/master/KCD/\(resourceName).\(resourceExtension)?export=raw") else {
52 finishOperation = completeHandler
53 plistDownloadTask = plistDownloadSession.downloadTask(with: plistURL)
54 plistDownloadTask?.resume()
57 func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didFinishDownloadingTo location: URL) {
59 plistDownloadTask = nil
61 guard let data = try? Data(contentsOf: location, options: []) else {
65 guard let list = NSKeyedUnarchiver.unarchiveObject(with: data as Data) as? [EnhancementListItem] else {
70 finishOperation?(list)
73 func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) {
75 if let error = error {
77 Logger.shared.log(error.localizedDescription)
79 plistDownloadTask = nil