Added no sources installed widget

This commit is contained in:
kodjomoustapha 2023-12-22 12:28:42 +01:00
parent 7382ef0d96
commit 6a9ee991ac
13 changed files with 73 additions and 16 deletions

View file

@ -273,5 +273,7 @@
"markEpisodeAsSeenSetting": "في أي نقطة لوضع علامة على الحلقة كمشاهدة",
"default_skip_intro_length": "طول تخطي المقدمة الافتراضي",
"default_playback_speed_length": "طول سرعة التشغيل الافتراضية",
"updateProgressAfterReading": "تحديث التقدم بعد القراءة"
"updateProgressAfterReading": "تحديث التقدم بعد القراءة",
"no_sources_installed": "لم يتم تثبيت مصادر!",
"show_extensions": "عرض الإضافات"
}

View file

@ -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"
}

View file

@ -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"
}

View file

@ -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"
}

View file

@ -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"
}

View file

@ -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"
}

View file

@ -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"
}

View file

@ -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"
}

View file

@ -273,5 +273,7 @@
"markEpisodeAsSeenSetting": "В какой момент отметить эпизод как просмотренный",
"default_skip_intro_length": "Стандартная длина пропуска вступления",
"default_playback_speed_length": "Стандартная длина скорости воспроизведения",
"updateProgressAfterReading": "Обновить прогресс после чтения"
"updateProgressAfterReading": "Обновить прогресс после чтения",
"no_sources_installed": "Источники не установлены!",
"show_extensions": "Показать расширения"
}

View file

@ -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"
}

View file

@ -151,11 +151,17 @@ class _BrowseScreenState extends ConsumerState<BrowseScreen>
),
),
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,

View file

@ -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(),
),
),

View file

@ -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<Source> 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 =