OSDN Git Service

変数の宣言の位置を変更
[kcd/KCD.git] / KCD / EnhancementListItemDownloader.swift
1 //
2 //  EnhancementListItemDownloader.swift
3 //  KCD
4 //
5 //  Created by Hori,Masaki on 2017/12/22.
6 //  Copyright © 2017年 Hori,Masaki. All rights reserved.
7 //
8
9 import Foundation
10
11 final class EnhancementListItemDownloader: NSObject, URLSessionDownloadDelegate {
12     
13     private let resourceName: String
14     private let resourceExtension: String
15     
16     init(name: String, extension ext: String) {
17         
18         self.resourceName = name
19         self.resourceExtension = ext
20         
21         super.init()
22         
23         plistDownloadQueue = OperationQueue()
24         plistDownloadQueue.name = "StrengthenListViewControllerPlistDownloadQueue"
25         plistDownloadQueue.maxConcurrentOperationCount = 1
26         plistDownloadQueue.qualityOfService = .background
27         
28         let configuration = URLSessionConfiguration.default
29         
30         plistDownloadSession = URLSession(configuration: configuration,
31                                           delegate: self,
32                                           delegateQueue: plistDownloadQueue)
33     }
34     
35     private var plistDownloadSession: URLSession!
36     private var plistDownloadQueue: OperationQueue!
37     private var plistDownloadTask: URLSessionDownloadTask?
38     private var finishOperation: (([EnhancementListItem]) -> Void)?
39     
40     func download(completeHandler: @escaping ([EnhancementListItem]) -> Void) {
41         
42         if let _ = plistDownloadTask { return }
43         
44         guard let plistURL = URL(string: "http://git.osdn.jp/view?p=kcd/KCD.git;a=blob;f=KCD/\(resourceName).\(resourceExtension);hb=HEAD") else { return }
45         
46         finishOperation = completeHandler
47         plistDownloadTask = plistDownloadSession.downloadTask(with: plistURL)
48         plistDownloadTask?.resume()
49     }
50     
51     func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didFinishDownloadingTo location: URL) {
52         
53         plistDownloadTask = nil
54         
55         guard let data = try? Data(contentsOf: location, options: []) else { return }
56         guard let list = NSKeyedUnarchiver.unarchiveObject(with: data as Data) as? [EnhancementListItem] else { return }
57         
58         finishOperation?(list)
59     }
60     
61     func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) {
62         
63         plistDownloadTask = nil
64     }
65 }