Merge pull request #629 from NBA2K1/main

Add log switch to about-menu
This commit is contained in:
Moustapha Kodjo Amadou 2025-12-18 17:05:01 +01:00 committed by GitHub
commit 390e6fed46
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
39 changed files with 565 additions and 329 deletions

View file

@ -451,6 +451,7 @@
"downloaded_only": "المحملة فقط",
"downloaded_only_description": "إظهار الإدخالات المحملة فقط في مكتبتك",
"concurrent_downloads": "التحميلات المتزامنة",
"logs_on": "تفعيل التسجيل",
"share_app_logs": "مشاركة سجلات التطبيق",
"no_app_logs": "لا يوجد ملف log.txt!",
"failed": "فشل!",
@ -560,4 +561,4 @@
"show_scroll_percentage": "إظهار نسبة التمرير",
"remove_extra_paragraph_spacing": "إزالة المسافات الإضافية بين الفقرات",
"select_label_color": "تحديد لون {label}"
}
}

View file

@ -305,6 +305,7 @@
"default_subtitle_language": "ডিফল্ট উপশিৰোনাম ভাষা",
"follow_system_theme": "ছিষ্টেম থিম অনুসৰণ কৰক",
"concurrent_downloads": "সমসাময়িক ডাউনলোড",
"logs_on": "লগিং সক্ষম কৰক",
"share_app_logs": "এপ লগ শ্বেয়াৰ কৰক",
"no_app_logs": "কোনো log.txt ফাইল উপলব্ধ নাই!",
"failed": "বিফল!",

View file

@ -465,6 +465,7 @@
"downloaded_only": "Nur heruntergeladene",
"downloaded_only_description": "Nur heruntergeladene Einträge in deiner Bibliothek anzeigen",
"concurrent_downloads": "Gleichzeitige Downloads",
"logs_on": "Protokollierung aktivieren",
"share_app_logs": "App-Protokolle teilen",
"no_app_logs": "Keine log.txt Datei verfügbar!",
"failed": "Fehlgeschlagen!",

View file

@ -143,6 +143,7 @@
"nsfw_sources_info": "This does not prevent unofficial or potentially incorrectly flagged extensions from surfacing NSFW (18+) content within the app",
"version": "Version",
"check_for_update": "Check for update",
"logs_on": "Enable logging",
"share_app_logs": "Share app logs",
"no_app_logs": "No log.txt available!",
"failed": "Failed!",

View file

@ -449,6 +449,7 @@
"downloaded_only": "Solo descargados",
"downloaded_only_description": "Mostrar solo entradas descargadas en tu biblioteca",
"concurrent_downloads": "Descargas simultáneas",
"logs_on": "Activar registro",
"share_app_logs": "Compartir registros de la aplicación",
"no_app_logs": "¡No hay archivo log.txt disponible!",
"failed": "¡Fallido!",

View file

@ -451,6 +451,7 @@
"downloaded_only": "Solo descargados",
"downloaded_only_description": "Mostrar solo entradas descargadas en tu biblioteca",
"concurrent_downloads": "Descargas simultáneas",
"logs_on": "Habilitar registro",
"share_app_logs": "Compartir registros de la aplicación",
"no_app_logs": "¡No hay archivo log.txt disponible!",
"failed": "¡Fallido!",

View file

@ -455,6 +455,7 @@
"downloaded_only": "Téléchargés uniquement",
"downloaded_only_description": "Afficher uniquement les entrées téléchargées dans votre bibliothèque",
"concurrent_downloads": "Téléchargements simultanés",
"logs_on": "Activer la journalisation",
"share_app_logs": "Partager les journaux de l'application",
"no_app_logs": "Aucun fichier log.txt disponible !",
"failed": "Échoué !",

View file

