Files
yattee/Yattee/Data/RecentChannel.swift
2026-02-08 18:33:56 +01:00

70 lines
2.0 KiB
Swift

//
// RecentChannel.swift
// Yattee
//
// SwiftData model for recent channel visits.
//
import Foundation
import SwiftData
@Model
final class RecentChannel {
var id: UUID
var channelID: String
var sourceRawValue: String
var instanceURLString: String?
var name: String
var thumbnailURLString: String?
var subscriberCount: Int?
var isVerified: Bool
var visitedAt: Date
init(
id: UUID = UUID(),
channelID: String,
sourceRawValue: String,
instanceURLString: String? = nil,
name: String,
thumbnailURLString: String? = nil,
subscriberCount: Int? = nil,
isVerified: Bool = false,
visitedAt: Date = Date()
) {
self.id = id
self.channelID = channelID
self.sourceRawValue = sourceRawValue
self.instanceURLString = instanceURLString
self.name = name
self.thumbnailURLString = thumbnailURLString
self.subscriberCount = subscriberCount
self.isVerified = isVerified
self.visitedAt = visitedAt
}
/// Creates a RecentChannel from a Channel model
static func from(channel: Channel) -> RecentChannel {
let (sourceRaw, instanceURL) = extractSourceInfo(from: channel.id.source)
return RecentChannel(
channelID: channel.id.channelID,
sourceRawValue: sourceRaw,
instanceURLString: instanceURL,
name: channel.name,
thumbnailURLString: channel.thumbnailURL?.absoluteString,
subscriberCount: channel.subscriberCount,
isVerified: channel.isVerified
)
}
private static func extractSourceInfo(from source: ContentSource) -> (String, String?) {
switch source {
case .global:
return ("global", nil)
case .federated(_, let instance):
return ("federated", instance.absoluteString)
case .extracted:
return ("extracted", nil)
}
}
}