mirror of
https://github.com/kiwix/kiwix-apple.git
synced 2025-09-24 04:03:03 -04:00
Disk space detection restructure
This commit is contained in:
parent
8e5e969768
commit
bb10595f37
@ -9,7 +9,7 @@
|
|||||||
import UIKit
|
import UIKit
|
||||||
import CoreData
|
import CoreData
|
||||||
|
|
||||||
class CloudBooksController: UITableViewController, NSFetchedResultsControllerDelegate, TableCellDelegate{
|
class CloudBooksController: UITableViewController, NSFetchedResultsControllerDelegate {
|
||||||
|
|
||||||
var bookDetailController = UIStoryboard.libraryNew.initViewController(BookDetailController.self)!
|
var bookDetailController = UIStoryboard.libraryNew.initViewController(BookDetailController.self)!
|
||||||
|
|
||||||
@ -17,7 +17,7 @@ class CloudBooksController: UITableViewController, NSFetchedResultsControllerDel
|
|||||||
super.viewDidLoad()
|
super.viewDidLoad()
|
||||||
title = ""
|
title = ""
|
||||||
navigationController?.view.backgroundColor = UIColor.whiteColor()
|
navigationController?.view.backgroundColor = UIColor.whiteColor()
|
||||||
splitViewController?.tabBarItem.title = "Cloud"
|
tabBarItem.title = "Cloud"
|
||||||
}
|
}
|
||||||
|
|
||||||
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
|
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
|
||||||
@ -36,23 +36,8 @@ class CloudBooksController: UITableViewController, NSFetchedResultsControllerDel
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: - TableCellDelegate
|
@IBAction func dismissSelf(sender: UIBarButtonItem) {
|
||||||
|
dismissViewControllerAnimated(true, completion: nil)
|
||||||
func didTapOnAccessoryViewForCell(cell: UITableViewCell) {
|
|
||||||
guard let indexPath = tableView.indexPathForCell(cell),
|
|
||||||
let book = fetchedResultController.objectAtIndexPath(indexPath) as? Book else {return}
|
|
||||||
switch book.spaceState {
|
|
||||||
case .Enough:
|
|
||||||
Network.sharedInstance.download(book)
|
|
||||||
//case .Caution:
|
|
||||||
// TODO: - Switch to a global op queue
|
|
||||||
//Network.sharedInstance.operationQueue.addOperation(SpaceCautionAlert(book: book, presentationContext: self))
|
|
||||||
//case .NotEnough:
|
|
||||||
// TODO: - Switch to a global op queue
|
|
||||||
//Network.sharedInstance.operationQueue.addOperation(SpaceNotEnoughAlert(book: book, presentationContext: self))
|
|
||||||
default:
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: - TableView Data Source
|
// MARK: - TableView Data Source
|
||||||
@ -102,10 +87,6 @@ class CloudBooksController: UITableViewController, NSFetchedResultsControllerDel
|
|||||||
|
|
||||||
// MARK: - Table View Delegate
|
// MARK: - Table View Delegate
|
||||||
|
|
||||||
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
|
|
||||||
guard let book = fetchedResultController.objectAtIndexPath(indexPath) as? Book else {return}
|
|
||||||
}
|
|
||||||
|
|
||||||
override func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
|
override func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
|
||||||
guard tableView.numberOfSections > 1 else {return 0.0}
|
guard tableView.numberOfSections > 1 else {return 0.0}
|
||||||
guard let headerText = self.tableView(tableView, titleForHeaderInSection: section) else {return 0.0}
|
guard let headerText = self.tableView(tableView, titleForHeaderInSection: section) else {return 0.0}
|
||||||
|
@ -225,7 +225,7 @@ class MainController: UIViewController {
|
|||||||
|
|
||||||
func showLibraryButtonTapped() {
|
func showLibraryButtonTapped() {
|
||||||
guard let viewController = libraryNewController ?? UIStoryboard.libraryNew.instantiateInitialViewController() else {return}
|
guard let viewController = libraryNewController ?? UIStoryboard.libraryNew.instantiateInitialViewController() else {return}
|
||||||
viewController.modalPresentationStyle = .OverFullScreen
|
viewController.modalPresentationStyle = .FullScreen
|
||||||
libraryNewController = viewController
|
libraryNewController = viewController
|
||||||
presentViewController(viewController, animated: true, completion: nil)
|
presentViewController(viewController, animated: true, completion: nil)
|
||||||
}
|
}
|
||||||
|
@ -49,7 +49,7 @@
|
|||||||
</dict>
|
</dict>
|
||||||
</array>
|
</array>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
<string>1.7.873</string>
|
<string>1.7.882</string>
|
||||||
<key>ITSAppUsesNonExemptEncryption</key>
|
<key>ITSAppUsesNonExemptEncryption</key>
|
||||||
<false/>
|
<false/>
|
||||||
<key>LSRequiresIPhoneOS</key>
|
<key>LSRequiresIPhoneOS</key>
|
||||||
|
@ -35,17 +35,3 @@ class Utilities: NSObject {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extension UIDevice {
|
|
||||||
class var availableDiskSpace: Int64? {
|
|
||||||
do {
|
|
||||||
let docDirPath = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true).first!
|
|
||||||
let systemAttributes = try NSFileManager.defaultManager().attributesOfFileSystemForPath(docDirPath)
|
|
||||||
guard let freeSize = systemAttributes[NSFileSystemFreeSize] as? NSNumber else {return nil}
|
|
||||||
return freeSize.longLongValue
|
|
||||||
} catch let error as NSError {
|
|
||||||
print("Fetch system disk free space failed, error: \(error.localizedDescription)")
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -26,7 +26,7 @@
|
|||||||
</objects>
|
</objects>
|
||||||
<point key="canvasLocation" x="2177" y="51"/>
|
<point key="canvasLocation" x="2177" y="51"/>
|
||||||
</scene>
|
</scene>
|
||||||
<!--Root View Controller-->
|
<!--Cloud Books Controller-->
|
||||||
<scene sceneID="x2g-Rm-HUS">
|
<scene sceneID="x2g-Rm-HUS">
|
||||||
<objects>
|
<objects>
|
||||||
<tableViewController clearsSelectionOnViewWillAppear="NO" id="NBP-9l-DA2" customClass="CloudBooksController" customModule="Kiwix" customModuleProvider="target" sceneMemberID="viewController">
|
<tableViewController clearsSelectionOnViewWillAppear="NO" id="NBP-9l-DA2" customClass="CloudBooksController" customModule="Kiwix" customModuleProvider="target" sceneMemberID="viewController">
|
||||||
@ -151,7 +151,13 @@
|
|||||||
<outlet property="delegate" destination="NBP-9l-DA2" id="sqX-J8-zlB"/>
|
<outlet property="delegate" destination="NBP-9l-DA2" id="sqX-J8-zlB"/>
|
||||||
</connections>
|
</connections>
|
||||||
</tableView>
|
</tableView>
|
||||||
<navigationItem key="navigationItem" title="Root View Controller" id="JNh-sG-ihV"/>
|
<navigationItem key="navigationItem" id="JNh-sG-ihV">
|
||||||
|
<barButtonItem key="leftBarButtonItem" image="Cross" id="D4H-l5-1nf">
|
||||||
|
<connections>
|
||||||
|
<action selector="dismissSelf:" destination="NBP-9l-DA2" id="h1L-7d-KgQ"/>
|
||||||
|
</connections>
|
||||||
|
</barButtonItem>
|
||||||
|
</navigationItem>
|
||||||
</tableViewController>
|
</tableViewController>
|
||||||
<placeholder placeholderIdentifier="IBFirstResponder" id="TMf-0g-nhn" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
<placeholder placeholderIdentifier="IBFirstResponder" id="TMf-0g-nhn" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||||
</objects>
|
</objects>
|
||||||
@ -374,7 +380,7 @@
|
|||||||
</viewController>
|
</viewController>
|
||||||
<placeholder placeholderIdentifier="IBFirstResponder" id="SrR-CP-faE" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
<placeholder placeholderIdentifier="IBFirstResponder" id="SrR-CP-faE" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||||
</objects>
|
</objects>
|
||||||
<point key="canvasLocation" x="2177" y="-642"/>
|
<point key="canvasLocation" x="2185" y="-642"/>
|
||||||
</scene>
|
</scene>
|
||||||
<!--Tab Bar Controller-->
|
<!--Tab Bar Controller-->
|
||||||
<scene sceneID="kCG-vK-1nx">
|
<scene sceneID="kCG-vK-1nx">
|
||||||
@ -453,7 +459,10 @@
|
|||||||
<point key="canvasLocation" x="3121" y="-463"/>
|
<point key="canvasLocation" x="3121" y="-463"/>
|
||||||
</scene>
|
</scene>
|
||||||
</scenes>
|
</scenes>
|
||||||
|
<resources>
|
||||||
|
<image name="Cross" width="21" height="21"/>
|
||||||
|
</resources>
|
||||||
<inferredMetricsTieBreakers>
|
<inferredMetricsTieBreakers>
|
||||||
<segue reference="Sog-cN-G9P"/>
|
<segue reference="N3M-rH-rAM"/>
|
||||||
</inferredMetricsTieBreakers>
|
</inferredMetricsTieBreakers>
|
||||||
</document>
|
</document>
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
<key>CFBundleSignature</key>
|
<key>CFBundleSignature</key>
|
||||||
<string>????</string>
|
<string>????</string>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
<string>1.7.928</string>
|
<string>1.7.942</string>
|
||||||
<key>NSExtension</key>
|
<key>NSExtension</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>NSExtensionMainStoryboard</key>
|
<key>NSExtensionMainStoryboard</key>
|
||||||
|
@ -181,18 +181,14 @@ class Book: NSManagedObject {
|
|||||||
// MARK: - States
|
// MARK: - States
|
||||||
|
|
||||||
var spaceState: BookSpaceState {
|
var spaceState: BookSpaceState {
|
||||||
#if os(iOS) || os(watchOS) || os(tvOS)
|
guard let freeSpaceInBytes = UIDevice.availableDiskSpace?.freeSize else {return .Enough}
|
||||||
let freeSpaceInBytes = UIDevice.availableDiskSpace ?? INT64_MAX
|
if (0.8 * Double(freeSpaceInBytes)) > Double(fileSize) {
|
||||||
if (0.8 * Double(freeSpaceInBytes)) > Double(fileSize) {
|
|
||||||
return .Enough
|
|
||||||
} else if freeSpaceInBytes < fileSize{
|
|
||||||
return .NotEnough
|
|
||||||
} else {
|
|
||||||
return .Caution
|
|
||||||
}
|
|
||||||
#elseif os(OSX)
|
|
||||||
return .Enough
|
return .Enough
|
||||||
#endif
|
} else if freeSpaceInBytes < fileSize{
|
||||||
|
return .NotEnough
|
||||||
|
} else {
|
||||||
|
return .Caution
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -70,4 +70,13 @@ extension NSFileManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extension UIDevice {
|
||||||
|
class var availableDiskSpace: (freeSize: Int64, totalSize: Int64)? {
|
||||||
|
let docDirPath = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true).first!
|
||||||
|
guard let systemAttributes = try? NSFileManager.defaultManager().attributesOfFileSystemForPath(docDirPath) else {return nil}
|
||||||
|
guard let freeSize = systemAttributes[NSFileSystemFreeSize] as? Int64,
|
||||||
|
let totalSize = systemAttributes[NSFileSystemSize] as? Int64 else {return nil}
|
||||||
|
return (freeSize, totalSize)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user