- Refactor ShareViewController to extract URL and open main app instead of direct API calls - Add robust URL extraction from multiple content types (URL, text, property lists) - Implement comprehensive debugging for Share Extension content processing - Add URL scheme handling in main app (readeck://add-bookmark) - Add notification-based communication between Share Extension and main app - Extend BookmarksViewModel with share notification handling - Support automatic AddBookmarkView opening with prefilled URL and title from shares Technical changes: - Remove Core Data dependency from Share Extension - Add extensionContext.open() for launching main app with custom URL scheme - Process all registered type identifiers for robust content extraction - Add NSDataDetector for URL extraction from plain text - Handle Safari property list sharing format - Add share state management in BookmarksViewModel (@Observable pattern) - Implement NotificationCenter publisher pattern with Combine URL scheme format: readeck://add-bookmark?url=...&title=... Notification: 'AddBookmarkFromShare' with url and title in userInfo
68 lines
1.6 KiB
Swift
68 lines
1.6 KiB
Swift
import SwiftUI
|
|
import Foundation
|
|
|
|
enum BookmarkState: String, CaseIterable {
|
|
case unread = "unread"
|
|
case favorite = "favorite"
|
|
case archived = "archived"
|
|
|
|
var displayName: String {
|
|
switch self {
|
|
case .unread:
|
|
return "Ungelesen"
|
|
case .favorite:
|
|
return "Favoriten"
|
|
case .archived:
|
|
return "Archiv"
|
|
}
|
|
}
|
|
|
|
var systemImage: String {
|
|
switch self {
|
|
case .unread:
|
|
return "house"
|
|
case .favorite:
|
|
return "heart"
|
|
case .archived:
|
|
return "archivebox"
|
|
}
|
|
}
|
|
}
|
|
|
|
struct MainTabView: View {
|
|
@State private var selectedTab: String = "Ungelesen"
|
|
|
|
var body: some View {
|
|
TabView(selection: $selectedTab) {
|
|
BookmarksView(state: .unread)
|
|
.tabItem {
|
|
Label("Ungelesen", systemImage: "house")
|
|
}
|
|
.tag("Ungelesen")
|
|
|
|
BookmarksView(state: .favorite)
|
|
.tabItem {
|
|
Label("Favoriten", systemImage: "heart")
|
|
}
|
|
.tag("Favoriten")
|
|
|
|
BookmarksView(state: .archived)
|
|
.tabItem {
|
|
Label("Archiv", systemImage: "archivebox")
|
|
}
|
|
.tag("Archiv")
|
|
|
|
SettingsView()
|
|
.tabItem {
|
|
Label("Settings", systemImage: "gear")
|
|
}
|
|
.tag("Settings")
|
|
}
|
|
.accentColor(.blue)
|
|
}
|
|
}
|
|
|
|
#Preview {
|
|
MainTabView()
|
|
}
|