Skip to content

Commit

Permalink
feat: adapt the app to async & await. Update timeline UI
Browse files Browse the repository at this point in the history
  • Loading branch information
MainasuK committed Jan 27, 2022
1 parent b8181b8 commit b76b3a2
Show file tree
Hide file tree
Showing 754 changed files with 29,643 additions and 25,046 deletions.
2 changes: 1 addition & 1 deletion AppShared/Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,6 @@
<key>CFBundleShortVersionString</key>
<string>1.3.0</string>
<key>CFBundleVersion</key>
<string>90</string>
<string>91</string>
</dict>
</plist>
6 changes: 6 additions & 0 deletions CoreDataStack/.sourcery.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
sources:
- .
templates:
- ./Template
output:
Generated
2 changes: 1 addition & 1 deletion CoreDataStack/CoreData.xcdatamodeld/.xccurrentversion
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,6 @@
<plist version="1.0">
<dict>
<key>_XCCurrentVersionName</key>
<string>CoreData 2.xcdatamodel</string>
<string>CoreData 3.xcdatamodel</string>
</dict>
</plist>
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<model type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="19206" systemVersion="20G165" minimumToolsVersion="Automatic" sourceLanguage="Swift" userDefinedModelVersionIdentifier="">
<model type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="19574" systemVersion="21C52" minimumToolsVersion="Automatic" sourceLanguage="Swift" userDefinedModelVersionIdentifier="">
<entity name="Application" representedClassName=".Application" syncable="YES">
<attribute name="identifier" optional="YES" attributeType="UUID" usesScalarValueType="NO"/>
<attribute name="name" attributeType="String"/>
Expand Down
283 changes: 283 additions & 0 deletions CoreDataStack/CoreData.xcdatamodeld/CoreData 3.xcdatamodel/contents

Large diffs are not rendered by default.

198 changes: 198 additions & 0 deletions CoreDataStack/Entity/App/Feed.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,198 @@
//
// Feed.swift
// CoreDataStack
//
// Created by MainasuK on 2022-1-11.
//

import Foundation
import CoreData

final public class Feed: NSManagedObject {

@NSManaged public private(set) var acctRaw: String
// sourcery: autoGenerateProperty
public var acct: Acct {
get {
Acct(rawValue: acctRaw) ?? .none
}
set {
acctRaw = newValue.rawValue
}
}

@NSManaged public private(set) var kindRaw: String
// sourcery: autoGenerateProperty
public var kind: Kind {
get {
Kind(rawValue: kindRaw) ?? .none
}
set {
kindRaw = newValue.rawValue
}
}

// sourcery: autoUpdatableObject, autoGenerateProperty
@NSManaged public private(set) var hasMore: Bool
// sourcery: autoUpdatableObject
@NSManaged public private(set) var isLoadingMore: Bool

// sourcery: autoUpdatableObject, autoGenerateProperty
@NSManaged public private(set) var createdAt: Date
// sourcery: autoUpdatableObject, autoGenerateProperty
@NSManaged public private(set) var updatedAt: Date

// one-to-one relationship
@NSManaged public private(set) var status: Status?
@NSManaged public private(set) var notification: Notification?

}

extension Feed {

@discardableResult
public static func insert(
into context: NSManagedObjectContext,
property: Property
) -> Feed {
let object: Feed = context.insertObject()
object.configure(property: property)
return object
}

}

extension Feed: Managed {
public static var defaultSortDescriptors: [NSSortDescriptor] {
return [NSSortDescriptor(keyPath: \Feed.createdAt, ascending: false)]
}
}

extension Feed {

static func predicate(kind: Kind) -> NSPredicate {
return NSPredicate(format: "%K == %@", #keyPath(Feed.kindRaw), kind.rawValue)
}

static func predicate(acct: Acct) -> NSPredicate {
return NSPredicate(format: "%K == %@", #keyPath(Feed.acctRaw), acct.rawValue)
}

public static func predicate(kind: Kind, acct: Acct) -> NSPredicate {
return NSCompoundPredicate(andPredicateWithSubpredicates: [
Feed.predicate(kind: kind),
Feed.predicate(acct: acct)
])
}

public static func nonePredicate() -> NSPredicate {
return predicate(kind: .none, acct: .none)
}

public static func hasMorePredicate() -> NSPredicate {
return NSPredicate(format: "%K == YES", #keyPath(Feed.hasMore))
}

public static func hasNotificationPredicate() -> NSPredicate {
return NSPredicate(format: "%K != nil", #keyPath(Feed.notification))
}

public static func notificationTypePredicate(types: [MastodonNotificationType]) -> NSPredicate {
return NSCompoundPredicate(andPredicateWithSubpredicates: [
hasNotificationPredicate(),
NSPredicate(
format: "%K.%K IN %@",
#keyPath(Feed.notification),
#keyPath(Notification.typeRaw),
types.map { $0.rawValue }
)
])
}

}

// MARK: - AutoGenerateProperty
extension Feed: AutoGenerateProperty {
// sourcery:inline:Feed.AutoGenerateProperty

// Generated using Sourcery
// DO NOT EDIT
public struct Property {
public let acct: Acct
public let kind: Kind
public let hasMore: Bool
public let createdAt: Date
public let updatedAt: Date

public init(
acct: Acct,
kind: Kind,
hasMore: Bool,
createdAt: Date,
updatedAt: Date
) {
self.acct = acct
self.kind = kind
self.hasMore = hasMore
self.createdAt = createdAt
self.updatedAt = updatedAt
}
}

public func configure(property: Property) {
self.acct = property.acct
self.kind = property.kind
self.hasMore = property.hasMore
self.createdAt = property.createdAt
self.updatedAt = property.updatedAt
}

public func update(property: Property) {
update(hasMore: property.hasMore)
update(createdAt: property.createdAt)
update(updatedAt: property.updatedAt)
}
// sourcery:end
}

// MARK: - AutoUpdatableObject
extension Feed: AutoUpdatableObject {
// sourcery:inline:Feed.AutoUpdatableObject

// Generated using Sourcery
// DO NOT EDIT
public func update(hasMore: Bool) {
if self.hasMore != hasMore {
self.hasMore = hasMore
}
}
public func update(isLoadingMore: Bool) {
if self.isLoadingMore != isLoadingMore {
self.isLoadingMore = isLoadingMore
}
}
public func update(createdAt: Date) {
if self.createdAt != createdAt {
self.createdAt = createdAt
}
}
public func update(updatedAt: Date) {
if self.updatedAt != updatedAt {
self.updatedAt = updatedAt
}
}
// sourcery:end
}

public protocol FeedIndexable {
var feeds: Set<Feed> { get }
func feed(kind: Feed.Kind, acct: Feed.Acct) -> Feed?
}

extension FeedIndexable {
public func feed(kind: Feed.Kind, acct: Feed.Acct) -> Feed? {
return feeds.first(where: { feed in
feed.kind == kind && feed.acct == acct
})
}
}
File renamed without changes.
126 changes: 0 additions & 126 deletions CoreDataStack/Entity/Attachment.swift

This file was deleted.

File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Loading

0 comments on commit b76b3a2

Please sign in to comment.