diff --git a/Kiwix-iOS/Controller/Main/MainController.swift b/Kiwix-iOS/Controller/Main/MainController.swift index e4018ef5..b5987af2 100644 --- a/Kiwix-iOS/Controller/Main/MainController.swift +++ b/Kiwix-iOS/Controller/Main/MainController.swift @@ -10,6 +10,7 @@ import UIKit import SafariServices import CoreSpotlight import CloudKit +import NotificationCenter class MainController: UIViewController { @@ -294,6 +295,27 @@ extension MainController: ButtonDelegates { } } + func updateBookmarkWidget() { + guard let defaults = UserDefaults(suiteName: "group.kiwix") else {return} + let bookmarks = Article + .fetchRecentBookmarks(count: 30, context: AppDelegate.persistentContainer.viewContext) + .flatMap { (article) -> [String: Any]? in + guard let title = article.title, + let data = article.thumbImageData, + let urlString = article.url?.absoluteString else {return nil} + return [ + "title": title, + "thumbImageData": data, + "url": urlString, + "isMainPage": NSNumber(value: article.isMainPage) + ] + } + print(bookmarks.count) + defaults.set(bookmarks, forKey: "bookmarks") + NCWidgetController.widgetController().setHasContent(bookmarks.count > 0, forWidgetWithBundleIdentifier: "self.Kiwix.Bookmarks") + + } + let context = AppDelegate.persistentContainer.viewContext guard let url = webView.request?.url, let article = Article.fetch(url: url, context: context) else {return} @@ -306,8 +328,7 @@ extension MainController: ButtonDelegates { controllers.bookmarkHUD.bookmarkAdded = article.isBookmarked indexCoreSpotlight(article: article) - // let operation = BookmarkSyncOperation(articleURL: url) - // GlobalQueue.shared.add(operation: operation) + updateBookmarkWidget() } } diff --git a/Kiwix/CoreData/Classes/Article.swift b/Kiwix/CoreData/Classes/Article.swift index c0c470e6..e02a4357 100644 --- a/Kiwix/CoreData/Classes/Article.swift +++ b/Kiwix/CoreData/Classes/Article.swift @@ -27,16 +27,14 @@ class Article: NSManagedObject { return article } -// class func fetchRecentBookmarks(_ count: Int, context: NSManagedObjectContext) -> [Article] { -// let fetchRequest = NSFetchRequest(entityName: "Article") -// let dateDescriptor = NSSortDescriptor(key: "bookmarkDate", ascending: false) -// let titleDescriptor = NSSortDescriptor(key: "title", ascending: true) -// fetchRequest.sortDescriptors = [dateDescriptor, titleDescriptor] -// fetchRequest.predicate = NSPredicate(format: "isBookmarked == true") -// fetchRequest.fetchLimit = count -// return fetch(fetchRequest, type: Article.self, context: context) ?? [Article]() -// } -// + class func fetchRecentBookmarks(count: Int, context: NSManagedObjectContext) -> [Article] { + let fetchRequest = Article.fetchRequest() as! NSFetchRequest
+ fetchRequest.sortDescriptors = [NSSortDescriptor(key: "bookmarkDate", ascending: false)] + fetchRequest.predicate = NSPredicate(format: "isBookmarked == true") + fetchRequest.fetchLimit = count + return (try? context.fetch(fetchRequest)) ?? [Article]() + } + class func fetchBookmarked(in book: Book, with context: NSManagedObjectContext) -> [Article] { let request = NSFetchRequest(entityName: "Article") request.predicate = NSPredicate(format: "book = %@ AND isBookmarked == true", book) diff --git a/Kiwix/Operations/UpdateWidgetDataSourceOperation.swift b/Kiwix/Operations/UpdateWidgetDataSourceOperation.swift index df8234aa..7a75bcfa 100644 --- a/Kiwix/Operations/UpdateWidgetDataSourceOperation.swift +++ b/Kiwix/Operations/UpdateWidgetDataSourceOperation.swift @@ -26,7 +26,7 @@ class UpdateWidgetDataSourceOperation: Procedure { var articles = [Article]() context.performAndWait { - articles = Article.fetchRecentBookmarks(30, context: self.context) + } var bookmarks = [NSDictionary]()