Premiumize is another debrid provider. Add support in addition to other debrid services. Add a unified Magnet type that encloses both the link and hash when needed for certain services. A universal ASAuthenticationSession has been added to make implicit authentication easier for services that support it. Clean up declarations of certain variables that were mismanaged during the debrid decentralization process. Signed-off-by: kingbri <bdashore3@proton.me>
132 lines
5.3 KiB
Swift
132 lines
5.3 KiB
Swift
//
|
|
// MagnetChoiceView.swift
|
|
// Ferrite
|
|
//
|
|
// Created by Brian Dashore on 7/20/22.
|
|
//
|
|
|
|
import SwiftUI
|
|
import SwiftUIX
|
|
|
|
struct MagnetChoiceView: View {
|
|
@Environment(\.presentationMode) var presentationMode
|
|
|
|
@EnvironmentObject var scrapingModel: ScrapingViewModel
|
|
@EnvironmentObject var debridManager: DebridManager
|
|
@EnvironmentObject var navModel: NavigationViewModel
|
|
|
|
@AppStorage("RealDebrid.Enabled") var realDebridEnabled = false
|
|
|
|
@State private var showLinkCopyAlert = false
|
|
@State private var showMagnetCopyAlert = false
|
|
|
|
var body: some View {
|
|
NavView {
|
|
Form {
|
|
Section(header: "Now Playing") {
|
|
VStack(alignment: .leading, spacing: 5) {
|
|
Text(navModel.selectedTitle ?? "No title")
|
|
.font(.callout)
|
|
.lineLimit(navModel.selectedBatchTitle == nil ? .max : 1)
|
|
|
|
if let batchTitle = navModel.selectedBatchTitle {
|
|
Text(batchTitle)
|
|
.foregroundColor(.gray)
|
|
.font(.subheadline)
|
|
}
|
|
}
|
|
}
|
|
|
|
if !debridManager.downloadUrl.isEmpty {
|
|
Section(header: "Debrid options") {
|
|
ListRowButtonView("Play on Outplayer", systemImage: "arrow.up.forward.app.fill") {
|
|
navModel.runDebridAction(urlString: debridManager.downloadUrl, .outplayer)
|
|
}
|
|
|
|
ListRowButtonView("Play on VLC", systemImage: "arrow.up.forward.app.fill") {
|
|
navModel.runDebridAction(urlString: debridManager.downloadUrl, .vlc)
|
|
}
|
|
|
|
ListRowButtonView("Play on Infuse", systemImage: "arrow.up.forward.app.fill") {
|
|
navModel.runDebridAction(urlString: debridManager.downloadUrl, .infuse)
|
|
}
|
|
|
|
ListRowButtonView("Copy download URL", systemImage: "doc.on.doc.fill") {
|
|
UIPasteboard.general.string = debridManager.downloadUrl
|
|
showLinkCopyAlert.toggle()
|
|
}
|
|
.backport.alert(
|
|
isPresented: $showLinkCopyAlert,
|
|
title: "Copied",
|
|
message: "Download link copied successfully",
|
|
buttons: [AlertButton("OK")]
|
|
)
|
|
|
|
ListRowButtonView("Share download URL", systemImage: "square.and.arrow.up.fill") {
|
|
if let url = URL(string: debridManager.downloadUrl) {
|
|
navModel.activityItems = [url]
|
|
navModel.showLocalActivitySheet.toggle()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
Section(header: "Magnet options") {
|
|
ListRowButtonView("Copy magnet", systemImage: "doc.on.doc.fill") {
|
|
UIPasteboard.general.string = navModel.selectedSearchResult?.magnetLink
|
|
showMagnetCopyAlert.toggle()
|
|
}
|
|
.backport.alert(
|
|
isPresented: $showMagnetCopyAlert,
|
|
title: "Copied",
|
|
message: "Magnet link copied successfully",
|
|
buttons: [AlertButton("OK")]
|
|
)
|
|
|
|
ListRowButtonView("Share magnet", systemImage: "square.and.arrow.up.fill") {
|
|
if let result = navModel.selectedSearchResult,
|
|
let magnetLink = result.magnetLink,
|
|
let url = URL(string: magnetLink)
|
|
{
|
|
navModel.activityItems = [url]
|
|
navModel.showLocalActivitySheet.toggle()
|
|
}
|
|
}
|
|
|
|
ListRowButtonView("Open in WebTor", systemImage: "arrow.up.forward.app.fill") {
|
|
navModel.runMagnetAction(magnetString: navModel.selectedSearchResult?.magnetLink, .webtor)
|
|
}
|
|
}
|
|
}
|
|
.backport.tint(.primary)
|
|
.sheet(isPresented: $navModel.showLocalActivitySheet) {
|
|
if #available(iOS 16, *) {
|
|
AppActivityView(activityItems: navModel.activityItems)
|
|
.presentationDetents([.medium, .large])
|
|
} else {
|
|
AppActivityView(activityItems: navModel.activityItems)
|
|
}
|
|
}
|
|
.onDisappear {
|
|
debridManager.downloadUrl = ""
|
|
}
|
|
.navigationTitle("Link actions")
|
|
.navigationBarTitleDisplayMode(.inline)
|
|
.toolbar {
|
|
ToolbarItem(placement: .navigationBarTrailing) {
|
|
Button("Done") {
|
|
debridManager.downloadUrl = ""
|
|
|
|
presentationMode.wrappedValue.dismiss()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
struct MagnetChoiceView_Previews: PreviewProvider {
|
|
static var previews: some View {
|
|
MagnetChoiceView()
|
|
}
|
|
}
|