From 1c256f884d01aedaeb2ea454c95ac3400ff6a37a Mon Sep 17 00:00:00 2001 From: Moustapha Kodjo Amadou <107993382+kodjodevf@users.noreply.github.com> Date: Mon, 2 Jun 2025 10:37:01 +0100 Subject: [PATCH] fix --- .github/workflows/release.yml | 11 +- android/gradle.properties | 9 +- .../settings/browse/source_repositories.dart | 117 ++++++++++-------- 3 files changed, 81 insertions(+), 56 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index ad6adb6d..dae45ccf 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -34,6 +34,14 @@ jobs: with: distribution: "temurin" java-version: "17" + env: + JAVA_OPTS: "-Xmx4096m -XX:MaxMetaspaceSize=512m" + + - name: Setup Gradle properties for CI + run: | + echo "org.gradle.jvmargs=-Xmx4096M -XX:MaxMetaspaceSize=512m -XX:+UseG1GC" >> android/gradle.properties + echo "org.gradle.parallel=true" >> android/gradle.properties + echo "org.gradle.daemon=false" >> android/gradle.properties - name: Setup cmake uses: jwlawson/actions-setup-cmake@v2 @@ -56,7 +64,8 @@ jobs: - name: build android apks run: | - flutter build apk --release --split-per-abi + export GRADLE_OPTS="-Xmx4096m -XX:MaxMetaspaceSize=512m -XX:+UseG1GC" + flutter build apk --release --split-per-abi --verbose cd build/app/outputs/flutter-apk mv app-arm64-v8a-release.apk Mangayomi-${{ github.ref_name }}-android-arm64-v8a.apk mv app-armeabi-v7a-release.apk Mangayomi-${{ github.ref_name }}-android-armeabi-v7a.apk diff --git a/android/gradle.properties b/android/gradle.properties index 94adc3a3..50d4f6c6 100644 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -1,3 +1,10 @@ -org.gradle.jvmargs=-Xmx1536M +org.gradle.jvmargs=-Xmx4096M -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true + +# Optimizations for build performance +org.gradle.parallel=true +org.gradle.caching=true +org.gradle.configureondemand=true +android.enableR8.fullMode=true + diff --git a/lib/modules/more/settings/browse/source_repositories.dart b/lib/modules/more/settings/browse/source_repositories.dart index 67b70818..27039d62 100644 --- a/lib/modules/more/settings/browse/source_repositories.dart +++ b/lib/modules/more/settings/browse/source_repositories.dart @@ -208,6 +208,7 @@ class _SourceRepositoriesState extends ConsumerState { ), floatingActionButton: FloatingActionButton.extended( onPressed: () { + bool isLoading = false; final controller = TextEditingController(); showDialog( context: context, @@ -269,62 +270,70 @@ class _SourceRepositoriesState extends ConsumerState { child: Text(l10n.cancel), ), const SizedBox(width: 15), - TextButton( - onPressed: - controller.text.isEmpty || - !controller.text.endsWith(".json") - ? null - : () async { - try { - final mangaRepos = ref - .read( - extensionsRepoStateProvider( - widget.itemType, - ), - ) - .toList(); - final repo = await ref.read( - getRepoInfosProvider( - jsonUrl: controller.text, - ).future, - ); - if (repo == null) { - botToast(l10n.unsupported_repo); - return; - } - mangaRepos.add(repo); - ref - .read( - extensionsRepoStateProvider( - widget.itemType, - ).notifier, - ) - .set(mangaRepos); - ref.invalidate( - extensionsRepoStateProvider( - widget.itemType, - ), - ); - } catch (e, s) { - botToast('$e\n$s'); - } - - if (context.mounted) { - Navigator.pop(context); - } - }, - child: Text( - l10n.add, - style: TextStyle( - color: + StatefulBuilder( + builder: (context, setState) { + return TextButton( + onPressed: controller.text.isEmpty || !controller.text.endsWith(".json") - ? Theme.of( - context, - ).primaryColor.withValues(alpha: 0.2) - : null, - ), - ), + ? null + : () async { + setState(() => isLoading = true); + try { + final mangaRepos = ref + .read( + extensionsRepoStateProvider( + widget.itemType, + ), + ) + .toList(); + final repo = await ref.read( + getRepoInfosProvider( + jsonUrl: controller.text, + ).future, + ); + if (repo == null) { + botToast(l10n.unsupported_repo); + return; + } + mangaRepos.add(repo); + ref + .read( + extensionsRepoStateProvider( + widget.itemType, + ).notifier, + ) + .set(mangaRepos); + } catch (e, s) { + setState(() => isLoading = false); + botToast('$e\n$s'); + } + + if (context.mounted) { + Navigator.pop(context); + } + }, + child: isLoading + ? SizedBox( + height: 20, + width: 20, + child: CircularProgressIndicator(), + ) + : Text( + l10n.add, + style: TextStyle( + color: + controller.text.isEmpty || + !controller.text.endsWith( + ".json", + ) + ? Theme.of(context).primaryColor + .withValues(alpha: 0.2) + : null, + ), + ), + ); + }, ), ], ),