chore: add application property in toot
This commit is contained in:
parent
04d4e7f33a
commit
3557916747
|
@ -1,5 +1,11 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||||
<model type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="17709" systemVersion="20D64" minimumToolsVersion="Automatic" sourceLanguage="Swift" userDefinedModelVersionIdentifier="">
|
<model type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="17709" systemVersion="20D5029f" minimumToolsVersion="Automatic" sourceLanguage="Swift" userDefinedModelVersionIdentifier="">
|
||||||
|
<entity name="Application" representedClassName=".Application" syncable="YES">
|
||||||
|
<attribute name="name" attributeType="String"/>
|
||||||
|
<attribute name="vapidKey" optional="YES" attributeType="String"/>
|
||||||
|
<attribute name="website" optional="YES" attributeType="String"/>
|
||||||
|
<relationship name="toots" optional="YES" toMany="YES" deletionRule="Nullify" destinationEntity="Toot" inverseName="application" inverseEntity="Toot"/>
|
||||||
|
</entity>
|
||||||
<entity name="Emoji" representedClassName=".Emoji" syncable="YES">
|
<entity name="Emoji" representedClassName=".Emoji" syncable="YES">
|
||||||
<attribute name="category" optional="YES" attributeType="String"/>
|
<attribute name="category" optional="YES" attributeType="String"/>
|
||||||
<attribute name="createAt" attributeType="Date" defaultDateTimeInterval="631123200" usesScalarValueType="NO"/>
|
<attribute name="createAt" attributeType="Date" defaultDateTimeInterval="631123200" usesScalarValueType="NO"/>
|
||||||
|
@ -95,6 +101,7 @@
|
||||||
<attribute name="uri" attributeType="String"/>
|
<attribute name="uri" attributeType="String"/>
|
||||||
<attribute name="url" attributeType="String"/>
|
<attribute name="url" attributeType="String"/>
|
||||||
<attribute name="visibility" optional="YES" attributeType="String"/>
|
<attribute name="visibility" optional="YES" attributeType="String"/>
|
||||||
|
<relationship name="application" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="Application" inverseName="toots" inverseEntity="Application"/>
|
||||||
<relationship name="author" maxCount="1" deletionRule="Nullify" destinationEntity="MastodonUser" inverseName="toots" inverseEntity="MastodonUser"/>
|
<relationship name="author" maxCount="1" deletionRule="Nullify" destinationEntity="MastodonUser" inverseName="toots" inverseEntity="MastodonUser"/>
|
||||||
<relationship name="bookmarked" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="MastodonUser" inverseName="bookmarked" inverseEntity="MastodonUser"/>
|
<relationship name="bookmarked" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="MastodonUser" inverseName="bookmarked" inverseEntity="MastodonUser"/>
|
||||||
<relationship name="emojis" optional="YES" toMany="YES" deletionRule="Nullify" destinationEntity="Emoji" inverseName="toot" inverseEntity="Emoji"/>
|
<relationship name="emojis" optional="YES" toMany="YES" deletionRule="Nullify" destinationEntity="Emoji" inverseName="toot" inverseEntity="Emoji"/>
|
||||||
|
|
|
@ -0,0 +1,61 @@
|
||||||
|
//
|
||||||
|
// Application.swift
|
||||||
|
// CoreDataStack
|
||||||
|
//
|
||||||
|
// Created by sxiaojian on 2021/2/3.
|
||||||
|
//
|
||||||
|
|
||||||
|
import CoreData
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
public final class Application: NSManagedObject {
|
||||||
|
public typealias ID = UUID
|
||||||
|
@NSManaged public private(set) var identifier: ID
|
||||||
|
@NSManaged public private(set) var createAt: Date
|
||||||
|
|
||||||
|
@NSManaged public private(set) var name: String
|
||||||
|
@NSManaged public private(set) var website: String?
|
||||||
|
@NSManaged public private(set) var vapidKey: String?
|
||||||
|
|
||||||
|
// one-to-many relationship
|
||||||
|
@NSManaged public private(set) var toots: Set<Toot>
|
||||||
|
}
|
||||||
|
|
||||||
|
public extension Application {
|
||||||
|
override func awakeFromInsert() {
|
||||||
|
super.awakeFromInsert()
|
||||||
|
identifier = UUID()
|
||||||
|
}
|
||||||
|
|
||||||
|
@discardableResult
|
||||||
|
static func insert(
|
||||||
|
into context: NSManagedObjectContext,
|
||||||
|
property: Property
|
||||||
|
) -> Application {
|
||||||
|
let app: Application = context.insertObject()
|
||||||
|
app.name = property.name
|
||||||
|
app.website = property.website
|
||||||
|
app.vapidKey = property.vapidKey
|
||||||
|
return app
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public extension Application {
|
||||||
|
struct Property {
|
||||||
|
public let name: String
|
||||||
|
public let website: String?
|
||||||
|
public let vapidKey: String?
|
||||||
|
|
||||||
|
public init(name: String, website: String?, vapidKey: String?) {
|
||||||
|
self.name = name
|
||||||
|
self.website = website
|
||||||
|
self.vapidKey = vapidKey
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extension Application: Managed {
|
||||||
|
public static var defaultSortDescriptors: [NSSortDescriptor] {
|
||||||
|
return [NSSortDescriptor(keyPath: \Application.createAt, ascending: false)]
|
||||||
|
}
|
||||||
|
}
|
|
@ -21,6 +21,7 @@ public final class Toot: NSManagedObject {
|
||||||
@NSManaged public private(set) var visibility: String?
|
@NSManaged public private(set) var visibility: String?
|
||||||
@NSManaged public private(set) var sensitive: Bool
|
@NSManaged public private(set) var sensitive: Bool
|
||||||
@NSManaged public private(set) var spoilerText: String?
|
@NSManaged public private(set) var spoilerText: String?
|
||||||
|
@NSManaged public private(set) var application: Application?
|
||||||
|
|
||||||
// Informational
|
// Informational
|
||||||
@NSManaged public private(set) var reblogsCount: NSNumber
|
@NSManaged public private(set) var reblogsCount: NSNumber
|
||||||
|
@ -88,6 +89,9 @@ public extension Toot {
|
||||||
toot.sensitive = property.sensitive
|
toot.sensitive = property.sensitive
|
||||||
toot.spoilerText = property.spoilerText
|
toot.spoilerText = property.spoilerText
|
||||||
|
|
||||||
|
if let application = property.application {
|
||||||
|
toot.mutableSetValue(forKey: #keyPath(Toot.application)).add(application)
|
||||||
|
}
|
||||||
if let mentions = property.mentions {
|
if let mentions = property.mentions {
|
||||||
toot.mutableSetValue(forKey: #keyPath(Toot.mentions)).addObjects(from: mentions)
|
toot.mutableSetValue(forKey: #keyPath(Toot.mentions)).addObjects(from: mentions)
|
||||||
}
|
}
|
||||||
|
@ -123,11 +127,9 @@ public extension Toot {
|
||||||
if let bookmarkedBy = property.bookmarkedBy {
|
if let bookmarkedBy = property.bookmarkedBy {
|
||||||
toot.mutableSetValue(forKey: #keyPath(Toot.bookmarkedBy)).add(bookmarkedBy)
|
toot.mutableSetValue(forKey: #keyPath(Toot.bookmarkedBy)).add(bookmarkedBy)
|
||||||
}
|
}
|
||||||
|
if let pinnedBy = property.pinnedBy {
|
||||||
// TODO: not implement yet
|
toot.mutableSetValue(forKey: #keyPath(Toot.pinnedBy)).add(pinnedBy)
|
||||||
// if let pinnedBy = property.pinnedBy {
|
}
|
||||||
// toot.mutableSetValue(forKey: #keyPath(Toot.pinnedBy))
|
|
||||||
// }
|
|
||||||
|
|
||||||
toot.updatedAt = property.updatedAt
|
toot.updatedAt = property.updatedAt
|
||||||
toot.deletedAt = property.deletedAt
|
toot.deletedAt = property.deletedAt
|
||||||
|
@ -150,6 +152,7 @@ public extension Toot {
|
||||||
visibility: String?,
|
visibility: String?,
|
||||||
sensitive: Bool,
|
sensitive: Bool,
|
||||||
spoilerText: String?,
|
spoilerText: String?,
|
||||||
|
application: Application?,
|
||||||
mentions: [Mention]?,
|
mentions: [Mention]?,
|
||||||
emojis: [Emoji]?,
|
emojis: [Emoji]?,
|
||||||
tags: [Tag]?,
|
tags: [Tag]?,
|
||||||
|
@ -181,6 +184,7 @@ public extension Toot {
|
||||||
self.visibility = visibility
|
self.visibility = visibility
|
||||||
self.sensitive = sensitive
|
self.sensitive = sensitive
|
||||||
self.spoilerText = spoilerText
|
self.spoilerText = spoilerText
|
||||||
|
self.application = application
|
||||||
self.mentions = mentions
|
self.mentions = mentions
|
||||||
self.emojis = emojis
|
self.emojis = emojis
|
||||||
self.tags = tags
|
self.tags = tags
|
||||||
|
@ -215,6 +219,7 @@ public extension Toot {
|
||||||
public let visibility: String?
|
public let visibility: String?
|
||||||
public let sensitive: Bool
|
public let sensitive: Bool
|
||||||
public let spoilerText: String?
|
public let spoilerText: String?
|
||||||
|
public let application: Application?
|
||||||
|
|
||||||
public let mentions: [Mention]?
|
public let mentions: [Mention]?
|
||||||
public let emojis: [Emoji]?
|
public let emojis: [Emoji]?
|
||||||
|
|
|
@ -36,6 +36,8 @@
|
||||||
2D927F1425C7EDD9004F19B8 /* Emoji.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D927F1325C7EDD9004F19B8 /* Emoji.swift */; };
|
2D927F1425C7EDD9004F19B8 /* Emoji.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D927F1325C7EDD9004F19B8 /* Emoji.swift */; };
|
||||||
2DA7D04425CA52B200804E11 /* TimelineLoaderTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DA7D04325CA52B200804E11 /* TimelineLoaderTableViewCell.swift */; };
|
2DA7D04425CA52B200804E11 /* TimelineLoaderTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DA7D04325CA52B200804E11 /* TimelineLoaderTableViewCell.swift */; };
|
||||||
2DA7D04A25CA52CB00804E11 /* TimelineBottomLoaderTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DA7D04925CA52CB00804E11 /* TimelineBottomLoaderTableViewCell.swift */; };
|
2DA7D04A25CA52CB00804E11 /* TimelineBottomLoaderTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DA7D04925CA52CB00804E11 /* TimelineBottomLoaderTableViewCell.swift */; };
|
||||||
|
2DA7D05125CA545E00804E11 /* LoadMoreConfigurableTableViewContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DA7D05025CA545E00804E11 /* LoadMoreConfigurableTableViewContainer.swift */; };
|
||||||
|
2DA7D05725CA693F00804E11 /* Application.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DA7D05625CA693F00804E11 /* Application.swift */; };
|
||||||
2DF123A725C3B0210020F248 /* ActiveLabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DF123A625C3B0210020F248 /* ActiveLabel.swift */; };
|
2DF123A725C3B0210020F248 /* ActiveLabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DF123A625C3B0210020F248 /* ActiveLabel.swift */; };
|
||||||
3533495136D843E85211E3E2 /* Pods_Mastodon_MastodonUITests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A1B4523A7981F1044DE89C21 /* Pods_Mastodon_MastodonUITests.framework */; };
|
3533495136D843E85211E3E2 /* Pods_Mastodon_MastodonUITests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A1B4523A7981F1044DE89C21 /* Pods_Mastodon_MastodonUITests.framework */; };
|
||||||
45B49097460EDE530AD5AA72 /* Pods_Mastodon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A4ABE34829701A4496C5BB64 /* Pods_Mastodon.framework */; };
|
45B49097460EDE530AD5AA72 /* Pods_Mastodon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A4ABE34829701A4496C5BB64 /* Pods_Mastodon.framework */; };
|
||||||
|
@ -177,6 +179,7 @@
|
||||||
2DA7D04325CA52B200804E11 /* TimelineLoaderTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineLoaderTableViewCell.swift; sourceTree = "<group>"; };
|
2DA7D04325CA52B200804E11 /* TimelineLoaderTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineLoaderTableViewCell.swift; sourceTree = "<group>"; };
|
||||||
2DA7D04925CA52CB00804E11 /* TimelineBottomLoaderTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineBottomLoaderTableViewCell.swift; sourceTree = "<group>"; };
|
2DA7D04925CA52CB00804E11 /* TimelineBottomLoaderTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineBottomLoaderTableViewCell.swift; sourceTree = "<group>"; };
|
||||||
2DA7D05025CA545E00804E11 /* LoadMoreConfigurableTableViewContainer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoadMoreConfigurableTableViewContainer.swift; sourceTree = "<group>"; };
|
2DA7D05025CA545E00804E11 /* LoadMoreConfigurableTableViewContainer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoadMoreConfigurableTableViewContainer.swift; sourceTree = "<group>"; };
|
||||||
|
2DA7D05625CA693F00804E11 /* Application.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Application.swift; sourceTree = "<group>"; };
|
||||||
2DF123A625C3B0210020F248 /* ActiveLabel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActiveLabel.swift; sourceTree = "<group>"; };
|
2DF123A625C3B0210020F248 /* ActiveLabel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActiveLabel.swift; sourceTree = "<group>"; };
|
||||||
2E1F6A67FDF9771D3E064FDC /* Pods-Mastodon.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Mastodon.debug.xcconfig"; path = "Target Support Files/Pods-Mastodon/Pods-Mastodon.debug.xcconfig"; sourceTree = "<group>"; };
|
2E1F6A67FDF9771D3E064FDC /* Pods-Mastodon.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Mastodon.debug.xcconfig"; path = "Target Support Files/Pods-Mastodon/Pods-Mastodon.debug.xcconfig"; sourceTree = "<group>"; };
|
||||||
3C030226D3C73DCC23D67452 /* Pods_Mastodon_MastodonUITests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Mastodon_MastodonUITests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
3C030226D3C73DCC23D67452 /* Pods_Mastodon_MastodonUITests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Mastodon_MastodonUITests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
|
@ -621,6 +624,7 @@
|
||||||
2D927F0D25C7E9C9004F19B8 /* History.swift */,
|
2D927F0D25C7E9C9004F19B8 /* History.swift */,
|
||||||
2D927F1325C7EDD9004F19B8 /* Emoji.swift */,
|
2D927F1325C7EDD9004F19B8 /* Emoji.swift */,
|
||||||
DB45FAEC25CA7A9A005A8AC7 /* MastodonAuthentication.swift */,
|
DB45FAEC25CA7A9A005A8AC7 /* MastodonAuthentication.swift */,
|
||||||
|
2DA7D05625CA693F00804E11 /* Application.swift */,
|
||||||
);
|
);
|
||||||
path = Entity;
|
path = Entity;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
@ -1126,6 +1130,7 @@
|
||||||
isa = PBXSourcesBuildPhase;
|
isa = PBXSourcesBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
|
2DA7D05725CA693F00804E11 /* Application.swift in Sources */,
|
||||||
2D927F1425C7EDD9004F19B8 /* Emoji.swift in Sources */,
|
2D927F1425C7EDD9004F19B8 /* Emoji.swift in Sources */,
|
||||||
DB89BA1225C1105C008580ED /* CoreDataStack.swift in Sources */,
|
DB89BA1225C1105C008580ED /* CoreDataStack.swift in Sources */,
|
||||||
DB89BA1C25C1107F008580ED /* NSManagedObjectContext.swift in Sources */,
|
DB89BA1C25C1107F008580ED /* NSManagedObjectContext.swift in Sources */,
|
||||||
|
|
|
@ -27,6 +27,9 @@ extension APIService.Persist {
|
||||||
let _ = toots.map {
|
let _ = toots.map {
|
||||||
let userProperty = MastodonUser.Property(id: $0.account.id, domain: domain, acct: $0.account.acct, username: $0.account.username, displayName: $0.account.displayName,avatar: $0.account.avatar,avatarStatic: $0.account.avatarStatic, createdAt: $0.createdAt, networkDate: $0.createdAt)
|
let userProperty = MastodonUser.Property(id: $0.account.id, domain: domain, acct: $0.account.acct, username: $0.account.username, displayName: $0.account.displayName,avatar: $0.account.avatar,avatarStatic: $0.account.avatarStatic, createdAt: $0.createdAt, networkDate: $0.createdAt)
|
||||||
let author = MastodonUser.insert(into: managedObjectContext, property: userProperty)
|
let author = MastodonUser.insert(into: managedObjectContext, property: userProperty)
|
||||||
|
let application = $0.application.flatMap { (app) -> Application? in
|
||||||
|
Application.insert(into: managedObjectContext, property: Application.Property(name: app.name, website: app.website, vapidKey: app.vapidKey))
|
||||||
|
}
|
||||||
let metions = $0.mentions?.compactMap({ (mention) -> Mention in
|
let metions = $0.mentions?.compactMap({ (mention) -> Mention in
|
||||||
Mention.insert(into: managedObjectContext, property: Mention.Property(id: mention.id, username: mention.username, acct: mention.acct, url: mention.url))
|
Mention.insert(into: managedObjectContext, property: Mention.Property(id: mention.id, username: mention.username, acct: mention.acct, url: mention.url))
|
||||||
})
|
})
|
||||||
|
@ -49,6 +52,7 @@ extension APIService.Persist {
|
||||||
visibility: $0.visibility?.rawValue,
|
visibility: $0.visibility?.rawValue,
|
||||||
sensitive: $0.sensitive ?? false,
|
sensitive: $0.sensitive ?? false,
|
||||||
spoilerText: $0.spoilerText,
|
spoilerText: $0.spoilerText,
|
||||||
|
application: application,
|
||||||
mentions: metions,
|
mentions: metions,
|
||||||
emojis: emojis,
|
emojis: emojis,
|
||||||
tags: tags,
|
tags: tags,
|
||||||
|
|
Loading…
Reference in New Issue