- BookmarkDetail: All user-facing texts and error messages in BookmarkDetailView, BookmarkDetailViewModel, BookmarkLabelsView, and BookmarkLabelsViewModel translated to English. - Bookmarks: All UI strings, swipe actions, and error messages in BookmarkCardView, BookmarksView, BookmarksViewModel, and related enums translated to English. - Labels: All UI and error messages in LabelsView and LabelsViewModel translated to English. - Menu: All sidebar/tab names, navigation titles, and queue texts in BookmarkState, PhoneTabView, PlayerQueueResumeButton, SidebarTab updated to English. - Settings: All section headers, toggle labels, button texts, and error/success messages in FontSettingsView, FontSettingsViewModel, SettingsContainerView, SettingsGeneralView, SettingsGeneralViewModel, SettingsServerView, SettingsServerViewModel translated to English. - SpeechPlayer: All player UI texts, progress, and queue messages in SpeechPlayerView translated to English. This commit unifies the app language to English for all user-facing areas.
88 lines
2.5 KiB
Swift
88 lines
2.5 KiB
Swift
import Foundation
|
|
import UIKit
|
|
|
|
@Observable
|
|
class AddBookmarkViewModel {
|
|
private let createBookmarkUseCase = DefaultUseCaseFactory.shared.makeCreateBookmarkUseCase()
|
|
|
|
var url: String = ""
|
|
var title: String = ""
|
|
var labelsText: String = ""
|
|
|
|
var isLoading: Bool = false
|
|
var errorMessage: String?
|
|
var showErrorAlert: Bool = false
|
|
var hasCreated: Bool = false
|
|
var clipboardURL: String?
|
|
|
|
var isValid: Bool {
|
|
!url.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty &&
|
|
URL(string: url.trimmingCharacters(in: .whitespacesAndNewlines)) != nil
|
|
}
|
|
|
|
var parsedLabels: [String] {
|
|
labelsText
|
|
.components(separatedBy: ",")
|
|
.map { $0.trimmingCharacters(in: .whitespacesAndNewlines) }
|
|
.filter { !$0.isEmpty }
|
|
}
|
|
|
|
@MainActor
|
|
func createBookmark() async {
|
|
guard isValid else { return }
|
|
|
|
isLoading = true
|
|
errorMessage = nil
|
|
hasCreated = false
|
|
|
|
do {
|
|
let cleanURL = url.trimmingCharacters(in: .whitespacesAndNewlines)
|
|
let cleanTitle = title.trimmingCharacters(in: .whitespacesAndNewlines)
|
|
let labels = parsedLabels
|
|
|
|
let request = CreateBookmarkRequest(
|
|
url: cleanURL,
|
|
title: cleanTitle.isEmpty ? nil : cleanTitle,
|
|
labels: labels.isEmpty ? nil : labels
|
|
)
|
|
|
|
let message = try await createBookmarkUseCase.execute(createRequest: request)
|
|
|
|
// Optional: Show the server message
|
|
print("Server response: \(message)")
|
|
|
|
clearForm()
|
|
hasCreated = true
|
|
} catch let error as CreateBookmarkError {
|
|
errorMessage = error.localizedDescription
|
|
showErrorAlert = true
|
|
} catch {
|
|
errorMessage = "Error creating bookmark"
|
|
showErrorAlert = true
|
|
}
|
|
|
|
isLoading = false
|
|
}
|
|
|
|
func checkClipboard() {
|
|
guard let clipboardString = UIPasteboard.general.string,
|
|
URL(string: clipboardString) != nil else {
|
|
clipboardURL = nil
|
|
return
|
|
}
|
|
|
|
clipboardURL = clipboardString
|
|
}
|
|
|
|
func pasteFromClipboard() {
|
|
guard let clipboardURL = clipboardURL else { return }
|
|
url = clipboardURL
|
|
}
|
|
|
|
func clearForm() {
|
|
url = ""
|
|
title = ""
|
|
labelsText = ""
|
|
}
|
|
}
|