Tree: Format

Signed-off-by: kingbri <bdashore3@proton.me>
This commit is contained in:
kingbri 2024-06-08 12:27:36 -04:00 committed by Brian Dashore
parent 5b4cef7ef0
commit 457d938be8
6 changed files with 32 additions and 34 deletions

View file

@ -13,7 +13,7 @@ public class Premiumize: OAuthDebridSource, ObservableObject {
public let website = "https://premiumize.me" public let website = "https://premiumize.me"
@Published public var authProcessing: Bool = false @Published public var authProcessing: Bool = false
public var isLoggedIn: Bool { public var isLoggedIn: Bool {
return getToken() != nil getToken() != nil
} }
public var manualToken: String? { public var manualToken: String? {

View file

@ -7,7 +7,7 @@
import Foundation import Foundation
public class RealDebrid: PollingDebridSource, ObservableObject { public class RealDebrid: PollingDebridSource, ObservableObject {
public let id = "RealDebrid" public let id = "RealDebrid"
public let abbreviation = "RD" public let abbreviation = "RD"
public let website = "https://real-debrid.com" public let website = "https://real-debrid.com"

View file

@ -9,7 +9,7 @@ import Foundation
public protocol DebridSource: AnyObservableObject { public protocol DebridSource: AnyObservableObject {
// ID of the service // ID of the service
//var id: DebridInfo { get } // var id: DebridInfo { get }
var id: String { get } var id: String { get }
var abbreviation: String { get } var abbreviation: String { get }
var website: String { get } var website: String { get }

View file

@ -12,12 +12,12 @@
// TODO: Replace with Observable when minVersion >= iOS 17 // TODO: Replace with Observable when minVersion >= iOS 17
// //
import SwiftUI
import Combine import Combine
import SwiftUI
class ErasedObservableObject: ObservableObject { class ErasedObservableObject: ObservableObject {
let objectWillChange: AnyPublisher<Void, Never> let objectWillChange: AnyPublisher<Void, Never>
init(objectWillChange: AnyPublisher<Void, Never>) { init(objectWillChange: AnyPublisher<Void, Never>) {
self.objectWillChange = objectWillChange self.objectWillChange = objectWillChange
} }
@ -62,14 +62,14 @@ public protocol AnyObservableObject: AnyObject {
public struct Store<ObjectType> { public struct Store<ObjectType> {
/// The underlying object being stored. /// The underlying object being stored.
public let wrappedValue: ObjectType public let wrappedValue: ObjectType
// See https://github.com/Tiny-Home-Consulting/Dependiject/issues/38 // See https://github.com/Tiny-Home-Consulting/Dependiject/issues/38
fileprivate var _observableObject: ObservedObject<ErasedObservableObject> fileprivate var _observableObject: ObservedObject<ErasedObservableObject>
@MainActor internal var observableObject: ErasedObservableObject { @MainActor internal var observableObject: ErasedObservableObject {
return _observableObject.wrappedValue _observableObject.wrappedValue
} }
/// A projected value which has the same properties as the wrapped value, but presented as /// A projected value which has the same properties as the wrapped value, but presented as
/// bindings. /// bindings.
/// ///
@ -84,55 +84,54 @@ public struct Store<ObjectType> {
/// } /// }
/// ``` /// ```
public var projectedValue: Wrapper { public var projectedValue: Wrapper {
return Wrapper(self) Wrapper(self)
} }
/// Create a stored value on a custom scheduler. /// Create a stored value on a custom scheduler.
/// ///
/// Use this init to schedule updates on a specific scheduler other than `DispatchQueue.main`. /// Use this init to schedule updates on a specific scheduler other than `DispatchQueue.main`.
public init<S: Scheduler>( public init<S: Scheduler>(wrappedValue: ObjectType,
wrappedValue: ObjectType, on scheduler: S,
on scheduler: S, schedulerOptions: S.SchedulerOptions? = nil)
schedulerOptions: S.SchedulerOptions? = nil {
) {
self.wrappedValue = wrappedValue self.wrappedValue = wrappedValue
if let observable = wrappedValue as? AnyObservableObject { if let observable = wrappedValue as? AnyObservableObject {
let objectWillChange = observable.objectWillChange let objectWillChange = observable.objectWillChange
.receive(on: scheduler, options: schedulerOptions) .receive(on: scheduler, options: schedulerOptions)
.eraseToAnyPublisher() .eraseToAnyPublisher()
self._observableObject = .init(initialValue: .init(objectWillChange: objectWillChange)) _observableObject = .init(initialValue: .init(objectWillChange: objectWillChange))
} else { } else {
assertionFailure( assertionFailure(
"Only use the Store property wrapper with objects conforming to AnyObservableObject." "Only use the Store property wrapper with objects conforming to AnyObservableObject."
) )
self._observableObject = .init(initialValue: .empty()) _observableObject = .init(initialValue: .empty())
} }
} }
/// Create a stored value which publishes on the main thread. /// Create a stored value which publishes on the main thread.
/// ///
/// To control when updates are published, see ``init(wrappedValue:on:schedulerOptions:)``. /// To control when updates are published, see ``init(wrappedValue:on:schedulerOptions:)``.
public init(wrappedValue: ObjectType) { public init(wrappedValue: ObjectType) {
self.init(wrappedValue: wrappedValue, on: DispatchQueue.main) self.init(wrappedValue: wrappedValue, on: DispatchQueue.main)
} }
/// An equivalent to SwiftUI's /// An equivalent to SwiftUI's
/// [`ObservedObject.Wrapper`](https://developer.apple.com/documentation/swiftui/observedobject/wrapper) /// [`ObservedObject.Wrapper`](https://developer.apple.com/documentation/swiftui/observedobject/wrapper)
/// type. /// type.
@dynamicMemberLookup @dynamicMemberLookup
public struct Wrapper { public struct Wrapper {
private var store: Store private var store: Store
internal init(_ store: Store<ObjectType>) { internal init(_ store: Store<ObjectType>) {
self.store = store self.store = store
} }
/// Returns a binding to the resulting value of a given key path. /// Returns a binding to the resulting value of a given key path.
public subscript<Subject>( public subscript<Subject>(
dynamicMember keyPath: ReferenceWritableKeyPath<ObjectType, Subject> dynamicMember keyPath: ReferenceWritableKeyPath<ObjectType, Subject>
) -> Binding<Subject> { ) -> Binding<Subject> {
return Binding { Binding {
self.store.wrappedValue[keyPath: keyPath] self.store.wrappedValue[keyPath: keyPath]
} set: { } set: {
self.store.wrappedValue[keyPath: keyPath] = $0 self.store.wrappedValue[keyPath: keyPath] = $0

View file

@ -27,7 +27,7 @@ public class DebridManager: ObservableObject {
} }
var enabledDebridCount: Int { var enabledDebridCount: Int {
debridSources.filter{ $0.isLoggedIn }.count debridSources.filter(\.isLoggedIn).count
} }
@Published var selectedDebridSource: DebridSource? { @Published var selectedDebridSource: DebridSource? {
@ -35,6 +35,7 @@ public class DebridManager: ObservableObject {
UserDefaults.standard.set(selectedDebridSource?.id ?? "", forKey: "Debrid.PreferredService") UserDefaults.standard.set(selectedDebridSource?.id ?? "", forKey: "Debrid.PreferredService")
} }
} }
var selectedDebridItem: DebridIA? var selectedDebridItem: DebridIA?
var selectedDebridFile: DebridIAFile? var selectedDebridFile: DebridIAFile?
@ -59,7 +60,6 @@ public class DebridManager: ObservableObject {
var premiumizeAuthProcessing: Bool = false var premiumizeAuthProcessing: Bool = false
init() { init() {
// Set the preferred service. Contains migration logic for earlier versions // Set the preferred service. Contains migration logic for earlier versions
if let rawPreferredService = UserDefaults.standard.string(forKey: "Debrid.PreferredService") { if let rawPreferredService = UserDefaults.standard.string(forKey: "Debrid.PreferredService") {
let debridServiceId: String? let debridServiceId: String?
@ -72,8 +72,8 @@ public class DebridManager: ObservableObject {
// Only set the debrid source if it's logged in // Only set the debrid source if it's logged in
// Otherwise remove the key // Otherwise remove the key
let tempDebridSource = self.debridSources.first { $0.id == debridServiceId } let tempDebridSource = debridSources.first { $0.id == debridServiceId }
if (tempDebridSource?.isLoggedIn ?? false) { if tempDebridSource?.isLoggedIn ?? false {
selectedDebridSource = tempDebridSource selectedDebridSource = tempDebridSource
} else { } else {
UserDefaults.standard.removeObject(forKey: "Debrid.PreferredService") UserDefaults.standard.removeObject(forKey: "Debrid.PreferredService")
@ -286,7 +286,7 @@ public class DebridManager: ObservableObject {
if let error { if let error {
throw DebridError.AuthQuery(description: "OAuth callback Error: \(error)") throw DebridError.AuthQuery(description: "OAuth callback Error: \(error)")
} }
if let callbackUrl = url { if let callbackUrl = url {
try oauthDebridSource.handleAuthCallback(url: callbackUrl) try oauthDebridSource.handleAuthCallback(url: callbackUrl)
@ -377,7 +377,6 @@ public class DebridManager: ObservableObject {
if error.code != -999 { if error.code != -999 {
await sendDebridError(error, prefix: "\(selectedSource.id) cloud fetch error") await sendDebridError(error, prefix: "\(selectedSource.id) cloud fetch error")
} }
} }
} }
} }

View file

@ -25,12 +25,12 @@ struct CloudTorrentView: View {
if cloudTorrent.status == "downloaded", !cloudTorrent.links.isEmpty { if cloudTorrent.status == "downloaded", !cloudTorrent.links.isEmpty {
navModel.resultFromCloud = true navModel.resultFromCloud = true
navModel.selectedTitle = cloudTorrent.fileName navModel.selectedTitle = cloudTorrent.fileName
var historyInfo = HistoryEntryJson( var historyInfo = HistoryEntryJson(
name: cloudTorrent.fileName, name: cloudTorrent.fileName,
source: debridSource.id source: debridSource.id
) )
Task { Task {
let magnet = Magnet(hash: cloudTorrent.hash, link: nil) let magnet = Magnet(hash: cloudTorrent.hash, link: nil)
await debridManager.populateDebridIA([magnet]) await debridManager.populateDebridIA([magnet])
@ -39,11 +39,11 @@ struct CloudTorrentView: View {
if cloudTorrent.links.count == 1 { if cloudTorrent.links.count == 1 {
await debridManager.fetchDebridDownload(magnet: magnet) await debridManager.fetchDebridDownload(magnet: magnet)
if !debridManager.downloadUrl.isEmpty { if !debridManager.downloadUrl.isEmpty {
historyInfo.url = debridManager.downloadUrl historyInfo.url = debridManager.downloadUrl
PersistenceController.shared.createHistory(historyInfo, performSave: true) PersistenceController.shared.createHistory(historyInfo, performSave: true)
pluginManager.runDefaultAction( pluginManager.runDefaultAction(
urlString: debridManager.downloadUrl, urlString: debridManager.downloadUrl,
navModel: navModel navModel: navModel
@ -63,7 +63,7 @@ struct CloudTorrentView: View {
.font(.callout) .font(.callout)
.fixedSize(horizontal: false, vertical: true) .fixedSize(horizontal: false, vertical: true)
.lineLimit(4) .lineLimit(4)
HStack { HStack {
Text(cloudTorrent.status.capitalizingFirstLetter()) Text(cloudTorrent.status.capitalizingFirstLetter())
Spacer() Spacer()