This PR contains all the work related to setting up this project as required to implement the [Assignment](https://repo.rock-n-code.com/rock-n-code/deep-linking-assignment/wiki/Assignment) on top, as intended. To summarise this work: - [x] created a new **Xcode** project; - [x] cloned the `Wikipedia` app and inserted it into the **Xcode** project; - [x] created the `Locations` app and also, its `Libraries` package; - [x] created the `Shared` package to share dependencies between the apps; - [x] added a `Makefile` file and implemented some **environment** and **help** commands. Co-authored-by: Javier Cicchelli <javier@rock-n-code.com> Reviewed-on: rock-n-code/deep-linking-assignment#1
55 lines
1.6 KiB
Swift
55 lines
1.6 KiB
Swift
import Foundation
|
|
|
|
|
|
extension NSManagedObjectContext {
|
|
public func clearReadHistory() throws {
|
|
let request = WMFArticle.readHistoryFetchRequest
|
|
request.fetchLimit = 500
|
|
request.propertiesToFetch = []
|
|
var articles = try fetch(request)
|
|
while articles.count > 0 {
|
|
try autoreleasepool { () -> Void in
|
|
for article in articles {
|
|
article.removeFromReadHistoryWithoutSaving()
|
|
}
|
|
try save()
|
|
reset()
|
|
}
|
|
articles = try fetch(request)
|
|
}
|
|
}
|
|
|
|
@objc public var mostRecentlyReadArticle: WMFArticle? {
|
|
let request = WMFArticle.readHistoryFetchRequest
|
|
request.fetchLimit = 1
|
|
return try? fetch(request).first
|
|
}
|
|
}
|
|
|
|
|
|
extension WMFArticle {
|
|
static var readHistoryFetchRequest: NSFetchRequest<WMFArticle> {
|
|
let request = self.fetchRequest()
|
|
request.predicate = NSPredicate(format: "viewedDate != NULL")
|
|
request.sortDescriptors = [NSSortDescriptor(key: "viewedDate", ascending: false)]
|
|
return request
|
|
}
|
|
|
|
public func addToReadHistory() throws {
|
|
viewedDate = Date()
|
|
updateViewedDateWithoutTime()
|
|
try managedObjectContext?.save()
|
|
}
|
|
|
|
fileprivate func removeFromReadHistoryWithoutSaving() {
|
|
viewedDate = nil
|
|
wasSignificantlyViewed = false
|
|
updateViewedDateWithoutTime()
|
|
}
|
|
|
|
public func removeFromReadHistory() throws {
|
|
removeFromReadHistoryWithoutSaving()
|
|
try managedObjectContext?.save()
|
|
}
|
|
}
|