diff --git a/Sora.xcodeproj/project.pbxproj b/Sora.xcodeproj/project.pbxproj index 4c71d30..f1a25fa 100644 --- a/Sora.xcodeproj/project.pbxproj +++ b/Sora.xcodeproj/project.pbxproj @@ -44,6 +44,7 @@ 13B3A4B22D1477F100BCC0D5 /* SettingsStorageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13B3A4B12D1477F100BCC0D5 /* SettingsStorageView.swift */; }; 13B544B02D26D8E900CC6C59 /* OpenCastSwift iOS in Frameworks */ = {isa = PBXBuildFile; productRef = 13B544AF2D26D8E900CC6C59 /* OpenCastSwift iOS */; }; 13C9821F2D2152B1007A0132 /* GitHubRelease.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13C9821E2D2152B1007A0132 /* GitHubRelease.swift */; }; + 13ED65752D284045008F4C23 /* SettingsEditorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13ED65742D284045008F4C23 /* SettingsEditorView.swift */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -84,6 +85,7 @@ 13AEE7BB2D24521200CA634A /* SettingsReleasesView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsReleasesView.swift; sourceTree = ""; }; 13B3A4B12D1477F100BCC0D5 /* SettingsStorageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsStorageView.swift; sourceTree = ""; }; 13C9821E2D2152B1007A0132 /* GitHubRelease.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitHubRelease.swift; sourceTree = ""; }; + 13ED65742D284045008F4C23 /* SettingsEditorView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsEditorView.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -254,6 +256,7 @@ 132417AF2D131A0600B4F2D2 /* SettingsPlayerView.swift */, 13B3A4B12D1477F100BCC0D5 /* SettingsStorageView.swift */, 13AEE7BB2D24521200CA634A /* SettingsReleasesView.swift */, + 13ED65742D284045008F4C23 /* SettingsEditorView.swift */, ); path = SubPages; sourceTree = ""; @@ -402,6 +405,7 @@ 132417C12D131A0600B4F2D2 /* LibraryManager.swift in Sources */, 132417BA2D131A0600B4F2D2 /* SettingsAboutView.swift in Sources */, 1324179E2D1319E800B4F2D2 /* MiruDataStruct.swift in Sources */, + 13ED65752D284045008F4C23 /* SettingsEditorView.swift in Sources */, 1308CFBE2D19844D004CD38C /* MusicProgressSlider.swift in Sources */, 132417D52D13240200B4F2D2 /* EpisodeCell.swift in Sources */, 13C9821F2D2152B1007A0132 /* GitHubRelease.swift in Sources */, diff --git a/Sora.xcodeproj/project.xcworkspace/xcuserdata/Francesco.xcuserdatad/UserInterfaceState.xcuserstate b/Sora.xcodeproj/project.xcworkspace/xcuserdata/Francesco.xcuserdatad/UserInterfaceState.xcuserstate index a905929..32d15d5 100644 Binary files a/Sora.xcodeproj/project.xcworkspace/xcuserdata/Francesco.xcuserdatad/UserInterfaceState.xcuserstate and b/Sora.xcodeproj/project.xcworkspace/xcuserdata/Francesco.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/Sora.xcodeproj/xcuserdata/Francesco.xcuserdatad/xcschemes/xcschememanagement.plist b/Sora.xcodeproj/xcuserdata/Francesco.xcuserdatad/xcschemes/xcschememanagement.plist index de897a7..6268ffc 100644 --- a/Sora.xcodeproj/xcuserdata/Francesco.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/Sora.xcodeproj/xcuserdata/Francesco.xcuserdatad/xcschemes/xcschememanagement.plist @@ -28,7 +28,7 @@ Sora.xcscheme_^#shared#^_ orderHint - 1 + 0 diff --git a/Sora/Utils/Modules/ModulesManager.swift b/Sora/Utils/Modules/ModulesManager.swift index 6013413..99f9b3e 100644 --- a/Sora/Utils/Modules/ModulesManager.swift +++ b/Sora/Utils/Modules/ModulesManager.swift @@ -110,7 +110,7 @@ class ModulesManager: ObservableObject { } } - private func saveModuleData() { + func saveModuleData() { let fileURL = getDocumentsDirectory().appendingPathComponent(modulesFileName) do { let data = try JSONEncoder().encode(modules) @@ -152,4 +152,4 @@ class ModulesManager: ObservableObject { } } } -} \ No newline at end of file +} diff --git a/Sora/Views/SettingsViews/SettingView.swift b/Sora/Views/SettingsViews/SettingView.swift index 2c62379..de3c813 100644 --- a/Sora/Views/SettingsViews/SettingView.swift +++ b/Sora/Views/SettingsViews/SettingView.swift @@ -75,6 +75,12 @@ struct SettingsView: View { Text("Logs") } } + NavigationLink(destination: SettingsEditorView(modulesManager: ModulesManager())) { + HStack { + Image(systemName: "pencil.and.outline") + Text("Modules Editor") + } + } } Section(header: Text("Info")) { diff --git a/Sora/Views/SettingsViews/SubPages/SettingsEditorView.swift b/Sora/Views/SettingsViews/SubPages/SettingsEditorView.swift new file mode 100644 index 0000000..c41a9a2 --- /dev/null +++ b/Sora/Views/SettingsViews/SubPages/SettingsEditorView.swift @@ -0,0 +1,34 @@ +// +// SettingsEditorView.swift +// Sora +// +// Created by Francesco on 03/01/25. +// + +import SwiftUI + +struct SettingsEditorView: View { + @ObservedObject var modulesManager: ModulesManager + @State private var jsonText: String = "" + + var body: some View { + VStack { + TextEditor(text: $jsonText) + .padding() + .onAppear { + if let data = try? JSONEncoder().encode(modulesManager.modules), + let jsonString = String(data: data, encoding: .utf8) { + jsonText = jsonString + } + } + } + .navigationTitle("Editor") + .navigationBarItems(trailing: Button("Save") { + if let data = jsonText.data(using: .utf8), + let modules = try? JSONDecoder().decode([ModuleStruct].self, from: data) { + modulesManager.modules = modules + modulesManager.saveModuleData() + } + }) + } +} \ No newline at end of file