From 4cc59ab1873b4f4250196eb4116f3e69457ddd3a Mon Sep 17 00:00:00 2001 From: automactic Date: Sun, 15 May 2016 10:52:54 -0400 Subject: [PATCH] Several Improvements --- Kiwix.xcodeproj/project.pbxproj | 8 +++++ Kiwix/AppDelegateObjs.swift | 6 ---- Kiwix/CoreData/Book.swift | 29 +++++++++++++++---- Kiwix/Extensions.swift | 8 +++++ Kiwix/GlobalOperationQueue.swift | 18 ++++++++++++ Kiwix/Info.plist | 4 +-- Kiwix/LibraryOnlineTBVC.swift | 2 +- Kiwix/LibraryScanOperation.swift | 13 +++++++++ .../en.lproj/Localizable.stringsdict | 18 ++++++++++++ Kiwix/Network.swift | 2 +- Kiwix/UtilitiesString.swift | 16 +++++----- README.md | 4 +++ 12 files changed, 104 insertions(+), 24 deletions(-) create mode 100644 Kiwix/GlobalOperationQueue.swift create mode 100644 Kiwix/LibraryScanOperation.swift diff --git a/Kiwix.xcodeproj/project.pbxproj b/Kiwix.xcodeproj/project.pbxproj index 46842b61..f3280984 100644 --- a/Kiwix.xcodeproj/project.pbxproj +++ b/Kiwix.xcodeproj/project.pbxproj @@ -103,6 +103,8 @@ 97C11F961C6D1F120048C867 /* LibraryTabBarController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97C11F951C6D1F120048C867 /* LibraryTabBarController.swift */; }; 97CCC4E81C1F0D970041DAEE /* BarButtonItems.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97CCC4E71C1F0D970041DAEE /* BarButtonItems.swift */; }; 97DA06C71CB6DA3400EBA609 /* LibraryLocalBookDetailTBVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97DA06C61CB6DA3400EBA609 /* LibraryLocalBookDetailTBVC.swift */; }; + 97DF23551CE807A1003E1E5A /* GlobalOperationQueue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97DF23541CE807A1003E1E5A /* GlobalOperationQueue.swift */; }; + 97DF23571CE8083C003E1E5A /* LibraryScanOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97DF23561CE8083C003E1E5A /* LibraryScanOperation.swift */; }; 97E067241C52980F0079C13C /* MainVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97E067231C52980F0079C13C /* MainVC.swift */; }; 97E067261C52AA000079C13C /* MainVCWebViewD.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97E067251C52AA000079C13C /* MainVCWebViewD.swift */; }; 97E067281C52AC360079C13C /* MainVCOtherD.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97E067271C52AC360079C13C /* MainVCOtherD.swift */; }; @@ -289,6 +291,8 @@ 97C11F951C6D1F120048C867 /* LibraryTabBarController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LibraryTabBarController.swift; sourceTree = ""; }; 97CCC4E71C1F0D970041DAEE /* BarButtonItems.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BarButtonItems.swift; sourceTree = ""; }; 97DA06C61CB6DA3400EBA609 /* LibraryLocalBookDetailTBVC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LibraryLocalBookDetailTBVC.swift; sourceTree = ""; }; + 97DF23541CE807A1003E1E5A /* GlobalOperationQueue.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GlobalOperationQueue.swift; sourceTree = ""; }; + 97DF23561CE8083C003E1E5A /* LibraryScanOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LibraryScanOperation.swift; sourceTree = ""; }; 97E067231C52980F0079C13C /* MainVC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MainVC.swift; sourceTree = ""; }; 97E067251C52AA000079C13C /* MainVCWebViewD.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MainVCWebViewD.swift; sourceTree = ""; }; 97E067271C52AC360079C13C /* MainVCOtherD.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MainVCOtherD.swift; sourceTree = ""; }; @@ -822,9 +826,11 @@ 97E5712A1CA0525300FF4F1D /* Operation */ = { isa = PBXGroup; children = ( + 97DF23541CE807A1003E1E5A /* GlobalOperationQueue.swift */, 970103F91C6824FA00DC48F6 /* RefreshLibraryOperation.swift */, 97B50C7E1CA1E4810010BD79 /* UIOperations.swift */, 973970EC1CB9A04C00350507 /* SearchOperation.swift */, + 97DF23561CE8083C003E1E5A /* LibraryScanOperation.swift */, ); name = Operation; sourceTree = ""; @@ -1073,6 +1079,7 @@ 97E570FC1CA0500400FF4F1D /* AlertOperation.swift in Sources */, 97E5710C1CA0500400FF4F1D /* LocationCapability-iOS.swift in Sources */, 97E571001CA0500400FF4F1D /* CalendarCondition.swift in Sources */, + 97DF23551CE807A1003E1E5A /* GlobalOperationQueue.swift in Sources */, 97E571121CA0500400FF4F1D /* NegatedCondition.swift in Sources */, 97E571251CA0500400FF4F1D /* TimeoutObserver.swift in Sources */, 970103FB1C6824FA00DC48F6 /* RefreshLibraryOperation.swift in Sources */, @@ -1140,6 +1147,7 @@ 9714D8D71C6E5C2600AABCA7 /* LTBarButtonItem.swift in Sources */, 97E571221CA0500400FF4F1D /* ReachabilityCondition.swift in Sources */, 97E570FE1CA0500400FF4F1D /* BlockOperation.swift in Sources */, + 97DF23571CE8083C003E1E5A /* LibraryScanOperation.swift in Sources */, 973381631C331D660016CEFB /* ArticleCells.swift in Sources */, 97E571211CA0500400FF4F1D /* PushCapability-OSX.swift in Sources */, 97E571241CA0500400FF4F1D /* SilentCondition.swift in Sources */, diff --git a/Kiwix/AppDelegateObjs.swift b/Kiwix/AppDelegateObjs.swift index fd31760a..15cdbebe 100644 --- a/Kiwix/AppDelegateObjs.swift +++ b/Kiwix/AppDelegateObjs.swift @@ -21,11 +21,5 @@ extension UIApplication { guard settings.types.contains(UIUserNotificationType.Badge) else {return} //UIApplication.sharedApplication().applicationIconBadgeNumber = downloader.taskCount ?? 0 } - - // MARK: - App Delegate Accessor - - class var appDelegate: AppDelegate { - return UIApplication.sharedApplication().delegate as! AppDelegate - } } diff --git a/Kiwix/CoreData/Book.swift b/Kiwix/CoreData/Book.swift index 1255bd0f..fb976342 100644 --- a/Kiwix/CoreData/Book.swift +++ b/Kiwix/CoreData/Book.swift @@ -12,7 +12,7 @@ import UIKit class Book: NSManagedObject { - // MARK: - Add/Update Book + // MARK: - Add Book class func add(metadata: [String: AnyObject], context: NSManagedObjectContext) -> Book? { guard let book = insert(Book.self, context: context) else {return nil} @@ -44,7 +44,7 @@ class Book: NSManagedObject { if let favIcon = metadata["favicon"] as? NSData { book.favIcon = favIcon } else if let favIcon = metadata["favicon"] as? String { - book.favIcon = NSData(base64EncodedString: favIcon, options: NSDataBase64DecodingOptions.IgnoreUnknownCharacters) + book.favIcon = NSData(base64EncodedString: favIcon, options: .IgnoreUnknownCharacters) } if let meta4url = book.meta4URL { @@ -89,14 +89,33 @@ class Book: NSManagedObject { var dateFormatted: String? { guard let date = date else {return nil} - return Utilities.formattedDateStringFromDate(date) + + let formatter = NSDateFormatter() + formatter.dateFormat = "MM-dd-yyyy" + formatter.dateStyle = .MediumStyle + return formatter.stringFromDate(date) } var fileSizeFormatted: String? { - return Utilities.formattedFileSizeStringFromByteCount(fileSize) + return NSByteCountFormatter.stringFromByteCount(fileSize, countStyle: .File) } var articleCountFormatted: String? { + func formattedNumberStringFromDouble(num: Double) -> String { + let sign = ((num < 0) ? "-" : "" ) + let abs = fabs(num) + guard abs >= 1000.0 else { + if abs - Double(Int(abs)) == 0 { + return "\(sign)\(Int(abs))" + } else { + return "\(sign)\(abs)" + } + } + let exp: Int = Int(log10(abs) / log10(1000)) + let units: [String] = ["K","M","G","T","P","E"] + let roundedNum: Double = round(10 * abs / pow(1000.0,Double(exp))) / 10; + return "\(sign)\(roundedNum)\(units[exp-1])" + } return Utilities.formattedNumberStringFromDouble(Double(articleCount)) + (articleCount >= 1 ? " articles" : " article") } @@ -143,8 +162,6 @@ class Book: NSManagedObject { } } - - // MARK: - States var spaceState: BookSpaceState { diff --git a/Kiwix/Extensions.swift b/Kiwix/Extensions.swift index c1c0edf4..727ba003 100644 --- a/Kiwix/Extensions.swift +++ b/Kiwix/Extensions.swift @@ -10,6 +10,14 @@ import Foundation import CoreData import UIKit +// MARK: - App Delegate Accessor + +extension UIApplication { + class var appDelegate: AppDelegate { + return UIApplication.sharedApplication().delegate as! AppDelegate + } +} + // MARK: - UI extension UIStoryboard { diff --git a/Kiwix/GlobalOperationQueue.swift b/Kiwix/GlobalOperationQueue.swift new file mode 100644 index 00000000..ef8290a4 --- /dev/null +++ b/Kiwix/GlobalOperationQueue.swift @@ -0,0 +1,18 @@ +// +// GlobalOperationQueue.swift +// Kiwix +// +// Created by Chris Li on 5/14/16. +// Copyright © 2016 Chris. All rights reserved. +// + +import UIKit + +class GlobalOperationQueue: OperationQueue { + static let sharedInstance = GlobalOperationQueue() + + var isRefreshingLibrary: Bool { + let op = operation(String(RefreshLibraryOperation)) + return op != nil + } +} diff --git a/Kiwix/Info.plist b/Kiwix/Info.plist index cf829052..aa2d62e8 100644 --- a/Kiwix/Info.plist +++ b/Kiwix/Info.plist @@ -32,11 +32,11 @@ CFBundlePackageType APPL CFBundleShortVersionString - 1.5 + 1.5.1 CFBundleSignature ???? CFBundleVersion - 201605091 + 1 ITSAppUsesNonExemptEncryption LSRequiresIPhoneOS diff --git a/Kiwix/LibraryOnlineTBVC.swift b/Kiwix/LibraryOnlineTBVC.swift index ffe30368..fedca70f 100644 --- a/Kiwix/LibraryOnlineTBVC.swift +++ b/Kiwix/LibraryOnlineTBVC.swift @@ -102,7 +102,7 @@ class LibraryOnlineTBVC: UITableViewController, NSFetchedResultsControllerDelega configureMessage() configureRotatingStatus() configureEmptyTableBackground() - UIApplication.globalOperationQueue.addOperation(refreshOperation) + GlobalOperationQueue.sharedInstance.addOperation(refreshOperation) } // MARK: - ToolBar Button diff --git a/Kiwix/LibraryScanOperation.swift b/Kiwix/LibraryScanOperation.swift new file mode 100644 index 00000000..122e79fc --- /dev/null +++ b/Kiwix/LibraryScanOperation.swift @@ -0,0 +1,13 @@ +// +// LibraryScanOperation.swift +// Kiwix +// +// Created by Chris Li on 5/14/16. +// Copyright © 2016 Chris. All rights reserved. +// + +import UIKit + +class LibraryScanOperation: Operation { + +} diff --git a/Kiwix/Localization/en.lproj/Localizable.stringsdict b/Kiwix/Localization/en.lproj/Localizable.stringsdict index dfe544c8..629a4ce6 100644 --- a/Kiwix/Localization/en.lproj/Localizable.stringsdict +++ b/Kiwix/Localization/en.lproj/Localizable.stringsdict @@ -45,5 +45,23 @@ %d download tasks + %d articles + + NSStringLocalizedFormatKey + %#@articles@ + articles + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + d + zero + No download task + one + %d download task + other + %d download tasks + + \ No newline at end of file diff --git a/Kiwix/Network.swift b/Kiwix/Network.swift index c5dc98fb..a70596a0 100644 --- a/Kiwix/Network.swift +++ b/Kiwix/Network.swift @@ -23,7 +23,7 @@ class Network: NSObject, NSURLSessionDelegate, NSURLSessionDownloadDelegate, NSU lazy var session: NSURLSession = { let configuration = NSURLSessionConfiguration.backgroundSessionConfigurationWithIdentifier("org.kiwix.www") configuration.allowsCellularAccess = false - configuration.discretionary = true + configuration.discretionary = false return NSURLSession(configuration: configuration, delegate: self, delegateQueue: nil) }() diff --git a/Kiwix/UtilitiesString.swift b/Kiwix/UtilitiesString.swift index d26e0318..3fd2169f 100644 --- a/Kiwix/UtilitiesString.swift +++ b/Kiwix/UtilitiesString.swift @@ -31,19 +31,19 @@ extension Utilities { return formatter.stringFromNumber(number) } - class func formattedNumberStringFromDouble(var num: Double) -> String { + class func formattedNumberStringFromDouble(num: Double) -> String { let sign = ((num < 0) ? "-" : "" ) - num = fabs(num) - guard num >= 1000.0 else { - if num - Double(Int(num)) == 0 { - return "\(sign)\(Int(num))" + let abs = fabs(num) + guard abs >= 1000.0 else { + if abs - Double(Int(abs)) == 0 { + return "\(sign)\(Int(abs))" } else { - return "\(sign)\(num)" + return "\(sign)\(abs)" } } - let exp: Int = Int(log10(num) / log10(1000)) + let exp: Int = Int(log10(abs) / log10(1000)) let units: [String] = ["K","M","G","T","P","E"] - let roundedNum: Double = round(10 * num / pow(1000.0,Double(exp))) / 10; + let roundedNum: Double = round(10 * abs / pow(1000.0,Double(exp))) / 10; return "\(sign)\(roundedNum)\(units[exp-1])" } diff --git a/README.md b/README.md index d1ecee0d..090d3e3c 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,10 @@ What you need: 1. Make sure Xcode is at least launched once and commnad line tool is installed 2. Install Macports 3. sudo port install autoconf automake libtool + + ### Compile xz-5.2.2 1. Download xz-5.2.2