operations

This commit is contained in:
Chris Li 2016-11-07 18:17:17 -05:00
parent 58cf3f4c06
commit 011df8bb65
24 changed files with 80 additions and 57 deletions

View File

@ -8,7 +8,7 @@
import UIKit
import CoreData
import CloudKit
import Operations
import ProcedureKit
import UserNotifications
@UIApplicationMain
@ -19,7 +19,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
return (window?.rootViewController as? UINavigationController)?.topViewController as? MainController
}
fileprivate let recentShortcutTypeString = "org.kiwix.recent"
private let recentShortcutTypeString = "org.kiwix.recent"
func recordActiveSession() {
Preference.activeUseHistory.append(Date())

View File

@ -8,7 +8,7 @@
import UIKit
import CoreData
import Operations
import ProcedureKit
import DZNEmptyDataSet
class BookmarkController: UITableViewController, NSFetchedResultsControllerDelegate, DZNEmptyDataSetSource, DZNEmptyDataSetDelegate {

View File

@ -8,7 +8,7 @@
import UIKit
import CoreData
import Operations
import ProcedureKit
import MBProgressHUD
import DZNEmptyDataSet

View File

@ -8,7 +8,7 @@
import UIKit
import CoreData
import Operations
import ProcedureKit
import DZNEmptyDataSet
class LocalBooksController: UITableViewController, NSFetchedResultsControllerDelegate, DZNEmptyDataSetSource, DZNEmptyDataSetDelegate {

View File

@ -8,7 +8,7 @@
//
import UIKit
import Operations
import ProcedureKit
import SafariServices
class MainController: UIViewController {

View File

@ -7,7 +7,7 @@
//
import UIKit
import Operations
import ProcedureKit
class SpaceNotEnoughAlert: AlertOperation<UIViewController> {
init(context: UIViewController) {
@ -113,7 +113,7 @@ class GetStartedAlert: AlertOperation<MainController> {
}
}
class ShowHelpPageOperation: Operation {
class ShowHelpPageOperation: Procedure {
fileprivate let type: WebViewControllerContentType
fileprivate let context: UIViewController
@ -132,7 +132,7 @@ class ShowHelpPageOperation: Operation {
displayControllerFrom: .Present(context),
inNavigationController: true,
sender: nil)
produceOperation(operation)
produce(operation)
}
}

View File

@ -7,7 +7,7 @@
//
import UIKit
import Operations
import ProcedureKit
import DZNEmptyDataSet
class SearchResultController: SearchTableViewController, UITableViewDataSource, UITableViewDelegate {

View File

@ -7,7 +7,7 @@
//
import UIKit
import Operations
import ProcedureKit
class SettingDetailController: UITableViewController {

View File

@ -49,7 +49,7 @@
</dict>
</array>
<key>CFBundleVersion</key>
<string>1.8.1873</string>
<string>1.8.1882</string>
<key>ITSAppUsesNonExemptEncryption</key>
<false/>
<key>LSRequiresIPhoneOS</key>

View File

@ -21,7 +21,7 @@
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1.8.1873</string>
<string>1.8.1882</string>
<key>NSExtension</key>
<dict>
<key>NSExtensionMainStoryboard</key>

View File

@ -36,6 +36,8 @@
9722122B1D3FCCE200C0DCF2 /* MainControllerShowHide.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9722122A1D3FCCE200C0DCF2 /* MainControllerShowHide.swift */; };
9726591B1D8DB91200D1DFFB /* DownloadProgress.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9726591A1D8DB91200D1DFFB /* DownloadProgress.swift */; };
9726591D1D90A64600D1DFFB /* Notifications.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9726591C1D90A64500D1DFFB /* Notifications.swift */; };
9732075A1DD136A700EDD3DC /* CoreDataContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 973207591DD136A700EDD3DC /* CoreDataContainer.swift */; };
9732075C1DD136BB00EDD3DC /* CoreDataExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9732075B1DD136BB00EDD3DC /* CoreDataExtension.swift */; };
9734E54E1D289D060061C39B /* Welcome.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 9734E54D1D289D060061C39B /* Welcome.storyboard */; };
973BCD1A1CEB402900F10B44 /* KiwixTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 973BCD181CEB402900F10B44 /* KiwixTests.swift */; };
973DD40F1D343F2F009D45DB /* libicudata.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 973DD4041D343F2F009D45DB /* libicudata.a */; };
@ -110,7 +112,6 @@
97D6813F1D6F712800E5FA99 /* Article+CoreDataProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97D6813B1D6F712800E5FA99 /* Article+CoreDataProperties.swift */; };
97D681401D6F712800E5FA99 /* Book+CoreDataProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97D6813C1D6F712800E5FA99 /* Book+CoreDataProperties.swift */; };
97D681411D6F712800E5FA99 /* DownloadTask+CoreDataProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97D6813D1D6F712800E5FA99 /* DownloadTask+CoreDataProperties.swift */; };
97D681441D6F713200E5FA99 /* CoreDataExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97D681431D6F713200E5FA99 /* CoreDataExtension.swift */; };
97DB65DA1D4576B600A2CC42 /* BookmarkWidgetCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97DB65D91D4576B600A2CC42 /* BookmarkWidgetCell.swift */; };
97DF259C1D6F7613001648A3 /* BookOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97DF259B1D6F7612001648A3 /* BookOperation.swift */; };
97DF259D1D6F9053001648A3 /* URLSessionDownloadTaskOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97D681221D6F70AC00E5FA99 /* URLSessionDownloadTaskOperation.swift */; };
@ -197,6 +198,8 @@
9722122A1D3FCCE200C0DCF2 /* MainControllerShowHide.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = MainControllerShowHide.swift; path = "Kiwix-iOS/Controller/Main/MainControllerShowHide.swift"; sourceTree = SOURCE_ROOT; };
9726591A1D8DB91200D1DFFB /* DownloadProgress.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DownloadProgress.swift; sourceTree = "<group>"; };
9726591C1D90A64500D1DFFB /* Notifications.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Notifications.swift; sourceTree = "<group>"; };
973207591DD136A700EDD3DC /* CoreDataContainer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CoreDataContainer.swift; sourceTree = "<group>"; };
9732075B1DD136BB00EDD3DC /* CoreDataExtension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CoreDataExtension.swift; sourceTree = "<group>"; };
9734E54D1D289D060061C39B /* Welcome.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = Welcome.storyboard; path = "Kiwix-iOS/Storyboard/Welcome.storyboard"; sourceTree = SOURCE_ROOT; };
973BCD001CEB3FA500F10B44 /* Kiwix_OSXTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Kiwix_OSXTests.swift; sourceTree = "<group>"; };
973BCD021CEB3FA500F10B44 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
@ -292,7 +295,6 @@
97D6813C1D6F712800E5FA99 /* Book+CoreDataProperties.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "Book+CoreDataProperties.swift"; path = "Classes/Book+CoreDataProperties.swift"; sourceTree = "<group>"; };
97D6813D1D6F712800E5FA99 /* DownloadTask+CoreDataProperties.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "DownloadTask+CoreDataProperties.swift"; path = "Classes/DownloadTask+CoreDataProperties.swift"; sourceTree = "<group>"; };
97D6813E1D6F712800E5FA99 /* Language+CoreDataProperties.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "Language+CoreDataProperties.swift"; path = "Classes/Language+CoreDataProperties.swift"; sourceTree = "<group>"; };
97D681431D6F713200E5FA99 /* CoreDataExtension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = CoreDataExtension.swift; path = Classes/CoreDataExtension.swift; sourceTree = "<group>"; };
97DB65D91D4576B600A2CC42 /* BookmarkWidgetCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BookmarkWidgetCell.swift; sourceTree = "<group>"; };
97DF259B1D6F7612001648A3 /* BookOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BookOperation.swift; sourceTree = "<group>"; };
97DF259F1D6F996B001648A3 /* Network.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Network.swift; sourceTree = "<group>"; };
@ -403,7 +405,8 @@
971187891CEB53D700B9909D /* Migration */,
971187881CEB53CE00B9909D /* Classes */,
978C589D1C1CD8750077AE47 /* Properties */,
97D681431D6F713200E5FA99 /* CoreDataExtension.swift */,
973207591DD136A700EDD3DC /* CoreDataContainer.swift */,
9732075B1DD136BB00EDD3DC /* CoreDataExtension.swift */,
);
path = CoreData;
sourceTree = "<group>";
@ -1140,6 +1143,7 @@
970E7F831DA0305000741290 /* WelcomeController.swift in Sources */,
97A1FD3B1D6F724E00A80EE2 /* stringTools.cpp in Sources */,
970E7F741D9DB0FC00741290 /* 1.8.xcmappingmodel in Sources */,
9732075A1DD136A700EDD3DC /* CoreDataContainer.swift in Sources */,
97A1FD321D6F723D00A80EE2 /* resourceTools.cpp in Sources */,
971A10321D022AD5007FC62C /* SearchBar.swift in Sources */,
97A1FD451D6F728200A80EE2 /* StringTools.swift in Sources */,
@ -1174,8 +1178,8 @@
9764F5971D8339D500E0B1C4 /* JSInjection.swift in Sources */,
97A1FD441D6F728200A80EE2 /* Preference.swift in Sources */,
97D681311D6F70EC00E5FA99 /* 1.5.xcmappingmodel in Sources */,
97D681441D6F713200E5FA99 /* CoreDataExtension.swift in Sources */,
97DF259C1D6F7613001648A3 /* BookOperation.swift in Sources */,
9732075C1DD136BB00EDD3DC /* CoreDataExtension.swift in Sources */,
97A1FD181D6F71CE00A80EE2 /* SearchResult.swift in Sources */,
9763275E1D64FE0F0034F120 /* BookDetailController.swift in Sources */,
973DD4281D36E3E4009D45DB /* SettingDetailController.swift in Sources */,

