- Integrate Kingfisher for image caching with CachedAsyncImage component - Add CacheSettingsView for managing image cache size and clearing cache - Implement three card layout styles: compact, magazine (default), natural - Add AppearanceSettingsView with visual layout previews and theme settings - Create Clean Architecture for card layout with domain models and use cases - Implement FlowLayout for dynamic label width calculation - Add skeleton loading animation for initial bookmark loads - Replace delete confirmation dialogs with immediate delete + 3-second undo - Support multiple simultaneous undo operations with individual progress bars - Add grayed-out visual feedback for pending deletions - Centralize notification names in dedicated NotificationNames file - Remove pagination logic from label management (replaced with FlowLayout) - Update AsyncImage usage across BookmarkCardView, BookmarkDetailView, ImageViewerView - Improve UI consistency and spacing throughout the app
22 lines
610 B
Swift
22 lines
610 B
Swift
import Foundation
|
|
|
|
protocol PSaveCardLayoutUseCase {
|
|
func execute(layout: CardLayoutStyle) async
|
|
}
|
|
|
|
class SaveCardLayoutUseCase: PSaveCardLayoutUseCase {
|
|
private let settingsRepository: PSettingsRepository
|
|
private let logger = Logger.data
|
|
|
|
init(settingsRepository: PSettingsRepository) {
|
|
self.settingsRepository = settingsRepository
|
|
}
|
|
|
|
func execute(layout: CardLayoutStyle) async {
|
|
do {
|
|
try await settingsRepository.saveCardLayoutStyle(layout)
|
|
} catch {
|
|
logger.error("Failed to save card layout style: \(error)")
|
|
}
|
|
}
|
|
} |