summaryrefslogtreecommitdiff
path: root/Sora
diff options
context:
space:
mode:
authorFuwn <[email protected]>2025-07-05 05:59:04 -0700
committerFuwn <[email protected]>2025-07-05 05:59:04 -0700
commit6381fe585268bda17d0859937568290205575e2c (patch)
tree2db111ba87535288d75e785b92e5277b5632c09f /Sora
parentfeat: Development commit (diff)
downloadsora-testing-6381fe585268bda17d0859937568290205575e2c.tar.xz
sora-testing-6381fe585268bda17d0859937568290205575e2c.zip
feat: Development commit
Diffstat (limited to 'Sora')
-rw-r--r--Sora/Data/Settings/SettingsFolder.swift2
-rw-r--r--Sora/Data/Settings/SettingsManager.swift6
-rw-r--r--Sora/Views/Settings/Collections/SettingsCollectionsListView.swift16
-rw-r--r--Sora/Views/Settings/Collections/SettingsCollectionsView.swift61
-rw-r--r--Sora/Views/Settings/SettingsView.swift6
5 files changed, 90 insertions, 1 deletions
diff --git a/Sora/Data/Settings/SettingsFolder.swift b/Sora/Data/Settings/SettingsFolder.swift
index ce19561..84543c1 100644
--- a/Sora/Data/Settings/SettingsFolder.swift
+++ b/Sora/Data/Settings/SettingsFolder.swift
@@ -2,7 +2,7 @@ import Foundation
struct SettingsFolder: Codable, Identifiable, Hashable {
let id: UUID
- let name: String
+ var name: String
let createdAt: Date
init(name: String, id: UUID = UUID()) {
diff --git a/Sora/Data/Settings/SettingsManager.swift b/Sora/Data/Settings/SettingsManager.swift
index d24929b..b63c7b3 100644
--- a/Sora/Data/Settings/SettingsManager.swift
+++ b/Sora/Data/Settings/SettingsManager.swift
@@ -615,6 +615,12 @@ class SettingsManager: ObservableObject { // swiftlint:disable:this type_body_l
folders.first { $0.id == id }?.name
}
+ func renameFolder(_ folder: SettingsFolder, to newName: String) {
+ guard let index = folders.firstIndex(where: { $0.id == folder.id }) else { return }
+
+ folders[index].name = newName
+ }
+
// MARK: Search History Management
func removeSearchHistoryEntry(at offsets: IndexSet) {
searchHistory.remove(atOffsets: offsets)
diff --git a/Sora/Views/Settings/Collections/SettingsCollectionsListView.swift b/Sora/Views/Settings/Collections/SettingsCollectionsListView.swift
new file mode 100644
index 0000000..c474b79
--- /dev/null
+++ b/Sora/Views/Settings/Collections/SettingsCollectionsListView.swift
@@ -0,0 +1,16 @@
+import SwiftUI
+
+struct SettingsCollectionsListView: View {
+ @EnvironmentObject private var settings: SettingsManager
+
+ var body: some View {
+ List {
+ ForEach(settings.folders) { folder in
+ NavigationLink(destination: SettingsCollectionsView(folder: folder)) {
+ Text(folder.name)
+ }
+ }
+ }
+ .navigationTitle("Collections")
+ }
+}
diff --git a/Sora/Views/Settings/Collections/SettingsCollectionsView.swift b/Sora/Views/Settings/Collections/SettingsCollectionsView.swift
new file mode 100644
index 0000000..a7ce5a7
--- /dev/null
+++ b/Sora/Views/Settings/Collections/SettingsCollectionsView.swift
@@ -0,0 +1,61 @@
+import SwiftUI
+
+struct SettingsCollectionsView: View {
+ @EnvironmentObject private var settings: SettingsManager
+
+ @State private var isDeleteConfirmationPresented = false
+ @State private var isRenameAlertPresented = false
+ @State private var newCollectionName = ""
+ let folder: SettingsFolder
+
+ var body: some View {
+ Form {
+ Section(header: Text("Actions")) {
+ Button(action: {
+ newCollectionName = folder.name
+ isRenameAlertPresented = true
+ }) {
+ Label("Rename", systemImage: "pencil")
+ }
+
+ Button(
+ role: .destructive,
+ action: {
+ isDeleteConfirmationPresented = true
+ }
+ ) {
+ Label("Delete", systemImage: "trash")
+ }
+ }
+ }
+ .navigationTitle(folder.name)
+ .alert(
+ "Rename Collection",
+ isPresented: $isRenameAlertPresented
+ ) {
+ TextField("Collection Name", text: $newCollectionName)
+
+ Button("Cancel", role: .cancel) {
+ newCollectionName = ""
+ isRenameAlertPresented = false
+ }
+
+ Button("Rename") {
+ settings.renameFolder(folder, to: newCollectionName)
+
+ newCollectionName = ""
+ isRenameAlertPresented = false
+ }
+ }
+ .alert(
+ "Are you sure you want to delete this collection?",
+ isPresented: $isDeleteConfirmationPresented
+ ) {
+ Button("Delete", role: .destructive) {
+ settings.folders.removeAll { $0.id == folder.id }
+ }
+
+ Button("Cancel", role: .cancel) { () }
+ }
+ }
+}
diff --git a/Sora/Views/Settings/SettingsView.swift b/Sora/Views/Settings/SettingsView.swift
index 1cd5255..3315301 100644
--- a/Sora/Views/Settings/SettingsView.swift
+++ b/Sora/Views/Settings/SettingsView.swift
@@ -20,6 +20,12 @@ struct SettingsView: View {
SettingsSearchView()
}
+ Section(header: Text("Collections")) {
+ NavigationLink(destination: SettingsCollectionsListView()) {
+ Text("Manage Collections")
+ }
+ }
+
Section(header: Text("Settings")) {
SettingsSettingsView()
}