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"