This commit introduces a comprehensive refactoring of the tag management system, replacing the previous API-based approach with a Core Data-first strategy for improved performance and offline support. Major Changes: Tag Management Architecture: - Add CoreDataTagManagementView using @FetchRequest for reactive updates - Implement cache-first sync strategy in LabelsRepository - Create SyncTagsUseCase following Clean Architecture principles - Add TagSortOrder enum for configurable tag sorting (by count/alphabetically) - Mark LegacyTagManagementView as deprecated Share Extension Improvements: - Replace API-based tag loading with Core Data queries - Display top 150 tags sorted by usage count - Remove unnecessary label fetching logic - Add "Most used tags" localized title - Improve offline bookmark tag management Main App Enhancements: - Add tag sync triggers in AddBookmarkView and BookmarkLabelsView - Implement user-configurable tag sorting in settings - Add sort order indicator labels with localization - Automatic UI updates via SwiftUI @FetchRequest reactivity Settings & Configuration: - Add TagSortOrder setting with persistence - Refactor Settings model structure - Add FontFamily and FontSize domain models - Improve settings repository with tag sort order support Use Case Layer: - Add SyncTagsUseCase for background tag synchronization - Update UseCaseFactory with tag sync support - Add mock implementations for testing Localization: - Add German and English translations for: - "Most used tags" - "Sorted by usage count" - "Sorted alphabetically" Technical Improvements: - Batch tag updates with conflict detection - Background sync with silent failure handling - Reduced server load through local caching - Better separation of concerns following Clean Architecture
42 lines
659 B
Swift
42 lines
659 B
Swift
//
|
|
// AppSettings.swift
|
|
// readeck
|
|
//
|
|
// Created by Ilyas Hallak on 21.07.25.
|
|
//
|
|
|
|
|
|
//
|
|
// AppSettings.swift
|
|
// readeck
|
|
//
|
|
// SPDX-License-Identifier: MIT
|
|
//
|
|
|
|
import Foundation
|
|
import Combine
|
|
|
|
class AppSettings: ObservableObject {
|
|
@Published var settings: Settings?
|
|
|
|
var enableTTS: Bool {
|
|
settings?.enableTTS ?? false
|
|
}
|
|
|
|
var theme: Theme {
|
|
settings?.theme ?? .system
|
|
}
|
|
|
|
var urlOpener: UrlOpener {
|
|
settings?.urlOpener ?? .inAppBrowser
|
|
}
|
|
|
|
var tagSortOrder: TagSortOrder {
|
|
settings?.tagSortOrder ?? .byCount
|
|
}
|
|
|
|
init(settings: Settings? = nil) {
|
|
self.settings = settings
|
|
}
|
|
}
|