mirror of
https://github.com/yattee/yattee.git
synced 2026-02-20 01:39:46 +00:00
Yattee v2 rewrite
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
//
|
||||
// LocalSubscriptionProvider.swift
|
||||
// Yattee
|
||||
//
|
||||
// Local subscription provider using SwiftData with iCloud sync.
|
||||
// This is the default provider when using "Yattee (iCloud)" subscription account.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
/// Local subscription provider that stores subscriptions in SwiftData.
|
||||
/// Syncs with iCloud via CloudKitSyncEngine.
|
||||
@MainActor
|
||||
final class LocalSubscriptionProvider: SubscriptionProvider {
|
||||
// MARK: - Properties
|
||||
|
||||
let accountType: SubscriptionAccountType = .local
|
||||
private let dataManager: DataManager
|
||||
|
||||
// MARK: - Initialization
|
||||
|
||||
init(dataManager: DataManager) {
|
||||
self.dataManager = dataManager
|
||||
}
|
||||
|
||||
// MARK: - SubscriptionProvider
|
||||
|
||||
func fetchSubscriptions() async throws -> [Channel] {
|
||||
// Convert Subscription models to Channel models
|
||||
dataManager.subscriptions().map { subscription in
|
||||
Channel(
|
||||
id: ChannelID(source: subscription.contentSource, channelID: subscription.channelID),
|
||||
name: subscription.name,
|
||||
description: subscription.channelDescription,
|
||||
subscriberCount: subscription.subscriberCount,
|
||||
thumbnailURL: subscription.avatarURL,
|
||||
bannerURL: subscription.bannerURL,
|
||||
isVerified: subscription.isVerified
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
func subscribe(to channel: Channel) async throws {
|
||||
// Check if already subscribed
|
||||
if dataManager.isSubscribed(to: channel.id.channelID) {
|
||||
throw SubscriptionProviderError.alreadySubscribed
|
||||
}
|
||||
dataManager.subscribe(to: channel)
|
||||
}
|
||||
|
||||
func unsubscribe(from channelID: String) async throws {
|
||||
// Check if subscribed
|
||||
guard dataManager.isSubscribed(to: channelID) else {
|
||||
throw SubscriptionProviderError.notSubscribed
|
||||
}
|
||||
dataManager.unsubscribe(from: channelID)
|
||||
}
|
||||
|
||||
func isSubscribed(to channelID: String) async -> Bool {
|
||||
dataManager.isSubscribed(to: channelID)
|
||||
}
|
||||
|
||||
func refreshCache() async throws {
|
||||
// Local provider doesn't need cache refresh - data is already local
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user