diff --git a/lib/l10n/app_ar.arb b/lib/l10n/app_ar.arb index dcdbbe8f..b725c8ee 100644 --- a/lib/l10n/app_ar.arb +++ b/lib/l10n/app_ar.arb @@ -273,5 +273,7 @@ "markEpisodeAsSeenSetting": "في أي نقطة لوضع علامة على الحلقة كمشاهدة", "default_skip_intro_length": "طول تخطي المقدمة الافتراضي", "default_playback_speed_length": "طول سرعة التشغيل الافتراضية", - "updateProgressAfterReading": "تحديث التقدم بعد القراءة" + "updateProgressAfterReading": "تحديث التقدم بعد القراءة", + "no_sources_installed": "لم يتم تثبيت مصادر!", + "show_extensions": "عرض الإضافات" } \ No newline at end of file diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index 7eeb4975..65c17705 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -273,5 +273,7 @@ "markEpisodeAsSeenSetting": "At what point to mark the episode as seen", "default_skip_intro_length": "Default Skip intro length", "default_playback_speed_length": "Default Playback speed length", - "updateProgressAfterReading": "Update progress after reading" + "updateProgressAfterReading": "Update progress after reading", + "no_sources_installed": "No sources installed!", + "show_extensions": "Show extensions" } \ No newline at end of file diff --git a/lib/l10n/app_es.arb b/lib/l10n/app_es.arb index 99532ca6..dad9e1fa 100644 --- a/lib/l10n/app_es.arb +++ b/lib/l10n/app_es.arb @@ -273,5 +273,7 @@ "markEpisodeAsSeenSetting": "En qué punto marcar el episodio como visto", "default_skip_intro_length": "Duración predeterminada para saltar la introducción", "default_playback_speed_length": "Duración predeterminada de la velocidad de reproducción", - "updateProgressAfterReading": "Actualizar el progreso después de leer" + "updateProgressAfterReading": "Actualizar el progreso después de leer", + "no_sources_installed": "¡No hay fuentes instaladas!", + "show_extensions": "Mostrar extensiones" } \ No newline at end of file diff --git a/lib/l10n/app_fr.arb b/lib/l10n/app_fr.arb index 9dc3a686..03ad8531 100644 --- a/lib/l10n/app_fr.arb +++ b/lib/l10n/app_fr.arb @@ -273,5 +273,7 @@ "markEpisodeAsSeenSetting": "À quel moment marquer l'épisode comme vu", "default_skip_intro_length": "Longueur par défaut du passage de l'intro", "default_playback_speed_length": "Longueur par défaut de la vitesse de lecture", - "updateProgressAfterReading": "Synchroniser la progression après lecture" + "updateProgressAfterReading": "Synchroniser la progression après lecture", + "no_sources_installed": "Aucune source installée !", + "show_extensions": "Afficher les extensions" } \ No newline at end of file diff --git a/lib/l10n/app_id.arb b/lib/l10n/app_id.arb index 8877fe7a..0c0147d7 100644 --- a/lib/l10n/app_id.arb +++ b/lib/l10n/app_id.arb @@ -273,5 +273,7 @@ "markEpisodeAsSeenSetting": "Pada titik mana menandai episode sebagai terlihat", "default_skip_intro_length": "Panjang lewati intro default", "default_playback_speed_length": "Panjang kecepatan pemutaran default", - "updateProgressAfterReading": "Perbarui kemajuan setelah membaca" + "updateProgressAfterReading": "Perbarui kemajuan setelah membaca", + "no_sources_installed": "Tidak ada sumber yang terpasang!", + "show_extensions": "Tampilkan ekstensi" } \ No newline at end of file diff --git a/lib/l10n/app_it.arb b/lib/l10n/app_it.arb index 6664daef..99166e66 100644 --- a/lib/l10n/app_it.arb +++ b/lib/l10n/app_it.arb @@ -273,5 +273,7 @@ "markEpisodeAsSeenSetting": "In quale momento contrassegnare l'episodio come visto", "default_skip_intro_length": "Durata predefinita per saltare l'introduzione", "default_playback_speed_length": "Durata predefinita per la velocità di riproduzione", - "updateProgressAfterReading": "Aggiorna il progresso dopo aver letto" + "updateProgressAfterReading": "Aggiorna il progresso dopo aver letto", + "no_sources_installed": "Nessuna fonte installata!", + "show_extensions": "Mostra estensioni" } \ No newline at end of file diff --git a/lib/l10n/app_pt.arb b/lib/l10n/app_pt.arb index 0a1295f7..1b1f64a8 100644 --- a/lib/l10n/app_pt.arb +++ b/lib/l10n/app_pt.arb @@ -273,5 +273,7 @@ "markEpisodeAsSeenSetting": "Em que ponto marcar o episódio como visto", "default_skip_intro_length": "Duração padrão para pular a introdução", "default_playback_speed_length": "Duração padrão da velocidade de reprodução", - "updateProgressAfterReading": "Atualizar progresso após a leitura" + "updateProgressAfterReading": "Atualizar progresso após a leitura", + "no_sources_installed": "Nenhuma fonte instalada!", + "show_extensions": "mostrar extensões" } \ No newline at end of file diff --git a/lib/l10n/app_pt_BR.arb b/lib/l10n/app_pt_BR.arb index a72a0414..c365459d 100644 --- a/lib/l10n/app_pt_BR.arb +++ b/lib/l10n/app_pt_BR.arb @@ -273,5 +273,7 @@ "markEpisodeAsSeenSetting": "Em que ponto marcar o episódio como visto", "default_skip_intro_length": "Duração padrão para pular a introdução", "default_playback_speed_length": "Duração padrão da velocidade de reprodução", - "updateProgressAfterReading": "Atualize o progresso após a leitura" + "updateProgressAfterReading": "Atualize o progresso após a leitura", + "no_sources_installed": "Nenhuma fonte instalada!", + "show_extensions": "Mostrar extensões" } \ No newline at end of file diff --git a/lib/l10n/app_ru.arb b/lib/l10n/app_ru.arb index 6e6115bb..a857b33e 100644 --- a/lib/l10n/app_ru.arb +++ b/lib/l10n/app_ru.arb @@ -273,5 +273,7 @@ "markEpisodeAsSeenSetting": "В какой момент отметить эпизод как просмотренный", "default_skip_intro_length": "Стандартная длина пропуска вступления", "default_playback_speed_length": "Стандартная длина скорости воспроизведения", - "updateProgressAfterReading": "Обновить прогресс после чтения" + "updateProgressAfterReading": "Обновить прогресс после чтения", + "no_sources_installed": "Источники не установлены!", + "show_extensions": "Показать расширения" } \ No newline at end of file diff --git a/lib/l10n/app_tr.arb b/lib/l10n/app_tr.arb index 15e10b2d..0fdd7342 100644 --- a/lib/l10n/app_tr.arb +++ b/lib/l10n/app_tr.arb @@ -273,5 +273,7 @@ "markEpisodeAsSeenSetting": "Bölümün izlendiği olarak işaretleneceği nokta", "default_skip_intro_length": "Varsayılan Giriş Atla süresi", "default_playback_speed_length": "Varsayılan Oynatma hızı süresi", - "updateProgressAfterReading": "Okuduktan Sonra İlerlemeyi Güncelle" + "updateProgressAfterReading": "Okuduktan Sonra İlerlemeyi Güncelle", + "no_sources_installed": "Hiçbir kaynak yüklü değil!", + "show_extensions": "uzantıları göster" } \ No newline at end of file diff --git a/lib/modules/browse/browse_screen.dart b/lib/modules/browse/browse_screen.dart index c7f5a5c5..6fddd493 100644 --- a/lib/modules/browse/browse_screen.dart +++ b/lib/modules/browse/browse_screen.dart @@ -151,11 +151,17 @@ class _BrowseScreenState extends ConsumerState ), ), body: TabBarView(controller: _tabBarController, children: [ - const SourcesScreen( + SourcesScreen( isManga: true, + tabIndex: (index) { + _tabBarController.animateTo(index); + }, ), - const SourcesScreen( + SourcesScreen( isManga: false, + tabIndex: (index) { + _tabBarController.animateTo(index); + }, ), ExtensionScreen( query: _textEditingController.text, diff --git a/lib/modules/browse/extension/extension_screen.dart b/lib/modules/browse/extension/extension_screen.dart index 258b3963..42ec98eb 100644 --- a/lib/modules/browse/extension/extension_screen.dart +++ b/lib/modules/browse/extension/extension_screen.dart @@ -5,7 +5,6 @@ import 'package:mangayomi/models/source.dart'; import 'package:mangayomi/modules/browse/extension/providers/extensions_provider.dart'; import 'package:mangayomi/modules/browse/extension/providers/fetch_anime_sources.dart'; import 'package:mangayomi/modules/browse/extension/providers/fetch_manga_sources.dart'; -import 'package:mangayomi/modules/widgets/error_text.dart'; import 'package:mangayomi/modules/widgets/progress_center.dart'; import 'package:mangayomi/providers/l10n_providers.dart'; import 'package:mangayomi/sources/source_test.dart'; @@ -160,7 +159,19 @@ class ExtensionScreen extends ConsumerWidget { ], ); }, - error: (error, _) => ErrorText(error), + error: (error, _) => Center( + child: ElevatedButton( + onPressed: () { + if (isManga) { + ref.invalidate( + fetchMangaSourcesListProvider(id: null, reFresh: true)); + } else { + ref.invalidate( + fetchAnimeSourcesListProvider(id: null, reFresh: true)); + } + }, + child: Text(context.l10n.refresh)), + ), loading: () => const ProgressCenter(), ), ), diff --git a/lib/modules/browse/sources/sources_screen.dart b/lib/modules/browse/sources/sources_screen.dart index 704d57d2..4674b438 100644 --- a/lib/modules/browse/sources/sources_screen.dart +++ b/lib/modules/browse/sources/sources_screen.dart @@ -11,8 +11,10 @@ import 'package:mangayomi/utils/language.dart'; import 'package:mangayomi/modules/more/settings/browse/providers/browse_state_provider.dart'; class SourcesScreen extends ConsumerWidget { + final Function(int) tabIndex; final bool isManga; - const SourcesScreen({required this.isManga, super.key}); + const SourcesScreen( + {required this.tabIndex, required this.isManga, super.key}); @override Widget build(BuildContext context, WidgetRef ref) { @@ -32,11 +34,29 @@ class SourcesScreen extends ConsumerWidget { .watch(fireImmediately: true), builder: (context, snapshot) { if (!snapshot.hasData) { - return Center(child: Text(l10n.no_result)); + return const SizedBox.shrink(); } List sources = snapshot.data! .where((element) => showNSFW ? true : element.isNsfw == false) .toList(); + if (sources.isEmpty) { + return Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Padding( + padding: const EdgeInsets.all(8.0), + child: Text(context.l10n.no_sources_installed), + ), + Padding( + padding: const EdgeInsets.all(8.0), + child: ElevatedButton.icon( + onPressed: () => tabIndex(isManga ? 2 : 3), + icon: const Icon(Icons.extension_rounded), + label: Text(context.l10n.show_extensions)), + ) + ], + ); + } final lastUsedEntries = sources.where((element) => element.lastUsed!).toList(); final isPinnedEntries =