From fd44fefb63d853eed24c38b097a3ec82810ed189 Mon Sep 17 00:00:00 2001 From: Balazs Perlaki-Horvath Date: Sun, 16 Jun 2024 12:49:31 +0200 Subject: [PATCH 1/2] Fix favIcons of opened ZIM files (not added via catalog download) --- Model/Entities/ZimFileMetaData/ZimFileMetaData.h | 1 + Model/Entities/ZimFileMetaData/ZimFileMetaData.mm | 13 ++++++++++++- SwiftUI/Model/LibraryOperations.swift | 9 +++++---- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/Model/Entities/ZimFileMetaData/ZimFileMetaData.h b/Model/Entities/ZimFileMetaData/ZimFileMetaData.h index 6f2efd75..44228326 100644 --- a/Model/Entities/ZimFileMetaData/ZimFileMetaData.h +++ b/Model/Entities/ZimFileMetaData/ZimFileMetaData.h @@ -34,6 +34,7 @@ // nullable attributes @property (nonatomic, strong, nullable) NSURL *downloadURL; @property (nonatomic, strong, nullable) NSURL *faviconURL; +@property (nonatomic, strong, nullable) NSData *faviconData; @property (nonatomic, strong, nullable) NSString *flavor; // assigned attributes diff --git a/Model/Entities/ZimFileMetaData/ZimFileMetaData.mm b/Model/Entities/ZimFileMetaData/ZimFileMetaData.mm index 467bf30d..3dc41339 100644 --- a/Model/Entities/ZimFileMetaData/ZimFileMetaData.mm +++ b/Model/Entities/ZimFileMetaData/ZimFileMetaData.mm @@ -59,6 +59,7 @@ - (nullable instancetype)initWithBook:(void *)book { SAFE_READ(self.downloadURL, [self getURL:_book->getUrl()]); SAFE_READ(self.faviconURL, [self getFaviconURLFromBook:_book]); + SAFE_READ(self.faviconData, [self getFaviconDataFromBook:_book]); SAFE_READ(self.flavor, [self getFlavorFromBook:_book]); SAFE_READ_BOOL(self.hasDetails, _book->getTagBool("details")); @@ -99,7 +100,7 @@ - (NSURL *)getURL:(std::string)urlString { return [NSURL URLWithString:[NSString stringWithUTF8String:urlString.c_str()]]; } -- (NSURL *)getFaviconURLFromBook:(kiwix::Book *)book { +- (NSURL * _Nullable)getFaviconURLFromBook:(kiwix::Book *)book { try { std::string url = book->getIllustrations().at(0)->url; return [self getURL:url]; @@ -108,6 +109,16 @@ - (NSURL *)getFaviconURLFromBook:(kiwix::Book *)book { } } +- (NSData * _Nullable)getFaviconDataFromBook:(kiwix::Book *)book { + try { + std::string dataString = book->getIllustrations().at(0)->getData(); + NSData *favIconData = [NSData dataWithBytes: dataString.data() length: dataString.length()]; + return favIconData; + } catch (std::exception) { + return nil; + } +} + - (NSString *)getFlavorFromBook:(kiwix::Book *)book { NSString *flavor = [NSString stringWithUTF8String:book->getFlavour().c_str()]; return [flavor stringByReplacingOccurrencesOfString:@"_" withString:@""]; diff --git a/SwiftUI/Model/LibraryOperations.swift b/SwiftUI/Model/LibraryOperations.swift index 60c6f833..c00c9eff 100644 --- a/SwiftUI/Model/LibraryOperations.swift +++ b/SwiftUI/Model/LibraryOperations.swift @@ -129,12 +129,13 @@ struct LibraryOperations { zimFile.requiresServiceWorkers = metadata.requiresServiceWorkers zimFile.size = metadata.size.int64Value - // Only overwrite favicon data and url if there is a new value - if let url = metadata.downloadURL { zimFile.downloadURL = url } - if let url = metadata.faviconURL { zimFile.faviconURL = url } + // Overwrite these, only if there are new values + if let faviconURL = metadata.faviconURL { zimFile.faviconURL = faviconURL } + if let faviconData = metadata.faviconData { zimFile.faviconData = faviconData } + if let downloadURL = metadata.downloadURL { zimFile.downloadURL = downloadURL } } - //MARK: - Deletion + // MARK: - Deletion /// Unlink a zim file from library, delete associated bookmarks, and delete the file. /// - Parameter zimFile: the zim file to delete From 3a48a8e3493b96417ce2f9ac304b508076c7dc35 Mon Sep 17 00:00:00 2001 From: Balazs Perlaki-Horvath Date: Sun, 16 Jun 2024 20:45:10 +0200 Subject: [PATCH 2/2] Fix for empty data --- Model/Entities/ZimFileMetaData/ZimFileMetaData.mm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Model/Entities/ZimFileMetaData/ZimFileMetaData.mm b/Model/Entities/ZimFileMetaData/ZimFileMetaData.mm index 3dc41339..d95dc134 100644 --- a/Model/Entities/ZimFileMetaData/ZimFileMetaData.mm +++ b/Model/Entities/ZimFileMetaData/ZimFileMetaData.mm @@ -112,6 +112,9 @@ - (NSURL * _Nullable)getFaviconURLFromBook:(kiwix::Book *)book { - (NSData * _Nullable)getFaviconDataFromBook:(kiwix::Book *)book { try { std::string dataString = book->getIllustrations().at(0)->getData(); + if(dataString.length() == 0) { + return nil; + } NSData *favIconData = [NSData dataWithBytes: dataString.data() length: dataString.length()]; return favIconData; } catch (std::exception) {