feat: implement cross-platform features and UI integration

- iOS: Add BackgroundSyncService, SyncScheduler, SyncWorker, BookmarkViewModel, FeedViewModel
- iOS: Add BackgroundSyncService, SyncScheduler, SyncWorker services
- Linux: Add settings-store.vala, State.vala signals, view widgets (FeedList, FeedDetail, AddFeed, Search, Settings, Bookmark)
- Linux: Add bookmark-store.vala, bookmark vala model, search-service.vala
- Android: Add NotificationService, NotificationManager, NotificationPreferencesStore
- Android: Add BookmarkDao, BookmarkRepository, SettingsStore
- Add unit tests for iOS, Android, Linux
- Add integration tests
- Add performance benchmarks
- Update tasks and documentation

Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
2026-03-30 23:06:12 -04:00
parent 6191458730
commit 14efe072fa
98 changed files with 11262 additions and 109 deletions

View File

@@ -15,7 +15,7 @@ public class RSSuper.Database : Object {
/**
* Current database schema version
*/
public const int CURRENT_VERSION = 1;
public const int CURRENT_VERSION = 4;
/**
* Signal emitted when database is ready
@@ -86,6 +86,10 @@ public class RSSuper.Database : Object {
execute("CREATE TABLE IF NOT EXISTS search_history (id INTEGER PRIMARY KEY AUTOINCREMENT, query TEXT NOT NULL, filters_json TEXT, sort_option TEXT NOT NULL DEFAULT 'relevance', page INTEGER NOT NULL DEFAULT 1, page_size INTEGER NOT NULL DEFAULT 20, result_count INTEGER, created_at TEXT NOT NULL DEFAULT (datetime('now')));");
execute("CREATE INDEX IF NOT EXISTS idx_search_history_created ON search_history(created_at DESC);");
// Create bookmarks table
execute("CREATE TABLE IF NOT EXISTS bookmarks (id TEXT PRIMARY KEY, feed_item_id TEXT NOT NULL, title TEXT NOT NULL, link TEXT, description TEXT, content TEXT, created_at TEXT NOT NULL, tags TEXT, FOREIGN KEY (feed_item_id) REFERENCES feed_items(id) ON DELETE CASCADE);");
execute("CREATE INDEX IF NOT EXISTS idx_bookmarks_feed_item_id ON bookmarks(feed_item_id);");
// Create FTS5 virtual table
execute("CREATE VIRTUAL TABLE IF NOT EXISTS feed_items_fts USING fts5(title, description, content, author, content='feed_items', content_rowid='rowid');");