💤
PLAN
?
- HOLD
+ PAUSE
DROP
DONE
@@ -440,7 +442,7 @@
No recent releases
:class="{
'chip-new': r.reading_status==='reading',
'chip-plan': r.reading_status==='plan_to_read',
- 'chip-hold': r.reading_status==='on_hold',
+ 'chip-paused': r.reading_status==='paused',
'chip-dropped': r.reading_status==='dropped',
'chip-done': r.reading_status==='completed',
'chip-considering': r.reading_status==='considering',
@@ -1035,7 +1037,8 @@ All
-
+
+
@@ -1217,6 +1220,17 @@ No ratings yet
✅ Live sync active — changes pushed to MangaBaka automatically.
+
+
+
+
+
+ ✅ New MangaBaka-linked series will be added to your MB library automatically during sync.
+
+
When enabled, Pushover notifications only fire for series you have marked
- Reading. Series set to On Hold, Plan to Read, Considering, etc.
+ Reading. Series set to Paused, Plan to Read, Considering, etc.
still create in-app notifications but won't ping your device.
Useful if you have a large backlog you haven't started yet.
@@ -1355,7 +1369,7 @@ No ratings yet
When set to "Reading only", the Updates pill and badge on the dashboard only count
- series with Reading status. Plan to Read, On Hold, etc. with new chapters
+ series with Reading status. Plan to Read, Paused, etc. with new chapters
still show a NEW chip on their card — they just won't be counted in the update total.
@@ -2009,8 +2023,9 @@ No ratings yet
-
+
+
@@ -2764,9 +2779,9 @@ No ratings yet
-
-
+
+
diff --git a/static/js/app.js b/static/js/app.js
index 2d01694..c490674 100644
--- a/static/js/app.js
+++ b/static/js/app.js
@@ -3,7 +3,7 @@ function app() {
page: 'library',
loading: false,
library: [],
- filters: ['all'], // multi-select: ['all'], ['reading','on_hold'], ['updates','reading'], etc.
+ filters: ['all'], // multi-select: ['all'], ['reading','paused'], ['updates','reading'], etc.
viewMode: 'grid', // 'grid' or 'list'
// Library toolbar
@@ -31,7 +31,7 @@ function app() {
activityFilter: '',
// Settings form
- sf: { pushover_user_key:'', pushover_app_token:'', pushover_enabled:'false', push_chapter_updates:'true', push_news:'false', push_reading_only:'false', rich_notification_chapter_titles:'true', notify_locked_chapters:'false', updates_reading_only:'false', poll_interval_hours:'6', mangabaka_token:'', mangabaka_pat:'', mb_sync_enabled:'false', mu_enabled:'true', kmanga_email:'', kmanga_password:'', kmanga_recaptcha_token:'', komga_url:'', komga_api_key:'', komga_sync_read_progress:'false', idle_detection_enabled:'false', idle_threshold_days:'90', idle_auto_archive:'false', webhook_enabled:'false', webhook_url:'', default_page:'library', grid_density:'normal',
+ sf: { pushover_user_key:'', pushover_app_token:'', pushover_enabled:'false', push_chapter_updates:'true', push_news:'false', push_reading_only:'false', rich_notification_chapter_titles:'true', notify_locked_chapters:'false', updates_reading_only:'false', poll_interval_hours:'6', mangabaka_token:'', mangabaka_pat:'', mb_sync_enabled:'false', mb_auto_add:'false', mu_enabled:'true', kmanga_email:'', kmanga_password:'', kmanga_recaptcha_token:'', komga_url:'', komga_api_key:'', komga_sync_read_progress:'false', idle_detection_enabled:'false', idle_threshold_days:'90', idle_auto_archive:'false', webhook_enabled:'false', webhook_url:'', default_page:'library', grid_density:'normal',
// ── Display preferences ────────────────────────────────────────────
show_source_badges: 'true', // platform banner (MangaPlus, K Manga, etc.) on cards
show_ratings_on_cards: 'true', // ★ score overlay on cover image
@@ -763,7 +763,11 @@ function app() {
async testMbSync() {
try {
const d = await this.api('/api/settings/test-mb-sync', 'POST');
- this.toast(`Connected as ${d.username}`, 'success');
+ if (d.missing_write_scope) {
+ this.toast(`Connected as ${d.username} — warning: PAT missing library.write scope, sync will fail`, 'warning');
+ } else {
+ this.toast(`Connected as ${d.username}`, 'success');
+ }
} catch(e) { this.toast(e.detail || 'PAT invalid or connection failed', 'error'); }
},
@@ -788,7 +792,10 @@ function app() {
if (!s.running) {
clearInterval(poll);
this.mbPushingAll = false;
- const parts = [`${s.pushed} pushed`, `${s.skipped} not in MB`];
+ const parts = [];
+ if (s.added > 0) parts.push(`${s.added} added to MB`);
+ parts.push(`${s.pushed} updated`);
+ if (s.skipped > 0) parts.push(`${s.skipped} not in MB`);
if (s.failed > 0) parts.push(`${s.failed} failed (rate limited)`);
this.toast(`MB push done — ${parts.join(', ')}`, s.failed > 0 ? 'warning' : 'success');
}