From 398b24e4c63f908dac2ba738d73f4fd23e46a5f9 Mon Sep 17 00:00:00 2001 From: Chris Li Date: Fri, 5 Aug 2016 11:17:17 -0400 Subject: [PATCH] modern doc dir content filtering --- Kiwix-iOS/Info.plist | 2 +- Kiwix-iOSWidgets/Bookmarks/Info.plist | 2 +- Kiwix/Operations/ScanLocalBookOperation.swift | 57 ++++++++----------- 3 files changed, 25 insertions(+), 36 deletions(-) diff --git a/Kiwix-iOS/Info.plist b/Kiwix-iOS/Info.plist index 15fc21cd..f2686a65 100644 --- a/Kiwix-iOS/Info.plist +++ b/Kiwix-iOS/Info.plist @@ -49,7 +49,7 @@ CFBundleVersion - 1.7.710 + 1.7.716 ITSAppUsesNonExemptEncryption LSRequiresIPhoneOS diff --git a/Kiwix-iOSWidgets/Bookmarks/Info.plist b/Kiwix-iOSWidgets/Bookmarks/Info.plist index a6961a11..ba49ce45 100644 --- a/Kiwix-iOSWidgets/Bookmarks/Info.plist +++ b/Kiwix-iOSWidgets/Bookmarks/Info.plist @@ -21,7 +21,7 @@ CFBundleSignature ???? CFBundleVersion - 1.7.787 + 1.7.812 NSExtension NSExtensionMainStoryboard diff --git a/Kiwix/Operations/ScanLocalBookOperation.swift b/Kiwix/Operations/ScanLocalBookOperation.swift index b099e939..7ddcca3f 100644 --- a/Kiwix/Operations/ScanLocalBookOperation.swift +++ b/Kiwix/Operations/ScanLocalBookOperation.swift @@ -111,46 +111,35 @@ class ScanLocalBookOperation: Operation { // MARK: - Helper + private class func getContentsOfDocDir() -> [NSURL] { + let keys = [NSURLIsDirectoryKey] + let options: NSDirectoryEnumerationOptions = [.SkipsHiddenFiles, .SkipsPackageDescendants, .SkipsHiddenFiles] + let urls = try? NSFileManager.defaultManager().contentsOfDirectoryAtURL(NSFileManager.docDirURL, includingPropertiesForKeys: keys, options: options) + return urls ?? [NSURL]() + } + private class func getCurrentZimFileURLsInDocDir() -> Set { - let fileURLs = FileManager.contentsOfDirectory(NSFileManager.docDirURL) ?? [NSURL]() - var zimURLs = Set() - for url in fileURLs { - do { - var isDirectory: AnyObject? = nil - try url.getResourceValue(&isDirectory, forKey: NSURLIsDirectoryKey) - if let isDirectory = (isDirectory as? NSNumber)?.boolValue { - if !isDirectory { - guard let pathExtension = url.pathExtension?.lowercaseString else {continue} - guard pathExtension.containsString("zim") else {continue} - zimURLs.insert(url) - } - } - } catch { - continue - } + var urls = getContentsOfDocDir() + let keys = [NSURLIsDirectoryKey] + urls = urls.filter { (url) -> Bool in + guard let values = try? url.resourceValuesForKeys(keys), + let isDirectory = (values[NSURLIsDirectoryKey] as? NSNumber)?.boolValue where isDirectory == false else {return false} + guard let pathExtension = url.pathExtension?.lowercaseString where pathExtension.containsString("zim") else {return false} + return true } - return zimURLs + return Set(urls) } private class func getCurrentIndexFolderURLsInDocDir() -> Set { - let fileURLs = FileManager.contentsOfDirectory(NSFileManager.docDirURL) ?? [NSURL]() - var folderURLs = Set() - for url in fileURLs { - do { - var isDirectory: AnyObject? = nil - try url.getResourceValue(&isDirectory, forKey: NSURLIsDirectoryKey) - if let isDirectory = (isDirectory as? NSNumber)?.boolValue { - if isDirectory { - guard let pathExtension = url.pathExtension?.lowercaseString else {continue} - guard pathExtension == "idx" else {continue} - folderURLs.insert(url) - } - } - } catch { - continue - } + var urls = getContentsOfDocDir() + let keys = [NSURLIsDirectoryKey] + urls = urls.filter { (url) -> Bool in + guard let values = try? url.resourceValuesForKeys(keys), + let isDirectory = (values[NSURLIsDirectoryKey] as? NSNumber)?.boolValue where isDirectory == true else {return false} + guard let pathExtension = url.pathExtension?.lowercaseString where pathExtension == "idx" else {return false} + return true } - return folderURLs + return Set(urls) } }