mirror of
https://github.com/yattee/yattee.git
synced 2026-02-19 17:29:45 +00:00
96 lines
3.1 KiB
Swift
96 lines
3.1 KiB
Swift
//
|
|
// DataExportStructures.swift
|
|
// Yattee
|
|
//
|
|
// Codable structures for exporting data to iCloud sync.
|
|
//
|
|
|
|
import Foundation
|
|
|
|
// MARK: - Subscription Export
|
|
|
|
/// Codable struct for exporting Subscription to iCloud.
|
|
struct SubscriptionExport: Codable {
|
|
let channelID: String
|
|
let sourceRawValue: String
|
|
let instanceURLString: String?
|
|
let name: String
|
|
let channelDescription: String?
|
|
let subscriberCount: Int?
|
|
let avatarURLString: String?
|
|
let bannerURLString: String?
|
|
let isVerified: Bool
|
|
let subscribedAt: Date
|
|
let lastUpdatedAt: Date
|
|
|
|
init(from subscription: Subscription) {
|
|
self.channelID = subscription.channelID
|
|
self.sourceRawValue = subscription.sourceRawValue
|
|
self.instanceURLString = subscription.instanceURLString
|
|
self.name = subscription.name
|
|
self.channelDescription = subscription.channelDescription
|
|
self.subscriberCount = subscription.subscriberCount
|
|
self.avatarURLString = subscription.avatarURLString
|
|
self.bannerURLString = subscription.bannerURLString
|
|
self.isVerified = subscription.isVerified
|
|
self.subscribedAt = subscription.subscribedAt
|
|
self.lastUpdatedAt = subscription.lastUpdatedAt
|
|
}
|
|
}
|
|
|
|
// MARK: - Media Source Export
|
|
|
|
/// Codable struct for exporting MediaSource (WebDAV and SMB) to iCloud.
|
|
/// Note: Local folder sources are never synced as they are device-specific.
|
|
struct MediaSourceExport: Codable {
|
|
let id: UUID
|
|
let name: String
|
|
let type: String // "webdav" or "smb"
|
|
let urlString: String
|
|
let username: String?
|
|
let isEnabled: Bool
|
|
let dateAdded: Date
|
|
let allowInvalidCertificates: Bool
|
|
|
|
// SMB-specific fields
|
|
let smbWorkgroup: String?
|
|
let smbProtocolVersion: Int32?
|
|
|
|
init(from source: MediaSource) {
|
|
self.id = source.id
|
|
self.name = source.name
|
|
self.type = source.type.rawValue
|
|
self.urlString = source.url.absoluteString
|
|
self.username = source.username
|
|
self.isEnabled = source.isEnabled
|
|
self.dateAdded = source.dateAdded
|
|
self.allowInvalidCertificates = source.allowInvalidCertificates
|
|
self.smbWorkgroup = source.smbWorkgroup
|
|
self.smbProtocolVersion = source.smbProtocolVersion?.rawValue
|
|
}
|
|
|
|
/// Converts back to a MediaSource. Creates WebDAV or SMB based on type.
|
|
func toMediaSource() -> MediaSource? {
|
|
guard let url = URL(string: urlString) else { return nil }
|
|
|
|
// Determine the source type (default to webdav for backward compatibility)
|
|
let sourceType = MediaSourceType(rawValue: type) ?? .webdav
|
|
|
|
// Only allow network source types (webdav and smb)
|
|
guard sourceType == .webdav || sourceType == .smb else { return nil }
|
|
|
|
return MediaSource(
|
|
id: id,
|
|
name: name,
|
|
type: sourceType,
|
|
url: url,
|
|
isEnabled: isEnabled,
|
|
dateAdded: dateAdded,
|
|
username: username,
|
|
allowInvalidCertificates: allowInvalidCertificates,
|
|
smbWorkgroup: smbWorkgroup,
|
|
smbProtocolVersion: smbProtocolVersion.flatMap { SMBProtocol(rawValue: $0) }
|
|
)
|
|
}
|
|
}
|