diff --git a/src-tauri/src/commands/lyrics.rs b/src-tauri/src/commands/lyrics.rs
index 6746273..03e33eb 100644
--- a/src-tauri/src/commands/lyrics.rs
+++ b/src-tauri/src/commands/lyrics.rs
@@ -696,6 +696,21 @@ async fn run_prefetch(
let mut misses = 0u32;
let mut failed = 0u32;
+ // Emit an initial frame so the UI can show the total — and explicitly
+ // surface the "nothing to do" case (total == 0) which otherwise looks
+ // like the button does nothing.
+ let _ = app.emit(
+ "lyrics:prefetch-progress",
+ LyricsPrefetchProgress {
+ processed: 0,
+ total,
+ hits: 0,
+ misses: 0,
+ failed: 0,
+ current_title: None,
+ },
+ );
+
let client = LrclibClient::new();
let mut cancelled = false;
diff --git a/src/components/views/AboutView.tsx b/src/components/views/AboutView.tsx
index 3a53253..161b6a7 100644
--- a/src/components/views/AboutView.tsx
+++ b/src/components/views/AboutView.tsx
@@ -313,7 +313,7 @@ export function AboutView({ onNavigate }: AboutViewProps) {
-
+
diff --git a/src/components/views/LibraryView.tsx b/src/components/views/LibraryView.tsx
index 53cd718..73a83ec 100644
--- a/src/components/views/LibraryView.tsx
+++ b/src/components/views/LibraryView.tsx
@@ -31,7 +31,6 @@ import { useTranslation } from "react-i18next";
import type { LibraryTab } from "../../types";
import { Tab } from "../common/Tab";
import { EmptyState } from "../common/EmptyState";
-import { UploadIcon } from "../common/Icons";
import { Artwork } from "../common/Artwork";
import { AlbumLink } from "../common/AlbumLink";
import { ArtistLink } from "../common/ArtistLink";
@@ -717,15 +716,11 @@ export function LibraryView({
className="py-20"
>
-
+ ) : lyricsResultMsg ? (
+
+ {lyricsResultMsg}
+
) : (
{t("settings.lyricsPrefetch.subtitle")}
diff --git a/src/i18n/locales/ar.json b/src/i18n/locales/ar.json
index 340ee0c..1b7619b 100644
--- a/src/i18n/locales/ar.json
+++ b/src/i18n/locales/ar.json
@@ -1244,6 +1244,9 @@
"lyricsPrefetch": {
"title": "تحميل كلمات الأغاني مسبقًا",
"subtitle": "تنزيل كلمات الأغاني للمكتبة بأكملها للاستخدام دون اتصال",
+ "result": "تم تزامن {{hits}}، لم يتم العثور على {{misses}}، فشل {{failed}}",
+ "offline": "وضع عدم الاتصال مفعّل",
+ "failed": "فشل التحميل المسبق",
"action": "تحميل مسبق",
"progress": "تم معالجة {{current}}/{{total}} · {{hits}} عُثر عليها"
},
diff --git a/src/i18n/locales/de.json b/src/i18n/locales/de.json
index 9d35bc9..af42e69 100644
--- a/src/i18n/locales/de.json
+++ b/src/i18n/locales/de.json
@@ -1240,6 +1240,9 @@
"lyricsPrefetch": {
"title": "Songtexte vorab laden",
"subtitle": "Songtexte der gesamten Bibliothek für Offline-Nutzung herunterladen",
+ "result": "{{hits}} synchronisiert, {{misses}} nicht gefunden, {{failed}} fehlgeschlagen",
+ "offline": "Offlinemodus aktiviert",
+ "failed": "Vorabladen fehlgeschlagen",
"action": "Vorab laden",
"progress": "{{current}}/{{total}} verarbeitet · {{hits}} gefunden"
},
diff --git a/src/i18n/locales/en.json b/src/i18n/locales/en.json
index 4e83972..b22305a 100644
--- a/src/i18n/locales/en.json
+++ b/src/i18n/locales/en.json
@@ -1294,6 +1294,9 @@
"lyricsPrefetch": {
"title": "Prefetch lyrics",
"subtitle": "Download lyrics for the entire library for offline use",
+ "result": "{{hits}} synced, {{misses}} not found, {{failed}} failed",
+ "offline": "Offline mode is enabled",
+ "failed": "Prefetch failed",
"action": "Prefetch",
"progress": "{{current}}/{{total}} processed · {{hits}} found"
},
diff --git a/src/i18n/locales/es.json b/src/i18n/locales/es.json
index a5efd93..8b79a58 100644
--- a/src/i18n/locales/es.json
+++ b/src/i18n/locales/es.json
@@ -1240,6 +1240,9 @@
"lyricsPrefetch": {
"title": "Precargar letras",
"subtitle": "Descargar las letras de toda la biblioteca para uso sin conexión",
+ "result": "{{hits}} sincronizadas, {{misses}} no encontradas, {{failed}} fallidas",
+ "offline": "Modo sin conexión activado",
+ "failed": "Error al precargar",
"action": "Precargar",
"progress": "{{current}}/{{total}} procesadas · {{hits}} encontradas"
},
diff --git a/src/i18n/locales/fr.json b/src/i18n/locales/fr.json
index f3809fb..9704fa2 100644
--- a/src/i18n/locales/fr.json
+++ b/src/i18n/locales/fr.json
@@ -1318,6 +1318,9 @@
"lyricsPrefetch": {
"title": "Préchargement des paroles",
"subtitle": "Télécharger les paroles de toute la bibliothèque pour usage hors-ligne",
+ "result": "{{hits}} synchronisées, {{misses}} introuvables, {{failed}} échecs",
+ "offline": "Mode hors-ligne activé",
+ "failed": "Échec du préchargement",
"action": "Précharger",
"progress": "{{current}}/{{total}} traités · {{hits}} trouvés"
},
diff --git a/src/i18n/locales/hi.json b/src/i18n/locales/hi.json
index 8631aa1..37d8136 100644
--- a/src/i18n/locales/hi.json
+++ b/src/i18n/locales/hi.json
@@ -1240,6 +1240,9 @@
"lyricsPrefetch": {
"title": "बोल पहले से लोड करें",
"subtitle": "ऑफ़लाइन उपयोग के लिए पूरी लाइब्रेरी के बोल डाउनलोड करें",
+ "result": "{{hits}} सिंक्ड, {{misses}} नहीं मिलीं, {{failed}} विफल",
+ "offline": "ऑफ़लाइन मोड सक्षम है",
+ "failed": "प्रीफ़ेच विफल",
"action": "पहले से लोड करें",
"progress": "{{current}}/{{total}} संसाधित · {{hits}} मिले"
},
diff --git a/src/i18n/locales/id.json b/src/i18n/locales/id.json
index c5599f0..29316ad 100644
--- a/src/i18n/locales/id.json
+++ b/src/i18n/locales/id.json
@@ -1239,6 +1239,9 @@
"lyricsPrefetch": {
"title": "Pramuat lirik",
"subtitle": "Unduh lirik untuk seluruh pustaka untuk penggunaan offline",
+ "result": "{{hits}} disinkronkan, {{misses}} tidak ditemukan, {{failed}} gagal",
+ "offline": "Mode luring diaktifkan",
+ "failed": "Pra-pemuatan gagal",
"action": "Pramuat",
"progress": "{{current}}/{{total}} diproses · {{hits}} ditemukan"
},
diff --git a/src/i18n/locales/it.json b/src/i18n/locales/it.json
index db37f8c..22ffb6f 100644
--- a/src/i18n/locales/it.json
+++ b/src/i18n/locales/it.json
@@ -1240,6 +1240,9 @@
"lyricsPrefetch": {
"title": "Precarica i testi",
"subtitle": "Scarica i testi dell’intera libreria per l’uso offline",
+ "result": "{{hits}} sincronizzati, {{misses}} non trovati, {{failed}} falliti",
+ "offline": "Modalità offline attiva",
+ "failed": "Precaricamento non riuscito",
"action": "Precarica",
"progress": "{{current}}/{{total}} elaborati · {{hits}} trovati"
},
diff --git a/src/i18n/locales/ja.json b/src/i18n/locales/ja.json
index 11b5d87..dc2494b 100644
--- a/src/i18n/locales/ja.json
+++ b/src/i18n/locales/ja.json
@@ -1239,6 +1239,9 @@
"lyricsPrefetch": {
"title": "歌詞を事前取得",
"subtitle": "オフライン利用のためライブラリ全体の歌詞をダウンロードします",
+ "result": "{{hits}} 件同期、{{misses}} 件見つからず、{{failed}} 件失敗",
+ "offline": "オフラインモードが有効です",
+ "failed": "プリフェッチに失敗しました",
"action": "事前取得",
"progress": "{{current}}/{{total}} 処理済み · {{hits}} 件取得"
},
diff --git a/src/i18n/locales/kr.json b/src/i18n/locales/kr.json
index 63dfc36..9366696 100644
--- a/src/i18n/locales/kr.json
+++ b/src/i18n/locales/kr.json
@@ -1239,6 +1239,9 @@
"lyricsPrefetch": {
"title": "가사 미리 가져오기",
"subtitle": "오프라인 사용을 위해 전체 라이브러리의 가사를 다운로드합니다",
+ "result": "{{hits}}개 동기화, {{misses}}개 없음, {{failed}}개 실패",
+ "offline": "오프라인 모드가 활성화됨",
+ "failed": "미리 가져오기 실패",
"action": "미리 가져오기",
"progress": "{{current}}/{{total}} 처리됨 · {{hits}}곡 찾음"
},
diff --git a/src/i18n/locales/nl.json b/src/i18n/locales/nl.json
index 0d6aa4f..d695f80 100644
--- a/src/i18n/locales/nl.json
+++ b/src/i18n/locales/nl.json
@@ -1240,6 +1240,9 @@
"lyricsPrefetch": {
"title": "Songteksten vooraf ophalen",
"subtitle": "Songteksten van de hele bibliotheek downloaden voor offline gebruik",
+ "result": "{{hits}} gesynchroniseerd, {{misses}} niet gevonden, {{failed}} mislukt",
+ "offline": "Offlinemodus is ingeschakeld",
+ "failed": "Vooraf laden mislukt",
"action": "Vooraf ophalen",
"progress": "{{current}}/{{total}} verwerkt · {{hits}} gevonden"
},
diff --git a/src/i18n/locales/pt-BR.json b/src/i18n/locales/pt-BR.json
index d518a0e..5457c3e 100644
--- a/src/i18n/locales/pt-BR.json
+++ b/src/i18n/locales/pt-BR.json
@@ -1240,6 +1240,9 @@
"lyricsPrefetch": {
"title": "Pré-carregar letras",
"subtitle": "Baixar as letras de toda a biblioteca para uso offline",
+ "result": "{{hits}} sincronizadas, {{misses}} não encontradas, {{failed}} falharam",
+ "offline": "Modo offline ativado",
+ "failed": "Pré-carregamento falhou",
"action": "Pré-carregar",
"progress": "{{current}}/{{total}} processadas · {{hits}} encontradas"
},
diff --git a/src/i18n/locales/pt.json b/src/i18n/locales/pt.json
index 3d5c929..433b160 100644
--- a/src/i18n/locales/pt.json
+++ b/src/i18n/locales/pt.json
@@ -1240,6 +1240,9 @@
"lyricsPrefetch": {
"title": "Pré-carregar letras",
"subtitle": "Baixar as letras de toda a biblioteca para uso offline",
+ "result": "{{hits}} sincronizadas, {{misses}} não encontradas, {{failed}} falhadas",
+ "offline": "Modo offline ativado",
+ "failed": "Pré-carregamento falhou",
"action": "Pré-carregar",
"progress": "{{current}}/{{total}} processadas · {{hits}} encontradas"
},
diff --git a/src/i18n/locales/ru.json b/src/i18n/locales/ru.json
index 57b2fa4..24f7727 100644
--- a/src/i18n/locales/ru.json
+++ b/src/i18n/locales/ru.json
@@ -1242,6 +1242,9 @@
"lyricsPrefetch": {
"title": "Предзагрузка текстов",
"subtitle": "Скачать тексты для всей библиотеки для офлайн-использования",
+ "result": "Синхронизировано: {{hits}}, не найдено: {{misses}}, ошибок: {{failed}}",
+ "offline": "Включен офлайн-режим",
+ "failed": "Не удалось предзагрузить",
"action": "Предзагрузить",
"progress": "{{current}}/{{total}} обработано · {{hits}} найдено"
},
diff --git a/src/i18n/locales/tr.json b/src/i18n/locales/tr.json
index 4207dc3..d17db9b 100644
--- a/src/i18n/locales/tr.json
+++ b/src/i18n/locales/tr.json
@@ -1239,6 +1239,9 @@
"lyricsPrefetch": {
"title": "Şarkı sözlerini önceden yükle",
"subtitle": "Çevrimdışı kullanım için tüm kütüphanenin şarkı sözlerini indir",
+ "result": "{{hits}} eşitlendi, {{misses}} bulunamadı, {{failed}} başarısız",
+ "offline": "Çevrimdışı modu etkin",
+ "failed": "Önbelleğe alma başarısız",
"action": "Önceden yükle",
"progress": "{{current}}/{{total}} işlendi · {{hits}} bulundu"
},
diff --git a/src/i18n/locales/zh-CN.json b/src/i18n/locales/zh-CN.json
index 08b2620..bf1fd06 100644
--- a/src/i18n/locales/zh-CN.json
+++ b/src/i18n/locales/zh-CN.json
@@ -1239,6 +1239,9 @@
"lyricsPrefetch": {
"title": "预取歌词",
"subtitle": "为整个曲库下载歌词以供离线使用",
+ "result": "已同步 {{hits}},未找到 {{misses}},失败 {{failed}}",
+ "offline": "已启用离线模式",
+ "failed": "预加载失败",
"action": "预取",
"progress": "已处理 {{current}}/{{total}} · 找到 {{hits}}"
},
diff --git a/src/i18n/locales/zh-TW.json b/src/i18n/locales/zh-TW.json
index efd219e..1149b17 100644
--- a/src/i18n/locales/zh-TW.json
+++ b/src/i18n/locales/zh-TW.json
@@ -1239,6 +1239,9 @@
"lyricsPrefetch": {
"title": "預先擷取歌詞",
"subtitle": "為整個曲庫下載歌詞以供離線使用",
+ "result": "已同步 {{hits}},找不到 {{misses}},失敗 {{failed}}",
+ "offline": "已啟用離線模式",
+ "failed": "預先載入失敗",
"action": "預先擷取",
"progress": "已處理 {{current}}/{{total}} · 找到 {{hits}}"
},