mirror of
https://github.com/metabolist/metatext.git
synced 2024-05-18 08:23:00 +00:00
48 lines
1.3 KiB
Swift
48 lines
1.3 KiB
Swift
// Copyright © 2020 Metabolist. All rights reserved.
|
|
|
|
import Foundation
|
|
import GRDB
|
|
import Mastodon
|
|
|
|
extension Timeline: FetchableRecord, PersistableRecord {
|
|
enum Columns: String, ColumnExpression {
|
|
case id, listTitle
|
|
}
|
|
|
|
public init(row: Row) {
|
|
switch (row[Columns.id] as String, row[Columns.listTitle] as String?) {
|
|
case (Timeline.home.id, _):
|
|
self = .home
|
|
case (Timeline.local.id, _):
|
|
self = .local
|
|
case (Timeline.federated.id, _):
|
|
self = .federated
|
|
case (let id, .some(let title)):
|
|
self = .list(MastodonList(id: id, title: title))
|
|
default:
|
|
self = .tag(row[Columns.id])
|
|
}
|
|
}
|
|
|
|
public func encode(to container: inout PersistenceContainer) {
|
|
container[Columns.id] = id
|
|
|
|
if case let .list(list) = self {
|
|
container[Columns.listTitle] = list.title
|
|
}
|
|
}
|
|
}
|
|
|
|
extension Timeline {
|
|
static let statusJoins = hasMany(TimelineStatusJoin.self)
|
|
static let statuses = hasMany(
|
|
StoredStatus.self,
|
|
through: statusJoins,
|
|
using: TimelineStatusJoin.status)
|
|
.order(Column("createdAt").desc)
|
|
|
|
var statuses: QueryInterfaceRequest<StatusResult> {
|
|
request(for: Self.statuses).statusResultRequest
|
|
}
|
|
}
|