61 lines
1.6 KiB
Swift
61 lines
1.6 KiB
Swift
|
//
|
||
|
// ItemListType.swift
|
||
|
// Reader
|
||
|
//
|
||
|
// Created by Shadowfacts on 3/13/22.
|
||
|
//
|
||
|
|
||
|
import Foundation
|
||
|
import CoreData
|
||
|
|
||
|
enum ItemListType: Hashable {
|
||
|
case unread
|
||
|
case all
|
||
|
case group(Group)
|
||
|
case feed(Feed)
|
||
|
|
||
|
var title: String {
|
||
|
switch self {
|
||
|
case .unread:
|
||
|
return "Unread Articles"
|
||
|
case .all:
|
||
|
return "All Articles"
|
||
|
case let .group(group):
|
||
|
return group.title
|
||
|
case let .feed(feed):
|
||
|
return feed.title!
|
||
|
}
|
||
|
}
|
||
|
|
||
|
var idFetchRequest: NSFetchRequest<NSManagedObjectID> {
|
||
|
let req = NSFetchRequest<NSManagedObjectID>(entityName: "Item")
|
||
|
req.resultType = .managedObjectIDResultType
|
||
|
switch self {
|
||
|
case .unread:
|
||
|
req.predicate = NSPredicate(format: "read = NO")
|
||
|
case .all:
|
||
|
break
|
||
|
case .group(let group):
|
||
|
req.predicate = NSPredicate(format: "feed in %@", group.feeds!)
|
||
|
case .feed(let feed):
|
||
|
req.predicate = NSPredicate(format: "feed = %@", feed)
|
||
|
}
|
||
|
return req
|
||
|
}
|
||
|
|
||
|
var countFetchRequest: NSFetchRequest<Reader.Item>? {
|
||
|
let req = Reader.Item.fetchRequest()
|
||
|
switch self {
|
||
|
case .unread:
|
||
|
req.predicate = NSPredicate(format: "read = NO")
|
||
|
case .all:
|
||
|
return nil
|
||
|
case .group(let group):
|
||
|
req.predicate = NSPredicate(format: "read = NO AND feed in %@", group.feeds!)
|
||
|
case .feed(let feed):
|
||
|
req.predicate = NSPredicate(format: "read = NO AND feed = %@", feed)
|
||
|
}
|
||
|
return req
|
||
|
}
|
||
|
}
|