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 {