add helper functions to internalLabel

This commit is contained in:
Satindar Dhillon 2022-04-22 09:59:51 -07:00
parent dada5c76c9
commit 6cb6f19e1e
5 changed files with 75 additions and 51 deletions

View file

@ -71,9 +71,9 @@ public struct FeedItemDep: Identifiable, Hashable {
self.labels = labels
}
public static func fromJsonArticle(linkData: Data) -> FeedItemDep? {
try? JSONDecoder().decode(JSONArticle.self, from: linkData).feedItem
}
// public static func fromJsonArticle(linkData: Data) -> FeedItemDe-----p? {
// try? JSONDecoder().decode(JSONArticle.self, from: linkData).feedItem
// }
public var isRead: Bool {
readingProgress >= 0.98
@ -101,43 +101,44 @@ public struct FeedItemDep: Identifiable, Hashable {
}
}
/// Internal model used for parsing a push notification object only
struct JSONArticle: Decodable {
let id: String
let title: String
let createdAt: Date
let savedAt: Date
let image: String
let readingProgressPercent: Double
let readingProgressAnchorIndex: Int
let slug: String
let contentReader: String
let url: String
let isArchived: Bool
var feedItem: FeedItemDep {
FeedItemDep(
id: id,
title: title,
createdAt: createdAt,
savedAt: savedAt,
readingProgress: readingProgressPercent,
readingProgressAnchor: readingProgressAnchorIndex,
imageURLString: image,
onDeviceImageURLString: nil,
documentDirectoryPath: nil,
pageURLString: url,
descriptionText: title,
publisherURLString: nil,
author: nil,
publishDate: nil,
slug: slug,
isArchived: isArchived,
contentReader: contentReader,
labels: []
)
}
}
// TODO: delete this
// Internal model used for parsing a push notification object only
// struct JSONArticle: Decodable {
// let id: String
// let title: String
// let createdAt: Date
// let savedAt: Date
// let image: String
// let readingProgressPercent: Double
// let readingProgressAnchorIndex: Int
// let slug: String
// let contentReader: String
// let url: String
// let isArchived: Bool
//
// var feedItem: FeedItem-----Dep {
// FeedItem--------Dep(
// id: id,
// title: title,
// createdAt: createdAt,
// savedAt: savedAt,
// readingProgress: readingProgressPercent,
// readingProgressAnchor: readingProgressAnchorIndex,
// imageURLString: image,
// onDeviceImageURLString: nil,
// documentDirectoryPath: nil,
// pageURLString: url,
// descriptionText: title,
// publisherURLString: nil,
// author: nil,
// publishDate: nil,
// slug: slug,
// isArchived: isArchived,
// contentReader: contentReader,
// labels: []
// )
// }
// }
public extension FeedItemDep {
func asManagedObject(inContext context: NSManagedObjectContext) -> LinkedItem {

View file

@ -75,6 +75,7 @@ struct InternalLinkedItem {
}
extension Sequence where Element == InternalLinkedItem {
// TODO: use batch update?
func persist(context: NSManagedObjectContext) -> [LinkedItem]? {
let linkedItems = map { $0.asManagedObject(inContext: context) }

View file

@ -17,11 +17,11 @@ struct InternalLinkedItemLabel {
do {
try context.save()
logger.debug("NewsletterEmail saved succesfully")
logger.debug("LinkedItemLabel saved succesfully")
objectID = label.objectID
} catch {
context.rollback()
logger.debug("Failed to save NewsletterEmail: \(error.localizedDescription)")
logger.debug("Failed to save LinkedItemLabel: \(error.localizedDescription)")
}
}
@ -56,3 +56,23 @@ extension LinkedItemLabel {
return label
}
}
extension Sequence where Element == InternalLinkedItemLabel {
func persist(context: NSManagedObjectContext) -> [NSManagedObjectID]? {
var result: [NSManagedObjectID]?
context.performAndWait {
let labels = map { $0.asManagedObject(inContext: context) }
do {
try context.save()
logger.debug("labels saved succesfully")
result = labels.map(\.objectID)
} catch {
context.rollback()
logger.debug("Failed to save labels: \(error.localizedDescription)")
}
}
return result
}
}

View file

@ -32,9 +32,10 @@ public extension NSNotification {
return nil
}
static func pushFeedItem(feedItem: FeedItemDep) {
NotificationCenter.default.post(name: NSNotification.PushFeedItem, object: nil, userInfo: ["feedItem": feedItem])
}
// TODO: re-enable later
// static func pushFeedItem(feedItem: FeedItem-----Dep) {
// NotificationCenter.default.post(name: NSNotification.PushFeedItem, object: nil, userInfo: ["feedItem": feedItem])
// }
static func operationSuccess(message: String) {
NotificationCenter.default.post(name: NSNotification.OperationSuccess, object: nil, userInfo: ["message": message])

View file

@ -55,12 +55,13 @@ extension AppDelegate: UNUserNotificationCenterDelegate {
withCompletionHandler completionHandler: @escaping () -> Void
) {
let userInfo = response.notification.request.content.userInfo
if let linkData = userInfo["link"] as? String {
guard let jsonData = Data(base64Encoded: linkData) else { return }
if let item = FeedItemDep.fromJsonArticle(linkData: jsonData) {
NSNotification.pushFeedItem(feedItem: item)
}
}
// TODO: fix
// if let linkData = userInfo["link"] as? String {
// guard let jsonData = Data(base64Encoded: linkData) else { return }
// if let item = FeedItemDep.fromJsonArticle(linkData: jsonData) {
// NSNotification.pushFeedItem(feedItem: item)
// }
// }
print(userInfo)
completionHandler()