mirror of
https://github.com/omnivore-app/omnivore.git
synced 2026-03-11 08:54:26 +00:00
add helper functions to internalLabel
This commit is contained in:
parent
dada5c76c9
commit
6cb6f19e1e
5 changed files with 75 additions and 51 deletions
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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) }
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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])
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
Loading…
Reference in a new issue