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

@@ -0,0 +1,82 @@
/*
* NotificationManagerTests.vala
*
* Unit tests for Linux notification manager.
*/
using Gio;
using GLib;
using Gtk;
public class RSSuper.NotificationManagerTests {
public static int main(string[] args) {
Test.init(ref args);
Test.add_func("/notification-manager/instance", () => {
var manager = NotificationManager.get_instance();
assert(manager != null);
});
Test.add_func("/notification-manager/initialize", () => {
var manager = NotificationManager.get_instance();
manager.initialize();
assert(manager.get_badge() != null);
});
Test.add_func("/notification-manager/set-unread-count", () => {
var manager = NotificationManager.get_instance();
manager.initialize();
manager.set_unread_count(5);
assert(manager.get_unread_count() == 5);
});
Test.add_func("/notification-manager/clear-unread-count", () => {
var manager = NotificationManager.get_instance();
manager.initialize();
manager.set_unread_count(5);
manager.clear_unread_count();
assert(manager.get_unread_count() == 0);
});
Test.add_func("/notification-manager/badge-visibility", () => {
var manager = NotificationManager.get_instance();
manager.initialize();
manager.set_badge_visibility(true);
assert(manager.should_show_badge() == false);
manager.set_unread_count(1);
assert(manager.should_show_badge() == true);
});
Test.add_func("/notification-manager/show-badge", () => {
var manager = NotificationManager.get_instance();
manager.initialize();
manager.show_badge();
assert(manager.get_badge() != null);
});
Test.add_func("/notification-manager/hide-badge", () => {
var manager = NotificationManager.get_instance();
manager.initialize();
manager.hide_badge();
var badge = manager.get_badge();
assert(badge != null);
});
Test.add_func("/notification-manager/show-badge-with-count", () => {
var manager = NotificationManager.get_instance();
manager.initialize();
manager.show_badge_with_count(10);
assert(manager.get_badge() != null);
});
return Test.run();
}
}