From edde7ddb0c83c87dfdc668e555056052698ee188 Mon Sep 17 00:00:00 2001 From: leminlimez Date: Sun, 6 Jul 2025 19:02:03 -0400 Subject: [PATCH] explore page still needs fixed for no wifi and freezing --- Pocket Poster.xcodeproj/project.pbxproj | 4 +- .../Controllers/DownloadManager.swift | 54 +++++++++++++++++-- Pocket Poster/Localizable.xcstrings | 3 ++ Pocket Poster/Pocket_PosterApp.swift | 36 ++----------- .../Views/Accessory Views/WebView.swift | 46 ++++++++++++++++ .../Views/NavigatorViews/ExploreView.swift | 14 +++++ Pocket Poster/Views/RootView.swift | 4 ++ 7 files changed, 122 insertions(+), 39 deletions(-) create mode 100644 Pocket Poster/Views/Accessory Views/WebView.swift create mode 100644 Pocket Poster/Views/NavigatorViews/ExploreView.swift diff --git a/Pocket Poster.xcodeproj/project.pbxproj b/Pocket Poster.xcodeproj/project.pbxproj index f3054f6..5d45780 100644 --- a/Pocket Poster.xcodeproj/project.pbxproj +++ b/Pocket Poster.xcodeproj/project.pbxproj @@ -268,7 +268,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 2; + CURRENT_PROJECT_VERSION = 3; DEVELOPMENT_ASSET_PATHS = "\"Pocket Poster/Preview Content\""; DEVELOPMENT_TEAM = 2P4CP47H76; ENABLE_PREVIEWS = YES; @@ -300,7 +300,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 2; + CURRENT_PROJECT_VERSION = 3; DEVELOPMENT_ASSET_PATHS = "\"Pocket Poster/Preview Content\""; DEVELOPMENT_TEAM = 2P4CP47H76; ENABLE_PREVIEWS = YES; diff --git a/Pocket Poster/Controllers/DownloadManager.swift b/Pocket Poster/Controllers/DownloadManager.swift index a560d5f..9b53338 100644 --- a/Pocket Poster/Controllers/DownloadManager.swift +++ b/Pocket Poster/Controllers/DownloadManager.swift @@ -6,13 +6,57 @@ // import Foundation +import UIKit -class DownloadManager { - static func getWallpaperNameFromURL(string url: String) -> String { +class DownloadManager: ObservableObject { + static let shared = DownloadManager() + + @Published var downloadURL: String? = nil + + func getWallpaperNameFromURL(string url: String) -> String { return String(url.split(separator: "/").last ?? "Unknown") } - static func downloadFromURL(_ url: URL) async throws -> URL { + func startTendiesDownload(for url: URL) { + // prohibit to only tendies files + if !url.absoluteString.hasSuffix(".tendies") { + UIApplication.shared.alert(body: NSLocalizedString("Only .tendies files can be downloaded!", comment: "")) + } else if PosterBoardManager.shared.selectedTendies.count >= PosterBoardManager.MaxTendies { + UIApplication.shared.alert(title: NSLocalizedString("Max Tendies Reached", comment: ""), body: String(format: NSLocalizedString("You can only apply %@ descriptors.", comment: ""), "\(PosterBoardManager.MaxTendies)")) + } else { + DispatchQueue.main.async { + self.downloadURL = url.absoluteString.replacingOccurrences(of: "pocketposter://download?url=", with: "") + UIApplication.shared.confirmAlert(title: NSLocalizedString("Download Tendies File", comment: ""), body: String(format: NSLocalizedString("Would you like to download the file %@?", comment: ""), "\(self.getWallpaperNameFromURL(string: self.downloadURL ?? "/Unknown"))"), onOK: { + self.downloadWallpaper() + }, noCancel: false) + } + } + } + + func downloadWallpaper() { + UIImpactFeedbackGenerator(style: .soft).impactOccurred() + UIApplication.shared.alert(title: NSLocalizedString("Downloading", comment: "") + " \(getWallpaperNameFromURL(string: downloadURL ?? "/Unknown"))...", body: NSLocalizedString("Please wait", comment: ""), animated: false, withButton: false) + + Task { + do { + let newURL = try await downloadFromURL(string: downloadURL!) + DispatchQueue.main.async { + PosterBoardManager.shared.selectedTendies.append(newURL) + Haptic.shared.notify(.success) + UIApplication.shared.dismissAlert(animated: false) + UIApplication.shared.alert(title: NSLocalizedString("Successfully downloaded wallpaper!", comment: ""), body: NSLocalizedString("Your downloaded .tendies will be on the Home page.", comment: "after successfully downloading tendies")) + } + } catch { + DispatchQueue.main.async { + Haptic.shared.notify(.error) + UIApplication.shared.dismissAlert(animated: false) + UIApplication.shared.alert(title: NSLocalizedString("Could not download wallpaper!", comment: ""), body: error.localizedDescription) + } + } + } + } + + func downloadFromURL(_ url: URL) async throws -> URL { print("Downloading from \(url.absoluteString)") let request = URLRequest(url: url) @@ -24,12 +68,12 @@ class DownloadManager { return newURL } - static func downloadFromURL(string path: String) async throws -> URL { + func downloadFromURL(string path: String) async throws -> URL { guard let url = URL(string: path) else { throw URLError(.unknown) } return try await downloadFromURL(url) } - static func copyTendies(from url: URL) throws -> URL { + func copyTendies(from url: URL) throws -> URL { // scope the resource let accessing = url.startAccessingSecurityScopedResource() defer { diff --git a/Pocket Poster/Localizable.xcstrings b/Pocket Poster/Localizable.xcstrings index 8b562ed..f1359c0 100644 --- a/Pocket Poster/Localizable.xcstrings +++ b/Pocket Poster/Localizable.xcstrings @@ -3256,6 +3256,9 @@ } } } + }, + "Explore" : { + }, "Extracting tendies..." : { "comment" : "happens when unzipping the files", diff --git a/Pocket Poster/Pocket_PosterApp.swift b/Pocket Poster/Pocket_PosterApp.swift index 8e54693..c30dc7e 100644 --- a/Pocket Poster/Pocket_PosterApp.swift +++ b/Pocket Poster/Pocket_PosterApp.swift @@ -10,11 +10,11 @@ import SwiftUI @main struct Pocket_PosterApp: App { // Prefs + @ObservedObject var dlManager = DownloadManager.shared + @AppStorage("finishedTutorial") var finishedTutorial: Bool = false @AppStorage("pbHash") var pbHash: String = "" - @State var downloadURL: String? = nil - var body: some Scene { WindowGroup { Group { @@ -29,17 +29,7 @@ struct Pocket_PosterApp: App { .onOpenURL(perform: { url in // Download URL if url.absoluteString.starts(with: "pocketposter://download") { - // prohibit to only tendies files - if !url.absoluteString.hasSuffix(".tendies") { - UIApplication.shared.alert(body: NSLocalizedString("Only .tendies files can be downloaded!", comment: "")) - } else if PosterBoardManager.shared.selectedTendies.count >= PosterBoardManager.MaxTendies { - UIApplication.shared.alert(title: NSLocalizedString("Max Tendies Reached", comment: ""), body: String(format: NSLocalizedString("You can only apply %@ descriptors.", comment: ""), "\(PosterBoardManager.MaxTendies)")) - } else { - downloadURL = url.absoluteString.replacingOccurrences(of: "pocketposter://download?url=", with: "") - UIApplication.shared.confirmAlert(title: NSLocalizedString("Download Tendies File", comment: ""), body: String(format: NSLocalizedString("Would you like to download the file %@?", comment: ""), "\(DownloadManager.getWallpaperNameFromURL(string: downloadURL ?? "/Unknown"))"), onOK: { - downloadWallpaper() - }, noCancel: false) - } + dlManager.startTendiesDownload(for: url) } // App Hash URL else if url.absoluteString.starts(with: "pocketposter://app-hash?uuid=") { @@ -51,7 +41,7 @@ struct Pocket_PosterApp: App { } else { // copy it over to the KFC bucket do { - let newURL = try DownloadManager.copyTendies(from: url) + let newURL = try DownloadManager.shared.copyTendies(from: url) PosterBoardManager.shared.selectedTendies.append(newURL) Haptic.shared.notify(.success) UIApplication.shared.alert(title: String(format: NSLocalizedString("Successfully imported %@", comment: ""), "\(url.lastPathComponent)"), body: "") @@ -65,24 +55,6 @@ struct Pocket_PosterApp: App { } } - func downloadWallpaper() { - UIImpactFeedbackGenerator(style: .soft).impactOccurred() - UIApplication.shared.alert(title: NSLocalizedString("Downloading", comment: "") + " \(DownloadManager.getWallpaperNameFromURL(string: downloadURL ?? "/Unknown"))...", body: NSLocalizedString("Please wait", comment: ""), animated: false, withButton: false) - - Task { - do { - let newURL = try await DownloadManager.downloadFromURL(string: downloadURL!) - PosterBoardManager.shared.selectedTendies.append(newURL) - Haptic.shared.notify(.success) - UIApplication.shared.dismissAlert(animated: true) - } catch { - Haptic.shared.notify(.error) - UIApplication.shared.dismissAlert(animated: true) - UIApplication.shared.alert(title: NSLocalizedString("Could not download wallpaper!", comment: ""), body: error.localizedDescription) - } - } - } - init() { // clear the videos cache try? FileManager.default.removeItem(at: SymHandler.getDocumentsDirectory().appendingPathComponent("Videos", conformingTo: .directory)) diff --git a/Pocket Poster/Views/Accessory Views/WebView.swift b/Pocket Poster/Views/Accessory Views/WebView.swift new file mode 100644 index 0000000..a403cab --- /dev/null +++ b/Pocket Poster/Views/Accessory Views/WebView.swift @@ -0,0 +1,46 @@ +// +// WebView.swift +// Pocket Poster +// +// Created by lemin on 7/6/25. +// + +import Foundation +import SwiftUI +import WebKit + +struct WallpaperWebView: UIViewRepresentable { + let url: URL + + init(_ url: URL) { + self.url = url + } + + func makeUIView(context: Context) -> some UIView { + let configuration = WKWebViewConfiguration() + configuration.setURLSchemeHandler(AssetsSchemeHandler(), forURLScheme: "pocketposter") + let webView = WKWebView(frame: .zero, configuration: configuration) + webView.load(URLRequest(url: url)) + + return webView + } + + func updateUIView(_ uiView: UIViewType, context: Context) {} +} + + +class AssetsSchemeHandler: NSObject, WKURLSchemeHandler { + func webView(_ webView: WKWebView, start urlSchemeTask: WKURLSchemeTask) { + DispatchQueue.global().async { + print("handling scheme") + guard let url = urlSchemeTask.request.url, url.absoluteString.starts(with: "pocketposter://download") else { return } + + print("url: \(url.absoluteString)") + DownloadManager.shared.startTendiesDownload(for: url) + } + } + + func webView(_ webView: WKWebView, stop urlSchemeTask: WKURLSchemeTask) { + + } +} diff --git a/Pocket Poster/Views/NavigatorViews/ExploreView.swift b/Pocket Poster/Views/NavigatorViews/ExploreView.swift new file mode 100644 index 0000000..6f5f33f --- /dev/null +++ b/Pocket Poster/Views/NavigatorViews/ExploreView.swift @@ -0,0 +1,14 @@ +// +// ExploreView.swift +// Pocket Poster +// +// Created by lemin on 7/6/25. +// + +import SwiftUI + +struct ExploreView: View { + var body: some View { + WallpaperWebView(URL(string: "https://cowabun.ga/wallpapers?pocketposter=true")!) + } +} diff --git a/Pocket Poster/Views/RootView.swift b/Pocket Poster/Views/RootView.swift index b12f681..c0af04c 100644 --- a/Pocket Poster/Views/RootView.swift +++ b/Pocket Poster/Views/RootView.swift @@ -22,6 +22,10 @@ struct RootView: View { .tabItem { Label("CarPlay", systemImage: "car") } + ExploreView() + .tabItem { + Label("Explore", systemImage: "safari") + } } } }