View File

@ -0,0 +1,19 @@
//
// CoreDataContainer.swift
// Kiwix
//
// Created by Chris Li on 11/7/16.
// Copyright © 2016 Wikimedia CH. All rights reserved.
//
import UIKit
import CoreData
class CoreDataContainer: NSPersistentContainer {
init() {
super.init(name: "Kiwix")
loadPersistentStores { (description, error) in
}
}
}

View File

@ -8,7 +8,7 @@
import UIKit
import CoreData
import Operations
import ProcedureKit
import UserNotifications
class Network: NSObject, URLSessionDelegate, URLSessionTaskDelegate, URLSessionDownloadDelegate, OperationQueueDelegate {
@ -40,20 +40,20 @@ class Network: NSObject, URLSessionDelegate, URLSessionTaskDelegate, URLSessionD
// MARK: - OperationQueueDelegate
func operationQueue(_ queue: OperationQueue, willAddOperation operation: Operation) {
func operationQueue(_ queue: ProcedureQueue, willAddOperation operation: Procedure) {
guard let bookID = operation.name,
let operation = operation as? DownloadBookOperation else {return}
operations[bookID] = operation
}
func operationQueue(_ queue: OperationQueue, didFinishOperation operation: Operation, withErrors errors: [Error]) {
func operationQueue(_ queue: ProcedureQueue, didFinishOperation operation: Procedure, withErrors errors: [Error]) {
guard let bookID = operation.name else {return}
operations[bookID] = nil
}
func operationQueue(_ queue: OperationQueue, willFinishOperation operation: Operation, withErrors errors: [Error]) {}
func operationQueue(_ queue: ProcedureQueue, willFinishOperation operation: Procedure, withErrors errors: [Error]) {}
func operationQueue(_ queue: OperationQueue, willProduceOperation operation: Operation) {}
func operationQueue(_ queue: ProcedureQueue, willProduceOperation operation: Procedure) {}
// MARK: - NSURLSessionDelegate

View File

@ -7,9 +7,9 @@
//
import UIKit
import Operations
import ProcedureKit
class ArticleLoadOperation: Operation {
class ArticleLoadOperation: Procedure {
let bookID: String?
let path: String?
let title: String?
@ -61,8 +61,8 @@ class ArticleLoadOperation: Operation {
return URL(bookID: bookID, contentPath: path)
}
if let bookID = bookID {
guard let reader = ZimMultiReader.shared.readers[bookID] else {return nil}
let path = reader.mainPageURL()
guard let reader = ZimMultiReader.shared.readers[bookID],
let path = reader.mainPageURL() else {return nil}
return URL(bookID: bookID, contentPath: path)
}
return nil

View File

@ -8,7 +8,7 @@
import UIKit
import CoreData
import Operations
import ProcedureKit
class DownloadBookOperation: URLSessionDownloadTaskOperation {
let bookID: String?
@ -22,7 +22,7 @@ class DownloadBookOperation: URLSessionDownloadTaskOperation {
if UIApplication.shared.applicationState == .active,
let url = downloadTask.originalRequest?.url {
addCondition(ReachabilityCondition(url: url, connectivity: .ViaWiFi))
add(ReachabilityCondition(url: url, connectivity: .ViaWiFi))
}
// Update Coredata
@ -155,7 +155,7 @@ class DownloadBookOperation: URLSessionDownloadTaskOperation {
}
}
class RemoveBookOperation: Operation {
class RemoveBookOperation: Procedure {
let bookID: String
init(bookID: String) {
@ -179,7 +179,7 @@ class RemoveBookOperation: Operation {
}
}
class PauseBookDwonloadOperation: Operation {
class PauseBookDwonloadOperation: Procedure {
let bookID: String
init(bookID: String) {
@ -193,7 +193,7 @@ class PauseBookDwonloadOperation: Operation {
}
}
class ResumeBookDwonloadOperation: Operation {
class ResumeBookDwonloadOperation: Procedure {
let bookID: String
init(bookID: String) {
@ -206,7 +206,7 @@ class ResumeBookDwonloadOperation: Operation {
guard let data: Data = Preference.resumeData[bookID] as Data?,
let operation = DownloadBookOperation(bookID: bookID, resumeData: data) else {
if let operation = DownloadBookOperation(bookID: bookID) {
produceOperation(operation)
produce(operation)
}
finish()

View File

@ -8,9 +8,9 @@
import CoreData
import CloudKit
import Operations
import ProcedureKit
class BookmarkMigrationOperation: Operation {
class BookmarkMigrationOperation: Procedure {
fileprivate let context: NSManagedObjectContext
override init() {
@ -19,7 +19,7 @@ class BookmarkMigrationOperation: Operation {
context.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy
super.init()
addCondition(MutuallyExclusive<GlobalQueue>())
add(MutuallyExclusive<GlobalQueue>())
name = String(describing: self)
}
@ -39,7 +39,7 @@ class BookmarkMigrationOperation: Operation {
}
}
class BookmarkTrashOperation: Operation {
class BookmarkTrashOperation: Procedure {
fileprivate let context: NSManagedObjectContext
fileprivate let articles: [Article]
@ -48,7 +48,7 @@ class BookmarkTrashOperation: Operation {
self.articles = articles
super.init()
addCondition(MutuallyExclusive<BookmarkController>())
add(MutuallyExclusive<BookmarkController>())
name = String(describing: self)
}
@ -74,14 +74,14 @@ class BookmarkTrashOperation: Operation {
}
if articles.count > 0 {
produceOperation(UpdateWidgetDataSourceOperation())
produce(UpdateWidgetDataSourceOperation())
}
finish()
}
}
class BookmarkCloudKitOperation: Operation {
class BookmarkCloudKitOperation: Procedure {
let article: Article
init(article: Article) {

View File

@ -6,9 +6,9 @@
// Copyright © 2016 Chris. All rights reserved.
//
import Operations
import ProcedureKit
class GlobalQueue: OperationQueue {
class GlobalQueue: ProcedureQueue {
static let shared = GlobalQueue()
fileprivate weak var scanOperation: ScanLocalBookOperation?

View File

@ -7,7 +7,7 @@
//
import CoreData
import Operations
import ProcedureKit
class RefreshLibraryOperation: GroupOperation {
@ -22,7 +22,7 @@ class RefreshLibraryOperation: GroupOperation {
addObserver(NetworkObserver())
if UIApplication.sharedApplication().applicationState == .Active {
addCondition(ReachabilityCondition(url: Retrieve.url))
add(ReachabilityCondition(url: Retrieve.url))
}
addObserver(WillExecuteObserver { _ in
@ -37,7 +37,7 @@ class RefreshLibraryOperation: GroupOperation {
}
}
private class Retrieve: Operation, ResultOperationType {
private class Retrieve: Procedure, ResultOperationType {
fileprivate static let url = URL(string: "https://download.kiwix.org/library/library.xml")!
fileprivate var result: Data?
@ -56,7 +56,7 @@ private class Retrieve: Operation, ResultOperationType {
}
}
private class Process: Operation, XMLParserDelegate, AutomaticInjectionOperationType {
private class Process: Procedure, XMLParserDelegate, AutomaticInjectionOperationType {
var requirement: Data?
fileprivate(set) var hasUpdate = false
fileprivate(set) var firstTime = false

View File

@ -7,9 +7,9 @@
//
import CoreData
import Operations
import ProcedureKit
class ScanLocalBookOperation: Operation {
class ScanLocalBookOperation: Procedure {
fileprivate let context: NSManagedObjectContext
fileprivate(set) var firstBookAdded = false
fileprivate(set) var shouldMigrateBookmarks = false
@ -30,7 +30,7 @@ class ScanLocalBookOperation: Operation {
self.lastIndexFolderURLSnapshot = lastIndexFolderURLSnapshot
super.init()
addCondition(MutuallyExclusive<ZimMultiReader>())
add(MutuallyExclusive<ZimMultiReader>())
name = String(describing: self)
}
@ -56,7 +56,7 @@ class ScanLocalBookOperation: Operation {
override func operationDidFinish(_ errors: [Error]) {
print(String(format: "Scan finshed, lasted for %.4f seconds.", -time.timeIntervalSinceNow))
if shouldMigrateBookmarks {
produceOperation(BookmarkMigrationOperation())
produce(BookmarkMigrationOperation())
}
}

View File

@ -7,7 +7,7 @@
//
import CoreData
import Operations
import ProcedureKit
class SearchOperation: GroupOperation {
fileprivate(set) var results = [SearchResult]()
@ -41,7 +41,7 @@ class SearchOperation: GroupOperation {
}
}
private class BookSearch: Operation {
private class BookSearch: Procedure {
let zimID: String
let searchTerm: String
fileprivate var results = [SearchResult]()
@ -71,7 +71,7 @@ private class BookSearch: Operation {
}
}
private class Sort: Operation, AutomaticInjectionOperationType {
private class Sort: Procedure, AutomaticInjectionOperationType {
var requirement = [SearchResult]()
fileprivate override func execute() {

View File

@ -6,9 +6,9 @@
// Copyright © 2016 Chris. All rights reserved.
//
import Operations
import ProcedureKit
class URLSessionDownloadTaskOperation: Operation {
class URLSessionDownloadTaskOperation: Procedure {
enum KeyPath: String {
case State = "state"

View File

@ -7,10 +7,10 @@
//
import CoreData
import Operations
import ProcedureKit
import NotificationCenter
class UpdateWidgetDataSourceOperation: Operation {
class UpdateWidgetDataSourceOperation: Procedure {
let context: NSManagedObjectContext
override init() {

View File

@ -7,7 +7,7 @@
//
import CoreData
import Operations
import ProcedureKit
class ZimMultiReader: NSObject, DirectoryMonitorDelegate {
static let shared = ZimMultiReader()