mirror of
https://github.com/kiwix/kiwix-apple.git
synced 2025-09-25 21:05:09 -04:00
refresh lib op
This commit is contained in:
parent
702c1d42f1
commit
1d357c03d5
@ -14,7 +14,7 @@ import DZNEmptyDataSet
|
||||
|
||||
class CloudBooksController: UITableViewController, NSFetchedResultsControllerDelegate, LanguageFilterUpdating, DZNEmptyDataSetSource, DZNEmptyDataSetDelegate {
|
||||
|
||||
private(set) var isRefreshing = false
|
||||
private(set) var isRefreshing = false // used to control text on empty table view
|
||||
private(set) var isOnScreen = false // used to determine if should delay showing lang filter alert
|
||||
private(set) var langFilterAlertPending = false
|
||||
|
||||
@ -36,6 +36,10 @@ class CloudBooksController: UITableViewController, NSFetchedResultsControllerDel
|
||||
|
||||
refreshControl = RefreshLibControl()
|
||||
refreshControl?.addTarget(self, action: #selector(CloudBooksController.refresh), for: .valueChanged)
|
||||
|
||||
let inset = UIEdgeInsets(top: 0, left: 0, bottom: tabBarController!.tabBar.frame.height, right: 0)
|
||||
tableView.contentInset = inset
|
||||
tableView.scrollIndicatorInsets = inset
|
||||
}
|
||||
|
||||
override func viewWillAppear(_ animated: Bool) {
|
||||
@ -64,23 +68,14 @@ class CloudBooksController: UITableViewController, NSFetchedResultsControllerDel
|
||||
guard let navController = segue.destination as? UINavigationController,
|
||||
let bookDetailController = navController.topViewController as? BookDetailController,
|
||||
let cell = sender as? UITableViewCell,
|
||||
let indexPath = tableView.indexPath(for: cell),
|
||||
let book = fetchedResultController.object(at: indexPath) as? Book else {return}
|
||||
let indexPath = tableView.indexPath(for: cell) else {return}
|
||||
let book = fetchedResultController.object(at: indexPath)
|
||||
bookDetailController.book = book
|
||||
default:
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
|
||||
super.traitCollectionDidChange(previousTraitCollection)
|
||||
let top = tabBarController!.navigationController!.navigationBar.frame.maxY
|
||||
let bottom = tabBarController!.tabBar.frame.height
|
||||
let inset = UIEdgeInsets(top: top, left: 0, bottom: bottom, right: 0)
|
||||
tableView.contentInset = inset
|
||||
tableView.scrollIndicatorInsets = inset
|
||||
}
|
||||
|
||||
// MARK: - Actions
|
||||
|
||||
func showLanguageFilterController() {
|
||||
@ -104,12 +99,32 @@ class CloudBooksController: UITableViewController, NSFetchedResultsControllerDel
|
||||
}
|
||||
|
||||
func refresh(invokedByUser: Bool) {
|
||||
let operation = RefreshLibraryOperation()
|
||||
operation.add(observer: WillExecuteObserver { (operation) in
|
||||
OperationQueue.main.addOperation({
|
||||
// Configure empty table data set, so it shows "Refreshing..."
|
||||
self.isRefreshing = true
|
||||
self.tableView.reloadEmptyDataSet()
|
||||
})
|
||||
})
|
||||
operation.add(observer: DidFinishObserver { (operation, errors) in
|
||||
OperationQueue.main.addOperation({
|
||||
defer {
|
||||
self.refreshControl?.endRefreshing()
|
||||
self.isRefreshing = false
|
||||
self.tableView.reloadEmptyDataSet()
|
||||
}
|
||||
|
||||
// handle error
|
||||
// show reachibility alert
|
||||
// show lang filter alert
|
||||
|
||||
})
|
||||
})
|
||||
GlobalQueue.shared.add(operation: operation)
|
||||
|
||||
// let operation = RefreshLibraryOperation()
|
||||
// operation.add(WillExecuteObserver { (operation) in
|
||||
// OperationQueue.mainQueue().addOperationWithBlock({
|
||||
// self.isRefreshing = true
|
||||
// self.tableView.reloadEmptyDataSet()
|
||||
// })
|
||||
// })
|
||||
//
|
||||
// operation.add(DidFinishObserver { (operation, errors) in
|
||||
@ -207,8 +222,8 @@ class CloudBooksController: UITableViewController, NSFetchedResultsControllerDel
|
||||
}
|
||||
|
||||
func configureCell(_ cell: UITableViewCell, atIndexPath indexPath: IndexPath) {
|
||||
guard let book = fetchedResultController.object(at: indexPath) as? Book else {return}
|
||||
guard let cell = cell as? BasicBookCell else {return}
|
||||
let book = fetchedResultController.object(at: indexPath)
|
||||
|
||||
let textColor: UIColor = {
|
||||
switch book.spaceState {
|
||||
@ -231,6 +246,7 @@ class CloudBooksController: UITableViewController, NSFetchedResultsControllerDel
|
||||
].flatMap({$0}).joined(separator: " ")
|
||||
cell.titleLabel.textColor = textColor
|
||||
cell.subtitleLabel.textColor = textColor
|
||||
cell.accessoryType = splitViewController?.traitCollection.horizontalSizeClass == .compact ? .disclosureIndicator : .none
|
||||
}
|
||||
|
||||
// MARK: Other Data Source
|
||||
|
@ -49,7 +49,7 @@
|
||||
</dict>
|
||||
</array>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1.8.2223</string>
|
||||
<string>1.8.2256</string>
|
||||
<key>ITSAppUsesNonExemptEncryption</key>
|
||||
<false/>
|
||||
<key>LSRequiresIPhoneOS</key>
|
||||
|
@ -21,7 +21,7 @@
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1.8.2223</string>
|
||||
<string>1.8.2256</string>
|
||||
<key>NSExtension</key>
|
||||
<dict>
|
||||
<key>NSExtensionMainStoryboard</key>
|
||||
|
@ -10,14 +10,20 @@ import ProcedureKit
|
||||
import CoreData
|
||||
|
||||
class RefreshLibraryOperation: GroupProcedure {
|
||||
private(set) var hasUpdate = false
|
||||
private(set) var firstTime = Preference.libraryLastRefreshTime == nil
|
||||
|
||||
init() {
|
||||
let retrieve = Retrieve()
|
||||
let process = Process()
|
||||
process.injectResult(from: retrieve)
|
||||
super.init(operations: [retrieve, process])
|
||||
|
||||
process.add(observer: DidFinishObserver { [unowned self] (operation, error) in
|
||||
guard let process = operation as? Process else {return}
|
||||
self.hasUpdate = process.hasUpdate
|
||||
})
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
fileprivate class Retrieve: NetworkDataProcedure<URLSession> {
|
||||
@ -38,7 +44,7 @@ fileprivate class Process: Procedure, ResultInjection, XMLParserDelegate {
|
||||
private var storeBookIDs = Set<String>()
|
||||
private var memoryBookIDs = Set<String>()
|
||||
|
||||
private var hasUpdate = false
|
||||
private(set) var hasUpdate = false
|
||||
|
||||
override init() {
|
||||
self.context = NSManagedObjectContext(concurrencyType: .privateQueueConcurrencyType)
|
||||
|
@ -12,7 +12,7 @@ import ProcedureKit
|
||||
class RefreshLibraryOperation: GroupProcedure {
|
||||
|
||||
private(set) var hasUpdate = false
|
||||
private(set) var firstTime = false
|
||||
private(set) var firstTime = Preference.libraryLastRefreshTime == nil
|
||||
|
||||
init(invokedByUser: Bool = false) {
|
||||
let retrieve = Retrieve()
|
||||
|
Loading…
x
Reference in New Issue
Block a user