@ -305,6 +305,7 @@
"default_subtitle_language": "डिफ़ॉल्ट उपशीर्षक भाषा",
"follow_system_theme": "सिस्टम थीम का पालन करें",
"concurrent_downloads": "समवर्ती डाउनलोड",
"logs_on": "लॉगिंग सक्षम करें",
"share_app_logs": "ऐप लॉग साझा करें",
"no_app_logs": "कोई log.txt फ़ाइल उपलब्ध नहीं!",
"failed": "विफल!",

View file

@ -449,6 +449,7 @@
"downloaded_only": "Hanya yang diunduh",
"downloaded_only_description": "Hanya tampilkan entri yang diunduh di perpustakaan Anda",
"concurrent_downloads": "Unduhan bersamaan",
"logs_on": "Aktifkan pencatatan",
"share_app_logs": "Bagikan log aplikasi",
"no_app_logs": "Tidak ada file log.txt tersedia!",
"failed": "Gagal!",

View file

@ -449,6 +449,7 @@
"downloaded_only": "Solo scaricati",
"downloaded_only_description": "Mostra solo le voci scaricate nella tua libreria",
"concurrent_downloads": "Download simultanei",
"logs_on": "Abilita registrazione",
"share_app_logs": "Condividi i log dell'app",
"no_app_logs": "Nessun file log.txt disponibile!",
"failed": "Fallito!",

View file

@ -304,6 +304,7 @@
"default_subtitle_language": "デフォルト字幕言語",
"follow_system_theme": "システムテーマに従う",
"concurrent_downloads": "同時ダウンロード",
"logs_on": "ログを有効にする",
"share_app_logs": "アプリログを共有",
"no_app_logs": "log.txtファイルが利用できません",
"failed": "失敗!",

View file

@ -449,6 +449,7 @@
"downloaded_only": "Apenas baixados",
"downloaded_only_description": "Mostrar apenas entradas baixadas na sua biblioteca",
"concurrent_downloads": "Downloads simultâneos",
"logs_on": "Ativar registro",
"share_app_logs": "Compartilhar logs do aplicativo",
"no_app_logs": "Nenhum arquivo log.txt disponível!",
"failed": "Falhou!",

View file

@ -449,6 +449,7 @@
"downloaded_only": "Apenas baixados",
"downloaded_only_description": "Mostrar apenas entradas baixadas na sua biblioteca",
"concurrent_downloads": "Downloads simultâneos",
"logs_on": "Ativar registro",
"share_app_logs": "Compartilhar logs do aplicativo",
"no_app_logs": "Nenhum arquivo log.txt disponível!",
"failed": "Falhou!",

View file

@ -449,6 +449,7 @@
"downloaded_only": "Только загруженные",
"downloaded_only_description": "Показывать только загруженные записи в вашей библиотеке",
"concurrent_downloads": "Одновременные загрузки",
"logs_on": "Включить ведение журнала",
"share_app_logs": "Поделиться журналами приложения",
"no_app_logs": "Файл log.txt недоступен!",
"failed": "Не удалось!",

View file

@ -452,6 +452,7 @@
"downloaded_only": "ที่ดาวน์โหลดแล้วเท่านั้น",
"downloaded_only_description": "แสดงเฉพาะรายการที่ดาวน์โหลดแล้วในห้องสมุดของคุณ",
"concurrent_downloads": "ดาวน์โหลดพร้อมกัน",
"logs_on": "เปิดการบันทึก",
"share_app_logs": "แชร์บันทึกแอป",
"no_app_logs": "ไม่มีไฟล์ log.txt!",
"failed": "ล้มเหลว!",

View file

@ -449,6 +449,7 @@
"downloaded_only": "Sadece indirilmiş",
"downloaded_only_description": "Kütüphanenizde yalnızca indirilmiş girişleri göster",
"concurrent_downloads": "Eş zamanlı indirmeler",
"logs_on": "Günlük kaydını etkinleştir",
"share_app_logs": "Uygulama günlüklerini paylaş",
"no_app_logs": "log.txt dosyası yok!",
"failed": "Başarısız!",

View file

