From 8c7141854fd0d7c5c9c22b8e095f6916db2dac86 Mon Sep 17 00:00:00 2001 From: Chris Li Date: Thu, 22 Sep 2016 11:58:55 -0400 Subject: [PATCH] pid --- Kiwix-iOS/Info.plist | 2 +- Kiwix-iOSWidgets/Bookmarks/Info.plist | 2 +- Kiwix/CoreData/Classes/Book.swift | 18 +++++- Kiwix/Operations/ScanLocalBookOperation.swift | 2 +- Kiwix/ZimMultiReader/ZimMultiReader.swift | 17 +++++ Kiwix/libkiwix/ZimReader.h | 4 +- Kiwix/libkiwix/ZimReader.mm | 62 +++++++------------ 7 files changed, 61 insertions(+), 46 deletions(-) diff --git a/Kiwix-iOS/Info.plist b/Kiwix-iOS/Info.plist index d5db7ce2..ee893931 100644 --- a/Kiwix-iOS/Info.plist +++ b/Kiwix-iOS/Info.plist @@ -49,7 +49,7 @@ CFBundleVersion - 1.8.1009 + 1.8.1047 ITSAppUsesNonExemptEncryption LSRequiresIPhoneOS diff --git a/Kiwix-iOSWidgets/Bookmarks/Info.plist b/Kiwix-iOSWidgets/Bookmarks/Info.plist index 9e91e237..d1d7749a 100644 --- a/Kiwix-iOSWidgets/Bookmarks/Info.plist +++ b/Kiwix-iOSWidgets/Bookmarks/Info.plist @@ -21,7 +21,7 @@ CFBundleSignature ???? CFBundleVersion - 1.8.1013 + 1.8.1051 NSExtension NSExtensionMainStoryboard diff --git a/Kiwix/CoreData/Classes/Book.swift b/Kiwix/CoreData/Classes/Book.swift index ef3cea9a..f60d9c00 100644 --- a/Kiwix/CoreData/Classes/Book.swift +++ b/Kiwix/CoreData/Classes/Book.swift @@ -28,11 +28,25 @@ class Book: NSManagedObject { book.publisher = metadata["publisher"] as? String book.desc = metadata["description"] as? String book.meta4URL = metadata["url"] as? String - book.pid = metadata["name"] as? String + book.pid = { + if let pid = metadata["name"] as? String where pid != "" { + return pid + } else { + return nil + } + }() book.articleCount = Int64((metadata["articleCount"] as? String) ?? "") ?? 0 book.mediaCount = Int64((metadata["mediaCount"] as? String) ?? "") ?? 0 - book.fileSize = (Int64((metadata["size"] as? String) ?? "") ?? 0) * 1024 + book.fileSize = { + if let fileSize = metadata["size"] as? String { + return (Int64(fileSize) ?? 0) * 1024 + } else if let fileSize = metadata["size"] as? NSNumber { + return fileSize.longLongValue * 1024 + } else { + return 0 + } + }() book.date = { guard let date = metadata["date"] as? String else {return nil} diff --git a/Kiwix/Operations/ScanLocalBookOperation.swift b/Kiwix/Operations/ScanLocalBookOperation.swift index a9025a3b..eb0d2cae 100644 --- a/Kiwix/Operations/ScanLocalBookOperation.swift +++ b/Kiwix/Operations/ScanLocalBookOperation.swift @@ -60,9 +60,9 @@ class ScanLocalBookOperation: Operation { let addedZimFileURLs = currentZimFileURLSnapshot.subtract(lastZimFileURLSnapshot) let removedZimFileURLs = lastZimFileURLSnapshot.subtract(currentZimFileURLSnapshot) - guard addedZimFileURLs.count > 0 || removedZimFileURLs.count > 0 else {return} ZimMultiReader.shared.removeReaders(removedZimFileURLs) ZimMultiReader.shared.addReaders(addedZimFileURLs) + ZimMultiReader.shared.producePIDMap() } private func updateCoreData() { diff --git a/Kiwix/ZimMultiReader/ZimMultiReader.swift b/Kiwix/ZimMultiReader/ZimMultiReader.swift index 3d71ecdd..81ae2834 100644 --- a/Kiwix/ZimMultiReader/ZimMultiReader.swift +++ b/Kiwix/ZimMultiReader/ZimMultiReader.swift @@ -16,6 +16,7 @@ class ZimMultiReader: NSObject, DirectoryMonitorDelegate { private let monitor = DirectoryMonitor(URL: NSFileManager.docDirURL) private(set) var readers = [ZimID: ZimReader]() + private(set) var pidMap = [String: String]() // PID: ID private var lastZimFileURLSnapshot = Set() private var lastIndexFolderURLSnapshot = Set() @@ -63,6 +64,22 @@ class ZimMultiReader: NSObject, DirectoryMonitorDelegate { } } + func producePIDMap() { + pidMap.removeAll() + var map = [String: [ZimReader]]() // PID: [ZimReader] + for (_, reader) in readers { + guard let pid = reader.getName() where pid != "" else {continue} + var readers = map[pid] ?? [ZimReader]() + readers.append(reader) + map[pid] = readers + } + for (pid, readers) in map { + guard let reader = readers.sort({ $0.getDate().caseInsensitiveCompare($1.getDate()) == .OrderedAscending }).first, + let id = reader.getID() else {continue} + pidMap[pid] = id + } + } + // MARK: - DirectoryMonitorDelegate func directoryMonitorDidObserveChange() { diff --git a/Kiwix/libkiwix/ZimReader.h b/Kiwix/libkiwix/ZimReader.h index 588f52fe..16478f9d 100755 --- a/Kiwix/libkiwix/ZimReader.h +++ b/Kiwix/libkiwix/ZimReader.h @@ -42,11 +42,13 @@ - (NSString *)getTitle; - (NSString *)getDesc; - (NSString *)getLanguage; +- (NSString *)getName; +- (NSString *)getTags; - (NSString *)getDate; - (NSString *)getCreator; - (NSString *)getPublisher; - (NSString *)getOriginID; -- (NSString *)getFileSize; +- (NSNumber *)getFileSize; - (NSData *)getFavicon; - (NSString *)parseURL:(NSString *)urlPath; diff --git a/Kiwix/libkiwix/ZimReader.mm b/Kiwix/libkiwix/ZimReader.mm index c4efb61f..fbd28e65 100755 --- a/Kiwix/libkiwix/ZimReader.mm +++ b/Kiwix/libkiwix/ZimReader.mm @@ -240,85 +240,67 @@ int levenshtein_distance(const std::string &s1, const std::string &s2) #pragma mark - get File Attributes - (NSString *)getID { - NSString *id = nil; - string idC; idC = _reader->getId(); - id = [NSString stringWithCString:idC.c_str() encoding:NSUTF8StringEncoding]; - - return id; + return [NSString stringWithCString:idC.c_str() encoding:NSUTF8StringEncoding]; } - (NSString *)getTitle { - NSString *title = nil; - string titleC; titleC = _reader->getTitle(); - title = [NSString stringWithCString:titleC.c_str() encoding:NSUTF8StringEncoding]; - - return title; + return [NSString stringWithCString:titleC.c_str() encoding:NSUTF8StringEncoding]; } - (NSString *)getDesc { - NSString *description = nil; - string descriptionC; descriptionC = _reader->getDescription(); - description = [NSString stringWithCString:descriptionC.c_str() encoding:NSUTF8StringEncoding]; - - return description; + return [NSString stringWithCString:descriptionC.c_str() encoding:NSUTF8StringEncoding]; } - (NSString *)getLanguage { - NSString *language = nil; - string languageC; languageC = _reader->getLanguage(); - language = [NSString stringWithCString:languageC.c_str() encoding:NSUTF8StringEncoding]; - - return language; + return [NSString stringWithCString:languageC.c_str() encoding:NSUTF8StringEncoding]; +} + +- (NSString *)getName { + string nameC; + nameC = _reader->getName(); + return [NSString stringWithCString:nameC.c_str() encoding:NSUTF8StringEncoding]; +} + +- (NSString *)getTags { + string tagsC; + tagsC = _reader->getTags(); + return [NSString stringWithCString:tagsC.c_str() encoding:NSUTF8StringEncoding]; } - (NSString *)getDate { string dateC; dateC = _reader->getDate(); - NSString *dateString = [NSString stringWithCString:dateC.c_str() encoding:NSUTF8StringEncoding]; - - return dateString; + return [NSString stringWithCString:dateC.c_str() encoding:NSUTF8StringEncoding]; } - (NSString *)getCreator { - NSString *creator = nil; - string creatorC; creatorC = _reader->getCreator(); - creator = [NSString stringWithCString:creatorC.c_str() encoding:NSUTF8StringEncoding]; - - return creator; + return [NSString stringWithCString:creatorC.c_str() encoding:NSUTF8StringEncoding]; } - (NSString *)getPublisher { - NSString *publisher = nil; - string publisherC; publisherC = _reader->getOrigId(); - publisher = [NSString stringWithCString:publisherC.c_str() encoding:NSUTF8StringEncoding]; - - return publisher; + return [NSString stringWithCString:publisherC.c_str() encoding:NSUTF8StringEncoding]; } - (NSString *)getOriginID { - NSString *originID = nil; - string originIDC; originIDC = _reader->getOrigId(); - originID = [NSString stringWithCString:originIDC.c_str() encoding:NSUTF8StringEncoding]; - - return originID; + return [NSString stringWithCString:originIDC.c_str() encoding:NSUTF8StringEncoding]; } -- (NSString *)getFileSize { - return [NSString stringWithFormat:@"%u", _reader->getFileSize()]; +- (NSNumber *)getFileSize { + return [[NSNumber alloc] initWithUnsignedInt:_reader->getFileSize()]; } - (NSData *)getFavicon {