Simplify some things on status-stuff

This commit is contained in:
Nathan Mattes 2023-10-13 13:04:15 +02:00
parent 2f672f0a20
commit f5d680c7b4
3 changed files with 44 additions and 63 deletions

View File

@ -11,16 +11,6 @@ import Foundation
public final class Status: NSManagedObject { public final class Status: NSManagedObject {
public typealias ID = String public typealias ID = String
public class TranslatedContent: NSObject {
public let content: String
public let provider: String?
public init(content: String, provider: String?) {
self.content = content
self.provider = provider
}
}
// sourcery: autoGenerateProperty // sourcery: autoGenerateProperty
@NSManaged public private(set) var identifier: ID @NSManaged public private(set) var identifier: ID
// sourcery: autoGenerateProperty // sourcery: autoGenerateProperty
@ -120,7 +110,6 @@ public final class Status: NSManagedObject {
@NSManaged public private(set) var revealedAt: Date? @NSManaged public private(set) var revealedAt: Date?
// sourcery: autoUpdatableObject // sourcery: autoUpdatableObject
@NSManaged public private(set) var translatedContent: TranslatedContent?
} }
extension Status { extension Status {
@ -535,11 +524,6 @@ extension Status: AutoUpdatableObject {
self.revealedAt = revealedAt self.revealedAt = revealedAt
} }
} }
public func update(translatedContent: TranslatedContent?) {
if self.translatedContent != translatedContent {
self.translatedContent = translatedContent
}
}
public func update(attachments: [MastodonAttachment]) { public func update(attachments: [MastodonAttachment]) {
if self.attachments != attachments { if self.attachments != attachments {
self.attachments = attachments self.attachments = attachments

View File

@ -42,7 +42,7 @@ extension Mastodon.Entity {
// Informational // Informational
public let reblogsCount: Int public let reblogsCount: Int
public let favouritesCount: Int public let favouritesCount: Int
public let repliesCount: Int? public let repliesCount: Int
public let url: String? public let url: String?
public let inReplyToID: Status.ID? public let inReplyToID: Status.ID?
@ -54,15 +54,23 @@ extension Mastodon.Entity {
public let text: String? public let text: String?
// Authorized user // Authorized user
public let favourited: Bool? public let favourited: Bool
public let reblogged: Bool? public let reblogged: Bool
public let muted: Bool? public let muted: Bool
public let bookmarked: Bool? public let bookmarked: Bool
public let pinned: Bool? public let pinned: Bool?
// Computed Properties // Computed Properties
public var translatedContent: String? = nil public var translatedContent: String? = nil
public var domain: String? {
// get from URL
guard let url else { return nil }
let components = URLComponents(string: url)
return components?.host
}
enum CodingKeys: String, CodingKey { enum CodingKeys: String, CodingKey {
case id case id
case uri case uri
@ -134,3 +142,15 @@ extension Mastodon.Entity.Status {
} }
} }
} }
extension Mastodon.Entity.Status {
public class TranslatedContent: NSObject {
public let content: String
public let provider: String?
public init(content: String, provider: String?) {
self.content = content
self.provider = provider
}
}
}

View File

@ -206,7 +206,7 @@ extension StatusView {
) )
.map { _, emojis in .map { _, emojis in
do { do {
let content = MastodonContent(content: author.displayNameWithFallback, emojis: emojis.asDictionary) let content = MastodonContent(content: author.displayNameWithFallback, emojis: author.emojis?.asDictionary ?? [:])
let metaContent = try MastodonMetaContent.convert(document: content) let metaContent = try MastodonMetaContent.convert(document: content)
return metaContent return metaContent
} catch { } catch {
@ -302,7 +302,7 @@ extension StatusView {
} }
func configureTranslated(status: Mastodon.Entity.Status) { func configureTranslated(status: Mastodon.Entity.Status) {
let translatedContent: Status.TranslatedContent? = { let translatedContent: Mastodon.Entity.Status.TranslatedContent? = {
if let translatedContent = status.reblog?.translatedContent { if let translatedContent = status.reblog?.translatedContent {
return translatedContent return translatedContent
} }
@ -340,7 +340,7 @@ extension StatusView {
viewModel.language = (status.reblog ?? status).language viewModel.language = (status.reblog ?? status).language
// content // content
do { do {
let content = MastodonContent(content: statusEdit.content, emojis: statusEdit.emojis.asDictionary) let content = MastodonContent(content: statusEdit.content, emojis: statusEdit.emojis?.asDictionary ?? [:])
let metaContent = try MastodonMetaContent.convert(document: content) let metaContent = try MastodonMetaContent.convert(document: content)
viewModel.content = metaContent viewModel.content = metaContent
viewModel.translatedFromLanguage = nil viewModel.translatedFromLanguage = nil
@ -361,7 +361,7 @@ extension StatusView {
// spoilerText // spoilerText
if let spoilerText = status.spoilerText, !spoilerText.isEmpty { if let spoilerText = status.spoilerText, !spoilerText.isEmpty {
do { do {
let content = MastodonContent(content: spoilerText, emojis: status.emojis.asDictionary) let content = MastodonContent(content: spoilerText, emojis: status.emojis?.asDictionary ?? [:])
let metaContent = try MastodonMetaContent.convert(document: content) let metaContent = try MastodonMetaContent.convert(document: content)
viewModel.spoilerContent = metaContent viewModel.spoilerContent = metaContent
} catch { } catch {
@ -375,7 +375,7 @@ extension StatusView {
viewModel.language = (status.reblog ?? status).language viewModel.language = (status.reblog ?? status).language
// content // content
do { do {
let content = MastodonContent(content: status.content, emojis: status.emojis.asDictionary) let content = MastodonContent(content: status.content, emojis: status.emojis?.asDictionary ?? [:])
let metaContent = try MastodonMetaContent.convert(document: content) let metaContent = try MastodonMetaContent.convert(document: content)
viewModel.content = metaContent viewModel.content = metaContent
viewModel.translatedFromLanguage = nil viewModel.translatedFromLanguage = nil
@ -385,8 +385,8 @@ extension StatusView {
viewModel.content = PlaintextMetaContent(string: "") viewModel.content = PlaintextMetaContent(string: "")
} }
// visibility // visibility
status.publisher(for: \.visibilityRaw) status.publisher(for: \.visibility)
.compactMap { MastodonVisibility(rawValue: $0) } .map { $0 ?? .public }
.assign(to: \.visibility, on: viewModel) .assign(to: \.visibility, on: viewModel)
.store(in: &disposeBag) .store(in: &disposeBag)
// sensitive // sensitive
@ -504,59 +504,36 @@ extension StatusView {
let status = status.reblog ?? status let status = status.reblog ?? status
status.publisher(for: \.repliesCount) status.publisher(for: \.repliesCount)
.map(Int.init)
.assign(to: \.replyCount, on: viewModel) .assign(to: \.replyCount, on: viewModel)
.store(in: &disposeBag) .store(in: &disposeBag)
status.publisher(for: \.reblogsCount) status.publisher(for: \.reblogsCount)
.map(Int.init) emojis?.asDictionary ?? [:] .assign(to: \.reblogCount, on: viewModel)
.assign(to: \.reblogCount, on: viewModel)
.store(in: &disposeBag) .store(in: &disposeBag)
status.publisher(for: \.favouritesCount) status.publisher(for: \.favouritesCount)
.map(Int.init)
.assign(to: \.favoriteCount, on: viewModel) .assign(to: \.favoriteCount, on: viewModel)
.store(in: &disposeBag) .store(in: &disposeBag)
status.publisher(for: \.editedAt) status.publisher(for: \.editedAt)
.assign(to: \.editedAt, on: viewModel) .assign(to: \.editedAt, on: viewModel)
.store(in: &disposeBag) .store(in: &disposeBag)
status.publisher(for: \.editHistory) // status.publisher(for: \.editHistory)
.compactMap({ guard let edits = $0 else { return nil } // .compactMap({ guard let edits = $0 else { return nil }
return Array(edits) // //TODO: @zeitschlag get edits here
}) // return Array(edits)
.assign(to: \.statusEdits, on: viewModel) // })
.store(in: &disposeBag) // .assign(to: \.statusEdits, on: viewModel)
// .store(in: &disposeBag)
// relationship // relationship
status.publisher(for: \.rebloggedBy) status.publisher(for: \.reblogged)
.map { [weak viewModel] rebloggedBy in
guard let viewModel = viewModel else { return false }
guard let authContext = viewModel.authContext else { return false }
return rebloggedBy.contains(where: {
$0.id == authContext.mastodonAuthenticationBox.userID && $0.domain == authContext.mastodonAuthenticationBox.domain
})
}
.assign(to: \.isReblog, on: viewModel) .assign(to: \.isReblog, on: viewModel)
.store(in: &disposeBag) .store(in: &disposeBag)
status.publisher(for: \.favouritedBy) status.publisher(for: \.favourited)
.map { [weak viewModel]favouritedBy in
guard let viewModel = viewModel else { return false }
guard let authContext = viewModel.authContext else { return false }
return favouritedBy.contains(where: {
$0.id == authContext.mastodonAuthenticationBox.userID && $0.domain == authContext.mastodonAuthenticationBox.domain
})
}
.assign(to: \.isFavorite, on: viewModel) .assign(to: \.isFavorite, on: viewModel)
.store(in: &disposeBag) .store(in: &disposeBag)
status.publisher(for: \.bookmarkedBy) status.publisher(for: \.bookmarked)
.map { [weak viewModel] bookmarkedBy in
guard let viewModel = viewModel else { return false }
guard let authContext = viewModel.authContext else { return false }
return bookmarkedBy.contains(where: {
$0.id == authContext.mastodonAuthenticationBox.userID && $0.domain == authContext.mastodonAuthenticationBox.domain
})
}
.assign(to: \.isBookmark, on: viewModel) .assign(to: \.isBookmark, on: viewModel)
.store(in: &disposeBag) .store(in: &disposeBag)
} }