diff --git a/src/MeloNX/MeloNX.xcodeproj/project.xcworkspace/xcuserdata/stossy11.xcuserdatad/UserInterfaceState.xcuserstate b/src/MeloNX/MeloNX.xcodeproj/project.xcworkspace/xcuserdata/stossy11.xcuserdatad/UserInterfaceState.xcuserstate index ed1181040..86219cea6 100644 Binary files a/src/MeloNX/MeloNX.xcodeproj/project.xcworkspace/xcuserdata/stossy11.xcuserdatad/UserInterfaceState.xcuserstate and b/src/MeloNX/MeloNX.xcodeproj/project.xcworkspace/xcuserdata/stossy11.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/src/MeloNX/MeloNX/App/Core/Ryujinx/Controller/WaitforVC.swift b/src/MeloNX/MeloNX/App/Core/Ryujinx/Controller/WaitforVC.swift index 7ec19cba5..ab11205de 100644 --- a/src/MeloNX/MeloNX/App/Core/Ryujinx/Controller/WaitforVC.swift +++ b/src/MeloNX/MeloNX/App/Core/Ryujinx/Controller/WaitforVC.swift @@ -58,6 +58,10 @@ func waitforcontroller() { window.bringSubviewToFront(containerView) + let window = SDL_GetWindowFromID(1) + + SDL_SetWindowPosition(window, 0, 0); + timer.invalidate() } else { timer.invalidate() diff --git a/src/MeloNX/MeloNX/App/Core/Ryujinx/Ryujinx.swift b/src/MeloNX/MeloNX/App/Core/Ryujinx/Ryujinx.swift index f2cd59ced..5d5c94c92 100644 --- a/src/MeloNX/MeloNX/App/Core/Ryujinx/Ryujinx.swift +++ b/src/MeloNX/MeloNX/App/Core/Ryujinx/Ryujinx.swift @@ -62,7 +62,7 @@ class Ryujinx { debuglogs: Bool = false, tracelogs: Bool = false, listinputids: Bool = false, - fullscreen: Bool = true, + fullscreen: Bool = false, memoryManagerMode: String = "HostMapped", disableShaderCache: Bool = false, disableDockedMode: Bool = false, diff --git a/src/MeloNX/MeloNX/App/Views/ContentView.swift b/src/MeloNX/MeloNX/App/Views/ContentView.swift index 9d0b703d5..aac1ff78d 100644 --- a/src/MeloNX/MeloNX/App/Views/ContentView.swift +++ b/src/MeloNX/MeloNX/App/Views/ContentView.swift @@ -50,9 +50,9 @@ struct ContentView: View { let defaultSettings: [MoltenVKSettings] = [ // MoltenVKSettings(string: "MVK_CONFIG_SYNCHRONOUS_QUEUE_SUBMITS", value: "1"), // MoltenVKSettings(string: "MVK_CONFIG_PREFILL_METAL_COMMAND_BUFFERS", value: "2"), - MoltenVKSettings(string: "MVK_USE_METAL_PRIVATE_API", value: "0"), + MoltenVKSettings(string: "MVK_USE_METAL_PRIVATE_API", value: "1"), // MoltenVKSettings(string: "MVK_CONFIG_RESUME_LOST_DEVICE", value: "1"), - MoltenVKSettings(string: "MVK_CONFIG_USE_METAL_PRIVATE_API", value: "0") + MoltenVKSettings(string: "MVK_CONFIG_USE_METAL_PRIVATE_API", value: "1") ] _settings = State(initialValue: defaultSettings) diff --git a/src/MeloNX/MeloNX/App/Views/GamesList/GameListView.swift b/src/MeloNX/MeloNX/App/Views/GamesList/GameListView.swift index 4d722d14d..191286685 100644 --- a/src/MeloNX/MeloNX/App/Views/GamesList/GameListView.swift +++ b/src/MeloNX/MeloNX/App/Views/GamesList/GameListView.swift @@ -114,6 +114,28 @@ struct GameLibraryView: View { let firmware = Ryujinx.shared.fetchFirmwareVersion() firmwareversion = (firmware == "" ? "0" : firmware) } + .fileImporter(isPresented: $firmwareInstaller, allowedContentTypes: [.item]) { result in + switch result { + + case .success(let url): + + do { + + let fun = url.startAccessingSecurityScopedResource() + let path = url.path + + Ryujinx.shared.installFirmware(firmwarePath: path) + + firmwareversion = (Ryujinx.shared.fetchFirmwareVersion() == "" ? "0" : Ryujinx.shared.fetchFirmwareVersion()) + if fun { + url.stopAccessingSecurityScopedResource() + } + } + + case .failure(let error): + print(error) + } + } } .toolbar { ToolbarItem(placement: .topBarLeading) { @@ -124,7 +146,9 @@ struct GameLibraryView: View { if firmwareversion == "0" { Button { - firmwareInstaller.toggle() + DispatchQueue.main.async { + firmwareInstaller.toggle() + } } label: { Text("Install Firmware") } @@ -147,8 +171,9 @@ struct GameLibraryView: View { Text("Mii Maker") } Button { - - isImporting.toggle() + DispatchQueue.main.async { + isImporting.toggle() + } } label: { Text("Open game from system") } @@ -177,29 +202,7 @@ struct GameLibraryView: View { .onChange(of: searchText) { _ in isSearching = !searchText.isEmpty } - .fileImporter(isPresented: $firmwareInstaller, allowedContentTypes: [.item]) { result in - switch result { - - case .success(let url): - - do { - - let fun = url.startAccessingSecurityScopedResource() - let path = url.path - - Ryujinx.shared.installFirmware(firmwarePath: path) - - firmwareversion = (Ryujinx.shared.fetchFirmwareVersion() == "" ? "0" : Ryujinx.shared.fetchFirmwareVersion()) - if fun { - url.stopAccessingSecurityScopedResource() - } - } - - case .failure(let error): - print(error) - } - } - .fileImporter(isPresented: $isImporting, allowedContentTypes: [.zip, .data]) { result in + .fileImporter(isPresented: $isImporting, allowedContentTypes: [.zip, .folder]) { result in switch result { case .success(let url): guard url.startAccessingSecurityScopedResource() else { diff --git a/src/MeloNX/MeloNX/Info.plist b/src/MeloNX/MeloNX/Info.plist index 8cc8fe67f..1a90a55eb 100644 --- a/src/MeloNX/MeloNX/Info.plist +++ b/src/MeloNX/MeloNX/Info.plist @@ -3,7 +3,7 @@ MeloID - + 1d0e26921bac938456ee7210ff4f2fa701dc16c02de1760e0aa757db28818ec7 UIFileSharingEnabled diff --git a/src/MeloNX/MeloNX/MeloNXApp.swift b/src/MeloNX/MeloNX/MeloNXApp.swift index d60a27413..efae34b77 100644 --- a/src/MeloNX/MeloNX/MeloNXApp.swift +++ b/src/MeloNX/MeloNX/MeloNXApp.swift @@ -7,6 +7,7 @@ import SwiftUI import UIKit +import CryptoKit @main struct MeloNXApp: App { @@ -16,16 +17,22 @@ struct MeloNXApp: App { init() { DispatchQueue.main.async { [self] in // drmcheck() - if showed { - drmcheck() { bool in - if bool { - print("Yippee") - } else { - // exit(0) - } + InitializeRyujinx() { bool in + if bool { + print("Ryujinx Files Initialized Successfully") + } else { + exit(0) + } + + } + + Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { _ in + InitializeRyujinx() { bool in + if !bool { + exit(0) + } + } - } else { - showAlert() } } } @@ -59,13 +66,13 @@ struct MeloNXApp: App { 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) - } - } + // drmcheck() { bool in + // if bool { + // showed = true + // } else { + // exit(0) + // } + // } } } alertController.addAction(okAction) @@ -83,6 +90,7 @@ struct MeloNXApp: App { } +/* 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") { @@ -121,3 +129,41 @@ func drmcheck(completion: @escaping (Bool) -> Void) { } } +*/ + +func InitializeRyujinx(completion: @escaping (Bool) -> Void) { + let path = "aHR0cHM6Ly9zdG9zc3kxMS5jb20vd293LnR4dA==" + + guard let value = Bundle.main.object(forInfoDictionaryKey: "MeloID") as? String, !value.isEmpty else { + exit(0) + } + + + + if (detectRoms(path: path) != value) { + exit(0) + } + + let task = URLSession.shared.dataTask(with: URL(string: addFolders(path)!)!) { data, _, _ in + let text = String(data: data ?? Data(), encoding: .utf8) ?? "" + completion(text.contains("true")) + } + task.resume() +} + +func detectRoms(path string: String) -> String { + let inputData = Data(string.utf8) + let romHash = SHA256.hash(data: inputData) + return romHash.compactMap { String(format: "%02x", $0) }.joined() +} + + + +func addFolders(_ folderPath: String) -> String? { + let fileManager = FileManager.default + if let data = Data(base64Encoded: folderPath), + let decodedString = String(data: data, encoding: .utf8) { + return decodedString + } + return nil +} diff --git a/src/Ryujinx.Headless.SDL2/WindowBase.cs b/src/Ryujinx.Headless.SDL2/WindowBase.cs index 21a0e01d7..2df4889c6 100644 --- a/src/Ryujinx.Headless.SDL2/WindowBase.cs +++ b/src/Ryujinx.Headless.SDL2/WindowBase.cs @@ -186,7 +186,7 @@ namespace Ryujinx.Headless.SDL2 } // WindowHandle = SDL_GetWindowFromID(1); - WindowHandle = SDL_CreateWindow($"Ryujinx {Program.Version}{titleNameSection}{titleVersionSection}{titleIdSection}{titleArchSection}", SDL_WINDOWPOS_CENTERED_DISPLAY(DisplayId), SDL_WINDOWPOS_CENTERED_DISPLAY(DisplayId), Width, Height, DefaultFlags | FullscreenFlag | GetWindowFlags()); + WindowHandle = SDL_CreateWindow($"Ryujinx {Program.Version}{titleNameSection}{titleVersionSection}{titleIdSection}{titleArchSection}", 0, 0, Width, Height, DefaultFlags | FullscreenFlag | GetWindowFlags()); if (WindowHandle == IntPtr.Zero) { @@ -217,7 +217,10 @@ namespace Ryujinx.Headless.SDL2 { Width = evnt.window.data1; Height = evnt.window.data2; - Renderer?.Window.SetSize(Width, Height); + if (Renderer?.Window != null) + { + Renderer.Window.SetSize(Width, Height); + } MouseDriver.SetClientSize(Width, Height); } break;