diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 7e342774..1055afb4 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -36,6 +36,12 @@ + + + + + + 'Add custom button'; + @override + String get custom_buttons_added => 'Custom button added!'; + @override String get custom_buttons_delete => 'Delete custom button'; diff --git a/lib/l10n/generated/app_localizations_as.dart b/lib/l10n/generated/app_localizations_as.dart index 8c0be63c..e0c904dd 100644 --- a/lib/l10n/generated/app_localizations_as.dart +++ b/lib/l10n/generated/app_localizations_as.dart @@ -1534,6 +1534,9 @@ class AppLocalizationsAs extends AppLocalizations { @override String get custom_buttons_add => 'Add custom button'; + @override + String get custom_buttons_added => 'Custom button added!'; + @override String get custom_buttons_delete => 'Delete custom button'; diff --git a/lib/l10n/generated/app_localizations_de.dart b/lib/l10n/generated/app_localizations_de.dart index e2d393e3..2c8dfc56 100644 --- a/lib/l10n/generated/app_localizations_de.dart +++ b/lib/l10n/generated/app_localizations_de.dart @@ -1545,6 +1545,9 @@ class AppLocalizationsDe extends AppLocalizations { @override String get custom_buttons_add => 'Add custom button'; + @override + String get custom_buttons_added => 'Custom button added!'; + @override String get custom_buttons_delete => 'Delete custom button'; diff --git a/lib/l10n/generated/app_localizations_en.dart b/lib/l10n/generated/app_localizations_en.dart index 00613692..2ef018d2 100644 --- a/lib/l10n/generated/app_localizations_en.dart +++ b/lib/l10n/generated/app_localizations_en.dart @@ -1533,6 +1533,9 @@ class AppLocalizationsEn extends AppLocalizations { @override String get custom_buttons_add => 'Add custom button'; + @override + String get custom_buttons_added => 'Custom button added!'; + @override String get custom_buttons_delete => 'Delete custom button'; diff --git a/lib/l10n/generated/app_localizations_es.dart b/lib/l10n/generated/app_localizations_es.dart index db104223..156754f0 100644 --- a/lib/l10n/generated/app_localizations_es.dart +++ b/lib/l10n/generated/app_localizations_es.dart @@ -1550,6 +1550,9 @@ class AppLocalizationsEs extends AppLocalizations { @override String get custom_buttons_add => 'Add custom button'; + @override + String get custom_buttons_added => 'Custom button added!'; + @override String get custom_buttons_delete => 'Delete custom button'; diff --git a/lib/l10n/generated/app_localizations_fr.dart b/lib/l10n/generated/app_localizations_fr.dart index 13cf52b3..88366e2e 100644 --- a/lib/l10n/generated/app_localizations_fr.dart +++ b/lib/l10n/generated/app_localizations_fr.dart @@ -1551,6 +1551,9 @@ class AppLocalizationsFr extends AppLocalizations { @override String get custom_buttons_add => 'Add custom button'; + @override + String get custom_buttons_added => 'Custom button added!'; + @override String get custom_buttons_delete => 'Delete custom button'; diff --git a/lib/l10n/generated/app_localizations_hi.dart b/lib/l10n/generated/app_localizations_hi.dart index ba999035..2e2581c2 100644 --- a/lib/l10n/generated/app_localizations_hi.dart +++ b/lib/l10n/generated/app_localizations_hi.dart @@ -1535,6 +1535,9 @@ class AppLocalizationsHi extends AppLocalizations { @override String get custom_buttons_add => 'Add custom button'; + @override + String get custom_buttons_added => 'Custom button added!'; + @override String get custom_buttons_delete => 'Delete custom button'; diff --git a/lib/l10n/generated/app_localizations_id.dart b/lib/l10n/generated/app_localizations_id.dart index 11e86435..18338650 100644 --- a/lib/l10n/generated/app_localizations_id.dart +++ b/lib/l10n/generated/app_localizations_id.dart @@ -1539,6 +1539,9 @@ class AppLocalizationsId extends AppLocalizations { @override String get custom_buttons_add => 'Add custom button'; + @override + String get custom_buttons_added => 'Custom button added!'; + @override String get custom_buttons_delete => 'Delete custom button'; diff --git a/lib/l10n/generated/app_localizations_it.dart b/lib/l10n/generated/app_localizations_it.dart index e2dba428..b239a60f 100644 --- a/lib/l10n/generated/app_localizations_it.dart +++ b/lib/l10n/generated/app_localizations_it.dart @@ -1548,6 +1548,9 @@ class AppLocalizationsIt extends AppLocalizations { @override String get custom_buttons_add => 'Add custom button'; + @override + String get custom_buttons_added => 'Custom button added!'; + @override String get custom_buttons_delete => 'Delete custom button'; diff --git a/lib/l10n/generated/app_localizations_pt.dart b/lib/l10n/generated/app_localizations_pt.dart index 6460d875..87a26002 100644 --- a/lib/l10n/generated/app_localizations_pt.dart +++ b/lib/l10n/generated/app_localizations_pt.dart @@ -1547,6 +1547,9 @@ class AppLocalizationsPt extends AppLocalizations { @override String get custom_buttons_add => 'Add custom button'; + @override + String get custom_buttons_added => 'Custom button added!'; + @override String get custom_buttons_delete => 'Delete custom button'; diff --git a/lib/l10n/generated/app_localizations_ru.dart b/lib/l10n/generated/app_localizations_ru.dart index 857ecc82..6799f0cc 100644 --- a/lib/l10n/generated/app_localizations_ru.dart +++ b/lib/l10n/generated/app_localizations_ru.dart @@ -1549,6 +1549,9 @@ class AppLocalizationsRu extends AppLocalizations { @override String get custom_buttons_add => 'Add custom button'; + @override + String get custom_buttons_added => 'Custom button added!'; + @override String get custom_buttons_delete => 'Delete custom button'; diff --git a/lib/l10n/generated/app_localizations_th.dart b/lib/l10n/generated/app_localizations_th.dart index e5d1a799..a6955602 100644 --- a/lib/l10n/generated/app_localizations_th.dart +++ b/lib/l10n/generated/app_localizations_th.dart @@ -1533,6 +1533,9 @@ class AppLocalizationsTh extends AppLocalizations { @override String get custom_buttons_add => 'Add custom button'; + @override + String get custom_buttons_added => 'Custom button added!'; + @override String get custom_buttons_delete => 'Delete custom button'; diff --git a/lib/l10n/generated/app_localizations_tr.dart b/lib/l10n/generated/app_localizations_tr.dart index 5a0f1f4d..73e41501 100644 --- a/lib/l10n/generated/app_localizations_tr.dart +++ b/lib/l10n/generated/app_localizations_tr.dart @@ -1539,6 +1539,9 @@ class AppLocalizationsTr extends AppLocalizations { @override String get custom_buttons_add => 'Add custom button'; + @override + String get custom_buttons_added => 'Custom button added!'; + @override String get custom_buttons_delete => 'Delete custom button'; diff --git a/lib/l10n/generated/app_localizations_zh.dart b/lib/l10n/generated/app_localizations_zh.dart index 5a768a6c..ea3f7d41 100644 --- a/lib/l10n/generated/app_localizations_zh.dart +++ b/lib/l10n/generated/app_localizations_zh.dart @@ -1504,6 +1504,9 @@ class AppLocalizationsZh extends AppLocalizations { @override String get custom_buttons_add => 'Add custom button'; + @override + String get custom_buttons_added => 'Custom button added!'; + @override String get custom_buttons_delete => 'Delete custom button'; diff --git a/lib/main.dart b/lib/main.dart index 0b109329..30ceb808 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -14,6 +14,7 @@ import 'package:hive_flutter/adapters.dart'; import 'package:intl/date_symbol_data_local.dart'; import 'package:isar/isar.dart'; import 'package:mangayomi/eval/model/m_bridge.dart'; +import 'package:mangayomi/models/custom_button.dart'; import 'package:mangayomi/models/manga.dart'; import 'package:mangayomi/models/settings.dart'; import 'package:mangayomi/models/source.dart'; @@ -145,7 +146,7 @@ class _MyAppState extends ConsumerState { Future _initDeepLinks() async { _appLinks = AppLinks(); - _linkSubscription = _appLinks.uriLinkStream.listen((uri) { + _linkSubscription = _appLinks.uriLinkStream.listen((uri) async { if (uri == lastUri) return; // Debouncing Deep Links lastUri = uri; switch (uri.host) { @@ -224,6 +225,62 @@ class _MyAppState extends ConsumerState { }, ); break; + case "add-button": + final buttonDataRaw = uri.queryParametersAll["button"]; + final context = navigatorKey.currentContext; + if (context == null || !context.mounted || buttonDataRaw == null) { + return; + } + final l10n = context.l10n; + for (final buttonRaw in buttonDataRaw) { + final buttonData = jsonDecode( + utf8.decode(base64.decode(buttonRaw)), + ); + if (buttonData is Map) { + final customButton = CustomButton.fromJson(buttonData); + await showDialog( + context: navigatorKey.currentContext!, + builder: (BuildContext context) { + return AlertDialog( + title: Text(l10n.custom_buttons_add), + content: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + "${l10n.name}: ${customButton.title ?? 'Unknown'}", + ), + ], + ), + actions: [ + TextButton( + child: Text(l10n.cancel), + onPressed: () => Navigator.of(context).pop(), + ), + FilledButton( + child: Text(l10n.add), + onPressed: () async { + if (context.mounted) Navigator.of(context).pop(); + await isar.writeTxn(() async { + await isar.customButtons.put( + customButton + ..pos = await isar.customButtons.count() + ..isFavourite = false + ..id = null + ..updatedAt = + DateTime.now().millisecondsSinceEpoch, + ); + }); + botToast(l10n.custom_buttons_added); + }, + ), + ], + ); + }, + ); + } + } + break; default: } }); diff --git a/pubspec.lock b/pubspec.lock index 384e6e78..43b33ffc 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1164,7 +1164,7 @@ packages: description: path: media_kit ref: HEAD - resolved-ref: "3008dfd943502bcb83e50a56a7e86bb887170cd6" + resolved-ref: "08e91da7229c818a25822b3cd3d77415d5f2af36" url: "https://github.com/Schnitzel5/media-kit.git" source: git version: "1.2.0" @@ -1173,7 +1173,7 @@ packages: description: path: "libs/android/media_kit_libs_android_video" ref: HEAD - resolved-ref: "3008dfd943502bcb83e50a56a7e86bb887170cd6" + resolved-ref: "08e91da7229c818a25822b3cd3d77415d5f2af36" url: "https://github.com/Schnitzel5/media-kit.git" source: git version: "1.3.7" @@ -1182,7 +1182,7 @@ packages: description: path: "libs/ios/media_kit_libs_ios_video" ref: HEAD - resolved-ref: "3008dfd943502bcb83e50a56a7e86bb887170cd6" + resolved-ref: "08e91da7229c818a25822b3cd3d77415d5f2af36" url: "https://github.com/Schnitzel5/media-kit.git" source: git version: "1.1.4" @@ -1191,7 +1191,7 @@ packages: description: path: "libs/linux/media_kit_libs_linux" ref: HEAD - resolved-ref: "3008dfd943502bcb83e50a56a7e86bb887170cd6" + resolved-ref: "08e91da7229c818a25822b3cd3d77415d5f2af36" url: "https://github.com/Schnitzel5/media-kit.git" source: git version: "1.2.1" @@ -1200,7 +1200,7 @@ packages: description: path: "libs/macos/media_kit_libs_macos_video" ref: HEAD - resolved-ref: "3008dfd943502bcb83e50a56a7e86bb887170cd6" + resolved-ref: "08e91da7229c818a25822b3cd3d77415d5f2af36" url: "https://github.com/Schnitzel5/media-kit.git" source: git version: "1.1.4" @@ -1209,7 +1209,7 @@ packages: description: path: "libs/universal/media_kit_libs_video" ref: HEAD - resolved-ref: "3008dfd943502bcb83e50a56a7e86bb887170cd6" + resolved-ref: "08e91da7229c818a25822b3cd3d77415d5f2af36" url: "https://github.com/Schnitzel5/media-kit.git" source: git version: "1.0.6" @@ -1218,7 +1218,7 @@ packages: description: path: "libs/windows/media_kit_libs_windows_video" ref: HEAD - resolved-ref: "3008dfd943502bcb83e50a56a7e86bb887170cd6" + resolved-ref: "08e91da7229c818a25822b3cd3d77415d5f2af36" url: "https://github.com/Schnitzel5/media-kit.git" source: git version: "1.0.11" @@ -1227,7 +1227,7 @@ packages: description: path: media_kit_video ref: HEAD - resolved-ref: "3008dfd943502bcb83e50a56a7e86bb887170cd6" + resolved-ref: "08e91da7229c818a25822b3cd3d77415d5f2af36" url: "https://github.com/Schnitzel5/media-kit.git" source: git version: "1.3.0"