diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 40448fc7..469e5d56 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -52,7 +52,7 @@ jobs: uses: seanmiddleditch/gha-setup-ninja@master - name: Install the CLI tool - run: cargo install 'flutter_rust_bridge_codegen' --locked + run: cargo install 'flutter_rust_bridge_codegen' - name: Setup Android keystore run: | @@ -105,7 +105,7 @@ jobs: uses: dtolnay/rust-toolchain@stable - name: Install the CLI tool - run: cargo install 'flutter_rust_bridge_codegen' --locked + run: cargo install 'flutter_rust_bridge_codegen' - name: flutter pub get run: flutter pub get @@ -125,7 +125,7 @@ jobs: env: P12_PASSWORD: ${{ secrets.P12_PASSWORD }} run: | - flutter build ios --release --no-codesign + flutter build ios --release --no-codesign --verbose mkdir -p build/ios/iphoneos/Payload ln -s ../Runner.app build/ios/iphoneos/Payload/Runner.app ./zsign -f -k ./certificate.p12 -p "$P12_PASSWORD" -m ./profile.mobileprovision ./build/ios/iphoneos/Payload/Runner.app @@ -161,7 +161,7 @@ jobs: uses: dtolnay/rust-toolchain@stable - name: Install the CLI tool - run: cargo install 'flutter_rust_bridge_codegen' --locked + run: cargo install 'flutter_rust_bridge_codegen' - name: flutter pub get run: flutter pub get @@ -171,7 +171,7 @@ jobs: cd macos pod update cd .. - flutter build macos --release + flutter build macos --release --verbose brew install create-dmg create-dmg --volname Mangayomi-${{ github.ref_name }}-macos --window-pos 200 120 --window-size 800 450 --icon-size 100 --app-drop-link 600 185 Mangayomi-${{ github.ref_name }}-macos.dmg build/macos/Build/Products/Release/Mangayomi.app @@ -204,7 +204,7 @@ jobs: uses: dtolnay/rust-toolchain@stable - name: Install the CLI tool - run: cargo install 'flutter_rust_bridge_codegen' --locked + run: cargo install 'flutter_rust_bridge_codegen' - name: flutter pub get run: flutter pub get @@ -271,13 +271,13 @@ jobs: uses: dtolnay/rust-toolchain@stable - name: Install the CLI tool - run: cargo install 'flutter_rust_bridge_codegen' --locked + run: cargo install 'flutter_rust_bridge_codegen' - name: flutter pub get run: flutter pub get - name: build linux - run: flutter build linux --release + run: flutter build linux --release --verbose - name: Zip uses: thedoctor0/zip-release@master @@ -402,7 +402,7 @@ jobs: uses: dtolnay/rust-toolchain@stable - name: Install the CLI tool - run: cargo install 'flutter_rust_bridge_codegen' --locked + run: cargo install 'flutter_rust_bridge_codegen' - name: flutter pub get run: flutter pub get diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index c6dfa3ed..38ed6832 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -463,5 +463,10 @@ "track_library_not_logged": "Login to the corresponding tracker to use this feature!", "track_library_switch": "Switch to another tracker", "go_back": "Go back", - "merge_library_nav_mobile": "Merge library navigation on mobile" -} \ No newline at end of file + "merge_library_nav_mobile": "Merge library navigation on mobile", + "enable_discord_rpc": "Enable Discord RPC", + "hide_discord_rpc_incognito": "Hide Discord RPC while in Incognito", + "rpc_show_reading_watching_progress": "Show current chapter in Discord (requires a restart)", + "rpc_show_title": "Show current title in Discord", + "rpc_show_cover_image": "Show current cover image in Discord" +} diff --git a/lib/l10n/generated/app_localizations.dart b/lib/l10n/generated/app_localizations.dart index cb789975..e56eec94 100644 --- a/lib/l10n/generated/app_localizations.dart +++ b/lib/l10n/generated/app_localizations.dart @@ -2854,6 +2854,36 @@ abstract class AppLocalizations { /// In en, this message translates to: /// **'Merge library navigation on mobile'** String get merge_library_nav_mobile; + + /// No description provided for @enable_discord_rpc. + /// + /// In en, this message translates to: + /// **'Enable Discord RPC'** + String get enable_discord_rpc; + + /// No description provided for @hide_discord_rpc_incognito. + /// + /// In en, this message translates to: + /// **'Hide Discord RPC while in Incognito'** + String get hide_discord_rpc_incognito; + + /// No description provided for @rpc_show_reading_watching_progress. + /// + /// In en, this message translates to: + /// **'Show current chapter in Discord (requires a restart)'** + String get rpc_show_reading_watching_progress; + + /// No description provided for @rpc_show_title. + /// + /// In en, this message translates to: + /// **'Show current title in Discord'** + String get rpc_show_title; + + /// No description provided for @rpc_show_cover_image. + /// + /// In en, this message translates to: + /// **'Show current cover image in Discord'** + String get rpc_show_cover_image; } class _AppLocalizationsDelegate diff --git a/lib/l10n/generated/app_localizations_ar.dart b/lib/l10n/generated/app_localizations_ar.dart index 21db1d6c..684efe04 100644 --- a/lib/l10n/generated/app_localizations_ar.dart +++ b/lib/l10n/generated/app_localizations_ar.dart @@ -1468,4 +1468,21 @@ class AppLocalizationsAr extends AppLocalizations { @override String get merge_library_nav_mobile => 'Merge library navigation on mobile'; + + @override + String get enable_discord_rpc => 'Enable Discord RPC'; + + @override + String get hide_discord_rpc_incognito => + 'Hide Discord RPC while in Incognito'; + + @override + String get rpc_show_reading_watching_progress => + 'Show current chapter in Discord (requires a restart)'; + + @override + String get rpc_show_title => 'Show current title in Discord'; + + @override + String get rpc_show_cover_image => 'Show current cover image in Discord'; } diff --git a/lib/l10n/generated/app_localizations_de.dart b/lib/l10n/generated/app_localizations_de.dart index ed33e6c9..4a2166d5 100644 --- a/lib/l10n/generated/app_localizations_de.dart +++ b/lib/l10n/generated/app_localizations_de.dart @@ -1481,4 +1481,21 @@ class AppLocalizationsDe extends AppLocalizations { @override String get merge_library_nav_mobile => 'Merge library navigation on mobile'; + + @override + String get enable_discord_rpc => 'Enable Discord RPC'; + + @override + String get hide_discord_rpc_incognito => + 'Hide Discord RPC while in Incognito'; + + @override + String get rpc_show_reading_watching_progress => + 'Show current chapter in Discord (requires a restart)'; + + @override + String get rpc_show_title => 'Show current title in Discord'; + + @override + String get rpc_show_cover_image => 'Show current cover image in Discord'; } diff --git a/lib/l10n/generated/app_localizations_en.dart b/lib/l10n/generated/app_localizations_en.dart index 37742519..05da3e52 100644 --- a/lib/l10n/generated/app_localizations_en.dart +++ b/lib/l10n/generated/app_localizations_en.dart @@ -1469,4 +1469,21 @@ class AppLocalizationsEn extends AppLocalizations { @override String get merge_library_nav_mobile => 'Merge library navigation on mobile'; + + @override + String get enable_discord_rpc => 'Enable Discord RPC'; + + @override + String get hide_discord_rpc_incognito => + 'Hide Discord RPC while in Incognito'; + + @override + String get rpc_show_reading_watching_progress => + 'Show current chapter in Discord (requires a restart)'; + + @override + String get rpc_show_title => 'Show current title in Discord'; + + @override + String get rpc_show_cover_image => 'Show current cover image in Discord'; } diff --git a/lib/l10n/generated/app_localizations_es.dart b/lib/l10n/generated/app_localizations_es.dart index 67b1d83c..86c7bdde 100644 --- a/lib/l10n/generated/app_localizations_es.dart +++ b/lib/l10n/generated/app_localizations_es.dart @@ -1486,6 +1486,23 @@ class AppLocalizationsEs extends AppLocalizations { @override String get merge_library_nav_mobile => 'Merge library navigation on mobile'; + + @override + String get enable_discord_rpc => 'Enable Discord RPC'; + + @override + String get hide_discord_rpc_incognito => + 'Hide Discord RPC while in Incognito'; + + @override + String get rpc_show_reading_watching_progress => + 'Show current chapter in Discord (requires a restart)'; + + @override + String get rpc_show_title => 'Show current title in Discord'; + + @override + String get rpc_show_cover_image => 'Show current cover image in Discord'; } /// The translations for Spanish Castilian, as used in Latin America and the Caribbean (`es_419`). diff --git a/lib/l10n/generated/app_localizations_fr.dart b/lib/l10n/generated/app_localizations_fr.dart index 13cbb45b..82a2ca30 100644 --- a/lib/l10n/generated/app_localizations_fr.dart +++ b/lib/l10n/generated/app_localizations_fr.dart @@ -1487,4 +1487,21 @@ class AppLocalizationsFr extends AppLocalizations { @override String get merge_library_nav_mobile => 'Merge library navigation on mobile'; + + @override + String get enable_discord_rpc => 'Enable Discord RPC'; + + @override + String get hide_discord_rpc_incognito => + 'Hide Discord RPC while in Incognito'; + + @override + String get rpc_show_reading_watching_progress => + 'Show current chapter in Discord (requires a restart)'; + + @override + String get rpc_show_title => 'Show current title in Discord'; + + @override + String get rpc_show_cover_image => 'Show current cover image in Discord'; } diff --git a/lib/l10n/generated/app_localizations_id.dart b/lib/l10n/generated/app_localizations_id.dart index d9b11353..43e86f70 100644 --- a/lib/l10n/generated/app_localizations_id.dart +++ b/lib/l10n/generated/app_localizations_id.dart @@ -1475,4 +1475,21 @@ class AppLocalizationsId extends AppLocalizations { @override String get merge_library_nav_mobile => 'Merge library navigation on mobile'; + + @override + String get enable_discord_rpc => 'Enable Discord RPC'; + + @override + String get hide_discord_rpc_incognito => + 'Hide Discord RPC while in Incognito'; + + @override + String get rpc_show_reading_watching_progress => + 'Show current chapter in Discord (requires a restart)'; + + @override + String get rpc_show_title => 'Show current title in Discord'; + + @override + String get rpc_show_cover_image => 'Show current cover image in Discord'; } diff --git a/lib/l10n/generated/app_localizations_it.dart b/lib/l10n/generated/app_localizations_it.dart index 8f5a5d62..aa4be1b8 100644 --- a/lib/l10n/generated/app_localizations_it.dart +++ b/lib/l10n/generated/app_localizations_it.dart @@ -1484,4 +1484,21 @@ class AppLocalizationsIt extends AppLocalizations { @override String get merge_library_nav_mobile => 'Merge library navigation on mobile'; + + @override + String get enable_discord_rpc => 'Enable Discord RPC'; + + @override + String get hide_discord_rpc_incognito => + 'Hide Discord RPC while in Incognito'; + + @override + String get rpc_show_reading_watching_progress => + 'Show current chapter in Discord (requires a restart)'; + + @override + String get rpc_show_title => 'Show current title in Discord'; + + @override + String get rpc_show_cover_image => 'Show current cover image in Discord'; } diff --git a/lib/l10n/generated/app_localizations_pt.dart b/lib/l10n/generated/app_localizations_pt.dart index 1a498982..bb883598 100644 --- a/lib/l10n/generated/app_localizations_pt.dart +++ b/lib/l10n/generated/app_localizations_pt.dart @@ -1483,6 +1483,23 @@ class AppLocalizationsPt extends AppLocalizations { @override String get merge_library_nav_mobile => 'Merge library navigation on mobile'; + + @override + String get enable_discord_rpc => 'Enable Discord RPC'; + + @override + String get hide_discord_rpc_incognito => + 'Hide Discord RPC while in Incognito'; + + @override + String get rpc_show_reading_watching_progress => + 'Show current chapter in Discord (requires a restart)'; + + @override + String get rpc_show_title => 'Show current title in Discord'; + + @override + String get rpc_show_cover_image => 'Show current cover image in Discord'; } /// The translations for Portuguese, as used in Brazil (`pt_BR`). diff --git a/lib/l10n/generated/app_localizations_ru.dart b/lib/l10n/generated/app_localizations_ru.dart index 6224f68e..5c0298de 100644 --- a/lib/l10n/generated/app_localizations_ru.dart +++ b/lib/l10n/generated/app_localizations_ru.dart @@ -1485,4 +1485,21 @@ class AppLocalizationsRu extends AppLocalizations { @override String get merge_library_nav_mobile => 'Merge library navigation on mobile'; + + @override + String get enable_discord_rpc => 'Enable Discord RPC'; + + @override + String get hide_discord_rpc_incognito => + 'Hide Discord RPC while in Incognito'; + + @override + String get rpc_show_reading_watching_progress => + 'Show current chapter in Discord (requires a restart)'; + + @override + String get rpc_show_title => 'Show current title in Discord'; + + @override + String get rpc_show_cover_image => 'Show current cover image in Discord'; } diff --git a/lib/l10n/generated/app_localizations_th.dart b/lib/l10n/generated/app_localizations_th.dart index e0a2963c..40a25995 100644 --- a/lib/l10n/generated/app_localizations_th.dart +++ b/lib/l10n/generated/app_localizations_th.dart @@ -1469,4 +1469,21 @@ class AppLocalizationsTh extends AppLocalizations { @override String get merge_library_nav_mobile => 'Merge library navigation on mobile'; + + @override + String get enable_discord_rpc => 'Enable Discord RPC'; + + @override + String get hide_discord_rpc_incognito => + 'Hide Discord RPC while in Incognito'; + + @override + String get rpc_show_reading_watching_progress => + 'Show current chapter in Discord (requires a restart)'; + + @override + String get rpc_show_title => 'Show current title in Discord'; + + @override + String get rpc_show_cover_image => 'Show current cover image in Discord'; } diff --git a/lib/l10n/generated/app_localizations_tr.dart b/lib/l10n/generated/app_localizations_tr.dart index 3b91923f..f010c51e 100644 --- a/lib/l10n/generated/app_localizations_tr.dart +++ b/lib/l10n/generated/app_localizations_tr.dart @@ -1475,4 +1475,21 @@ class AppLocalizationsTr extends AppLocalizations { @override String get merge_library_nav_mobile => 'Merge library navigation on mobile'; + + @override + String get enable_discord_rpc => 'Enable Discord RPC'; + + @override + String get hide_discord_rpc_incognito => + 'Hide Discord RPC while in Incognito'; + + @override + String get rpc_show_reading_watching_progress => + 'Show current chapter in Discord (requires a restart)'; + + @override + String get rpc_show_title => 'Show current title in Discord'; + + @override + String get rpc_show_cover_image => 'Show current cover image in Discord'; } diff --git a/lib/l10n/generated/app_localizations_zh.dart b/lib/l10n/generated/app_localizations_zh.dart index a4c749e0..ee59d081 100644 --- a/lib/l10n/generated/app_localizations_zh.dart +++ b/lib/l10n/generated/app_localizations_zh.dart @@ -1440,4 +1440,21 @@ class AppLocalizationsZh extends AppLocalizations { @override String get merge_library_nav_mobile => 'Merge library navigation on mobile'; + + @override + String get enable_discord_rpc => 'Enable Discord RPC'; + + @override + String get hide_discord_rpc_incognito => + 'Hide Discord RPC while in Incognito'; + + @override + String get rpc_show_reading_watching_progress => + 'Show current chapter in Discord (requires a restart)'; + + @override + String get rpc_show_title => 'Show current title in Discord'; + + @override + String get rpc_show_cover_image => 'Show current cover image in Discord'; } diff --git a/lib/main.dart b/lib/main.dart index 0ecc6222..a0cdb672 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -26,6 +26,7 @@ import 'package:mangayomi/modules/more/settings/appearance/providers/theme_mode_ import 'package:mangayomi/l10n/generated/app_localizations.dart'; import 'package:mangayomi/services/http/m_client.dart'; import 'package:mangayomi/src/rust/frb_generated.dart'; +import 'package:mangayomi/utils/discord_rpc.dart'; import 'package:mangayomi/utils/url_protocol/api.dart'; import 'package:mangayomi/modules/more/settings/appearance/providers/theme_provider.dart'; import 'package:mangayomi/modules/library/providers/file_scanner.dart'; @@ -35,6 +36,7 @@ import 'package:window_manager/window_manager.dart'; import 'package:path/path.dart' as p; late Isar isar; +late DiscordRPC discordRpc; WebViewEnvironment? webViewEnvironment; void main(List args) async { WidgetsFlutterBinding.ensureInitialized(); @@ -61,6 +63,8 @@ void main(List args) async { isar = await StorageProvider().initDB(null, inspector: kDebugMode); await Hive.initFlutter(); Hive.registerAdapter(TrackSearchAdapter()); + discordRpc = DiscordRPC(applicationId: "1395040506677039157"); + await discordRpc.initialize(); runApp(const ProviderScope(child: MyApp())); unawaited(_postLaunchInit()); // Defer non-essential async operations @@ -129,6 +133,7 @@ class _MyAppState extends ConsumerState { @override void dispose() { _linkSubscription?.cancel(); + discordRpc.destroy(); super.dispose(); } diff --git a/lib/models/settings.dart b/lib/models/settings.dart index bd7dd4d0..35efb128 100644 --- a/lib/models/settings.dart +++ b/lib/models/settings.dart @@ -246,6 +246,16 @@ class Settings { bool? mergeLibraryNavMobile; + bool? enableDiscordRpc; + + bool? hideDiscordRpcInIncognito; + + bool? rpcShowReadingWatchingProgress; + + bool? rpcShowTitle; + + bool? rpcShowCoverImage; + Settings({ this.id = 227, this.displayType = DisplayType.compactGrid, @@ -355,6 +365,11 @@ class Settings { this.novelExtensionsRepo, this.lastTrackerLibraryLocation, this.mergeLibraryNavMobile = false, + this.enableDiscordRpc = true, + this.hideDiscordRpcInIncognito = true, + this.rpcShowReadingWatchingProgress = true, + this.rpcShowTitle = true, + this.rpcShowCoverImage = true, }); Settings.fromJson(Map json) { @@ -570,6 +585,11 @@ class Settings { } lastTrackerLibraryLocation = json['lastTrackerLibraryLocation']; mergeLibraryNavMobile = json['mergeLibraryNavMobile']; + enableDiscordRpc = json['enableDiscordRpc']; + hideDiscordRpcInIncognito = json['hideDiscordRpcInIncognito']; + rpcShowReadingWatchingProgress = json['rpcShowReadingWatchingProgress']; + rpcShowTitle = json['rpcShowTitle']; + rpcShowCoverImage = json['rpcShowCoverImage']; } Map toJson() => { @@ -702,6 +722,11 @@ class Settings { 'novelExtensionsRepo': novelExtensionsRepo?.map((e) => e.toJson()).toList(), 'lastTrackerLibraryLocation': lastTrackerLibraryLocation, 'mergeLibraryNavMobile': mergeLibraryNavMobile, + 'enableDiscordRpc': enableDiscordRpc, + 'hideDiscordRpcInIncognito': hideDiscordRpcInIncognito, + 'rpcShowReadingWatchingProgress': rpcShowReadingWatchingProgress, + 'rpcShowTitle': rpcShowTitle, + 'rpcShowCoverImage': rpcShowCoverImage, }; } diff --git a/lib/models/settings.g.dart b/lib/models/settings.g.dart index bf2fc53e..9ce98abf 100644 --- a/lib/models/settings.g.dart +++ b/lib/models/settings.g.dart @@ -268,348 +268,373 @@ const SettingsSchema = CollectionSchema( name: r'enableCustomColorFilter', type: IsarType.bool, ), - r'filterScanlatorList': PropertySchema( + r'enableDiscordRpc': PropertySchema( id: 47, + name: r'enableDiscordRpc', + type: IsarType.bool, + ), + r'filterScanlatorList': PropertySchema( + id: 48, name: r'filterScanlatorList', type: IsarType.objectList, target: r'FilterScanlator', ), r'flexColorSchemeBlendLevel': PropertySchema( - id: 48, + id: 49, name: r'flexColorSchemeBlendLevel', type: IsarType.double, ), r'flexSchemeColorIndex': PropertySchema( - id: 49, + id: 50, name: r'flexSchemeColorIndex', type: IsarType.long, ), r'followSystemTheme': PropertySchema( - id: 50, + id: 51, name: r'followSystemTheme', type: IsarType.bool, ), r'fullScreenPlayer': PropertySchema( - id: 51, + id: 52, name: r'fullScreenPlayer', type: IsarType.bool, ), r'fullScreenReader': PropertySchema( - id: 52, + id: 53, name: r'fullScreenReader', type: IsarType.bool, ), + r'hideDiscordRpcInIncognito': PropertySchema( + id: 54, + name: r'hideDiscordRpcInIncognito', + type: IsarType.bool, + ), r'hideItems': PropertySchema( - id: 53, + id: 55, name: r'hideItems', type: IsarType.stringList, ), r'hwdecMode': PropertySchema( - id: 54, + id: 56, name: r'hwdecMode', type: IsarType.string, ), r'incognitoMode': PropertySchema( - id: 55, + id: 57, name: r'incognitoMode', type: IsarType.bool, ), r'lastTrackerLibraryLocation': PropertySchema( - id: 56, + id: 58, name: r'lastTrackerLibraryLocation', type: IsarType.string, ), r'libraryDownloadedChapters': PropertySchema( - id: 57, + id: 59, name: r'libraryDownloadedChapters', type: IsarType.bool, ), r'libraryFilterAnimeBookMarkedType': PropertySchema( - id: 58, + id: 60, name: r'libraryFilterAnimeBookMarkedType', type: IsarType.long, ), r'libraryFilterAnimeDownloadType': PropertySchema( - id: 59, + id: 61, name: r'libraryFilterAnimeDownloadType', type: IsarType.long, ), r'libraryFilterAnimeStartedType': PropertySchema( - id: 60, + id: 62, name: r'libraryFilterAnimeStartedType', type: IsarType.long, ), r'libraryFilterAnimeUnreadType': PropertySchema( - id: 61, + id: 63, name: r'libraryFilterAnimeUnreadType', type: IsarType.long, ), r'libraryFilterMangasBookMarkedType': PropertySchema( - id: 62, + id: 64, name: r'libraryFilterMangasBookMarkedType', type: IsarType.long, ), r'libraryFilterMangasDownloadType': PropertySchema( - id: 63, + id: 65, name: r'libraryFilterMangasDownloadType', type: IsarType.long, ), r'libraryFilterMangasStartedType': PropertySchema( - id: 64, + id: 66, name: r'libraryFilterMangasStartedType', type: IsarType.long, ), r'libraryFilterMangasUnreadType': PropertySchema( - id: 65, + id: 67, name: r'libraryFilterMangasUnreadType', type: IsarType.long, ), r'libraryFilterNovelBookMarkedType': PropertySchema( - id: 66, + id: 68, name: r'libraryFilterNovelBookMarkedType', type: IsarType.long, ), r'libraryFilterNovelDownloadType': PropertySchema( - id: 67, + id: 69, name: r'libraryFilterNovelDownloadType', type: IsarType.long, ), r'libraryFilterNovelStartedType': PropertySchema( - id: 68, + id: 70, name: r'libraryFilterNovelStartedType', type: IsarType.long, ), r'libraryFilterNovelUnreadType': PropertySchema( - id: 69, + id: 71, name: r'libraryFilterNovelUnreadType', type: IsarType.long, ), r'libraryLocalSource': PropertySchema( - id: 70, + id: 72, name: r'libraryLocalSource', type: IsarType.bool, ), r'libraryShowCategoryTabs': PropertySchema( - id: 71, + id: 73, name: r'libraryShowCategoryTabs', type: IsarType.bool, ), r'libraryShowContinueReadingButton': PropertySchema( - id: 72, + id: 74, name: r'libraryShowContinueReadingButton', type: IsarType.bool, ), r'libraryShowLanguage': PropertySchema( - id: 73, + id: 75, name: r'libraryShowLanguage', type: IsarType.bool, ), r'libraryShowNumbersOfItems': PropertySchema( - id: 74, + id: 76, name: r'libraryShowNumbersOfItems', type: IsarType.bool, ), r'locale': PropertySchema( - id: 75, + id: 77, name: r'locale', type: IsarType.object, target: r'L10nLocale', ), r'mangaExtensionsRepo': PropertySchema( - id: 76, + id: 78, name: r'mangaExtensionsRepo', type: IsarType.objectList, target: r'Repo', ), r'mangaGridSize': PropertySchema( - id: 77, + id: 79, name: r'mangaGridSize', type: IsarType.long, ), r'mangaHomeDisplayType': PropertySchema( - id: 78, + id: 80, name: r'mangaHomeDisplayType', type: IsarType.byte, enumMap: _SettingsmangaHomeDisplayTypeEnumValueMap, ), r'markEpisodeAsSeenType': PropertySchema( - id: 79, + id: 81, name: r'markEpisodeAsSeenType', type: IsarType.long, ), r'mergeLibraryNavMobile': PropertySchema( - id: 80, + id: 82, name: r'mergeLibraryNavMobile', type: IsarType.bool, ), r'navigationOrder': PropertySchema( - id: 81, + id: 83, name: r'navigationOrder', type: IsarType.stringList, ), r'novelDisplayType': PropertySchema( - id: 82, + id: 84, name: r'novelDisplayType', type: IsarType.byte, enumMap: _SettingsnovelDisplayTypeEnumValueMap, ), r'novelExtensionsRepo': PropertySchema( - id: 83, + id: 85, name: r'novelExtensionsRepo', type: IsarType.objectList, target: r'Repo', ), r'novelFontSize': PropertySchema( - id: 84, + id: 86, name: r'novelFontSize', type: IsarType.long, ), r'novelGridSize': PropertySchema( - id: 85, + id: 87, name: r'novelGridSize', type: IsarType.long, ), r'novelLibraryDownloadedChapters': PropertySchema( - id: 86, + id: 88, name: r'novelLibraryDownloadedChapters', type: IsarType.bool, ), r'novelLibraryLocalSource': PropertySchema( - id: 87, + id: 89, name: r'novelLibraryLocalSource', type: IsarType.bool, ), r'novelLibraryShowCategoryTabs': PropertySchema( - id: 88, + id: 90, name: r'novelLibraryShowCategoryTabs', type: IsarType.bool, ), r'novelLibraryShowContinueReadingButton': PropertySchema( - id: 89, + id: 91, name: r'novelLibraryShowContinueReadingButton', type: IsarType.bool, ), r'novelLibraryShowLanguage': PropertySchema( - id: 90, + id: 92, name: r'novelLibraryShowLanguage', type: IsarType.bool, ), r'novelLibraryShowNumbersOfItems': PropertySchema( - id: 91, + id: 93, name: r'novelLibraryShowNumbersOfItems', type: IsarType.bool, ), r'novelTextAlign': PropertySchema( - id: 92, + id: 94, name: r'novelTextAlign', type: IsarType.byte, enumMap: _SettingsnovelTextAlignEnumValueMap, ), r'onlyIncludePinnedSources': PropertySchema( - id: 93, + id: 95, name: r'onlyIncludePinnedSources', type: IsarType.bool, ), r'pagePreloadAmount': PropertySchema( - id: 94, + id: 96, name: r'pagePreloadAmount', type: IsarType.long, ), r'personalPageModeList': PropertySchema( - id: 95, + id: 97, name: r'personalPageModeList', type: IsarType.objectList, target: r'PersonalPageMode', ), r'personalReaderModeList': PropertySchema( - id: 96, + id: 98, name: r'personalReaderModeList', type: IsarType.objectList, target: r'PersonalReaderMode', ), r'playerSubtitleSettings': PropertySchema( - id: 97, + id: 99, name: r'playerSubtitleSettings', type: IsarType.object, target: r'PlayerSubtitleSettings', ), r'pureBlackDarkMode': PropertySchema( - id: 98, + id: 100, name: r'pureBlackDarkMode', type: IsarType.bool, ), r'relativeTimesTamps': PropertySchema( - id: 99, + id: 101, name: r'relativeTimesTamps', type: IsarType.long, ), + r'rpcShowCoverImage': PropertySchema( + id: 102, + name: r'rpcShowCoverImage', + type: IsarType.bool, + ), + r'rpcShowReadingWatchingProgress': PropertySchema( + id: 103, + name: r'rpcShowReadingWatchingProgress', + type: IsarType.bool, + ), + r'rpcShowTitle': PropertySchema( + id: 104, + name: r'rpcShowTitle', + type: IsarType.bool, + ), r'saveAsCBZArchive': PropertySchema( - id: 100, + id: 105, name: r'saveAsCBZArchive', type: IsarType.bool, ), r'scaleType': PropertySchema( - id: 101, + id: 106, name: r'scaleType', type: IsarType.byte, enumMap: _SettingsscaleTypeEnumValueMap, ), r'showPagesNumber': PropertySchema( - id: 102, + id: 107, name: r'showPagesNumber', type: IsarType.bool, ), r'sortChapterList': PropertySchema( - id: 103, + id: 108, name: r'sortChapterList', type: IsarType.objectList, target: r'SortChapter', ), r'sortLibraryAnime': PropertySchema( - id: 104, + id: 109, name: r'sortLibraryAnime', type: IsarType.object, target: r'SortLibraryManga', ), r'sortLibraryManga': PropertySchema( - id: 105, + id: 110, name: r'sortLibraryManga', type: IsarType.object, target: r'SortLibraryManga', ), r'sortLibraryNovel': PropertySchema( - id: 106, + id: 111, name: r'sortLibraryNovel', type: IsarType.object, target: r'SortLibraryManga', ), r'startDatebackup': PropertySchema( - id: 107, + id: 112, name: r'startDatebackup', type: IsarType.long, ), r'themeIsDark': PropertySchema( - id: 108, + id: 113, name: r'themeIsDark', type: IsarType.bool, ), r'updateProgressAfterReading': PropertySchema( - id: 109, + id: 114, name: r'updateProgressAfterReading', type: IsarType.bool, ), r'useLibass': PropertySchema( - id: 110, + id: 115, name: r'useLibass', type: IsarType.bool, ), r'usePageTapZones': PropertySchema( - id: 111, + id: 116, name: r'usePageTapZones', type: IsarType.bool, ), r'userAgent': PropertySchema( - id: 112, + id: 117, name: r'userAgent', type: IsarType.string, ) @@ -1090,127 +1115,132 @@ void _settingsSerialize( writer.writeBool(offsets[44], object.enableAniSkip); writer.writeBool(offsets[45], object.enableAutoSkip); writer.writeBool(offsets[46], object.enableCustomColorFilter); + writer.writeBool(offsets[47], object.enableDiscordRpc); writer.writeObjectList( - offsets[47], + offsets[48], allOffsets, FilterScanlatorSchema.serialize, object.filterScanlatorList, ); - writer.writeDouble(offsets[48], object.flexColorSchemeBlendLevel); - writer.writeLong(offsets[49], object.flexSchemeColorIndex); - writer.writeBool(offsets[50], object.followSystemTheme); - writer.writeBool(offsets[51], object.fullScreenPlayer); - writer.writeBool(offsets[52], object.fullScreenReader); - writer.writeStringList(offsets[53], object.hideItems); - writer.writeString(offsets[54], object.hwdecMode); - writer.writeBool(offsets[55], object.incognitoMode); - writer.writeString(offsets[56], object.lastTrackerLibraryLocation); - writer.writeBool(offsets[57], object.libraryDownloadedChapters); - writer.writeLong(offsets[58], object.libraryFilterAnimeBookMarkedType); - writer.writeLong(offsets[59], object.libraryFilterAnimeDownloadType); - writer.writeLong(offsets[60], object.libraryFilterAnimeStartedType); - writer.writeLong(offsets[61], object.libraryFilterAnimeUnreadType); - writer.writeLong(offsets[62], object.libraryFilterMangasBookMarkedType); - writer.writeLong(offsets[63], object.libraryFilterMangasDownloadType); - writer.writeLong(offsets[64], object.libraryFilterMangasStartedType); - writer.writeLong(offsets[65], object.libraryFilterMangasUnreadType); - writer.writeLong(offsets[66], object.libraryFilterNovelBookMarkedType); - writer.writeLong(offsets[67], object.libraryFilterNovelDownloadType); - writer.writeLong(offsets[68], object.libraryFilterNovelStartedType); - writer.writeLong(offsets[69], object.libraryFilterNovelUnreadType); - writer.writeBool(offsets[70], object.libraryLocalSource); - writer.writeBool(offsets[71], object.libraryShowCategoryTabs); - writer.writeBool(offsets[72], object.libraryShowContinueReadingButton); - writer.writeBool(offsets[73], object.libraryShowLanguage); - writer.writeBool(offsets[74], object.libraryShowNumbersOfItems); + writer.writeDouble(offsets[49], object.flexColorSchemeBlendLevel); + writer.writeLong(offsets[50], object.flexSchemeColorIndex); + writer.writeBool(offsets[51], object.followSystemTheme); + writer.writeBool(offsets[52], object.fullScreenPlayer); + writer.writeBool(offsets[53], object.fullScreenReader); + writer.writeBool(offsets[54], object.hideDiscordRpcInIncognito); + writer.writeStringList(offsets[55], object.hideItems); + writer.writeString(offsets[56], object.hwdecMode); + writer.writeBool(offsets[57], object.incognitoMode); + writer.writeString(offsets[58], object.lastTrackerLibraryLocation); + writer.writeBool(offsets[59], object.libraryDownloadedChapters); + writer.writeLong(offsets[60], object.libraryFilterAnimeBookMarkedType); + writer.writeLong(offsets[61], object.libraryFilterAnimeDownloadType); + writer.writeLong(offsets[62], object.libraryFilterAnimeStartedType); + writer.writeLong(offsets[63], object.libraryFilterAnimeUnreadType); + writer.writeLong(offsets[64], object.libraryFilterMangasBookMarkedType); + writer.writeLong(offsets[65], object.libraryFilterMangasDownloadType); + writer.writeLong(offsets[66], object.libraryFilterMangasStartedType); + writer.writeLong(offsets[67], object.libraryFilterMangasUnreadType); + writer.writeLong(offsets[68], object.libraryFilterNovelBookMarkedType); + writer.writeLong(offsets[69], object.libraryFilterNovelDownloadType); + writer.writeLong(offsets[70], object.libraryFilterNovelStartedType); + writer.writeLong(offsets[71], object.libraryFilterNovelUnreadType); + writer.writeBool(offsets[72], object.libraryLocalSource); + writer.writeBool(offsets[73], object.libraryShowCategoryTabs); + writer.writeBool(offsets[74], object.libraryShowContinueReadingButton); + writer.writeBool(offsets[75], object.libraryShowLanguage); + writer.writeBool(offsets[76], object.libraryShowNumbersOfItems); writer.writeObject( - offsets[75], + offsets[77], allOffsets, L10nLocaleSchema.serialize, object.locale, ); writer.writeObjectList( - offsets[76], + offsets[78], allOffsets, RepoSchema.serialize, object.mangaExtensionsRepo, ); - writer.writeLong(offsets[77], object.mangaGridSize); - writer.writeByte(offsets[78], object.mangaHomeDisplayType.index); - writer.writeLong(offsets[79], object.markEpisodeAsSeenType); - writer.writeBool(offsets[80], object.mergeLibraryNavMobile); - writer.writeStringList(offsets[81], object.navigationOrder); - writer.writeByte(offsets[82], object.novelDisplayType.index); + writer.writeLong(offsets[79], object.mangaGridSize); + writer.writeByte(offsets[80], object.mangaHomeDisplayType.index); + writer.writeLong(offsets[81], object.markEpisodeAsSeenType); + writer.writeBool(offsets[82], object.mergeLibraryNavMobile); + writer.writeStringList(offsets[83], object.navigationOrder); + writer.writeByte(offsets[84], object.novelDisplayType.index); writer.writeObjectList( - offsets[83], + offsets[85], allOffsets, RepoSchema.serialize, object.novelExtensionsRepo, ); - writer.writeLong(offsets[84], object.novelFontSize); - writer.writeLong(offsets[85], object.novelGridSize); - writer.writeBool(offsets[86], object.novelLibraryDownloadedChapters); - writer.writeBool(offsets[87], object.novelLibraryLocalSource); - writer.writeBool(offsets[88], object.novelLibraryShowCategoryTabs); - writer.writeBool(offsets[89], object.novelLibraryShowContinueReadingButton); - writer.writeBool(offsets[90], object.novelLibraryShowLanguage); - writer.writeBool(offsets[91], object.novelLibraryShowNumbersOfItems); - writer.writeByte(offsets[92], object.novelTextAlign.index); - writer.writeBool(offsets[93], object.onlyIncludePinnedSources); - writer.writeLong(offsets[94], object.pagePreloadAmount); + writer.writeLong(offsets[86], object.novelFontSize); + writer.writeLong(offsets[87], object.novelGridSize); + writer.writeBool(offsets[88], object.novelLibraryDownloadedChapters); + writer.writeBool(offsets[89], object.novelLibraryLocalSource); + writer.writeBool(offsets[90], object.novelLibraryShowCategoryTabs); + writer.writeBool(offsets[91], object.novelLibraryShowContinueReadingButton); + writer.writeBool(offsets[92], object.novelLibraryShowLanguage); + writer.writeBool(offsets[93], object.novelLibraryShowNumbersOfItems); + writer.writeByte(offsets[94], object.novelTextAlign.index); + writer.writeBool(offsets[95], object.onlyIncludePinnedSources); + writer.writeLong(offsets[96], object.pagePreloadAmount); writer.writeObjectList( - offsets[95], + offsets[97], allOffsets, PersonalPageModeSchema.serialize, object.personalPageModeList, ); writer.writeObjectList( - offsets[96], + offsets[98], allOffsets, PersonalReaderModeSchema.serialize, object.personalReaderModeList, ); writer.writeObject( - offsets[97], + offsets[99], allOffsets, PlayerSubtitleSettingsSchema.serialize, object.playerSubtitleSettings, ); - writer.writeBool(offsets[98], object.pureBlackDarkMode); - writer.writeLong(offsets[99], object.relativeTimesTamps); - writer.writeBool(offsets[100], object.saveAsCBZArchive); - writer.writeByte(offsets[101], object.scaleType.index); - writer.writeBool(offsets[102], object.showPagesNumber); + writer.writeBool(offsets[100], object.pureBlackDarkMode); + writer.writeLong(offsets[101], object.relativeTimesTamps); + writer.writeBool(offsets[102], object.rpcShowCoverImage); + writer.writeBool(offsets[103], object.rpcShowReadingWatchingProgress); + writer.writeBool(offsets[104], object.rpcShowTitle); + writer.writeBool(offsets[105], object.saveAsCBZArchive); + writer.writeByte(offsets[106], object.scaleType.index); + writer.writeBool(offsets[107], object.showPagesNumber); writer.writeObjectList( - offsets[103], + offsets[108], allOffsets, SortChapterSchema.serialize, object.sortChapterList, ); writer.writeObject( - offsets[104], + offsets[109], allOffsets, SortLibraryMangaSchema.serialize, object.sortLibraryAnime, ); writer.writeObject( - offsets[105], + offsets[110], allOffsets, SortLibraryMangaSchema.serialize, object.sortLibraryManga, ); writer.writeObject( - offsets[106], + offsets[111], allOffsets, SortLibraryMangaSchema.serialize, object.sortLibraryNovel, ); - writer.writeLong(offsets[107], object.startDatebackup); - writer.writeBool(offsets[108], object.themeIsDark); - writer.writeBool(offsets[109], object.updateProgressAfterReading); - writer.writeBool(offsets[110], object.useLibass); - writer.writeBool(offsets[111], object.usePageTapZones); - writer.writeString(offsets[112], object.userAgent); + writer.writeLong(offsets[112], object.startDatebackup); + writer.writeBool(offsets[113], object.themeIsDark); + writer.writeBool(offsets[114], object.updateProgressAfterReading); + writer.writeBool(offsets[115], object.useLibass); + writer.writeBool(offsets[116], object.usePageTapZones); + writer.writeString(offsets[117], object.userAgent); } Settings _settingsDeserialize( @@ -1310,119 +1340,124 @@ Settings _settingsDeserialize( enableAniSkip: reader.readBoolOrNull(offsets[44]), enableAutoSkip: reader.readBoolOrNull(offsets[45]), enableCustomColorFilter: reader.readBoolOrNull(offsets[46]), - flexColorSchemeBlendLevel: reader.readDoubleOrNull(offsets[48]), - flexSchemeColorIndex: reader.readLongOrNull(offsets[49]), - followSystemTheme: reader.readBoolOrNull(offsets[50]), - fullScreenPlayer: reader.readBoolOrNull(offsets[51]), - fullScreenReader: reader.readBoolOrNull(offsets[52]), - hideItems: reader.readStringList(offsets[53]), - hwdecMode: reader.readStringOrNull(offsets[54]), + enableDiscordRpc: reader.readBoolOrNull(offsets[47]), + flexColorSchemeBlendLevel: reader.readDoubleOrNull(offsets[49]), + flexSchemeColorIndex: reader.readLongOrNull(offsets[50]), + followSystemTheme: reader.readBoolOrNull(offsets[51]), + fullScreenPlayer: reader.readBoolOrNull(offsets[52]), + fullScreenReader: reader.readBoolOrNull(offsets[53]), + hideDiscordRpcInIncognito: reader.readBoolOrNull(offsets[54]), + hideItems: reader.readStringList(offsets[55]), + hwdecMode: reader.readStringOrNull(offsets[56]), id: id, - incognitoMode: reader.readBoolOrNull(offsets[55]), - lastTrackerLibraryLocation: reader.readStringOrNull(offsets[56]), - libraryDownloadedChapters: reader.readBoolOrNull(offsets[57]), - libraryFilterAnimeBookMarkedType: reader.readLongOrNull(offsets[58]), - libraryFilterAnimeDownloadType: reader.readLongOrNull(offsets[59]), - libraryFilterAnimeStartedType: reader.readLongOrNull(offsets[60]), - libraryFilterAnimeUnreadType: reader.readLongOrNull(offsets[61]), - libraryFilterMangasBookMarkedType: reader.readLongOrNull(offsets[62]), - libraryFilterMangasDownloadType: reader.readLongOrNull(offsets[63]), - libraryFilterMangasStartedType: reader.readLongOrNull(offsets[64]), - libraryFilterMangasUnreadType: reader.readLongOrNull(offsets[65]), - libraryFilterNovelBookMarkedType: reader.readLongOrNull(offsets[66]), - libraryFilterNovelDownloadType: reader.readLongOrNull(offsets[67]), - libraryFilterNovelStartedType: reader.readLongOrNull(offsets[68]), - libraryFilterNovelUnreadType: reader.readLongOrNull(offsets[69]), - libraryLocalSource: reader.readBoolOrNull(offsets[70]), - libraryShowCategoryTabs: reader.readBoolOrNull(offsets[71]), - libraryShowContinueReadingButton: reader.readBoolOrNull(offsets[72]), - libraryShowLanguage: reader.readBoolOrNull(offsets[73]), - libraryShowNumbersOfItems: reader.readBoolOrNull(offsets[74]), + incognitoMode: reader.readBoolOrNull(offsets[57]), + lastTrackerLibraryLocation: reader.readStringOrNull(offsets[58]), + libraryDownloadedChapters: reader.readBoolOrNull(offsets[59]), + libraryFilterAnimeBookMarkedType: reader.readLongOrNull(offsets[60]), + libraryFilterAnimeDownloadType: reader.readLongOrNull(offsets[61]), + libraryFilterAnimeStartedType: reader.readLongOrNull(offsets[62]), + libraryFilterAnimeUnreadType: reader.readLongOrNull(offsets[63]), + libraryFilterMangasBookMarkedType: reader.readLongOrNull(offsets[64]), + libraryFilterMangasDownloadType: reader.readLongOrNull(offsets[65]), + libraryFilterMangasStartedType: reader.readLongOrNull(offsets[66]), + libraryFilterMangasUnreadType: reader.readLongOrNull(offsets[67]), + libraryFilterNovelBookMarkedType: reader.readLongOrNull(offsets[68]), + libraryFilterNovelDownloadType: reader.readLongOrNull(offsets[69]), + libraryFilterNovelStartedType: reader.readLongOrNull(offsets[70]), + libraryFilterNovelUnreadType: reader.readLongOrNull(offsets[71]), + libraryLocalSource: reader.readBoolOrNull(offsets[72]), + libraryShowCategoryTabs: reader.readBoolOrNull(offsets[73]), + libraryShowContinueReadingButton: reader.readBoolOrNull(offsets[74]), + libraryShowLanguage: reader.readBoolOrNull(offsets[75]), + libraryShowNumbersOfItems: reader.readBoolOrNull(offsets[76]), mangaExtensionsRepo: reader.readObjectList( - offsets[76], + offsets[78], RepoSchema.deserialize, allOffsets, Repo(), ), - mangaGridSize: reader.readLongOrNull(offsets[77]), + mangaGridSize: reader.readLongOrNull(offsets[79]), mangaHomeDisplayType: _SettingsmangaHomeDisplayTypeValueEnumMap[ - reader.readByteOrNull(offsets[78])] ?? + reader.readByteOrNull(offsets[80])] ?? DisplayType.comfortableGrid, - markEpisodeAsSeenType: reader.readLongOrNull(offsets[79]), - mergeLibraryNavMobile: reader.readBoolOrNull(offsets[80]), - navigationOrder: reader.readStringList(offsets[81]), + markEpisodeAsSeenType: reader.readLongOrNull(offsets[81]), + mergeLibraryNavMobile: reader.readBoolOrNull(offsets[82]), + navigationOrder: reader.readStringList(offsets[83]), novelDisplayType: _SettingsnovelDisplayTypeValueEnumMap[ - reader.readByteOrNull(offsets[82])] ?? + reader.readByteOrNull(offsets[84])] ?? DisplayType.comfortableGrid, novelExtensionsRepo: reader.readObjectList( - offsets[83], + offsets[85], RepoSchema.deserialize, allOffsets, Repo(), ), - novelFontSize: reader.readLongOrNull(offsets[84]), - novelLibraryDownloadedChapters: reader.readBoolOrNull(offsets[86]), - novelLibraryLocalSource: reader.readBoolOrNull(offsets[87]), - novelLibraryShowCategoryTabs: reader.readBoolOrNull(offsets[88]), - novelLibraryShowContinueReadingButton: reader.readBoolOrNull(offsets[89]), - novelLibraryShowLanguage: reader.readBoolOrNull(offsets[90]), - novelLibraryShowNumbersOfItems: reader.readBoolOrNull(offsets[91]), + novelFontSize: reader.readLongOrNull(offsets[86]), + novelLibraryDownloadedChapters: reader.readBoolOrNull(offsets[88]), + novelLibraryLocalSource: reader.readBoolOrNull(offsets[89]), + novelLibraryShowCategoryTabs: reader.readBoolOrNull(offsets[90]), + novelLibraryShowContinueReadingButton: reader.readBoolOrNull(offsets[91]), + novelLibraryShowLanguage: reader.readBoolOrNull(offsets[92]), + novelLibraryShowNumbersOfItems: reader.readBoolOrNull(offsets[93]), novelTextAlign: _SettingsnovelTextAlignValueEnumMap[ - reader.readByteOrNull(offsets[92])] ?? + reader.readByteOrNull(offsets[94])] ?? NovelTextAlign.left, - onlyIncludePinnedSources: reader.readBoolOrNull(offsets[93]), - pagePreloadAmount: reader.readLongOrNull(offsets[94]), + onlyIncludePinnedSources: reader.readBoolOrNull(offsets[95]), + pagePreloadAmount: reader.readLongOrNull(offsets[96]), personalPageModeList: reader.readObjectList( - offsets[95], + offsets[97], PersonalPageModeSchema.deserialize, allOffsets, PersonalPageMode(), ), personalReaderModeList: reader.readObjectList( - offsets[96], + offsets[98], PersonalReaderModeSchema.deserialize, allOffsets, PersonalReaderMode(), ), playerSubtitleSettings: reader.readObjectOrNull( - offsets[97], + offsets[99], PlayerSubtitleSettingsSchema.deserialize, allOffsets, ), - pureBlackDarkMode: reader.readBoolOrNull(offsets[98]), - relativeTimesTamps: reader.readLongOrNull(offsets[99]), - saveAsCBZArchive: reader.readBoolOrNull(offsets[100]), + pureBlackDarkMode: reader.readBoolOrNull(offsets[100]), + relativeTimesTamps: reader.readLongOrNull(offsets[101]), + rpcShowCoverImage: reader.readBoolOrNull(offsets[102]), + rpcShowReadingWatchingProgress: reader.readBoolOrNull(offsets[103]), + rpcShowTitle: reader.readBoolOrNull(offsets[104]), + saveAsCBZArchive: reader.readBoolOrNull(offsets[105]), scaleType: - _SettingsscaleTypeValueEnumMap[reader.readByteOrNull(offsets[101])] ?? + _SettingsscaleTypeValueEnumMap[reader.readByteOrNull(offsets[106])] ?? ScaleType.fitScreen, - showPagesNumber: reader.readBoolOrNull(offsets[102]), + showPagesNumber: reader.readBoolOrNull(offsets[107]), sortChapterList: reader.readObjectList( - offsets[103], + offsets[108], SortChapterSchema.deserialize, allOffsets, SortChapter(), ), sortLibraryAnime: reader.readObjectOrNull( - offsets[104], + offsets[109], SortLibraryMangaSchema.deserialize, allOffsets, ), sortLibraryManga: reader.readObjectOrNull( - offsets[105], + offsets[110], SortLibraryMangaSchema.deserialize, allOffsets, ), sortLibraryNovel: reader.readObjectOrNull( - offsets[106], + offsets[111], SortLibraryMangaSchema.deserialize, allOffsets, ), - startDatebackup: reader.readLongOrNull(offsets[107]), - themeIsDark: reader.readBoolOrNull(offsets[108]), - updateProgressAfterReading: reader.readBoolOrNull(offsets[109]), - useLibass: reader.readBoolOrNull(offsets[110]), - usePageTapZones: reader.readBoolOrNull(offsets[111]), - userAgent: reader.readStringOrNull(offsets[112]), + startDatebackup: reader.readLongOrNull(offsets[112]), + themeIsDark: reader.readBoolOrNull(offsets[113]), + updateProgressAfterReading: reader.readBoolOrNull(offsets[114]), + useLibass: reader.readBoolOrNull(offsets[115]), + usePageTapZones: reader.readBoolOrNull(offsets[116]), + userAgent: reader.readStringOrNull(offsets[117]), ); object.chapterFilterBookmarkedList = reader.readObjectList( @@ -1443,17 +1478,17 @@ Settings _settingsDeserialize( allOffsets, ); object.filterScanlatorList = reader.readObjectList( - offsets[47], + offsets[48], FilterScanlatorSchema.deserialize, allOffsets, FilterScanlator(), ); object.locale = reader.readObjectOrNull( - offsets[75], + offsets[77], L10nLocaleSchema.deserialize, allOffsets, ); - object.novelGridSize = reader.readLongOrNull(offsets[85]); + object.novelGridSize = reader.readLongOrNull(offsets[87]); return object; } @@ -1618,36 +1653,36 @@ P _settingsDeserializeProp

( case 46: return (reader.readBoolOrNull(offset)) as P; case 47: + return (reader.readBoolOrNull(offset)) as P; + case 48: return (reader.readObjectList( offset, FilterScanlatorSchema.deserialize, allOffsets, FilterScanlator(), )) as P; - case 48: - return (reader.readDoubleOrNull(offset)) as P; case 49: - return (reader.readLongOrNull(offset)) as P; + return (reader.readDoubleOrNull(offset)) as P; case 50: - return (reader.readBoolOrNull(offset)) as P; + return (reader.readLongOrNull(offset)) as P; case 51: return (reader.readBoolOrNull(offset)) as P; case 52: return (reader.readBoolOrNull(offset)) as P; case 53: - return (reader.readStringList(offset)) as P; - case 54: - return (reader.readStringOrNull(offset)) as P; - case 55: return (reader.readBoolOrNull(offset)) as P; + case 54: + return (reader.readBoolOrNull(offset)) as P; + case 55: + return (reader.readStringList(offset)) as P; case 56: return (reader.readStringOrNull(offset)) as P; case 57: return (reader.readBoolOrNull(offset)) as P; case 58: - return (reader.readLongOrNull(offset)) as P; + return (reader.readStringOrNull(offset)) as P; case 59: - return (reader.readLongOrNull(offset)) as P; + return (reader.readBoolOrNull(offset)) as P; case 60: return (reader.readLongOrNull(offset)) as P; case 61: @@ -1669,9 +1704,9 @@ P _settingsDeserializeProp

( case 69: return (reader.readLongOrNull(offset)) as P; case 70: - return (reader.readBoolOrNull(offset)) as P; + return (reader.readLongOrNull(offset)) as P; case 71: - return (reader.readBoolOrNull(offset)) as P; + return (reader.readLongOrNull(offset)) as P; case 72: return (reader.readBoolOrNull(offset)) as P; case 73: @@ -1679,49 +1714,49 @@ P _settingsDeserializeProp

( case 74: return (reader.readBoolOrNull(offset)) as P; case 75: + return (reader.readBoolOrNull(offset)) as P; + case 76: + return (reader.readBoolOrNull(offset)) as P; + case 77: return (reader.readObjectOrNull( offset, L10nLocaleSchema.deserialize, allOffsets, )) as P; - case 76: + case 78: return (reader.readObjectList( offset, RepoSchema.deserialize, allOffsets, Repo(), )) as P; - case 77: - return (reader.readLongOrNull(offset)) as P; - case 78: - return (_SettingsmangaHomeDisplayTypeValueEnumMap[ - reader.readByteOrNull(offset)] ?? - DisplayType.comfortableGrid) as P; case 79: return (reader.readLongOrNull(offset)) as P; case 80: - return (reader.readBoolOrNull(offset)) as P; + return (_SettingsmangaHomeDisplayTypeValueEnumMap[ + reader.readByteOrNull(offset)] ?? + DisplayType.comfortableGrid) as P; case 81: - return (reader.readStringList(offset)) as P; + return (reader.readLongOrNull(offset)) as P; case 82: + return (reader.readBoolOrNull(offset)) as P; + case 83: + return (reader.readStringList(offset)) as P; + case 84: return (_SettingsnovelDisplayTypeValueEnumMap[ reader.readByteOrNull(offset)] ?? DisplayType.comfortableGrid) as P; - case 83: + case 85: return (reader.readObjectList( offset, RepoSchema.deserialize, allOffsets, Repo(), )) as P; - case 84: - return (reader.readLongOrNull(offset)) as P; - case 85: - return (reader.readLongOrNull(offset)) as P; case 86: - return (reader.readBoolOrNull(offset)) as P; + return (reader.readLongOrNull(offset)) as P; case 87: - return (reader.readBoolOrNull(offset)) as P; + return (reader.readLongOrNull(offset)) as P; case 88: return (reader.readBoolOrNull(offset)) as P; case 89: @@ -1731,80 +1766,90 @@ P _settingsDeserializeProp

( case 91: return (reader.readBoolOrNull(offset)) as P; case 92: - return (_SettingsnovelTextAlignValueEnumMap[ - reader.readByteOrNull(offset)] ?? - NovelTextAlign.left) as P; + return (reader.readBoolOrNull(offset)) as P; case 93: return (reader.readBoolOrNull(offset)) as P; case 94: - return (reader.readLongOrNull(offset)) as P; + return (_SettingsnovelTextAlignValueEnumMap[ + reader.readByteOrNull(offset)] ?? + NovelTextAlign.left) as P; case 95: + return (reader.readBoolOrNull(offset)) as P; + case 96: + return (reader.readLongOrNull(offset)) as P; + case 97: return (reader.readObjectList( offset, PersonalPageModeSchema.deserialize, allOffsets, PersonalPageMode(), )) as P; - case 96: + case 98: return (reader.readObjectList( offset, PersonalReaderModeSchema.deserialize, allOffsets, PersonalReaderMode(), )) as P; - case 97: + case 99: return (reader.readObjectOrNull( offset, PlayerSubtitleSettingsSchema.deserialize, allOffsets, )) as P; - case 98: - return (reader.readBoolOrNull(offset)) as P; - case 99: - return (reader.readLongOrNull(offset)) as P; case 100: return (reader.readBoolOrNull(offset)) as P; case 101: - return (_SettingsscaleTypeValueEnumMap[reader.readByteOrNull(offset)] ?? - ScaleType.fitScreen) as P; + return (reader.readLongOrNull(offset)) as P; case 102: return (reader.readBoolOrNull(offset)) as P; case 103: + return (reader.readBoolOrNull(offset)) as P; + case 104: + return (reader.readBoolOrNull(offset)) as P; + case 105: + return (reader.readBoolOrNull(offset)) as P; + case 106: + return (_SettingsscaleTypeValueEnumMap[reader.readByteOrNull(offset)] ?? + ScaleType.fitScreen) as P; + case 107: + return (reader.readBoolOrNull(offset)) as P; + case 108: return (reader.readObjectList( offset, SortChapterSchema.deserialize, allOffsets, SortChapter(), )) as P; - case 104: - return (reader.readObjectOrNull( - offset, - SortLibraryMangaSchema.deserialize, - allOffsets, - )) as P; - case 105: - return (reader.readObjectOrNull( - offset, - SortLibraryMangaSchema.deserialize, - allOffsets, - )) as P; - case 106: - return (reader.readObjectOrNull( - offset, - SortLibraryMangaSchema.deserialize, - allOffsets, - )) as P; - case 107: - return (reader.readLongOrNull(offset)) as P; - case 108: - return (reader.readBoolOrNull(offset)) as P; case 109: - return (reader.readBoolOrNull(offset)) as P; + return (reader.readObjectOrNull( + offset, + SortLibraryMangaSchema.deserialize, + allOffsets, + )) as P; case 110: - return (reader.readBoolOrNull(offset)) as P; + return (reader.readObjectOrNull( + offset, + SortLibraryMangaSchema.deserialize, + allOffsets, + )) as P; case 111: - return (reader.readBoolOrNull(offset)) as P; + return (reader.readObjectOrNull( + offset, + SortLibraryMangaSchema.deserialize, + allOffsets, + )) as P; case 112: + return (reader.readLongOrNull(offset)) as P; + case 113: + return (reader.readBoolOrNull(offset)) as P; + case 114: + return (reader.readBoolOrNull(offset)) as P; + case 115: + return (reader.readBoolOrNull(offset)) as P; + case 116: + return (reader.readBoolOrNull(offset)) as P; + case 117: return (reader.readStringOrNull(offset)) as P; default: throw IsarError('Unknown property with id $propertyId'); @@ -5313,6 +5358,34 @@ extension SettingsQueryFilter }); } + QueryBuilder + enableDiscordRpcIsNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNull( + property: r'enableDiscordRpc', + )); + }); + } + + QueryBuilder + enableDiscordRpcIsNotNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNotNull( + property: r'enableDiscordRpc', + )); + }); + } + + QueryBuilder + enableDiscordRpcEqualTo(bool? value) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'enableDiscordRpc', + value: value, + )); + }); + } + QueryBuilder filterScanlatorListIsNull() { return QueryBuilder.apply(this, (query) { @@ -5662,6 +5735,34 @@ extension SettingsQueryFilter }); } + QueryBuilder + hideDiscordRpcInIncognitoIsNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNull( + property: r'hideDiscordRpcInIncognito', + )); + }); + } + + QueryBuilder + hideDiscordRpcInIncognitoIsNotNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNotNull( + property: r'hideDiscordRpcInIncognito', + )); + }); + } + + QueryBuilder + hideDiscordRpcInIncognitoEqualTo(bool? value) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'hideDiscordRpcInIncognito', + value: value, + )); + }); + } + QueryBuilder hideItemsIsNull() { return QueryBuilder.apply(this, (query) { return query.addFilterCondition(const FilterCondition.isNull( @@ -8921,6 +9022,89 @@ extension SettingsQueryFilter }); } + QueryBuilder + rpcShowCoverImageIsNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNull( + property: r'rpcShowCoverImage', + )); + }); + } + + QueryBuilder + rpcShowCoverImageIsNotNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNotNull( + property: r'rpcShowCoverImage', + )); + }); + } + + QueryBuilder + rpcShowCoverImageEqualTo(bool? value) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'rpcShowCoverImage', + value: value, + )); + }); + } + + QueryBuilder + rpcShowReadingWatchingProgressIsNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNull( + property: r'rpcShowReadingWatchingProgress', + )); + }); + } + + QueryBuilder + rpcShowReadingWatchingProgressIsNotNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNotNull( + property: r'rpcShowReadingWatchingProgress', + )); + }); + } + + QueryBuilder + rpcShowReadingWatchingProgressEqualTo(bool? value) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'rpcShowReadingWatchingProgress', + value: value, + )); + }); + } + + QueryBuilder rpcShowTitleIsNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNull( + property: r'rpcShowTitle', + )); + }); + } + + QueryBuilder + rpcShowTitleIsNotNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(const FilterCondition.isNotNull( + property: r'rpcShowTitle', + )); + }); + } + + QueryBuilder rpcShowTitleEqualTo( + bool? value) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'rpcShowTitle', + value: value, + )); + }); + } + QueryBuilder saveAsCBZArchiveIsNull() { return QueryBuilder.apply(this, (query) { @@ -10204,6 +10388,18 @@ extension SettingsQuerySortBy on QueryBuilder { }); } + QueryBuilder sortByEnableDiscordRpc() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'enableDiscordRpc', Sort.asc); + }); + } + + QueryBuilder sortByEnableDiscordRpcDesc() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'enableDiscordRpc', Sort.desc); + }); + } + QueryBuilder sortByFlexColorSchemeBlendLevel() { return QueryBuilder.apply(this, (query) { @@ -10267,6 +10463,20 @@ extension SettingsQuerySortBy on QueryBuilder { }); } + QueryBuilder + sortByHideDiscordRpcInIncognito() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'hideDiscordRpcInIncognito', Sort.asc); + }); + } + + QueryBuilder + sortByHideDiscordRpcInIncognitoDesc() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'hideDiscordRpcInIncognito', Sort.desc); + }); + } + QueryBuilder sortByHwdecMode() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'hwdecMode', Sort.asc); @@ -10791,6 +11001,44 @@ extension SettingsQuerySortBy on QueryBuilder { }); } + QueryBuilder sortByRpcShowCoverImage() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'rpcShowCoverImage', Sort.asc); + }); + } + + QueryBuilder sortByRpcShowCoverImageDesc() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'rpcShowCoverImage', Sort.desc); + }); + } + + QueryBuilder + sortByRpcShowReadingWatchingProgress() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'rpcShowReadingWatchingProgress', Sort.asc); + }); + } + + QueryBuilder + sortByRpcShowReadingWatchingProgressDesc() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'rpcShowReadingWatchingProgress', Sort.desc); + }); + } + + QueryBuilder sortByRpcShowTitle() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'rpcShowTitle', Sort.asc); + }); + } + + QueryBuilder sortByRpcShowTitleDesc() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'rpcShowTitle', Sort.desc); + }); + } + QueryBuilder sortBySaveAsCBZArchive() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'saveAsCBZArchive', Sort.asc); @@ -11373,6 +11621,18 @@ extension SettingsQuerySortThenBy }); } + QueryBuilder thenByEnableDiscordRpc() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'enableDiscordRpc', Sort.asc); + }); + } + + QueryBuilder thenByEnableDiscordRpcDesc() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'enableDiscordRpc', Sort.desc); + }); + } + QueryBuilder thenByFlexColorSchemeBlendLevel() { return QueryBuilder.apply(this, (query) { @@ -11436,6 +11696,20 @@ extension SettingsQuerySortThenBy }); } + QueryBuilder + thenByHideDiscordRpcInIncognito() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'hideDiscordRpcInIncognito', Sort.asc); + }); + } + + QueryBuilder + thenByHideDiscordRpcInIncognitoDesc() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'hideDiscordRpcInIncognito', Sort.desc); + }); + } + QueryBuilder thenByHwdecMode() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'hwdecMode', Sort.asc); @@ -11972,6 +12246,44 @@ extension SettingsQuerySortThenBy }); } + QueryBuilder thenByRpcShowCoverImage() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'rpcShowCoverImage', Sort.asc); + }); + } + + QueryBuilder thenByRpcShowCoverImageDesc() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'rpcShowCoverImage', Sort.desc); + }); + } + + QueryBuilder + thenByRpcShowReadingWatchingProgress() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'rpcShowReadingWatchingProgress', Sort.asc); + }); + } + + QueryBuilder + thenByRpcShowReadingWatchingProgressDesc() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'rpcShowReadingWatchingProgress', Sort.desc); + }); + } + + QueryBuilder thenByRpcShowTitle() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'rpcShowTitle', Sort.asc); + }); + } + + QueryBuilder thenByRpcShowTitleDesc() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'rpcShowTitle', Sort.desc); + }); + } + QueryBuilder thenBySaveAsCBZArchive() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'saveAsCBZArchive', Sort.asc); @@ -12330,6 +12642,12 @@ extension SettingsQueryWhereDistinct }); } + QueryBuilder distinctByEnableDiscordRpc() { + return QueryBuilder.apply(this, (query) { + return query.addDistinctBy(r'enableDiscordRpc'); + }); + } + QueryBuilder distinctByFlexColorSchemeBlendLevel() { return QueryBuilder.apply(this, (query) { @@ -12361,6 +12679,13 @@ extension SettingsQueryWhereDistinct }); } + QueryBuilder + distinctByHideDiscordRpcInIncognito() { + return QueryBuilder.apply(this, (query) { + return query.addDistinctBy(r'hideDiscordRpcInIncognito'); + }); + } + QueryBuilder distinctByHideItems() { return QueryBuilder.apply(this, (query) { return query.addDistinctBy(r'hideItems'); @@ -12635,6 +12960,25 @@ extension SettingsQueryWhereDistinct }); } + QueryBuilder distinctByRpcShowCoverImage() { + return QueryBuilder.apply(this, (query) { + return query.addDistinctBy(r'rpcShowCoverImage'); + }); + } + + QueryBuilder + distinctByRpcShowReadingWatchingProgress() { + return QueryBuilder.apply(this, (query) { + return query.addDistinctBy(r'rpcShowReadingWatchingProgress'); + }); + } + + QueryBuilder distinctByRpcShowTitle() { + return QueryBuilder.apply(this, (query) { + return query.addDistinctBy(r'rpcShowTitle'); + }); + } + QueryBuilder distinctBySaveAsCBZArchive() { return QueryBuilder.apply(this, (query) { return query.addDistinctBy(r'saveAsCBZArchive'); @@ -13015,6 +13359,12 @@ extension SettingsQueryProperty }); } + QueryBuilder enableDiscordRpcProperty() { + return QueryBuilder.apply(this, (query) { + return query.addPropertyName(r'enableDiscordRpc'); + }); + } + QueryBuilder?, QQueryOperations> filterScanlatorListProperty() { return QueryBuilder.apply(this, (query) { @@ -13054,6 +13404,13 @@ extension SettingsQueryProperty }); } + QueryBuilder + hideDiscordRpcInIncognitoProperty() { + return QueryBuilder.apply(this, (query) { + return query.addPropertyName(r'hideDiscordRpcInIncognito'); + }); + } + QueryBuilder?, QQueryOperations> hideItemsProperty() { return QueryBuilder.apply(this, (query) { return query.addPropertyName(r'hideItems'); @@ -13372,6 +13729,25 @@ extension SettingsQueryProperty }); } + QueryBuilder rpcShowCoverImageProperty() { + return QueryBuilder.apply(this, (query) { + return query.addPropertyName(r'rpcShowCoverImage'); + }); + } + + QueryBuilder + rpcShowReadingWatchingProgressProperty() { + return QueryBuilder.apply(this, (query) { + return query.addPropertyName(r'rpcShowReadingWatchingProgress'); + }); + } + + QueryBuilder rpcShowTitleProperty() { + return QueryBuilder.apply(this, (query) { + return query.addPropertyName(r'rpcShowTitle'); + }); + } + QueryBuilder saveAsCBZArchiveProperty() { return QueryBuilder.apply(this, (query) { return query.addPropertyName(r'saveAsCBZArchive'); diff --git a/lib/modules/anime/anime_player_view.dart b/lib/modules/anime/anime_player_view.dart index e7dabb39..59604caa 100644 --- a/lib/modules/anime/anime_player_view.dart +++ b/lib/modules/anime/anime_player_view.dart @@ -213,6 +213,7 @@ class _AnimeStreamPageState extends riv.ConsumerState bool _hasEndingSkip = false; bool _initSubtitleAndAudio = true; bool _includeSubtitles = false; + int lastRpcTimestampUpdate = DateTime.now().millisecondsSinceEpoch; late final StreamSubscription _currentPositionSub; @@ -221,6 +222,10 @@ class _AnimeStreamPageState extends riv.ConsumerState .duration .listen((duration) { _currentTotalDuration.value = duration; + discordRpc.startChapterTimestamp( + _currentPosition.value.inMilliseconds, + duration.inMilliseconds, + ); }); bool get hasNextEpisode => _streamController.getEpisodeIndex().$1 != 0; @@ -305,6 +310,14 @@ class _AnimeStreamPageState extends riv.ConsumerState if (_skipPhase.value != newPhase) _skipPhase.value = newPhase; } + void _updateRpcTimestamp() { + final now = DateTime.now().millisecondsSinceEpoch; + if (lastRpcTimestampUpdate + 10000 < now) { + discordRpc.updateChapterTimestamp(_currentPosition.value.inMilliseconds); + lastRpcTimestampUpdate = now; + } + } + @override void initState() { super.initState(); @@ -338,6 +351,8 @@ class _AnimeStreamPageState extends riv.ConsumerState _setPlaybackSpeed(ref.read(defaultPlayBackSpeedStateProvider)); if (ref.read(enableAniSkipStateProvider)) _initAniSkip(); }); + discordRpc.showChapterDetails(ref, widget.episode); + _currentPosition.addListener(_updateRpcTimestamp); WidgetsBinding.instance.addObserver(this); } @@ -404,6 +419,7 @@ class _AnimeStreamPageState extends riv.ConsumerState @override void dispose() { + _currentPosition.removeListener(_updateRpcTimestamp); WidgetsBinding.instance.removeObserver(this); _setCurrentPosition(true); _player.dispose(); @@ -422,6 +438,8 @@ class _AnimeStreamPageState extends riv.ConsumerState _setLandscapeMode(false); } _skipPhase.dispose(); + discordRpc.showIdleText(); + discordRpc.showOriginalTimestamp(); _currentPosition.dispose(); super.dispose(); } @@ -1113,24 +1131,6 @@ class _AnimeStreamPageState extends riv.ConsumerState ), ), ), - Flexible( - fit: FlexFit.tight, - child: ValueListenableBuilder( - valueListenable: _isDoubleSpeed, - builder: (context, snapshot, _) { - return Text.rich( - TextSpan( - children: snapshot - ? [ - WidgetSpan(child: Icon(Icons.fast_forward)), - TextSpan(text: " 2X"), - ] - : [], - ), - ); - }, - ), - ), Row( children: [ btnToShowChapterListDialog( @@ -1272,6 +1272,46 @@ class _AnimeStreamPageState extends riv.ConsumerState height: context.height(1), resumeUponEnteringForegroundMode: true, ), + Stack( + alignment: AlignmentDirectional.center, + children: [ + Positioned( + top: 30, + child: ValueListenableBuilder( + valueListenable: _isDoubleSpeed, + builder: (context, snapshot, _) { + return Text.rich( + textAlign: TextAlign.center, + TextSpan( + style: TextStyle( + background: Paint() + ..color = Theme.of(context).scaffoldBackgroundColor + ..strokeWidth = 30.0 + ..strokeJoin = StrokeJoin.round + ..style = PaintingStyle.stroke, + ), + children: snapshot + ? [ + TextSpan( + text: " 2X ", + style: const TextStyle( + fontSize: 16, + fontWeight: FontWeight.bold, + ), + ), + WidgetSpan( + alignment: PlaceholderAlignment.middle, + child: Icon(Icons.fast_forward), + ), + ] + : [], + ), + ); + }, + ), + ), + ], + ), if (enableAniSkip && (_hasOpeningSkip || _hasEndingSkip)) Positioned( right: 0, diff --git a/lib/modules/anime/widgets/custom_seekbar.dart b/lib/modules/anime/widgets/custom_seekbar.dart index 6fd7f9be..38bf4e01 100644 --- a/lib/modules/anime/widgets/custom_seekbar.dart +++ b/lib/modules/anime/widgets/custom_seekbar.dart @@ -101,6 +101,7 @@ class CustomSeekBarState extends State { milliseconds: value.toInt() - position.inMilliseconds, ), ); + widget.player.seek(Duration(milliseconds: value.toInt())); if (mounted) { setState(() { tempPosition = Duration(milliseconds: value.toInt()); diff --git a/lib/modules/main_view/main_screen.dart b/lib/modules/main_view/main_screen.dart index 2295a469..e5716f6a 100644 --- a/lib/modules/main_view/main_screen.dart +++ b/lib/modules/main_view/main_screen.dart @@ -96,6 +96,8 @@ class _MainScreenState extends ConsumerState { _initializeProviders(); } }); + + discordRpc.connect(ref); } void _initializeTimers() { @@ -158,6 +160,7 @@ class _MainScreenState extends ConsumerState { void dispose() { _backupTimer?.cancel(); _syncTimer?.cancel(); + discordRpc.disconnect(); super.dispose(); } diff --git a/lib/modules/manga/reader/reader_view.dart b/lib/modules/manga/reader/reader_view.dart index 8888c73f..081a3347 100644 --- a/lib/modules/manga/reader/reader_view.dart +++ b/lib/modules/manga/reader/reader_view.dart @@ -163,6 +163,7 @@ class _MangaChapterPageGalleryState overlays: SystemUiOverlay.values, ); } + discordRpc.showIdleText(); super.dispose(); } @@ -221,6 +222,7 @@ class _MangaChapterPageGalleryState _animation.addListener(() => _photoViewController.scale = _animation.value); _itemPositionsListener.itemPositions.addListener(_readProgressListener); _initCurrentIndex(); + discordRpc.showChapterDetails(ref, chapter); WidgetsBinding.instance.addObserver(this); } diff --git a/lib/modules/more/settings/general/general_screen.dart b/lib/modules/more/settings/general/general_screen.dart index dbccf74c..c7eb5b58 100644 --- a/lib/modules/more/settings/general/general_screen.dart +++ b/lib/modules/more/settings/general/general_screen.dart @@ -1,10 +1,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:mangayomi/main.dart'; +import 'package:mangayomi/modules/more/settings/general/providers/general_state_provider.dart'; import 'package:mangayomi/providers/l10n_providers.dart'; -import 'package:mangayomi/utils/extensions/build_context_extensions.dart'; -import 'package:mangayomi/utils/language.dart'; -import 'package:mangayomi/l10n/generated/app_localizations.dart'; -import 'package:super_sliver_list/super_sliver_list.dart'; class GeneralScreen extends ConsumerWidget { const GeneralScreen({super.key}); @@ -12,70 +10,63 @@ class GeneralScreen extends ConsumerWidget { @override Widget build(BuildContext context, WidgetRef ref) { final l10n = l10nLocalizations(context); - final l10nLocale = ref.watch(l10nLocaleStateProvider); + final enableDiscordRpc = ref.watch(enableDiscordRpcStateProvider); + final hideDiscordRpcInIncognito = ref.watch( + hideDiscordRpcInIncognitoStateProvider, + ); + final rpcShowReadingWatchingProgress = ref.watch( + rpcShowReadingWatchingProgressStateProvider, + ); + final rpcShowTitleState = ref.watch(rpcShowTitleStateProvider); + final rpcShowCoverImage = ref.watch(rpcShowCoverImageStateProvider); return Scaffold( appBar: AppBar(title: Text(l10n!.general)), body: SingleChildScrollView( child: Column( children: [ - ListTile( - onTap: () { - showDialog( - context: context, - builder: (context) { - return AlertDialog( - title: Text(l10n.app_language), - content: SizedBox( - width: context.width(0.8), - child: SuperListView.builder( - shrinkWrap: true, - itemCount: AppLocalizations.supportedLocales.length, - itemBuilder: (context, index) { - final locale = - AppLocalizations.supportedLocales[index]; - return RadioListTile( - dense: true, - contentPadding: const EdgeInsets.all(0), - value: locale, - groupValue: l10nLocale, - onChanged: (value) { - ref - .read(l10nLocaleStateProvider.notifier) - .setLocale(locale); - Navigator.pop(context); - }, - title: Text( - completeLanguageName(locale.toLanguageTag()), - ), - ); - }, - ), - ), - actions: [ - Row( - mainAxisAlignment: MainAxisAlignment.end, - children: [ - TextButton( - onPressed: () async { - Navigator.pop(context); - }, - child: Text( - l10n.cancel, - style: TextStyle(color: context.primaryColor), - ), - ), - ], - ), - ], - ); - }, - ); + SwitchListTile( + value: enableDiscordRpc, + title: Text(l10n.enable_discord_rpc), + onChanged: (value) { + ref.read(enableDiscordRpcStateProvider.notifier).set(value); + if (value) { + discordRpc.connect(ref); + } else { + discordRpc.disconnect(); + } + }, + ), + SwitchListTile( + value: hideDiscordRpcInIncognito, + title: Text(l10n.hide_discord_rpc_incognito), + onChanged: (value) { + ref + .read(hideDiscordRpcInIncognitoStateProvider.notifier) + .set(value); + }, + ), + SwitchListTile( + value: rpcShowReadingWatchingProgress, + title: Text(l10n.rpc_show_reading_watching_progress), + onChanged: (value) { + ref + .read(rpcShowReadingWatchingProgressStateProvider.notifier) + .set(value); + }, + ), + SwitchListTile( + value: rpcShowTitleState, + title: Text(l10n.rpc_show_title), + onChanged: (value) { + ref.read(rpcShowTitleStateProvider.notifier).set(value); + }, + ), + SwitchListTile( + value: rpcShowCoverImage, + title: Text(l10n.rpc_show_cover_image), + onChanged: (value) { + ref.read(rpcShowCoverImageStateProvider.notifier).set(value); }, - title: Text(l10n.app_language), - subtitle: Text( - completeLanguageName(l10nLocale.toLanguageTag()), - style: TextStyle(fontSize: 11, color: context.secondaryColor), - ), ), ], ), diff --git a/lib/modules/more/settings/general/providers/general_state_provider.dart b/lib/modules/more/settings/general/providers/general_state_provider.dart new file mode 100644 index 00000000..7faba34e --- /dev/null +++ b/lib/modules/more/settings/general/providers/general_state_provider.dart @@ -0,0 +1,87 @@ +import 'package:mangayomi/main.dart'; +import 'package:mangayomi/models/settings.dart'; +import 'package:riverpod_annotation/riverpod_annotation.dart'; +part 'general_state_provider.g.dart'; + +@riverpod +class EnableDiscordRpcState extends _$EnableDiscordRpcState { + @override + bool build() { + return isar.settings.getSync(227)!.enableDiscordRpc ?? true; + } + + void set(bool value) { + final settings = isar.settings.getSync(227); + state = value; + isar.writeTxnSync( + () => isar.settings.putSync(settings!..enableDiscordRpc = value), + ); + } +} + +@riverpod +class HideDiscordRpcInIncognitoState extends _$HideDiscordRpcInIncognitoState { + @override + bool build() { + return isar.settings.getSync(227)!.hideDiscordRpcInIncognito ?? true; + } + + void set(bool value) { + final settings = isar.settings.getSync(227); + state = value; + isar.writeTxnSync( + () => isar.settings.putSync(settings!..hideDiscordRpcInIncognito = value), + ); + } +} + +@riverpod +class RpcShowReadingWatchingProgressState + extends _$RpcShowReadingWatchingProgressState { + @override + bool build() { + return isar.settings.getSync(227)!.rpcShowReadingWatchingProgress ?? true; + } + + void set(bool value) { + final settings = isar.settings.getSync(227); + state = value; + isar.writeTxnSync( + () => isar.settings.putSync( + settings!..rpcShowReadingWatchingProgress = value, + ), + ); + } +} + +@riverpod +class RpcShowTitleState extends _$RpcShowTitleState { + @override + bool build() { + return isar.settings.getSync(227)!.rpcShowTitle ?? true; + } + + void set(bool value) { + final settings = isar.settings.getSync(227); + state = value; + isar.writeTxnSync( + () => isar.settings.putSync(settings!..rpcShowTitle = value), + ); + } +} + +@riverpod +class RpcShowCoverImageState extends _$RpcShowCoverImageState { + @override + bool build() { + return isar.settings.getSync(227)!.rpcShowCoverImage ?? true; + } + + void set(bool value) { + final settings = isar.settings.getSync(227); + state = value; + isar.writeTxnSync( + () => isar.settings.putSync(settings!..rpcShowCoverImage = value), + ); + } +} diff --git a/lib/modules/more/settings/general/providers/general_state_provider.g.dart b/lib/modules/more/settings/general/providers/general_state_provider.g.dart new file mode 100644 index 00000000..8e33c23f --- /dev/null +++ b/lib/modules/more/settings/general/providers/general_state_provider.g.dart @@ -0,0 +1,94 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'general_state_provider.dart'; + +// ************************************************************************** +// RiverpodGenerator +// ************************************************************************** + +String _$enableDiscordRpcStateHash() => + r'bc134787a33f362087befd5de85692812659faa0'; + +/// See also [EnableDiscordRpcState]. +@ProviderFor(EnableDiscordRpcState) +final enableDiscordRpcStateProvider = + AutoDisposeNotifierProvider.internal( + EnableDiscordRpcState.new, + name: r'enableDiscordRpcStateProvider', + debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') + ? null + : _$enableDiscordRpcStateHash, + dependencies: null, + allTransitiveDependencies: null, +); + +typedef _$EnableDiscordRpcState = AutoDisposeNotifier; +String _$hideDiscordRpcInIncognitoStateHash() => + r'8e45104c34b1255b7a3d4a6f182bf43be9e2b93d'; + +/// See also [HideDiscordRpcInIncognitoState]. +@ProviderFor(HideDiscordRpcInIncognitoState) +final hideDiscordRpcInIncognitoStateProvider = + AutoDisposeNotifierProvider.internal( + HideDiscordRpcInIncognitoState.new, + name: r'hideDiscordRpcInIncognitoStateProvider', + debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') + ? null + : _$hideDiscordRpcInIncognitoStateHash, + dependencies: null, + allTransitiveDependencies: null, +); + +typedef _$HideDiscordRpcInIncognitoState = AutoDisposeNotifier; +String _$rpcShowReadingWatchingProgressStateHash() => + r'b4000c10234ce9070b44b535e9d10d16e6b7c0ec'; + +/// See also [RpcShowReadingWatchingProgressState]. +@ProviderFor(RpcShowReadingWatchingProgressState) +final rpcShowReadingWatchingProgressStateProvider = AutoDisposeNotifierProvider< + RpcShowReadingWatchingProgressState, bool>.internal( + RpcShowReadingWatchingProgressState.new, + name: r'rpcShowReadingWatchingProgressStateProvider', + debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') + ? null + : _$rpcShowReadingWatchingProgressStateHash, + dependencies: null, + allTransitiveDependencies: null, +); + +typedef _$RpcShowReadingWatchingProgressState = AutoDisposeNotifier; +String _$rpcShowTitleStateHash() => r'9d7005af8968f61872fcc37979f5c54b745ffe65'; + +/// See also [RpcShowTitleState]. +@ProviderFor(RpcShowTitleState) +final rpcShowTitleStateProvider = + AutoDisposeNotifierProvider.internal( + RpcShowTitleState.new, + name: r'rpcShowTitleStateProvider', + debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') + ? null + : _$rpcShowTitleStateHash, + dependencies: null, + allTransitiveDependencies: null, +); + +typedef _$RpcShowTitleState = AutoDisposeNotifier; +String _$rpcShowCoverImageStateHash() => + r'6ce1c61be44c0a6315fbb51a45ac6e47c3e49b33'; + +/// See also [RpcShowCoverImageState]. +@ProviderFor(RpcShowCoverImageState) +final rpcShowCoverImageStateProvider = + AutoDisposeNotifierProvider.internal( + RpcShowCoverImageState.new, + name: r'rpcShowCoverImageStateProvider', + debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') + ? null + : _$rpcShowCoverImageStateHash, + dependencies: null, + allTransitiveDependencies: null, +); + +typedef _$RpcShowCoverImageState = AutoDisposeNotifier; +// ignore_for_file: type=lint +// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member, deprecated_member_use_from_same_package diff --git a/lib/modules/more/settings/settings_screen.dart b/lib/modules/more/settings/settings_screen.dart index 10a219ca..8aec9eba 100644 --- a/lib/modules/more/settings/settings_screen.dart +++ b/lib/modules/more/settings/settings_screen.dart @@ -14,6 +14,11 @@ class SettingsScreen extends StatelessWidget { body: SingleChildScrollView( child: Column( children: [ + ListTileWidget( + title: l10n.general, + icon: Icons.settings, + onTap: () => context.push('/general'), + ), ListTileWidget( title: l10n.appearance, subtitle: l10n.appearance_subtitle, diff --git a/lib/modules/more/widgets/incognito_mode_widget.dart b/lib/modules/more/widgets/incognito_mode_widget.dart index 264e61fc..3534ce36 100644 --- a/lib/modules/more/widgets/incognito_mode_widget.dart +++ b/lib/modules/more/widgets/incognito_mode_widget.dart @@ -1,7 +1,9 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:mangayomi/main.dart'; import 'package:mangayomi/modules/more/providers/incognito_mode_state_provider.dart'; +import 'package:mangayomi/modules/more/settings/general/providers/general_state_provider.dart'; import 'package:mangayomi/modules/more/widgets/list_tile_widget.dart'; import 'package:mangayomi/providers/l10n_providers.dart'; @@ -12,12 +14,17 @@ class IncognitoModeWidget extends ConsumerWidget { Widget build(BuildContext context, WidgetRef ref) { final l10n = l10nLocalizations(context); final incognitoMode = ref.watch(incognitoModeStateProvider); + final hideDiscordRpcInIncognito = ref.watch( + hideDiscordRpcInIncognitoStateProvider, + ); return ListTileWidget( onTap: () { if (incognitoMode == true) { ref.read(incognitoModeStateProvider.notifier).setIncognitoMode(false); + if (hideDiscordRpcInIncognito) discordRpc.connect(ref); } else { ref.read(incognitoModeStateProvider.notifier).setIncognitoMode(true); + if (hideDiscordRpcInIncognito) discordRpc.disconnect(); } }, icon: CupertinoIcons.eyeglasses, @@ -27,6 +34,13 @@ class IncognitoModeWidget extends ConsumerWidget { value: incognitoMode, onChanged: (value) { ref.read(incognitoModeStateProvider.notifier).setIncognitoMode(value); + if (hideDiscordRpcInIncognito) { + if (value) { + discordRpc.disconnect(); + } else { + discordRpc.connect(ref); + } + } }, ), ); diff --git a/lib/modules/novel/novel_reader_view.dart b/lib/modules/novel/novel_reader_view.dart index e176e7b7..6384e778 100644 --- a/lib/modules/novel/novel_reader_view.dart +++ b/lib/modules/novel/novel_reader_view.dart @@ -95,6 +95,7 @@ class _NovelWebViewState extends ConsumerState overlays: SystemUiOverlay.values, ); } + discordRpc.showIdleText(); super.dispose(); } @@ -113,6 +114,7 @@ class _NovelWebViewState extends ConsumerState fontSize = initFontSize; }); }); + discordRpc.showChapterDetails(ref, chapter); } late bool _isBookmarked = _readerController.getChapterBookmarked(); diff --git a/lib/utils/discord_rpc.dart b/lib/utils/discord_rpc.dart new file mode 100644 index 00000000..6b821cd4 --- /dev/null +++ b/lib/utils/discord_rpc.dart @@ -0,0 +1,248 @@ +import 'package:flutter_discord_rpc_fork/flutter_discord_rpc.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:mangayomi/models/chapter.dart'; +import 'package:mangayomi/models/manga.dart'; +import 'package:mangayomi/modules/more/providers/incognito_mode_state_provider.dart'; +import 'package:mangayomi/modules/more/settings/general/providers/general_state_provider.dart'; + +class DiscordRPC { + /// Id of the Discord Application + final String applicationId; + + /// Whether it should reconnect to the discord client + final bool autoRetry; + + /// Seconds between each attempt to reconnect + final int retryDelayInSeconds; + + /// Start timestamp in millis + final int startAt = DateTime.timestamp().millisecondsSinceEpoch; + + /// Start timestamp in millis for the current chapter/episode + int chapterStartAt = 0; + + /// End timestamp in millis for the current chapter/episode + int chapterEndAt = 0; + + /// Temp var + late bool rpcShowReadingWatchingProgress; + + /// Instance of the current RPC activity + final RpcActivity activity = RpcActivity( + assets: const RPCAssets(largeImage: "app-icon", largeText: "Mangayomi"), + buttons: [ + const RPCButton( + label: "Get Mangayomi", + url: "https://github.com/kodjodevf/mangayomi", + ), + const RPCButton( + label: "Join us", + url: "https://discord.com/invite/EjfBuYahsP", + ), + ], + details: "Idle", + state: "-----", + timestamps: RPCTimestamps( + start: DateTime.timestamp().millisecondsSinceEpoch, + ), + activityType: ActivityType.watching, + ); + + DiscordRPC({ + required this.applicationId, + this.autoRetry = true, + this.retryDelayInSeconds = 10, + }); + + Future initialize() async { + await FlutterDiscordRPC.initialize(applicationId); + } + + Future connect(WidgetRef ref) async { + final enableDiscordRpc = ref.read(enableDiscordRpcStateProvider); + final incognitoMode = ref.read(incognitoModeStateProvider); + final hideDiscordRpcInIncognito = ref.read( + hideDiscordRpcInIncognitoStateProvider, + ); + rpcShowReadingWatchingProgress = ref.read( + rpcShowReadingWatchingProgressStateProvider, + ); + if (enableDiscordRpc && (!hideDiscordRpcInIncognito || !incognitoMode)) { + await FlutterDiscordRPC.instance.connect( + autoRetry: autoRetry, + retryDelay: Duration(seconds: retryDelayInSeconds), + ); + await Future.delayed(Duration(seconds: 3)); + showIdleText(); + } + } + + Future showIdleText() async { + await updateActivity( + details: "Idle", + state: "-----", + assets: const RPCAssets(largeImage: "app-icon", largeText: "Mangayomi"), + ); + } + + Future showChapterDetails(WidgetRef ref, Chapter chapter) async { + final status = chapter.manga.value!.itemType == ItemType.anime + ? "Watching" + : "Reading"; + final title = chapter.manga.value!.name; + final chapterTitle = chapter.name; + final rpcShowTitle = ref.read(rpcShowTitleStateProvider); + final rpcShowCoverImage = ref.read(rpcShowCoverImageStateProvider); + await updateActivity( + details: rpcShowTitle ? "$status $title" : "Idle", + state: rpcShowTitle && rpcShowReadingWatchingProgress + ? chapterTitle + : "-----", + assets: rpcShowCoverImage + ? RPCAssets( + largeImage: chapter.manga.value!.imageUrl, + largeText: rpcShowTitle ? chapter.manga.value!.name : "-----", + smallImage: "app-icon", + smallText: "Mangayomi", + ) + : const RPCAssets(largeImage: "app-icon", largeText: "Mangayomi"), + ); + } + + Future showLargeImage() async { + await updateActivity( + assets: const RPCAssets(largeImage: "app-icon", largeText: "Mangayomi"), + ); + } + + Future showSmallImage(String largeImage, String largeText) async { + await updateActivity( + assets: RPCAssets( + largeImage: largeImage, + largeText: largeText, + smallImage: "app-icon", + smallText: "Mangayomi", + ), + ); + } + + Future showOriginalTimestamp() async { + await updateActivity(timestamps: RPCTimestamps(start: startAt)); + } + + Future startChapterTimestamp( + int offsetInMillis, + int durationInMillis, + ) async { + if (!rpcShowReadingWatchingProgress) { + return; + } + chapterStartAt = DateTime.timestamp().millisecondsSinceEpoch; + chapterEndAt = + DateTime.timestamp().millisecondsSinceEpoch + durationInMillis; + await updateActivity( + timestamps: RPCTimestamps( + start: chapterStartAt, + end: chapterEndAt - offsetInMillis, + ), + ); + } + + Future updateChapterTimestamp(int newOffsetInMillis) async { + if (!rpcShowReadingWatchingProgress) { + return; + } + await updateActivity( + timestamps: RPCTimestamps( + start: chapterStartAt, + end: chapterEndAt - newOffsetInMillis, + ), + ); + } + + Future updateActivity({ + String? state, + String? details, + RPCTimestamps? timestamps, + RPCParty? party, + RPCAssets? assets, + RPCSecrets? secrets, + List? buttons, + ActivityType? activityType, + }) async { + if (!FlutterDiscordRPC.instance.isConnected) { + return; + } + if (state != null) { + activity.state = state; + } + if (details != null) { + activity.details = details; + } + if (timestamps != null) { + activity.timestamps = timestamps; + } + if (party != null) { + activity.party = party; + } + if (assets != null) { + activity.assets = assets; + } + if (secrets != null) { + activity.secrets = secrets; + } + if (buttons != null) { + activity.buttons = buttons; + } + if (activityType != null) { + activity.activityType = activityType; + } + await FlutterDiscordRPC.instance.setActivity( + activity: activity.toRPCActivity(), + ); + } + + Future disconnect() async { + await FlutterDiscordRPC.instance.disconnect(); + } + + Future destroy() async { + await FlutterDiscordRPC.instance.disconnect(); + await FlutterDiscordRPC.instance.dispose(); + } +} + +class RpcActivity { + String? state; + String? details; + RPCTimestamps? timestamps; + RPCParty? party; + RPCAssets? assets; + RPCSecrets? secrets; + List? buttons; + ActivityType? activityType; + + RpcActivity({ + this.state, + this.details, + this.timestamps, + this.party, + this.assets, + this.secrets, + this.buttons, + this.activityType, + }); + + RPCActivity toRPCActivity() { + return RPCActivity( + state: state, + details: details, + timestamps: timestamps, + party: party, + assets: assets, + secrets: secrets, + buttons: buttons, + activityType: activityType, + ); + } +} diff --git a/linux/flutter/generated_plugins.cmake b/linux/flutter/generated_plugins.cmake index 214dd841..d68e2c1a 100644 --- a/linux/flutter/generated_plugins.cmake +++ b/linux/flutter/generated_plugins.cmake @@ -16,6 +16,7 @@ list(APPEND FLUTTER_PLUGIN_LIST ) list(APPEND FLUTTER_FFI_PLUGIN_LIST + flutter_discord_rpc_fork rust_lib_mangayomi ) diff --git a/pubspec.lock b/pubspec.lock index 2ca71fb1..fecb732c 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -549,6 +549,14 @@ packages: url: "https://pub.dev" source: hosted version: "3.4.1" + flutter_discord_rpc_fork: + dependency: "direct main" + description: + name: flutter_discord_rpc_fork + sha256: a32b3d5871af591ec73b65feb2818f3e3d4e05d46b9903c6f117b03865a86282 + url: "https://pub.dev" + source: hosted + version: "1.0.4" flutter_inappwebview: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index 1725f722..52aed72d 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -94,6 +94,10 @@ dependencies: d4rt: 0.0.9 hive: ^2.2.3 hive_flutter: ^1.1.0 + flutter_discord_rpc_fork: + git: + url: https://github.com/Schnitzel5/flutter-discord-rpc.git + ref: main dependency_overrides: ffi: ^2.1.3 diff --git a/windows/flutter/generated_plugins.cmake b/windows/flutter/generated_plugins.cmake index 530b6fbc..6f2d4d0b 100644 --- a/windows/flutter/generated_plugins.cmake +++ b/windows/flutter/generated_plugins.cmake @@ -21,6 +21,7 @@ list(APPEND FLUTTER_PLUGIN_LIST ) list(APPEND FLUTTER_FFI_PLUGIN_LIST + flutter_discord_rpc_fork rust_lib_mangayomi )