From 09605cc754e76afbd18a708773bc08907d631de2 Mon Sep 17 00:00:00 2001 From: Kelson Date: Fri, 5 Jul 2019 09:23:28 +0200 Subject: [PATCH] Remove Wikispecies category #147 --- Shared/CoreData/Book.swift | 33 ++++---- Shared/Model/ZimFile.swift | 5 -- .../Logo/Wikispecies.imageset/Contents.json | 21 ----- .../Logo/Wikispecies.imageset/Wikispecies.png | Bin 8803 -> 0 bytes .../Library/LibraryMasterController.swift | 75 +++++++++--------- 5 files changed, 54 insertions(+), 80 deletions(-) delete mode 100644 iOS/Assets.xcassets/Logo/Wikispecies.imageset/Contents.json delete mode 100644 iOS/Assets.xcassets/Logo/Wikispecies.imageset/Wikispecies.png diff --git a/Shared/CoreData/Book.swift b/Shared/CoreData/Book.swift index c4762eae..0c457057 100644 --- a/Shared/CoreData/Book.swift +++ b/Shared/CoreData/Book.swift @@ -18,45 +18,45 @@ import CoreData class Book: NSManagedObject { // MARK: - Fetch - + class func fetchAll(context: NSManagedObjectContext) -> [Book] { let request = Book.fetchRequest() as! NSFetchRequest return (try? context.fetch(request)) ?? [Book]() } - + class func fetch(states: [BookState], context: NSManagedObjectContext) -> [Book] { let request = Book.fetchRequest() as! NSFetchRequest request.predicate = NSPredicate(format: "stateRaw IN %@", states.map({ $0.rawValue }) ) return (try? context.fetch(request)) ?? [Book]() } - + class func fetch(id: String, context: NSManagedObjectContext) -> Book? { let request = Book.fetchRequest() as! NSFetchRequest request.predicate = NSPredicate(format: "id = %@", id) return (try? context.fetch(request))?.first } - + class func fetch(pid: String, context: NSManagedObjectContext) -> [Book] { let request = Book.fetchRequest() as! NSFetchRequest request.predicate = NSPredicate(format: "pid = %@", pid) request.sortDescriptors = [NSSortDescriptor(key: "date", ascending: false)] return (try? context.fetch(request)) ?? [Book]() } - + // MARK: - Properties - + var url: URL? { guard let meta4URL = meta4URL else {return nil} var urlComponents = URLComponents(string: meta4URL.replacingOccurrences(of: ".meta4", with: "")) urlComponents?.scheme = "https" return urlComponents?.url } - + var state: BookState { get { return BookState(rawValue: Int(stateRaw)) ?? .cloud } set { stateRaw = Int16(newValue.rawValue) } } - + @objc var sectionIndex: Int { get { switch state { @@ -71,26 +71,26 @@ class Book: NSManagedObject { } } } - + // MARK: - Properties Description - + static private let dateFormatter: DateFormatter = { let formatter = DateFormatter() formatter.dateFormat = "MM-dd-yyyy" formatter.dateStyle = .medium return formatter }() - + var dateDescription: String? { guard let date = date else {return nil} return Book.dateFormatter.string(from: date) } - + var fileSizeDescription: String? { guard fileSize != 0 else {return nil} return ByteCountFormatter.string(fromByteCount: fileSize, countStyle: .file) } - + var articleCountDescription: String? { guard articleCount != 0 else {return nil} return BookArticleCountFormatter.string(num: articleCount) + (articleCount > 1 ? " articles" : " article") @@ -111,7 +111,7 @@ class BookArticleCountFormatter { enum BookState: Int { case cloud = 0, downloadQueued, downloading, downloadPaused, downloadError, local, retained - + var shortLocalizedDescription: String { switch self { case .cloud: @@ -138,14 +138,13 @@ enum BookCategory: String { case wikipedia case wikiquote case wikisource - case wikispecies case wikiversity case wikivoyage case wiktionary - + case ted case vikidia case stackExchange - + case other } diff --git a/Shared/Model/ZimFile.swift b/Shared/Model/ZimFile.swift index a853e1c7..24336cde 100644 --- a/Shared/Model/ZimFile.swift +++ b/Shared/Model/ZimFile.swift @@ -104,7 +104,6 @@ class ZimFile: Object { case wikipedia case wikiquote case wikisource - case wikispecies case wikiversity case wikivoyage case wiktionary @@ -127,8 +126,6 @@ class ZimFile: Object { return NSLocalizedString("Wikiquote", comment: "Zim File Category") case .wikisource: return NSLocalizedString("Wikisource", comment: "Zim File Category") - case .wikispecies: - return NSLocalizedString("Wikispecies", comment: "Zim File Category") case .wikiversity: return NSLocalizedString("Wikiversity", comment: "Zim File Category") case .wikivoyage: @@ -158,8 +155,6 @@ class ZimFile: Object { return #imageLiteral(resourceName: "Wikiquote") case .wikisource: return #imageLiteral(resourceName: "Wikisource") - case .wikispecies: - return #imageLiteral(resourceName: "Wikispecies") case .wikiversity: return #imageLiteral(resourceName: "Wikiversity") case .wikivoyage: diff --git a/iOS/Assets.xcassets/Logo/Wikispecies.imageset/Contents.json b/iOS/Assets.xcassets/Logo/Wikispecies.imageset/Contents.json deleted file mode 100644 index 89ff2017..00000000 --- a/iOS/Assets.xcassets/Logo/Wikispecies.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "Wikispecies.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/iOS/Assets.xcassets/Logo/Wikispecies.imageset/Wikispecies.png b/iOS/Assets.xcassets/Logo/Wikispecies.imageset/Wikispecies.png deleted file mode 100644 index 56fafac71662af50bff323141d62edae3b2b6437..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8803 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 = { @@ -46,9 +47,9 @@ class LibraryMasterController: UIViewController, UIDocumentPickerDelegate, UITab }() private var localZimFilesChangeToken: NotificationToken? private var downloadZimFilesChangeToken: NotificationToken? - + // MARK: - Overrides - + override func loadView() { view = tableView tableView.delegate = self @@ -60,7 +61,7 @@ class LibraryMasterController: UIViewController, UIDocumentPickerDelegate, UITab tableView.register(TableViewCell.self, forCellReuseIdentifier: "CategoryCell") tableView.separatorInset = UIEdgeInsets(top: 0, left: tableView.separatorInset.left + 42, bottom: 0, right: 0) } - + override func viewDidLoad() { super.viewDidLoad() title = NSLocalizedString("Library", comment: "Library title") @@ -68,7 +69,7 @@ class LibraryMasterController: UIViewController, UIDocumentPickerDelegate, UITab navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(openDocumentPicker)) refreshControl.addTarget(self, action: #selector(refreshControlPulled), for: .valueChanged) refreshControl.attributedTitle = NSAttributedString(string: NSLocalizedString("Pull to refresh", comment: "Library: refresh control")) - + if #available(iOS 11.0, *) { navigationItem.searchController = searchController searchController.searchBar.autocapitalizationType = .none @@ -76,44 +77,44 @@ class LibraryMasterController: UIViewController, UIDocumentPickerDelegate, UITab searchController.searchResultsUpdater = searchController.searchResultsController as? LibrarySearchController definesPresentationContext = true } - + if splitViewController?.traitCollection.horizontalSizeClass == .regular { let firstIndexPath = IndexPath(row: 0, section: 0) tableView.delegate?.tableView?(tableView, didSelectRowAt: firstIndexPath) } - + if #available(iOS 11.0, *) { navigationController?.navigationBar.prefersLargeTitles = true navigationItem.largeTitleDisplayMode = .always } } - + override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) configureSections() configureChangeToken() } - + override func viewDidDisappear(_ animated: Bool) { super.viewDidDisappear(animated) localZimFilesChangeToken = nil downloadZimFilesChangeToken = nil } - + // MARK: - Utilities - + func selectFirstCategory() { guard let index = sections.firstIndex(of: .category) else {return} let indexPath = IndexPath(row: 0, section: index) tableView.delegate?.tableView?(tableView, didSelectRowAt: indexPath) } - + // MARK: - UIControl Actions - + @objc func dismissController() { dismiss(animated: true, completion: nil) } - + @objc func refreshControlPulled() { let operation = LibraryRefreshOperation(updateExisting: true) operation.completionBlock = { @@ -129,9 +130,9 @@ class LibraryMasterController: UIViewController, UIDocumentPickerDelegate, UITab controller.delegate = self present(controller, animated: true) } - + // MARK: - Configurations - + private func configureSections() { if let localZimFiles = localZimFiles { localZimFilesCount = localZimFiles.count @@ -152,7 +153,7 @@ class LibraryMasterController: UIViewController, UIDocumentPickerDelegate, UITab } tableView.reloadData() } - + private func configureChangeToken() { localZimFilesChangeToken = localZimFiles?.observe({ (changes) in switch changes { @@ -163,12 +164,12 @@ class LibraryMasterController: UIViewController, UIDocumentPickerDelegate, UITab self.sections.insert(.local, at: 0) self.tableView.insertSections(IndexSet([0]), with: .fade) } - + if results.count == 0, let sectionIndex = self.sections.firstIndex(of: .local) { self.sections.remove(at: sectionIndex) self.tableView.deleteSections(IndexSet([sectionIndex]), with: .fade) } - + if let sectionIndex = self.sections.firstIndex(of: .local) { self.tableView.deleteRows(at: deletions.map({ IndexPath(row: $0, section: sectionIndex) }), with: .fade) self.tableView.insertRows(at: insertions.map({ IndexPath(row: $0, section: sectionIndex) }), with: .fade) @@ -193,12 +194,12 @@ class LibraryMasterController: UIViewController, UIDocumentPickerDelegate, UITab self.sections.insert(.download, at: sectionIndex) self.tableView.insertSections(IndexSet([sectionIndex]), with: .fade) } - + if results.count == 0, let sectionIndex = self.sections.firstIndex(of: .download) { self.sections.remove(at: sectionIndex) self.tableView.deleteSections(IndexSet([sectionIndex]), with: .fade) } - + if let sectionIndex = self.sections.firstIndex(of: .download) { self.tableView.deleteRows(at: deletions.map({ IndexPath(row: $0, section: sectionIndex) }), with: .fade) self.tableView.insertRows(at: insertions.map({ IndexPath(row: $0, section: sectionIndex) }), with: .fade) @@ -214,9 +215,9 @@ class LibraryMasterController: UIViewController, UIDocumentPickerDelegate, UITab } }) } - + // MARK: - UIDocumentPickerDelegate - + func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentAt url: URL) { if let _ = ZimMultiReader.getMetaData(url: url) { present(FileImportController(fileURL: url), animated: true) @@ -224,13 +225,13 @@ class LibraryMasterController: UIViewController, UIDocumentPickerDelegate, UITab present(FileImportAlertController(fileName: url.lastPathComponent), animated: true) } } - + // MARK: - UITableViewDataSource & Delegates - + func numberOfSections(in tableView: UITableView) -> Int { return sections.count } - + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { switch sections[section] { case .local: @@ -241,7 +242,7 @@ class LibraryMasterController: UIViewController, UIDocumentPickerDelegate, UITab return categories.count } } - + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { switch sections[indexPath.section] { case .local: @@ -262,7 +263,7 @@ class LibraryMasterController: UIViewController, UIDocumentPickerDelegate, UITab return cell } } - + func configure(localCell cell: TableViewCell, row: Int, animated: Bool = false) { guard let zimFile = localZimFiles?[row] else {return} cell.titleLabel.text = zimFile.title @@ -271,7 +272,7 @@ class LibraryMasterController: UIViewController, UIDocumentPickerDelegate, UITab cell.thumbImageView.contentMode = .scaleAspectFit cell.accessoryType = .disclosureIndicator } - + func configure(downloadCell cell: TableViewCell, row: Int, animated: Bool = false) { guard let zimFile = downloadZimFiles?[row] else {return} cell.titleLabel.text = zimFile.title @@ -295,7 +296,7 @@ class LibraryMasterController: UIViewController, UIDocumentPickerDelegate, UITab cell.thumbImageView.contentMode = .scaleAspectFit cell.accessoryType = .disclosureIndicator } - + func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? { switch sections[section] { case .local: @@ -306,7 +307,7 @@ class LibraryMasterController: UIViewController, UIDocumentPickerDelegate, UITab return NSLocalizedString("Categories", comment: "Library section headers") } } - + func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { tableView.deselectRow(at: indexPath, animated: true) switch sections[indexPath.section] { @@ -323,8 +324,8 @@ class LibraryMasterController: UIViewController, UIDocumentPickerDelegate, UITab showDetailViewController(UINavigationController(rootViewController: controller), sender: nil) } } - + // MARK: - Type Definition - + enum Section { case local, download, category } }