@ -454,6 +454,7 @@
"downloaded_only": "仅已下载",
"downloaded_only_description": "仅显示库中已下载的条目",
"concurrent_downloads": "并发下载",
"logs_on": "启用日志",
"share_app_logs": "分享应用日志",
"no_app_logs": "没有可用的 log.txt 文件!",
"failed": "失败!",

View file

@ -935,6 +935,12 @@ abstract class AppLocalizations {
/// **'Check for update'**
String get check_for_update;
/// No description provided for @logs_on.
///
/// In en, this message translates to:
/// **'Enable logging'**
String get logs_on;
/// No description provided for @share_app_logs.
///
/// In en, this message translates to:

View file

@ -434,6 +434,9 @@ class AppLocalizationsAr extends AppLocalizations {
@override
String get check_for_update => 'التحقق من التحديثات';
@override
String get logs_on => 'تفعيل التسجيل';
@override
String get share_app_logs => 'مشاركة سجلات التطبيق';

View file

@ -436,6 +436,9 @@ class AppLocalizationsAs extends AppLocalizations {
@override
String get check_for_update => 'আপডেটৰ বাবে পৰীক্ষা কৰক';
@override
String get logs_on => 'লগিং সক্ষম কৰক';
@override
String get share_app_logs => 'এপ লগ শ্বেয়াৰ কৰক';

View file

@ -438,6 +438,9 @@ class AppLocalizationsDe extends AppLocalizations {
@override
String get check_for_update => 'Auf Aktualisierung prüfen';
@override
String get logs_on => 'Protokollierung aktivieren';
@override
String get share_app_logs => 'App-Protokolle teilen';

View file

@ -436,6 +436,9 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get check_for_update => 'Check for update';
@override
String get logs_on => 'Enable logging';
@override
String get share_app_logs => 'Share app logs';

View file

@ -440,6 +440,9 @@ class AppLocalizationsEs extends AppLocalizations {
@override
String get check_for_update => 'Buscar actualizaciones';
@override
String get logs_on => 'Activar registro';
@override
String get share_app_logs => 'Compartir registros de la aplicación';
@ -2245,6 +2248,9 @@ class AppLocalizationsEs419 extends AppLocalizationsEs {
@override
String get check_for_update => 'Buscar actualizaciones';
@override
String get logs_on => 'Habilitar registro';
@override
String get share_app_logs => 'Compartir registros de la aplicación';

View file

@ -442,6 +442,9 @@ class AppLocalizationsFr extends AppLocalizations {
@override
String get check_for_update => 'Rechercher des mises à jour';
@override
String get logs_on => 'Activer la journalisation';
@override
String get share_app_logs => 'Partager les journaux de l\'application';

View file

@ -436,6 +436,9 @@ class AppLocalizationsHi extends AppLocalizations {
@override
String get check_for_update => 'अपडेट के लिए जांचें';
@override
String get logs_on => 'लॉगिंग सक्षम करें';
@override
String get share_app_logs => 'ऐप लॉग साझा करें';

View file

@ -440,6 +440,9 @@ class AppLocalizationsId extends AppLocalizations {
@override
String get check_for_update => 'Periksa Pembaruan';
@override
String get logs_on => 'Aktifkan pencatatan';
@override
String get share_app_logs => 'Bagikan log aplikasi';

View file

@ -440,6 +440,9 @@ class AppLocalizationsIt extends AppLocalizations {
@override
String get check_for_update => 'Controlla aggiornamenti';
@override
String get logs_on => 'Abilita registrazione';
@override
String get share_app_logs => 'Condividi i log dell\'app';

View file

@ -431,6 +431,9 @@ class AppLocalizationsJa extends AppLocalizations {
@override
String get check_for_update => 'Check for update';
@override
String get logs_on => 'ログを有効にする';
@override
String get share_app_logs => 'アプリログを共有';

View file

@ -440,6 +440,9 @@ class AppLocalizationsPt extends AppLocalizations {
@override
String get check_for_update => 'Verificar atualização';
@override
String get logs_on => 'Ativar registro';
@override
String get share_app_logs => 'Compartilhar logs do aplicativo';
@ -2240,6 +2243,9 @@ class AppLocalizationsPtBr extends AppLocalizationsPt {
@override
String get check_for_update => 'Verificar atualização';
@override
String get logs_on => 'Ativar registro';
@override
String get share_app_logs => 'Compartilhar logs do aplicativo';

View file

@ -441,6 +441,9 @@ class AppLocalizationsRu extends AppLocalizations {
@override
String get check_for_update => 'Проверить обновления';
@override
String get logs_on => 'Включить ведение журнала';
@override
String get share_app_logs => 'Поделиться журналами приложения';

View file

@ -436,6 +436,9 @@ class AppLocalizationsTh extends AppLocalizations {
@override
String get check_for_update => 'ตรวจสอบการอัพเดท';
@override
String get logs_on => 'เปิดการบันทึก';
@override
String get share_app_logs => 'แชร์บันทึกแอป';

View file

@ -436,6 +436,9 @@ class AppLocalizationsTr extends AppLocalizations {
@override
String get check_for_update => 'Güncelleme Kontrol Et';
@override
String get logs_on => 'Günlük kaydını etkinleştir';
@override
String get share_app_logs => 'Uygulama günlüklerini paylaş';

View file

@ -427,6 +427,9 @@ class AppLocalizationsZh extends AppLocalizations {
@override
String get check_for_update => '检查更新';
@override
String get logs_on => '启用日志';
@override
String get share_app_logs => '分享应用日志';

View file

@ -127,6 +127,8 @@ class Settings {
int? pagePreloadAmount;
bool? enableLogs;
bool? checkForAppUpdates;
bool? checkForExtensionUpdates;
@ -357,6 +359,7 @@ class Settings {
this.sortLibraryAnime,
this.pagePreloadAmount = 6,
this.scaleType = ScaleType.fitScreen,
this.enableLogs = false,
this.checkForAppUpdates = true,
this.checkForExtensionUpdates = true,
this.backgroundColor = BackgroundColor.black,
@ -482,6 +485,7 @@ class Settings {
.map((e) => ChapterPageurls.fromJson(e))
.toList();
}
enableLogs = json['enableLogs'];
checkForAppUpdates = json['checkForAppUpdates'];
checkForExtensionUpdates = json['checkForExtensionUpdates'];
if (json['cookiesList'] != null) {
@ -720,6 +724,7 @@ class Settings {
?.map((v) => v.toJson())
.toList(),
'chapterPageUrlsList': chapterPageUrlsList?.map((v) => v.toJson()).toList(),
'enableLogs': enableLogs,
'checkForAppUpdates': checkForAppUpdates,
'checkForExtensionUpdates': checkForExtensionUpdates,
'cookiesList': cookiesList,

File diff suppressed because it is too large Load diff

View file

@ -9,9 +9,11 @@ import 'package:mangayomi/main.dart';
import 'package:mangayomi/models/settings.dart';
import 'package:mangayomi/modules/more/about/providers/check_for_update.dart';
import 'package:mangayomi/modules/more/about/providers/get_package_info.dart';
import 'package:mangayomi/modules/more/about/providers/logs_state.dart';
import 'package:mangayomi/modules/widgets/progress_center.dart';
import 'package:mangayomi/providers/l10n_providers.dart';
import 'package:mangayomi/providers/storage_provider.dart';
import 'package:mangayomi/utils/log/logger.dart';
import 'package:path/path.dart' as path;
import 'package:share_plus/share_plus.dart';
import 'package:url_launcher/url_launcher.dart';
@ -23,6 +25,7 @@ class AboutScreen extends ConsumerWidget {
Widget build(BuildContext context, WidgetRef ref) {
final l10n = l10nLocalizations(context);
final checkForUpdates = ref.watch(checkForAppUpdatesProvider);
final enableLogs = ref.watch(logsStateProvider);
return Scaffold(
appBar: AppBar(title: Text(l10n!.about)),
body: ref
@ -80,38 +83,58 @@ class AboutScreen extends ConsumerWidget {
},
title: Text(l10n.check_for_update),
),
ListTile(
onTap: () async {
final storage = StorageProvider();
final directory = await storage.getDefaultDirectory();
final file = File(
path.join(directory!.path, 'logs.txt'),
);
if (await file.exists()) {
if (Platform.isLinux) {
await Clipboard.setData(
ClipboardData(text: file.path),
);
}
if (context.mounted) {
final box =
context.findRenderObject() as RenderBox?;
SharePlus.instance.share(
ShareParams(
files: [XFile(file.path)],
text: "log.txt",
sharePositionOrigin:
box!.localToGlobal(Offset.zero) &
box.size,
),
);
}
SwitchListTile(
title: Text(l10n.logs_on),
value: enableLogs,
onChanged: (value) {
isar.writeTxnSync(() {
final settings = isar.settings.getSync(227);
isar.settings.putSync(
settings!..enableLogs = value,
);
});
ref.invalidate(logsStateProvider);
if (value) {
AppLogger.init();
} else {
botToast(l10n.no_app_logs);
AppLogger.dispose();
}
},
title: Text(l10n.share_app_logs),
),
if (enableLogs)
ListTile(
onTap: () async {
final storage = StorageProvider();
final directory = await storage
.getDefaultDirectory();
final file = File(
path.join(directory!.path, 'logs.txt'),
);
if (await file.exists()) {
if (Platform.isLinux) {
await Clipboard.setData(
ClipboardData(text: file.path),
);
}
if (context.mounted) {
final box =
context.findRenderObject() as RenderBox?;
SharePlus.instance.share(
ShareParams(
files: [XFile(file.path)],
text: "log.txt",
sharePositionOrigin:
box!.localToGlobal(Offset.zero) &
box.size,
),
);
}
} else {
botToast(l10n.no_app_logs);
}
},
title: Text(l10n.share_app_logs),
),
// ListTile(
// onTap: () {},
// title: const Text("What's news"),

View file

@ -0,0 +1,9 @@
import 'package:mangayomi/main.dart';
import 'package:mangayomi/models/settings.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
part 'logs_state.g.dart';
@riverpod
bool logsState(Ref ref) {
return isar.settings.getSync(227)?.enableLogs ?? false;
}

View file

@ -0,0 +1,50 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'logs_state.dart';
// **************************************************************************
// RiverpodGenerator
// **************************************************************************
// GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint, type=warning
@ProviderFor(logsState)
const logsStateProvider = LogsStateProvider._();
final class LogsStateProvider extends $FunctionalProvider<bool, bool, bool>
with $Provider<bool> {
const LogsStateProvider._()
: super(
from: null,
argument: null,
retry: null,
name: r'logsStateProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
@override
String debugGetCreateSourceHash() => _$logsStateHash();
@$internal
@override
$ProviderElement<bool> $createElement($ProviderPointer pointer) =>
$ProviderElement(pointer);
@override
bool create(Ref ref) {
return logsState(ref);
}
/// {@macro riverpod.override_with_value}
Override overrideWithValue(bool value) {
return $ProviderOverride(
origin: this,
providerOverride: $SyncValueProvider<bool>(value),
);
}
}
String _$logsStateHash() => r'680ab781a039e0441394dc0b376b8add0fb80910';

View file

@ -1,6 +1,7 @@
import 'dart:async';
import 'dart:io';
import 'package:mangayomi/main.dart';
import 'package:mangayomi/models/settings.dart';
import 'package:mangayomi/providers/storage_provider.dart';
import 'package:path/path.dart' as path;
@ -12,6 +13,8 @@ class AppLogger {
/// Initialize the logger
static Future<void> init() async {
final enabled = isar.settings.getSync(227)?.enableLogs ?? false;
if (!enabled) return;
final storage = StorageProvider();
final directory = await storage.getDefaultDirectory();
_logFile = File(path.join(directory!.path, 'logs.txt'));