From 6afab6f421b7ee81d6b4a5f8115a21d220af28fe Mon Sep 17 00:00:00 2001 From: Jeena Date: Sat, 21 Mar 2026 11:37:18 +0000 Subject: [PATCH 01/10] docs: clarify app works with any Greader API server --- README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index dcccb95..b887ded 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,9 @@ # FeedTheMonkey -FeedTheMonkey is a desktop client for [Tiny Tiny RSS](https://tt-rss.org). It doesn't -work as a standalone feed reader — it connects to a TT-RSS server via the Fever/Greader -API to fetch articles and sync read state. +FeedTheMonkey is a desktop client for any server that implements the +[Greader API](https://github.com/theoldreader/api) (such as FreshRSS, Miniflux, or +Tiny Tiny RSS with the Greader plugin). It doesn't work as a standalone feed reader — +it connects to a server to fetch articles and sync read state. This is version 3, rewritten in Rust with GTK4 and libadwaita. From 82aabc080a99447a73ef51ee9d6efb55713bffd8 Mon Sep 17 00:00:00 2001 From: Jeena Date: Sat, 21 Mar 2026 11:53:36 +0000 Subject: [PATCH 02/10] docs: remove TT-RSS from compatible servers list --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index b887ded..92b2d8f 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,7 @@ # FeedTheMonkey FeedTheMonkey is a desktop client for any server that implements the -[Greader API](https://github.com/theoldreader/api) (such as FreshRSS, Miniflux, or -Tiny Tiny RSS with the Greader plugin). It doesn't work as a standalone feed reader — +[Greader API](https://github.com/theoldreader/api) (such as FreshRSS or Miniflux). It doesn't work as a standalone feed reader — it connects to a server to fetch articles and sync read state. This is version 3, rewritten in Rust with GTK4 and libadwaita. From b49cc69c49ad533f180d1aeaf9e072c2ae94aac5 Mon Sep 17 00:00:00 2001 From: Jeena Date: Sat, 21 Mar 2026 11:57:19 +0000 Subject: [PATCH 03/10] api: auto-detect Greader API path for Miniflux and FreshRSS Miniflux serves the Greader API at the server root while FreshRSS uses /api/greader.php. Instead of hardcoding the FreshRSS suffix, try the URL as-is first (works for Miniflux) and fall back to appending /api/greader.php (works for FreshRSS). The user just enters the server URL without needing to know the API path. --- README.md | 4 ++- src/api.rs | 88 +++++++++++++++++++++++++++++------------------------- 2 files changed, 50 insertions(+), 42 deletions(-) diff --git a/README.md b/README.md index 92b2d8f..6030465 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,9 @@ # FeedTheMonkey FeedTheMonkey is a desktop client for any server that implements the -[Greader API](https://github.com/theoldreader/api) (such as FreshRSS or Miniflux). It doesn't work as a standalone feed reader — +[Greader API](https://github.com/theoldreader/api), such as +[FreshRSS](https://freshrss.org) or [Miniflux](https://miniflux.app). +Just enter your server URL — the app detects the API path automatically. It doesn't work as a standalone feed reader — it connects to a server to fetch articles and sync read state. This is version 3, rewritten in Rust with GTK4 and libadwaita. diff --git a/src/api.rs b/src/api.rs index 312cd82..d683e8f 100644 --- a/src/api.rs +++ b/src/api.rs @@ -42,14 +42,18 @@ struct Summary { use crate::model::Article; -fn normalize_base_url(server_url: &str) -> String { +/// Return the candidate base URLs to try in order. +/// Miniflux serves the Greader API at the server root; +/// FreshRSS serves it at /api/greader.php. +fn candidate_base_urls(server_url: &str) -> Vec { let base = server_url.trim_end_matches('/'); - // If the user entered just a host (or host/path) without the FreshRSS - // API suffix, append it automatically. if base.ends_with("/api/greader.php") { - base.to_string() + vec![base.to_string()] } else { - format!("{base}/api/greader.php") + vec![ + base.to_string(), + format!("{base}/api/greader.php"), + ] } } @@ -59,47 +63,49 @@ impl Api { username: &str, password: &str, ) -> Result { - let base = normalize_base_url(server_url); let client = Client::new(); - let url = format!("{base}/accounts/ClientLogin"); - let resp = client - .post(&url) - .form(&[("Email", username), ("Passwd", password)]) - .send() - .await - .map_err(|e| e.to_string())?; + let candidates = candidate_base_urls(server_url); + let mut last_err = String::new(); - let status = resp.status(); - let body = resp.text().await.map_err(|e| e.to_string())?; + for base in candidates { + let url = format!("{base}/accounts/ClientLogin"); + let resp = match client + .post(&url) + .form(&[("Email", username), ("Passwd", password)]) + .send() + .await + { + Ok(r) => r, + Err(e) => { last_err = e.to_string(); continue; } + }; - if !status.is_success() { - let msg = human_error(&body, status.as_u16()); - return Err(format!("Login failed ({}): {}", status.as_u16(), msg)); + let status = resp.status(); + let body = resp.text().await.map_err(|e| e.to_string())?; + + if !status.is_success() { + last_err = format!("Login failed ({}): {}", status.as_u16(), human_error(&body, status.as_u16())); + continue; + } + + let auth_token = match body.lines().find_map(|l| l.strip_prefix("Auth=")) { + Some(t) => t.to_string(), + None => { + last_err = if looks_like_html(&body) { + format!( + "The server at {base} does not appear to be a \ + Greader API endpoint. Check your server URL." + ) + } else { + format!("Unexpected response from server: {}", body.trim()) + }; + continue; + } + }; + + return Ok(Self { client, server_url: base, auth_token }); } - let auth_token = body - .lines() - .find_map(|l| l.strip_prefix("Auth=")) - .ok_or_else(|| { - // The server returned 200 but not the expected API response — - // most likely the URL points to a web page, not a FreshRSS API. - if looks_like_html(&body) { - format!( - "The server at {} does not appear to be a FreshRSS \ - Google Reader API endpoint. Check your server URL.", - base - ) - } else { - format!("Unexpected response from server: {}", body.trim()) - } - })? - .to_string(); - - Ok(Self { - client, - server_url: base, - auth_token, - }) + Err(last_err) } pub async fn fetch_write_token(&self) -> Result { From ff92499406529854586ada68b241f13e0e5c3df0 Mon Sep 17 00:00:00 2001 From: Jeena Date: Sat, 21 Mar 2026 11:59:00 +0000 Subject: [PATCH 04/10] docs: name supported servers explicitly instead of implying universal detection --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 6030465..0613f3a 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@ # FeedTheMonkey -FeedTheMonkey is a desktop client for any server that implements the -[Greader API](https://github.com/theoldreader/api), such as -[FreshRSS](https://freshrss.org) or [Miniflux](https://miniflux.app). -Just enter your server URL — the app detects the API path automatically. It doesn't work as a standalone feed reader — +FeedTheMonkey is a desktop client for [FreshRSS](https://freshrss.org) and +[Miniflux](https://miniflux.app), which both implement the +[Greader API](https://github.com/theoldreader/api). +Just enter your server URL — no need to know the API path. It doesn't work as a standalone feed reader — it connects to a server to fetch articles and sync read state. This is version 3, rewritten in Rust with GTK4 and libadwaita. From 68c4f6ccfef58a1a4b8ddada1e021b28e77b2f3b Mon Sep 17 00:00:00 2001 From: Jeena Date: Sat, 21 Mar 2026 12:01:48 +0000 Subject: [PATCH 05/10] docs: clarify server URL format for FreshRSS and Miniflux --- README.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 0613f3a..c7a82cc 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,11 @@ # FeedTheMonkey -FeedTheMonkey is a desktop client for [FreshRSS](https://freshrss.org) and -[Miniflux](https://miniflux.app), which both implement the -[Greader API](https://github.com/theoldreader/api). -Just enter your server URL — no need to know the API path. It doesn't work as a standalone feed reader — +FeedTheMonkey is a desktop client for any server that implements the +[Greader API](https://github.com/theoldreader/api). When logging in, enter: + +- **FreshRSS**: `https://example.com/api/greader.php` +- **Miniflux**: `https://example.com` +- Other compatible servers: consult your server's documentation for the Greader API endpoint It doesn't work as a standalone feed reader — it connects to a server to fetch articles and sync read state. This is version 3, rewritten in Rust with GTK4 and libadwaita. From f05eec6d53877963f167074fa8d080fdcc746667 Mon Sep 17 00:00:00 2001 From: Jeena Date: Sat, 21 Mar 2026 12:02:48 +0000 Subject: [PATCH 06/10] docs: fix README intro formatting --- README.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index c7a82cc..05bdb5e 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,15 @@ # FeedTheMonkey FeedTheMonkey is a desktop client for any server that implements the -[Greader API](https://github.com/theoldreader/api). When logging in, enter: +[Greader API](https://github.com/theoldreader/api). + +It doesn't work as a standalone feed reader — it connects to a server to fetch articles and sync read state. + +When logging in, enter: - **FreshRSS**: `https://example.com/api/greader.php` - **Miniflux**: `https://example.com` -- Other compatible servers: consult your server's documentation for the Greader API endpoint It doesn't work as a standalone feed reader — -it connects to a server to fetch articles and sync read state. +- Other compatible servers: consult your server's documentation for the Greader API endpoint This is version 3, rewritten in Rust with GTK4 and libadwaita. From 88afb27a22a23682fff15efbc7d3fa6123b2ba9d Mon Sep 17 00:00:00 2001 From: Jeena Date: Sat, 21 Mar 2026 12:17:55 +0000 Subject: [PATCH 07/10] login: add server URL format hint to login dialog --- data/ui/login_dialog.blp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/data/ui/login_dialog.blp b/data/ui/login_dialog.blp index 86028f0..c009543 100644 --- a/data/ui/login_dialog.blp +++ b/data/ui/login_dialog.blp @@ -16,11 +16,12 @@ template $LoginDialog : Adw.Dialog { margin-end: 12; Adw.PreferencesGroup { + description: _("FreshRSS: https://example.com/api/greader.php\nMiniflux: https://example.com"); + Adw.EntryRow server_url_row { title: _("Server URL"); input-hints: no_spellcheck; input-purpose: url; - // e.g. https://rss.example.com — /api/greader.php is added automatically } Adw.EntryRow username_row { From e17f0c622b02040356b597699f99590f092a8873 Mon Sep 17 00:00:00 2001 From: Jeena Date: Sat, 21 Mar 2026 12:24:19 +0000 Subject: [PATCH 08/10] login: update compiled UI with server URL hint --- data/ui/login_dialog.ui | 2 ++ 1 file changed, 2 insertions(+) diff --git a/data/ui/login_dialog.ui b/data/ui/login_dialog.ui index ebb5d9a..e34ab42 100644 --- a/data/ui/login_dialog.ui +++ b/data/ui/login_dialog.ui @@ -22,6 +22,8 @@ corresponding .blp file and regenerate this file with blueprint-compiler. 12 + FreshRSS: https://example.com/api/greader.php +Miniflux: https://example.com Server URL From dec1bfdc7eb14d7c1545c79007e9dcda8e200a83 Mon Sep 17 00:00:00 2001 From: Jeena Date: Sat, 21 Mar 2026 12:25:19 +0000 Subject: [PATCH 09/10] docs: remove completed backlog --- BACKLOG.md | 420 ----------------------------------------------------- 1 file changed, 420 deletions(-) delete mode 100644 BACKLOG.md diff --git a/BACKLOG.md b/BACKLOG.md deleted file mode 100644 index 4d5eda7..0000000 --- a/BACKLOG.md +++ /dev/null @@ -1,420 +0,0 @@ -# FeedTheMonkey v3 — Backlog - -A rewrite of FeedTheMonkey from Qt5/C++/QML to Rust + GTK4 + libadwaita. -The app is a FreshRSS client using the Google Reader compatible API. - -## Design principles - -- Idiomatic libadwaita: follows the GNOME HIG, not a port of the Qt UI -- Dark mode follows the system (AdwStyleManager), no in-app toggle -- Credentials stored in the system keyring (libsecret), not a config file -- App settings stored in GSettings - -## Tech stack - -- Language: Rust (stable) -- UI: GTK4 + libadwaita -- Web content: webkit6 crate (webkitgtk-6.0) -- UI templates: Blueprint (.blp) compiled at build time via blueprint-compiler -- HTTP: reqwest (async, TLS) -- JSON: serde + serde_json -- Async: tokio -- Credentials: libsecret crate -- Settings: GSettings (net.jeena.FeedTheMonkey schema) -- API: FreshRSS Google Reader compatible API - -## API reference - -Base URL: `https://rss.jeena.net/api/greader.php` - -| Purpose | Method | Path | Notes | -|---------------|--------|-----------------------------------------------|--------------------------------------------| -| Login | POST | /accounts/ClientLogin | Body: `Email=&Passwd=` → `Auth=` | -| Write token | GET | /reader/api/0/token | Header: `Authorization: GoogleLogin auth=` | -| Fetch unread | GET | /reader/api/0/stream/contents/reading-list | `?xt=user/-/state/com.google/read&n=200&output=json` | -| Mark read | POST | /reader/api/0/edit-tag | Body: `i=&a=user/-/state/com.google/read&T=` | -| Mark unread | POST | /reader/api/0/edit-tag | Body: `i=&r=user/-/state/com.google/read&T=` | - -### Article JSON → content.html field mapping - -| Google Reader field | JS template field | -|-----------------------|-------------------| -| title | title | -| origin.title | feed_title | -| canonical[0].href | link | -| published (unix ts) | updated | -| summary.content | content | -| author | author | -| unread | categories does NOT contain `user/-/state/com.google/read` | - -## UI structure - -``` -AdwApplicationWindow -└── AdwToastOverlay - └── AdwNavigationSplitView - ├── sidebar: AdwNavigationPage (title="FeedTheMonkey") - │ └── AdwToolbarView - │ ├── top: AdwHeaderBar - │ │ ├── start: GtkButton (view-refresh-symbolic) - │ │ │ → AdwSpinner while loading (via GtkStack) - │ │ └── end: GtkMenuButton (open-menu-symbolic, primary=True) - │ │ └── GMenu: Log Out, Keyboard Shortcuts, About - │ └── content: GtkScrolledWindow → GtkListView (ArticleRow) - │ or AdwStatusPage (empty / loading / error) - └── content: AdwNavigationPage (title = article title, dynamic) - └── AdwToolbarView (top-bar-style=raised) - ├── top: AdwHeaderBar (auto back button on narrow) - │ └── end: GtkMenuButton (view-more-symbolic) - │ └── GMenu: Mark Unread, Open in Browser - └── content: WebKitWebView (loads html/content.html) - or AdwStatusPage ("Select an article") -``` - -## GSettings schema - -Schema ID: `net.jeena.FeedTheMonkey` - -| Key | Type | Default | Notes | -|------------------|--------|---------|----------------------------| -| window-width | int | 900 | | -| window-height | int | 600 | | -| window-maximized | bool | false | | -| sidebar-width | int | 280 | | -| zoom-level | double | 1.0 | WebKitWebView zoom level | - -Credentials (libsecret, not GSettings): -- server-url -- username -- password - ---- - -## Epic 1 — Project scaffold - -Set up a working Rust + GTK4 + libadwaita project that opens a blank -AdwApplicationWindow. No logic, just the skeleton. - -### Stories - -**1.1** Create the `v3` git branch from `master`. - -**1.2** Write `Cargo.toml` with all dependencies: -- gtk4, libadwaita, webkit6, gio, glib -- reqwest (with rustls-tls feature, no native-tls) -- serde, serde_json -- tokio (full features) -- secret (libsecret) -- blueprint-compiler is a build-time tool, not a crate - -**1.3** Write `build.rs` that: -1. Runs `blueprint-compiler batch-compile` on all `.blp` files in `data/ui/` - to produce `.ui` files alongside them -2. Runs `glib-compile-resources` on `data/resources.gresource.xml` - to produce a compiled `.gresource` file, then registers it - -**1.4** Write `data/resources.gresource.xml` bundling: -- Compiled `.ui` files from `data/ui/` -- `html/content.html` and `html/content.css` - -**1.5** Write the GSettings schema `data/net.jeena.FeedTheMonkey.gschema.xml` -with the keys listed above. - -**1.6** Write `data/ui/window.blp` — a minimal `AdwApplicationWindow` -containing `AdwNavigationSplitView` with placeholder sidebar and content pages. - -**1.7** Write `src/main.rs` and `src/app.rs` — `AdwApplication` with -APP_ID `net.jeena.FeedTheMonkey`, activates the main window. - -**1.8** Write `src/window.rs` — `AdwApplicationWindow` GObject subclass -that loads the window Blueprint template and restores window size from GSettings. - -**1.9** Verify the app compiles and opens a blank window. - ---- - -## Epic 2 — Authentication - -Login dialog, credential storage, session management, logout. - -### Stories - -**2.1** Write `data/ui/login_dialog.blp` — an `AdwDialog` with: -- `AdwToolbarView` + `AdwHeaderBar` (title "Log In") -- `AdwClamp` → `AdwPreferencesGroup` containing: - - `AdwEntryRow` — Server URL (placeholder: `https://example.com`) - - `AdwEntryRow` — Username - - `AdwPasswordEntryRow` — Password - - `AdwButtonRow` — "Log In" (style: `.suggested-action`) - -**2.2** Write `src/login_dialog.rs` — `LoginDialog` GObject subclass -using the Blueprint template. Emits a `logged-in` signal on success. - -**2.3** Write `src/settings.rs` — libsecret helpers: -- `store_credentials(server_url, username, password)` -- `load_credentials() -> Option<(server_url, username, password)>` -- `clear_credentials()` - -**2.4** Write `src/api.rs` — `Api` struct with: -- `login(server_url, username, password) -> Result` - Calls `POST /accounts/ClientLogin`, parses `Auth=` line from response -- `fetch_write_token(auth_token) -> Result` - Calls `GET /reader/api/0/token` - -**2.5** Connect login dialog to `Api::login()`. On success: -- Store credentials via libsecret -- Store `AuthToken` and `WriteToken` in application state -- Close the dialog, trigger article fetch (Epic 3) - -**2.6** On app start: call `load_credentials()`. If found, call `Api::login()` -automatically and skip showing the login dialog. - -**2.7** Implement logout: clear libsecret credentials, discard tokens, -show the login dialog again. - -**2.8** Show login errors via `AdwAlertDialog` (title "Login Failed", -body = server error message, single "OK" button). - ---- - -## Epic 3 — Article fetching - -Fetch unread articles from the server and populate the list model. - -### Stories - -**3.1** Write `src/model.rs` — `Article` struct (plain Rust, not GObject): -``` -id: String -title: String -feed_title: String -author: String -link: String -published: i64 ← unix timestamp -content: String -excerpt: String ← plain text, first ~150 chars of content stripped of HTML -unread: bool -``` - -Also a GObject wrapper `ArticleObject` (implementing `glib::Object`) so -it can be stored in a `gio::ListStore`. - -**3.2** Add `Api::fetch_unread(auth_token) -> Result>` that: -- Calls `GET /reader/api/0/stream/contents/reading-list?xt=...&n=200&output=json` -- Deserializes the JSON response -- Maps Google Reader fields to `Article` struct -- Derives `unread` from `categories` not containing `user/-/state/com.google/read` - -**3.3** In `src/window.rs`: after successful login, call `fetch_unread()` in -a background tokio task and populate a `gio::ListStore`. - -**3.4** Show `AdwStatusPage` with `AdwSpinnerPaintable` and title "Loading…" -in the sidebar while fetching is in progress. - -**3.5** Show `AdwStatusPage` with icon `rss-symbolic` and title -"No unread articles" when the list is empty after a successful fetch. - -**3.6** Show `AdwStatusPage` with icon `network-error-symbolic` and title -"Could not load articles" (description = error message) on network/API error. -Include a "Try Again" button that re-triggers the fetch. - -**3.7** Implement reload: the refresh button in the sidebar header bar -re-runs `fetch_unread()`, replaces the list store contents, and scrolls -the list back to the top. - ---- - -## Epic 4 — Sidebar - -Article list view with custom rows, navigation, and split view behavior. - -### Stories - -**4.1** Write `data/ui/article_row.blp` — composite template for `ArticleRow`: -``` -GtkBox (orientation=vertical, margin=12, spacing=4) -├── GtkBox (orientation=horizontal, spacing=4) -│ ├── GtkLabel (id=feed_title, hexpand=True, xalign=0, .dim-label, small font) -│ └── GtkLabel (id=date, xalign=1, .dim-label, small font) -├── GtkLabel (id=title, xalign=0, wrap=True, lines=2) -└── GtkLabel (id=excerpt, xalign=0, .dim-label, small font, ellipsize=end, lines=1) -``` - -**4.2** Write `src/article_row.rs` — `ArticleRow` GObject subclass. -- Bind `ArticleObject` properties to labels -- Apply `.dim-label` style to the title label when article is read -- Format `published` timestamp as relative time ("2 hours ago", "Yesterday", etc.) - -**4.3** Set up `GtkListView` in the sidebar with a `GtkSignalListItemFactory` -that creates and binds `ArticleRow` widgets. - -**4.4** Connect list selection (`GtkSingleSelection`) to show the selected -article in the content pane and call `adw_navigation_split_view_set_show_content(true)` -on narrow screens. - -**4.5** Implement `next_article()` and `previous_article()` functions that -move the selection in the list view (used by keyboard shortcuts). - -**4.6** Persist and restore `sidebar-width` from GSettings using -`AdwNavigationSplitView::sidebar-width-fraction` or equivalent. - ---- - -## Epic 5 — Content pane - -WebKitWebView loading content.html, link handling, empty state. - -### Stories - -**5.1** Update `html/content.html`: -- Change `` from "TTRSS" to "FeedTheMonkey" -- Remove `setFont()` and `setNightmode()` JavaScript functions (no longer needed) -- Remove `"loading"` and `"empty"` string handling from `setArticle()` - (these states are now handled by `AdwStatusPage` in Rust) -- Remove the `"logout"` string handling -- Keep `setArticle(article)` for JSON object input -- Keep `checkKey()` and the keyboard event listener - -**5.2** Update `html/content.css`: -- Replace the `.nightmode` body class block with - `@media (prefers-color-scheme: dark) { ... }` -- Keep all existing styles, just change the selector - -**5.3** Write `src/content_view.rs` — wrapper around `webkit::WebView`: -- Loads `content.html` from GResource on init -- Exposes `set_article(article: &Article)` which calls `window.setArticle()` - via `WebView::evaluate_javascript()` -- Handles `decide-policy` signal: intercept `feedthemonkey:previous`, - `feedthemonkey:next`, `feedthemonkey:open` URIs and emit corresponding - GObject signals; intercept all other link clicks and open with `gtk::show_uri()` -- Exposes `zoom_level` property (get/set), used by Epic 8 - -**5.4** Show `AdwStatusPage` with icon `document-open-symbolic` and -title "No Article Selected" when nothing is selected in the sidebar. - -**5.5** Ensure WebKit loads the local `content.html` from GResource using -a custom URI scheme or `load_html()` with a base URI so that `content.css` -is resolved correctly. - ---- - -## Epic 6 — Read state - -Auto-mark-read, manual mark-unread, API sync. - -### Stories - -**6.1** Add `Api::mark_read(auth_token, write_token, item_id) -> Result<()>` -that POSTs to `/reader/api/0/edit-tag` with -`i=<id>&a=user/-/state/com.google/read&T=<write_token>`. - -**6.2** Add `Api::mark_unread(auth_token, write_token, item_id) -> Result<()>` -that POSTs to `/reader/api/0/edit-tag` with -`i=<id>&r=user/-/state/com.google/read&T=<write_token>`. - -**6.3** When the selected article changes (user navigates to next/previous), -mark the *previously selected* article as read via `Api::mark_read()`. -Update `ArticleObject::unread` to `false` so the row styling updates immediately -(optimistic update — no waiting for the API response). - -**6.4** Implement "Mark Unread" action (key `u`, content pane menu): -- Set `ArticleObject::unread` to `true` (optimistic update) -- Call `Api::mark_unread()` in the background -- Show an `AdwToast` "Marked as unread" in the `AdwToastOverlay` -- Set a guard flag so navigating away does not re-mark the article as read - -**6.5** Handle API errors from mark_read/mark_unread silently -(log to stderr, do not show a dialog — these are background operations). - ---- - -## Epic 7 — Keyboard shortcuts - -Full keyboard navigation matching the feature set of v2. - -### Stories - -**7.1** Register `GtkShortcutController` on the main window for all shortcuts: - -| Key(s) | Action | -|-----------------|-----------------------------------------| -| j, Right | Next article | -| k, Left | Previous article | -| Enter, n | Open current article in browser | -| r | Reload articles | -| u | Mark current article unread | -| Space, Page_Down| Scroll content down one page | -| Page_Up | Scroll content up one page | -| Home | Scroll content to top | -| End | Scroll content to bottom | -| Ctrl+plus | Zoom in | -| Ctrl+minus | Zoom out | -| Ctrl+0 | Reset zoom | -| F11 | Toggle fullscreen | -| Ctrl+W | Close window | -| Ctrl+Q | Quit application | - -**7.2** Write `data/ui/shortcuts.blp` — `AdwShortcutsDialog` documenting -all shortcuts, grouped by category (Navigation, Article, View, Application). - -**7.3** Connect the "Keyboard Shortcuts" menu item to show the shortcuts dialog. -Also register `F1` as an alias. - ---- - -## Epic 8 — Zoom - -WebView zoom with keyboard shortcuts and persistence. - -### Stories - -**8.1** Implement `zoom_in()`, `zoom_out()`, `zoom_reset()` in `content_view.rs`: -- `zoom_in`: multiply `WebView::zoom_level` by 1.1 -- `zoom_out`: divide by 1.1 -- `zoom_reset`: set to 1.0 - -**8.2** On zoom change, save the new zoom level to GSettings (`zoom-level` key). - -**8.3** On app start, read `zoom-level` from GSettings and apply to the WebView. - ---- - -## Epic 9 — Window state persistence - -Save and restore window size and sidebar width. - -### Stories - -**9.1** On window close, save `window-width`, `window-height`, `window-maximized` -to GSettings. - -**9.2** On window open, restore width, height, and maximized state from GSettings. - -**9.3** Save `sidebar-width` to GSettings when the sidebar is resized. -Restore on startup. - ---- - -## Epic 10 — Polish - -Final details for a shippable app. - -### Stories - -**10.1** Write `data/net.jeena.FeedTheMonkey.desktop` — `.desktop` file -with `Name=FeedTheMonkey`, `Exec=feedthemonkey`, `Icon=feedthemonkey`, -`Categories=Network;Feed;`. - -**10.2** Include the existing `misc/feedthemonkey.xpm` icon in the GResource -bundle and reference it in the `.desktop` file. - -**10.3** Implement `AdwAboutDialog` with app name, version, license (GPL-3.0), -website, and developer name. Connect to "About" menu item. - -**10.4** Handle the write token expiry: if an `edit-tag` call returns 401, -fetch a new write token and retry once. - -**10.5** Add `AdwAlertDialog` for logout confirmation ("Are you sure you want -to log out?" with "Log Out" destructive button and "Cancel"). - -**10.6** Graceful shutdown: cancel in-flight API requests when the window closes. From 8dc71214aa9d77e8abbdeadd9570fac136582b14 Mon Sep 17 00:00:00 2001 From: Jeena <hello@jeena.net> Date: Sat, 21 Mar 2026 12:27:13 +0000 Subject: [PATCH 10/10] data: replace generated SVG icon with original PNG --- data/icons/net.jeena.FeedTheMonkey.png | Bin 0 -> 51707 bytes data/icons/net.jeena.FeedTheMonkey.svg | 57 ------------------------- install.sh | 4 +- 3 files changed, 2 insertions(+), 59 deletions(-) create mode 100644 data/icons/net.jeena.FeedTheMonkey.png delete mode 100644 data/icons/net.jeena.FeedTheMonkey.svg diff --git a/data/icons/net.jeena.FeedTheMonkey.png b/data/icons/net.jeena.FeedTheMonkey.png new file mode 100644 index 0000000000000000000000000000000000000000..006f24a2655d0a5c7f5d1af9c62e8eb7ebb2adb1 GIT binary patch literal 51707 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 literal 0 HcmV?d00001 diff --git a/data/icons/net.jeena.FeedTheMonkey.svg b/data/icons/net.jeena.FeedTheMonkey.svg deleted file mode 100644 index bab7b90..0000000 --- a/data/icons/net.jeena.FeedTheMonkey.svg +++ /dev/null @@ -1,57 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128"> - <!-- Background rounded rectangle --> - <rect x="4" y="4" width="120" height="120" rx="28" ry="28" fill="#c0632a"/> - <rect x="4" y="4" width="120" height="120" rx="28" ry="28" fill="url(#bggrad)"/> - - <defs> - <radialGradient id="bggrad" cx="50%" cy="35%" r="65%"> - <stop offset="0%" stop-color="#d97a38"/> - <stop offset="100%" stop-color="#a04f1c"/> - </radialGradient> - <radialGradient id="facegrad" cx="50%" cy="40%" r="55%"> - <stop offset="0%" stop-color="#c8813a"/> - <stop offset="100%" stop-color="#8b5220"/> - </radialGradient> - <radialGradient id="eargrad" cx="50%" cy="40%" r="55%"> - <stop offset="0%" stop-color="#e8b060"/> - <stop offset="100%" stop-color="#c07830"/> - </radialGradient> - </defs> - - <!-- Ears --> - <ellipse cx="26" cy="68" rx="14" ry="16" fill="#8b5220"/> - <ellipse cx="26" cy="68" rx="9" ry="11" fill="url(#eargrad)"/> - <ellipse cx="102" cy="68" rx="14" ry="16" fill="#8b5220"/> - <ellipse cx="102" cy="68" rx="9" ry="11" fill="url(#eargrad)"/> - - <!-- Head --> - <ellipse cx="64" cy="64" rx="42" ry="44" fill="url(#facegrad)"/> - - <!-- Eyes --> - <ellipse cx="50" cy="55" rx="9" ry="10" fill="white"/> - <ellipse cx="78" cy="55" rx="9" ry="10" fill="white"/> - <circle cx="52" cy="57" r="5.5" fill="#1a1a1a"/> - <circle cx="80" cy="57" r="5.5" fill="#1a1a1a"/> - <circle cx="53.5" cy="55" r="1.8" fill="white"/> - <circle cx="81.5" cy="55" r="1.8" fill="white"/> - - <!-- Muzzle --> - <ellipse cx="64" cy="79" rx="22" ry="16" fill="#e8c08a"/> - - <!-- Nose --> - <ellipse cx="58" cy="72" rx="4" ry="2.5" fill="#6b3a10"/> - <ellipse cx="70" cy="72" rx="4" ry="2.5" fill="#6b3a10"/> - <line x1="64" y1="72" x2="64" y2="77" stroke="#6b3a10" stroke-width="1.5"/> - - <!-- Mouth / smile --> - <path d="M 50 82 Q 64 92 78 82" stroke="#6b3a10" stroke-width="2" fill="none" stroke-linecap="round"/> - - <!-- Teeth --> - <rect x="56" y="82" width="8" height="5" rx="1" fill="white"/> - <rect x="65" y="82" width="8" height="5" rx="1" fill="white"/> - - <!-- Eyebrows --> - <path d="M 42 46 Q 50 42 58 46" stroke="#6b3a10" stroke-width="2.5" fill="none" stroke-linecap="round"/> - <path d="M 70 46 Q 78 42 86 46" stroke="#6b3a10" stroke-width="2.5" fill="none" stroke-linecap="round"/> -</svg> diff --git a/install.sh b/install.sh index 02400c8..13a9868 100755 --- a/install.sh +++ b/install.sh @@ -15,8 +15,8 @@ fi install -Dm755 "$BINARY" "$PREFIX/bin/feedthemonkey" install -Dm644 data/net.jeena.FeedTheMonkey.desktop \ "$PREFIX/share/applications/net.jeena.FeedTheMonkey.desktop" -install -Dm644 data/icons/net.jeena.FeedTheMonkey.svg \ - "$PREFIX/share/icons/hicolor/scalable/apps/net.jeena.FeedTheMonkey.svg" +install -Dm644 data/icons/net.jeena.FeedTheMonkey.png \ + "$PREFIX/share/icons/hicolor/256x256/apps/net.jeena.FeedTheMonkey.png" # Install GSettings schema install -Dm644 data/net.jeena.FeedTheMonkey.gschema.xml \