From bd35b9e2be9edce6457266d0a7c90c28e2caa4c8 Mon Sep 17 00:00:00 2001 From: Bella <65065992+Bentheminernz@users.noreply.github.com> Date: Wed, 12 Mar 2025 20:15:41 +1300 Subject: [PATCH] Add update handling and UI for latest version notifications --- src/MeloNX/MeloNX.xcodeproj/project.pbxproj | 37 ++- .../xcshareddata/swiftpm/Package.resolved | 11 +- .../UserInterfaceState.xcuserstate | Bin 29397 -> 94898 bytes .../xcschemes/MeloNX - Debug.xcscheme | 114 ++++++++ .../App/Models/LatestVersionResponse.swift | 37 +++ .../Main/Updates/MeloNXUpdateSheet.swift | 64 +++++ src/MeloNX/MeloNX/App/Views/MeloNXApp.swift | 270 ++++-------------- 7 files changed, 308 insertions(+), 225 deletions(-) create mode 100644 src/MeloNX/MeloNX.xcodeproj/xcshareddata/xcschemes/MeloNX - Debug.xcscheme create mode 100644 src/MeloNX/MeloNX/App/Models/LatestVersionResponse.swift create mode 100644 src/MeloNX/MeloNX/App/Views/Main/Updates/MeloNXUpdateSheet.swift diff --git a/src/MeloNX/MeloNX.xcodeproj/project.pbxproj b/src/MeloNX/MeloNX.xcodeproj/project.pbxproj index 220ac3c7d..e79c0c1fe 100644 --- a/src/MeloNX/MeloNX.xcodeproj/project.pbxproj +++ b/src/MeloNX/MeloNX.xcodeproj/project.pbxproj @@ -24,6 +24,7 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 256C91642D8126E300F9736D /* Alamofire in Frameworks */ = {isa = PBXBuildFile; productRef = 256C91632D8126E300F9736D /* Alamofire */; }; 4E0DED342D05695D00FEF007 /* SwiftUIJoystick in Frameworks */ = {isa = PBXBuildFile; productRef = 4E0DED332D05695D00FEF007 /* SwiftUIJoystick */; }; 4E12B23C2D797CFA00FB2271 /* MeloNX.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 4E12B23B2D797CFA00FB2271 /* MeloNX.xcconfig */; }; 4E8A80772D5FDD2D0041B48F /* GameController.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4E80AA622CD7122800029585 /* GameController.framework */; }; @@ -205,6 +206,7 @@ files = ( 4E0DED342D05695D00FEF007 /* SwiftUIJoystick in Frameworks */, CA8F9C322D3F5AB200D7E586 /* GameController.framework in Frameworks */, + 256C91642D8126E300F9736D /* Alamofire in Frameworks */, 4EA5AE822D16807500AD0B9F /* SwiftSVG in Frameworks */, 4E8A80772D5FDD2D0041B48F /* GameController.framework in Frameworks */, ); @@ -303,6 +305,7 @@ packageProductDependencies = ( 4E0DED332D05695D00FEF007 /* SwiftUIJoystick */, 4EA5AE812D16807500AD0B9F /* SwiftSVG */, + 256C91632D8126E300F9736D /* Alamofire */, ); productName = MeloNX; productReference = 4E80A98D2CD6F54500029585 /* MeloNX.app */; @@ -395,6 +398,7 @@ packageReferences = ( 4E0DED322D05695D00FEF007 /* XCRemoteSwiftPackageReference "SwiftUIJoystick" */, 4EA5AE802D16807500AD0B9F /* XCRemoteSwiftPackageReference "SwiftSVG" */, + 256C91622D8126E300F9736D /* XCRemoteSwiftPackageReference "Alamofire" */, ); preferredProjectObjectVersion = 56; productRefGroup = 4E80A98E2CD6F54500029585 /* Products */; @@ -651,7 +655,7 @@ CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_ASSET_PATHS = ""; - DEVELOPMENT_TEAM = 95J8WZ4TN8; + DEVELOPMENT_TEAM = 4TD3JXVDW7; ENABLE_PREVIEWS = YES; ENABLE_TESTABILITY = NO; FRAMEWORK_SEARCH_PATHS = ( @@ -710,6 +714,8 @@ "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", + "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", + "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", ); GCC_OPTIMIZATION_LEVEL = s; GENERATE_INFOPLIST_FILE = YES; @@ -833,9 +839,13 @@ "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", + "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", + "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", + "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", + "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", ); MARKETING_VERSION = "$(VERSION)"; - PRODUCT_BUNDLE_IDENTIFIER = com.stossy11.MeloNX; + PRODUCT_BUNDLE_IDENTIFIER = xyz.belladev.MeloNX; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_OBJC_BRIDGING_HEADER = "MeloNX/App/Core/Headers/Ryujinx-Header.h"; @@ -854,7 +864,7 @@ CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_ASSET_PATHS = ""; - DEVELOPMENT_TEAM = 95J8WZ4TN8; + DEVELOPMENT_TEAM = 4TD3JXVDW7; ENABLE_PREVIEWS = YES; ENABLE_TESTABILITY = YES; FRAMEWORK_SEARCH_PATHS = ( @@ -913,6 +923,8 @@ "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", + "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", + "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", ); GCC_OPTIMIZATION_LEVEL = s; GENERATE_INFOPLIST_FILE = YES; @@ -1036,9 +1048,13 @@ "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", + "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", + "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", + "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", + "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", ); MARKETING_VERSION = "$(VERSION)"; - PRODUCT_BUNDLE_IDENTIFIER = com.stossy11.MeloNX; + PRODUCT_BUNDLE_IDENTIFIER = xyz.belladev.MeloNX; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_OBJC_BRIDGING_HEADER = "MeloNX/App/Core/Headers/Ryujinx-Header.h"; @@ -1235,6 +1251,14 @@ /* End XCConfigurationList section */ /* Begin XCRemoteSwiftPackageReference section */ + 256C91622D8126E300F9736D /* XCRemoteSwiftPackageReference "Alamofire" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/Alamofire/Alamofire"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 5.10.2; + }; + }; 4E0DED322D05695D00FEF007 /* XCRemoteSwiftPackageReference "SwiftUIJoystick" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/michael94ellis/SwiftUIJoystick"; @@ -1254,6 +1278,11 @@ /* End XCRemoteSwiftPackageReference section */ /* Begin XCSwiftPackageProductDependency section */ + 256C91632D8126E300F9736D /* Alamofire */ = { + isa = XCSwiftPackageProductDependency; + package = 256C91622D8126E300F9736D /* XCRemoteSwiftPackageReference "Alamofire" */; + productName = Alamofire; + }; 4E0DED332D05695D00FEF007 /* SwiftUIJoystick */ = { isa = XCSwiftPackageProductDependency; package = 4E0DED322D05695D00FEF007 /* XCRemoteSwiftPackageReference "SwiftUIJoystick" */; diff --git a/src/MeloNX/MeloNX.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/src/MeloNX/MeloNX.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index af8dd513e..1ff84bf65 100644 --- a/src/MeloNX/MeloNX.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/src/MeloNX/MeloNX.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -1,6 +1,15 @@ { - "originHash" : "d611b071fbe94fdc9900a07a218340eab4ce2c3c7168bf6542f2830c0400a72b", + "originHash" : "587a0e7c5c7d612a2c16a973e66df9a6a582b963cb51df7c89fd96cb28ef4a63", "pins" : [ + { + "identity" : "alamofire", + "kind" : "remoteSourceControl", + "location" : "https://github.com/Alamofire/Alamofire", + "state" : { + "revision" : "513364f870f6bfc468f9d2ff0a95caccc10044c5", + "version" : "5.10.2" + } + }, { "identity" : "swiftsvg", "kind" : "remoteSourceControl", diff --git a/src/MeloNX/MeloNX.xcodeproj/project.xcworkspace/xcuserdata/benlawrence.xcuserdatad/UserInterfaceState.xcuserstate b/src/MeloNX/MeloNX.xcodeproj/project.xcworkspace/xcuserdata/benlawrence.xcuserdatad/UserInterfaceState.xcuserstate index d95c76d6512f8a9579497e23d38ec26472381107..c09dbeb943b2ba4de66e96ce2cab4486d7c3eb79 100644 GIT binary patch literal 94898 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%0Dls(lf6lwJ5c?Br`7^ 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 delta 17009 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 o68 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/MeloNX/MeloNX/App/Models/LatestVersionResponse.swift b/src/MeloNX/MeloNX/App/Models/LatestVersionResponse.swift new file mode 100644 index 000000000..cbec8fba8 --- /dev/null +++ b/src/MeloNX/MeloNX/App/Models/LatestVersionResponse.swift @@ -0,0 +1,37 @@ +// +// LatestVersionResponse.swift +// MeloNX +// +// Created by Bella on 12/03/2025. +// + +struct LatestVersionResponse: Codable { + let version_number: String + let version_number_stripped: String + let changelog: String + let download_link: String + + #if DEBUG + static let example1 = LatestVersionResponse( + version_number: "1.0.0", + version_number_stripped: "100", + changelog: """ + - Rewrite Display Code (SDL isn't used for display anymore) + - Add New Onboarding / Setup + - Better Performance + - Remove "SDL Window" option in settings + - Fix JIT Cache Regions + - Fix how JIT is detected in Settings + - Fix ABYX being swapped on controller. + - Settings are now a config.json file + - Fix Performance Overlay not showing when Virtual Controller is hidden + - Add displaying logs when Loading or in-game + - Fix Launching games from outside of the roms folder + - Add Waiting for JIT popup + - Fix spesific Games + - Added Back Herobrine ("You were supposed to be the hero, Bryan") + """, + download_link: "https://example.com" + ) + #endif +} diff --git a/src/MeloNX/MeloNX/App/Views/Main/Updates/MeloNXUpdateSheet.swift b/src/MeloNX/MeloNX/App/Views/Main/Updates/MeloNXUpdateSheet.swift new file mode 100644 index 000000000..63f50da03 --- /dev/null +++ b/src/MeloNX/MeloNX/App/Views/Main/Updates/MeloNXUpdateSheet.swift @@ -0,0 +1,64 @@ +// +// MeloNXUpdateSheet.swift +// MeloNX +// +// Created by Bella on 12/03/2025. +// + +import SwiftUI + +struct MeloNXUpdateSheet: View { + let updateInfo: LatestVersionResponse + @Binding var isPresented: Bool + + var body: some View { + iOSNav { + VStack { + Text("Version \(updateInfo.version_number) is available. You are currently on Version \(Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "Unknown").") + + VStack { + Text("Changelog:") + .frame(maxWidth: .infinity, alignment: .leading) + .font(.headline) + + ScrollView { + Text(updateInfo.changelog) + .padding() + } + .frame(maxHeight: 400) + .background(Color(.secondarySystemBackground)) + .clipShape(RoundedRectangle(cornerRadius: 10)) + } + .padding(.top, 15) + + + Spacer() + Button(action: { + if let url = URL(string: updateInfo.download_link) { + UIApplication.shared.open(url) + } + }) { + Text("Download Now") + .font(.title3) + .bold() + .frame(width: 300, height: 40) + } + .buttonStyle(.borderedProminent) + .frame(alignment: .bottom) + } + .padding(.horizontal) + .navigationTitle("Version \(updateInfo.version_number) Available!") + .toolbar { + Button(action: { + isPresented = false + }) { + Text("Close") + } + } + } + } +} + +#Preview { + MeloNXUpdateSheet(updateInfo: LatestVersionResponse.example1, isPresented: .constant(true)) +} diff --git a/src/MeloNX/MeloNX/App/Views/MeloNXApp.swift b/src/MeloNX/MeloNX/App/Views/MeloNXApp.swift index 4f36da0b4..ceada2aa2 100644 --- a/src/MeloNX/MeloNX/App/Views/MeloNXApp.swift +++ b/src/MeloNX/MeloNX/App/Views/MeloNXApp.swift @@ -8,249 +8,82 @@ import SwiftUI import UIKit import CryptoKit - - +import Alamofire @main struct MeloNXApp: App { - - @State var showed = false @Environment(\.scenePhase) var scenePhase - @State var alert: UIAlertController? = nil - @State var finished = false + + // Variables for the update system :) + @State var showOutOfDateSheet = false + @State var updateInfo: LatestVersionResponse? = nil + @AppStorage("hasbeenfinished") var finishedStorage: Bool = false var body: some Scene { WindowGroup { - ZStack { - if showed || DRM != 1 { - - if finishedStorage { - ContentView() - } else { - SetupView(finished: $finished) - .onChange(of: finished) { newValue in - withAnimation { - withAnimation { - finishedStorage = newValue - } - } - } - } + VStack { + if finishedStorage { + ContentView() } else { - Group { - VStack { - Spacer() - - HStack { - Text("Loading...") - ProgressView() - } - Spacer() - - Text(UIDevice.current.identifierForVendor?.uuidString ?? "") - } - } - .onAppear { - initR() - } - .frame(maxWidth: .infinity, maxHeight: .infinity) - .background(Color.black.opacity(1)) - .foregroundColor(.white) - } - } - } - } - - func initR() { - if DRM == 1 { - DispatchQueue.main.async { [self] in - // drmcheck() - InitializeRyujinx() { bool in - if bool { - print("Ryujinx Files Initialized Successfully") - DispatchQueue.main.async { [self] in + SetupView(finished: $finished) + .onChange(of: finished) { newValue in withAnimation { - showed = true - } - - Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { _ in - InitializeRyujinx() { bool in - if !bool, (scenePhase != .background || scenePhase == .inactive) { - withAnimation { - showed = false - } - if !(alert?.isViewLoaded ?? false) { - alert = showDMCAAlert() - } - } else { - DispatchQueue.main.async { - alert?.dismiss(animated: true) - showed = true - } - } + withAnimation { + finishedStorage = newValue } } - } - - } else { - showDMCAAlert() - } - - } - - } - - } - - } - - - func showAlert() -> UIAlertController? { - // Create the alert controller - if let mainWindow = UIApplication.shared.windows.last { - let alertController = UIAlertController(title: "Enter license", message: "Enter license key:", preferredStyle: .alert) - - // Add a text field to the alert - alertController.addTextField { textField in - textField.placeholder = "Enter key here" - } - - // Add the "OK" action - let okAction = UIAlertAction(title: "OK", style: .default) { _ in - // Get the text entered in the text field - if let textField = alertController.textFields?.first, let enteredText = textField.text { - print("Entered text: \(enteredText)") - UserDefaults.standard.set(enteredText, forKey: "MeloDRMID") - // drmcheck() { bool in - // if bool { - // showed = true - // } else { - // exit(0) - // } - // } } } - alertController.addAction(okAction) - - // Add a "Cancel" action - let cancelAction = UIAlertAction(title: "Cancel", style: .cancel, handler: nil) - alertController.addAction(cancelAction) - - // Present the alert - mainWindow.rootViewController!.present(alertController, animated: true, completion: nil) - - return alertController - } else { - return nil - } - } - - -} - -func showDMCAAlert() -> UIAlertController? { - if let mainWindow = UIApplication.shared.windows.first { - let alertController = UIAlertController(title: "Unauthorized Copy Notice", message: "This app was illegally leaked. Please report the download on the MeloNX Discord. In the meantime, check out Pomelo! \n -Stossy11", preferredStyle: .alert) - - DispatchQueue.main.async { - mainWindow.rootViewController!.present(alertController, animated: true, completion: nil) - } - - return alertController - } else { - // uhoh - return nil - } -} - -/* -func drmcheck(completion: @escaping (Bool) -> Void) { - if let deviceid = UIDevice.current.identifierForVendor?.uuidString, let base64device = deviceid.data(using: .utf8)?.base64EncodedString() { - if let value = UserDefaults.standard.string(forKey: "MeloDRMID") { - if let url = URL(string: "https://mx.stossy11.com/auth/\(value)/\(base64device)") { - print(url) - // Create a URLSession - let session = URLSession.shared - - // Create a data task - let task = session.dataTask(with: url) { data, response, error in - // Handle errors - if let error = error { - exit(0) - } - - // Check response and data - if let response = response as? HTTPURLResponse, response.statusCode == 200 { - print("Successfully Recieved API Data") - completion(true) - } else if let response = response as? HTTPURLResponse, response.statusCode == 201 { - print("Successfully Created Auth UUID") - completion(true) - } else { - completion(false) + .onAppear { + checkLatestVersion() + } + // this seems like a weird way to show the sheet but, from my history this is the most reliable way for the content to actually show in the sheet, otherwise its blank + .sheet(isPresented: Binding( + get: { showOutOfDateSheet && updateInfo != nil }, + set: { newValue in + if !newValue { + showOutOfDateSheet = false + updateInfo = nil } } - - // Start the task - task.resume() + )) { + if let updateInfo = updateInfo { + MeloNXUpdateSheet(updateInfo: updateInfo, isPresented: $showOutOfDateSheet) + } } - } else { - completion(false) } - } else { - completion(false) } -} -*/ - -func InitializeRyujinx(completion: @escaping (Bool) -> Void) { - let path = "aHR0cHM6Ly9teC5zdG9zc3kxMS5jb20v" - - guard let value = Bundle.main.object(forInfoDictionaryKey: "MeloID") as? String, !value.isEmpty else { - completion(false) - return - } - - - - if (detectRoms(path: path) != value) { - completion(false) - } - - let configuration = URLSessionConfiguration.default - configuration.requestCachePolicy = .reloadIgnoringLocalAndRemoteCacheData - configuration.urlCache = nil - - let session = URLSession(configuration: configuration) - - guard let url = URL(string: addFolders(path)!) else { - completion(false) - return - } - - let task = session.dataTask(with: url) { data, response, error in - if error != nil { - completion(false) - } + // sends a GET request to the MeloNXSite API and compares the version it returns to the current app version + func checkLatestVersion() { + let appVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "0.0.0" + let strippedAppVersion = appVersion.replacingOccurrences(of: ".", with: "") + #if DEBUG + // no this isnt a public ip address silly viewers (i know damn well someone thought this was my real ip), this is local :PP + let url = "http://192.168.178.116:8000/api/latest_release" + #else + // dont spam this :pray: + let url = "https://melonx.org/api/latest_release" + #endif - guard let httpResponse = response as? HTTPURLResponse else { - completion(false) - return + // actually sends the request + AF.request(url).responseDecodable(of: LatestVersionResponse.self) { response in + switch response.result { + case .success(let latestVersionResponse): + let latestAPIVersionStripped = latestVersionResponse.version_number_stripped + if Int(strippedAppVersion) ?? 0 < Int(latestAPIVersionStripped) ?? 0 { + updateInfo = latestVersionResponse + showOutOfDateSheet = true + } + case .failure(let error): + print("Error checking for new version: \(error)") + } } - - if httpResponse.statusCode == 200 { - completion(true) - } else { - completion(false) - } - return } - task.resume() } func detectRoms(path string: String) -> String { @@ -259,8 +92,6 @@ func detectRoms(path string: String) -> String { return romHash.compactMap { String(format: "%02x", $0) }.joined() } - - func addFolders(_ folderPath: String) -> String? { let fileManager = FileManager.default if let data = Data(base64Encoded: folderPath), @@ -271,7 +102,6 @@ func addFolders(_ folderPath: String) -> String? { } extension String { - func print() { Swift.print(self) }