Compare commits

...

11 Commits

12 changed files with 2248 additions and 32 deletions

3
.fvmrc Normal file
View File

@@ -0,0 +1,3 @@
{
"flutter": "3.38.1"
}

Binary file not shown.

View File

@@ -57,6 +57,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.19.1"
crypto:
dependency: transitive
description:
name: crypto
sha256: c8ea0233063ba03258fbcf2ca4d6dadfefe14f02fab57702265467a19f27fadf
url: "https://pub.dev"
source: hosted
version: "3.0.7"
cupertino_icons:
dependency: "direct main"
description:
@@ -150,26 +158,26 @@ packages:
dependency: transitive
description:
name: leak_tracker
sha256: "6bb818ecbdffe216e81182c2f0714a2e62b593f4a4f13098713ff1685dfb6ab0"
sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de"
url: "https://pub.dev"
source: hosted
version: "10.0.9"
version: "11.0.2"
leak_tracker_flutter_testing:
dependency: transitive
description:
name: leak_tracker_flutter_testing
sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573
sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1"
url: "https://pub.dev"
source: hosted
version: "3.0.9"
version: "3.0.10"
leak_tracker_testing:
dependency: transitive
description:
name: leak_tracker_testing
sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3"
sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1"
url: "https://pub.dev"
source: hosted
version: "3.0.1"
version: "3.0.2"
lints:
dependency: transitive
description:
@@ -214,10 +222,10 @@ packages:
dependency: transitive
description:
name: meta
sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c
sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394"
url: "https://pub.dev"
source: hosted
version: "1.16.0"
version: "1.17.0"
package_config:
dependency: transitive
description:
@@ -355,10 +363,10 @@ packages:
dependency: transitive
description:
name: test_api
sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd
sha256: ab2726c1a94d3176a45960b6234466ec367179b87dd74f1611adb1f3b5fb9d55
url: "https://pub.dev"
source: hosted
version: "0.7.4"
version: "0.7.7"
typed_data:
dependency: transitive
description:
@@ -371,10 +379,10 @@ packages:
dependency: transitive
description:
name: vector_math
sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803"
sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b
url: "https://pub.dev"
source: hosted
version: "2.1.4"
version: "2.2.0"
vm_service:
dependency: transitive
description:
@@ -408,5 +416,5 @@ packages:
source: hosted
version: "3.1.3"
sdks:
dart: ">=3.8.1 <4.0.0"
flutter: ">=3.29.0"
dart: ">=3.10.0 <4.0.0"
flutter: ">=3.38.1"

47
installJRERelease.sh Executable file
View File

@@ -0,0 +1,47 @@
#!/usr/bin/env bash
set -e
PLATFORM=$1
if [ -z "$PLATFORM" ]; then
echo "Usage: $0 <platform: macos|linux|windows>"
exit 1
fi
PROJECT_DIR=$(pwd)
case "$PLATFORM" in
macos)
# Locate Flutter macOS build output
JRE_SRC="/Users/kevin/IdeaProjects/k3vinb5_aniyomi_bridge/jre/$PLATFORM/customjre"
if [ ! -d "$JRE_SRC" ]; then
echo "Error: JRE source folder not found: $JRE_SRC"
exit 1
fi
APP_BUNDLE="$PROJECT_DIR/build/macos/Build/Products/Release/unyo.app"
RESOURCES_DIR="$APP_BUNDLE/Contents/Resources"
mkdir -p "$RESOURCES_DIR/jre"
cp -R "$JRE_SRC" "$RESOURCES_DIR/jre/"
echo "Copied custom JRE to $RESOURCES_DIR/jre/"
;;
linux)
# Linux Flutter executable folder
JRE_SRC="/home/kevin/Projects/k3vinb5_aniyomi_bridge/jre/$PLATFORM/customjre"
if [ ! -d "$JRE_SRC" ]; then
echo "Error: JRE source folder not found: $JRE_SRC"
exit 1
fi
BUILD_DIR="$PROJECT_DIR/build/linux/x64/release/bundle"
mkdir -p "$BUILD_DIR/jre"
cp -R "$JRE_SRC" "$BUILD_DIR/jre/"
echo "Copied custom JRE to $BUILD_DIR/jre/"
;;
*)
echo "Unsupported platform: $PLATFORM"
exit 1
;;
esac
echo "JRE setup complete!"

9
jnigen/headers.yaml Normal file
View File

@@ -0,0 +1,9 @@
output:
dart:
path: ../lib/jmodels/jheaders.dart
structure: single_file
class_path:
- '../assets/aniyomibridge-core.jar'
classes:
- 'okhttp3.Headers'

9
jnigen/track.yaml Normal file
View File

@@ -0,0 +1,9 @@
output:
dart:
path: ../lib/jmodels/jtrack.dart
structure: single_file
class_path:
- '../assets/aniyomibridge-core.jar'
classes:
- 'eu.kanade.tachiyomi.animesource.model.Track'

View File

@@ -1,5 +1,4 @@
import 'dart:async';
import 'dart:convert';
import 'dart:io';
import 'dart:isolate';
import 'dart:math';
@@ -11,6 +10,7 @@ import 'package:k3vinb5_aniyomi_bridge/models/extension.dart';
import 'package:logger/logger.dart';
import 'package:path_provider/path_provider.dart';
import 'package:path/path.dart' as path;
import 'package:crypto/crypto.dart';
import 'package:k3vinb5_aniyomi_bridge/jmodels/jvideo.dart';
import 'package:k3vinb5_aniyomi_bridge/jmodels/jsanime.dart';
import 'package:k3vinb5_aniyomi_bridge/jmodels/jsepisode.dart';
@@ -69,8 +69,8 @@ class AniyomiBridge {
_getDylibDir(supportDirectory),
_getClassPath(supportDirectory),
);
_isReady = response.$1;
_jniSenderPort = response.$2;
_isReady = response.$1;
_jniReceiverPort.listen((message) {
if (message is JniIsolateError) {
final id = message.id;
@@ -87,7 +87,8 @@ class AniyomiBridge {
}
completer.complete(message.results);
}
});}
});
}
bool isReady() {
return _isReady;
@@ -370,7 +371,19 @@ class AniyomiBridge {
_aniyomiBridgeJarName,
);
File aniyomiBridgeCore = File(aniyomiBridgeCorePath);
bool needsCopy = false;
if (!(await aniyomiBridgeCore.exists())) {
needsCopy = true;
} else {
String assetPath = "$_packageAssetsDir/$_aniyomiBridgeJarName";
String existingFileHash = await _computeFileHash(aniyomiBridgeCore);
String assetHash = await _computeAssetHash(assetPath);
if (existingFileHash != assetHash) {
needsCopy = true;
}
}
if (needsCopy) {
_logger.i("Copying new aniyomiBridgeCore binary to $aniyomiBridgeCorePath");
await _copyAssetToFile(
"$_packageAssetsDir/$_aniyomiBridgeJarName",
aniyomiBridgeCorePath,
@@ -378,6 +391,19 @@ class AniyomiBridge {
}
}
Future<String> _computeFileHash(File file) async {
final bytes = await file.readAsBytes();
final digest = sha256.convert(bytes);
return digest.toString();
}
Future<String> _computeAssetHash(String assetPath) async {
final byteData = await rootBundle.load(assetPath);
final bytes = byteData.buffer.asUint8List();
final digest = sha256.convert(bytes);
return digest.toString();
}
Future<File> _copyAssetToFile(String assetPath, String outPath) async {
final byteData = await rootBundle.load(assetPath);
final buffer = byteData.buffer.asUint8List();
@@ -427,19 +453,24 @@ class AniyomiBridge {
);
}
/// Creates a stable string representation of the args
String _generateCacheKey(JniIsolateMessageType messageType, Map<String, dynamic> args) {
// Create a stable string representation of the args
final argsString = jsonEncode(args);
final argsString = args.entries
.map((entry) => "${entry.key}:${_getStableHashCode(entry.value)}")
.join(":").hashCode;
return "${messageType.name}_$argsString";
}
// bool _isCacheable(JniIsolateMessageType messageType) {
// if (config.cacheDisabledMessageType.contains(messageType)){
// _logger.w("Endpoint $messageType is disabled for caching");
// return false;
// }
// return true;
// }
int _getStableHashCode(dynamic value) {
if (value is JSEpisode) {
return "${value.getUrl().toDartString()}_${value.getEpisode_number()}".hashCode;
}else if (value is JSAnime) {
return value.getTitle().toDartString().hashCode;
} else if (value is JSManga) {
return value.getTitle().toDartString().hashCode;
} else if (value is JSChapter) {
return "${value.getUrl().toDartString().hashCode}_${value.getChapter_number()}".hashCode;
}
return value.hashCode;
}
}

1472
lib/jmodels/jheaders.dart Normal file

File diff suppressed because it is too large Load Diff

634
lib/jmodels/jtrack.dart Normal file
View File

@@ -0,0 +1,634 @@
// AUTO GENERATED BY JNIGEN 0.14.2. DO NOT EDIT!
// ignore_for_file: annotate_overrides
// ignore_for_file: argument_type_not_assignable
// ignore_for_file: camel_case_extensions
// ignore_for_file: camel_case_types
// ignore_for_file: constant_identifier_names
// ignore_for_file: comment_references
// ignore_for_file: doc_directive_unknown
// ignore_for_file: file_names
// ignore_for_file: inference_failure_on_untyped_parameter
// ignore_for_file: invalid_internal_annotation
// ignore_for_file: invalid_use_of_internal_member
// ignore_for_file: library_prefixes
// ignore_for_file: lines_longer_than_80_chars
// ignore_for_file: no_leading_underscores_for_library_prefixes
// ignore_for_file: no_leading_underscores_for_local_identifiers
// ignore_for_file: non_constant_identifier_names
// ignore_for_file: only_throw_errors
// ignore_for_file: overridden_fields
// ignore_for_file: prefer_double_quotes
// ignore_for_file: unintended_html_in_doc_comment
// ignore_for_file: unnecessary_cast
// ignore_for_file: unnecessary_non_null_assertion
// ignore_for_file: unnecessary_parenthesis
// ignore_for_file: unused_element
// ignore_for_file: unused_field
// ignore_for_file: unused_import
// ignore_for_file: unused_local_variable
// ignore_for_file: unused_shown_name
// ignore_for_file: use_super_parameters
import 'dart:core' show Object, String, bool, double, int;
import 'dart:core' as core$_;
import 'package:jni/_internal.dart' as jni$_;
import 'package:jni/jni.dart' as jni$_;
/// from: `eu.kanade.tachiyomi.animesource.model.Track$Companion`
class Track$Companion extends jni$_.JObject {
@jni$_.internal
@core$_.override
final jni$_.JObjType<Track$Companion> $type;
@jni$_.internal
Track$Companion.fromReference(jni$_.JReference reference)
: $type = type,
super.fromReference(reference);
static final _class = jni$_.JClass.forName(
r'eu/kanade/tachiyomi/animesource/model/Track$Companion',
);
/// The type which includes information such as the signature of this class.
static const nullableType = $Track$Companion$NullableType();
static const type = $Track$Companion$Type();
static final _id_serializer = _class.instanceMethodId(
r'serializer',
r'()Lkotlinx/serialization/KSerializer;',
);
static final _serializer =
jni$_.ProtectedJniExtensions.lookup<
jni$_.NativeFunction<
jni$_.JniResult Function(
jni$_.Pointer<jni$_.Void>,
jni$_.JMethodIDPtr,
)
>
>('globalEnv_CallObjectMethod')
.asFunction<
jni$_.JniResult Function(
jni$_.Pointer<jni$_.Void>,
jni$_.JMethodIDPtr,
)
>();
/// from: `public final kotlinx.serialization.KSerializer<eu.kanade.tachiyomi.animesource.model.Track> serializer()`
/// The returned object must be released after use, by calling the [release] method.
jni$_.JObject serializer() {
return _serializer(
reference.pointer,
_id_serializer as jni$_.JMethodIDPtr,
).object<jni$_.JObject>(const jni$_.JObjectType());
}
static final _id_new$ = _class.constructorId(
r'(Lkotlin/jvm/internal/DefaultConstructorMarker;)V',
);
static final _new$ =
jni$_.ProtectedJniExtensions.lookup<
jni$_.NativeFunction<
jni$_.JniResult Function(
jni$_.Pointer<jni$_.Void>,
jni$_.JMethodIDPtr,
jni$_.VarArgs<(jni$_.Pointer<jni$_.Void>,)>,
)
>
>('globalEnv_NewObject')
.asFunction<
jni$_.JniResult Function(
jni$_.Pointer<jni$_.Void>,
jni$_.JMethodIDPtr,
jni$_.Pointer<jni$_.Void>,
)
>();
/// from: `synthetic public void <init>(kotlin.jvm.internal.DefaultConstructorMarker defaultConstructorMarker)`
/// The returned object must be released after use, by calling the [release] method.
factory Track$Companion(jni$_.JObject? defaultConstructorMarker) {
final _$defaultConstructorMarker =
defaultConstructorMarker?.reference ?? jni$_.jNullReference;
return Track$Companion.fromReference(
_new$(
_class.reference.pointer,
_id_new$ as jni$_.JMethodIDPtr,
_$defaultConstructorMarker.pointer,
).reference,
);
}
}
final class $Track$Companion$NullableType
extends jni$_.JObjType<Track$Companion?> {
@jni$_.internal
const $Track$Companion$NullableType();
@jni$_.internal
@core$_.override
String get signature =>
r'Leu/kanade/tachiyomi/animesource/model/Track$Companion;';
@jni$_.internal
@core$_.override
Track$Companion? fromReference(jni$_.JReference reference) =>
reference.isNull ? null : Track$Companion.fromReference(reference);
@jni$_.internal
@core$_.override
jni$_.JObjType get superType => const jni$_.JObjectType();
@jni$_.internal
@core$_.override
jni$_.JObjType<Track$Companion?> get nullableType => this;
@jni$_.internal
@core$_.override
final superCount = 1;
@core$_.override
int get hashCode => ($Track$Companion$NullableType).hashCode;
@core$_.override
bool operator ==(Object other) {
return other.runtimeType == ($Track$Companion$NullableType) &&
other is $Track$Companion$NullableType;
}
}
final class $Track$Companion$Type extends jni$_.JObjType<Track$Companion> {
@jni$_.internal
const $Track$Companion$Type();
@jni$_.internal
@core$_.override
String get signature =>
r'Leu/kanade/tachiyomi/animesource/model/Track$Companion;';
@jni$_.internal
@core$_.override
Track$Companion fromReference(jni$_.JReference reference) =>
Track$Companion.fromReference(reference);
@jni$_.internal
@core$_.override
jni$_.JObjType get superType => const jni$_.JObjectType();
@jni$_.internal
@core$_.override
jni$_.JObjType<Track$Companion?> get nullableType =>
const $Track$Companion$NullableType();
@jni$_.internal
@core$_.override
final superCount = 1;
@core$_.override
int get hashCode => ($Track$Companion$Type).hashCode;
@core$_.override
bool operator ==(Object other) {
return other.runtimeType == ($Track$Companion$Type) &&
other is $Track$Companion$Type;
}
}
/// from: `eu.kanade.tachiyomi.animesource.model.Track`
class JTrack extends jni$_.JObject {
@jni$_.internal
@core$_.override
final jni$_.JObjType<JTrack> $type;
@jni$_.internal
JTrack.fromReference(jni$_.JReference reference)
: $type = type,
super.fromReference(reference);
static final _class = jni$_.JClass.forName(
r'eu/kanade/tachiyomi/animesource/model/Track',
);
/// The type which includes information such as the signature of this class.
static const nullableType = $Track$NullableType();
static const type = $Track$Type();
static final _id_Companion = _class.staticFieldId(
r'Companion',
r'Leu/kanade/tachiyomi/animesource/model/Track$Companion;',
);
/// from: `static public final eu.kanade.tachiyomi.animesource.model.Track$Companion Companion`
/// The returned object must be released after use, by calling the [release] method.
static Track$Companion get Companion =>
_id_Companion.get(_class, const $Track$Companion$Type());
static final _id_new$ = _class.constructorId(
r'(Ljava/lang/String;Ljava/lang/String;)V',
);
static final _new$ =
jni$_.ProtectedJniExtensions.lookup<
jni$_.NativeFunction<
jni$_.JniResult Function(
jni$_.Pointer<jni$_.Void>,
jni$_.JMethodIDPtr,
jni$_.VarArgs<
(jni$_.Pointer<jni$_.Void>, jni$_.Pointer<jni$_.Void>)
>,
)
>
>('globalEnv_NewObject')
.asFunction<
jni$_.JniResult Function(
jni$_.Pointer<jni$_.Void>,
jni$_.JMethodIDPtr,
jni$_.Pointer<jni$_.Void>,
jni$_.Pointer<jni$_.Void>,
)
>();
/// from: `public void <init>(java.lang.String string, java.lang.String string1)`
/// The returned object must be released after use, by calling the [release] method.
factory JTrack(jni$_.JString string, jni$_.JString string1) {
final _$string = string.reference;
final _$string1 = string1.reference;
return JTrack.fromReference(
_new$(
_class.reference.pointer,
_id_new$ as jni$_.JMethodIDPtr,
_$string.pointer,
_$string1.pointer,
).reference,
);
}
static final _id_getUrl = _class.instanceMethodId(
r'getUrl',
r'()Ljava/lang/String;',
);
static final _getUrl =
jni$_.ProtectedJniExtensions.lookup<
jni$_.NativeFunction<
jni$_.JniResult Function(
jni$_.Pointer<jni$_.Void>,
jni$_.JMethodIDPtr,
)
>
>('globalEnv_CallObjectMethod')
.asFunction<
jni$_.JniResult Function(
jni$_.Pointer<jni$_.Void>,
jni$_.JMethodIDPtr,
)
>();
/// from: `public final java.lang.String getUrl()`
/// The returned object must be released after use, by calling the [release] method.
jni$_.JString getUrl() {
return _getUrl(
reference.pointer,
_id_getUrl as jni$_.JMethodIDPtr,
).object<jni$_.JString>(const jni$_.JStringType());
}
static final _id_getLang = _class.instanceMethodId(
r'getLang',
r'()Ljava/lang/String;',
);
static final _getLang =
jni$_.ProtectedJniExtensions.lookup<
jni$_.NativeFunction<
jni$_.JniResult Function(
jni$_.Pointer<jni$_.Void>,
jni$_.JMethodIDPtr,
)
>
>('globalEnv_CallObjectMethod')
.asFunction<
jni$_.JniResult Function(
jni$_.Pointer<jni$_.Void>,
jni$_.JMethodIDPtr,
)
>();
/// from: `public final java.lang.String getLang()`
/// The returned object must be released after use, by calling the [release] method.
jni$_.JString getLang() {
return _getLang(
reference.pointer,
_id_getLang as jni$_.JMethodIDPtr,
).object<jni$_.JString>(const jni$_.JStringType());
}
static final _id_component1 = _class.instanceMethodId(
r'component1',
r'()Ljava/lang/String;',
);
static final _component1 =
jni$_.ProtectedJniExtensions.lookup<
jni$_.NativeFunction<
jni$_.JniResult Function(
jni$_.Pointer<jni$_.Void>,
jni$_.JMethodIDPtr,
)
>
>('globalEnv_CallObjectMethod')
.asFunction<
jni$_.JniResult Function(
jni$_.Pointer<jni$_.Void>,
jni$_.JMethodIDPtr,
)
>();
/// from: `public final java.lang.String component1()`
/// The returned object must be released after use, by calling the [release] method.
jni$_.JString component1() {
return _component1(
reference.pointer,
_id_component1 as jni$_.JMethodIDPtr,
).object<jni$_.JString>(const jni$_.JStringType());
}
static final _id_component2 = _class.instanceMethodId(
r'component2',
r'()Ljava/lang/String;',
);
static final _component2 =
jni$_.ProtectedJniExtensions.lookup<
jni$_.NativeFunction<
jni$_.JniResult Function(
jni$_.Pointer<jni$_.Void>,
jni$_.JMethodIDPtr,
)
>
>('globalEnv_CallObjectMethod')
.asFunction<
jni$_.JniResult Function(
jni$_.Pointer<jni$_.Void>,
jni$_.JMethodIDPtr,
)
>();
/// from: `public final java.lang.String component2()`
/// The returned object must be released after use, by calling the [release] method.
jni$_.JString component2() {
return _component2(
reference.pointer,
_id_component2 as jni$_.JMethodIDPtr,
).object<jni$_.JString>(const jni$_.JStringType());
}
static final _id_copy = _class.instanceMethodId(
r'copy',
r'(Ljava/lang/String;Ljava/lang/String;)Leu/kanade/tachiyomi/animesource/model/Track;',
);
static final _copy =
jni$_.ProtectedJniExtensions.lookup<
jni$_.NativeFunction<
jni$_.JniResult Function(
jni$_.Pointer<jni$_.Void>,
jni$_.JMethodIDPtr,
jni$_.VarArgs<
(jni$_.Pointer<jni$_.Void>, jni$_.Pointer<jni$_.Void>)
>,
)
>
>('globalEnv_CallObjectMethod')
.asFunction<
jni$_.JniResult Function(
jni$_.Pointer<jni$_.Void>,
jni$_.JMethodIDPtr,
jni$_.Pointer<jni$_.Void>,
jni$_.Pointer<jni$_.Void>,
)
>();
/// from: `public final eu.kanade.tachiyomi.animesource.model.Track copy(java.lang.String string, java.lang.String string1)`
/// The returned object must be released after use, by calling the [release] method.
JTrack copy(jni$_.JString string, jni$_.JString string1) {
final _$string = string.reference;
final _$string1 = string1.reference;
return _copy(
reference.pointer,
_id_copy as jni$_.JMethodIDPtr,
_$string.pointer,
_$string1.pointer,
).object<JTrack>(const $Track$Type());
}
static final _id_toString$1 = _class.instanceMethodId(
r'toString',
r'()Ljava/lang/String;',
);
static final _toString$1 =
jni$_.ProtectedJniExtensions.lookup<
jni$_.NativeFunction<
jni$_.JniResult Function(
jni$_.Pointer<jni$_.Void>,
jni$_.JMethodIDPtr,
)
>
>('globalEnv_CallObjectMethod')
.asFunction<
jni$_.JniResult Function(
jni$_.Pointer<jni$_.Void>,
jni$_.JMethodIDPtr,
)
>();
/// from: `public java.lang.String toString()`
/// The returned object must be released after use, by calling the [release] method.
jni$_.JString toString$1() {
return _toString$1(
reference.pointer,
_id_toString$1 as jni$_.JMethodIDPtr,
).object<jni$_.JString>(const jni$_.JStringType());
}
static final _id_hashCode$1 = _class.instanceMethodId(r'hashCode', r'()I');
static final _hashCode$1 =
jni$_.ProtectedJniExtensions.lookup<
jni$_.NativeFunction<
jni$_.JniResult Function(
jni$_.Pointer<jni$_.Void>,
jni$_.JMethodIDPtr,
)
>
>('globalEnv_CallIntMethod')
.asFunction<
jni$_.JniResult Function(
jni$_.Pointer<jni$_.Void>,
jni$_.JMethodIDPtr,
)
>();
/// from: `public int hashCode()`
int hashCode$1() {
return _hashCode$1(
reference.pointer,
_id_hashCode$1 as jni$_.JMethodIDPtr,
).integer;
}
static final _id_equals = _class.instanceMethodId(
r'equals',
r'(Ljava/lang/Object;)Z',
);
static final _equals =
jni$_.ProtectedJniExtensions.lookup<
jni$_.NativeFunction<
jni$_.JniResult Function(
jni$_.Pointer<jni$_.Void>,
jni$_.JMethodIDPtr,
jni$_.VarArgs<(jni$_.Pointer<jni$_.Void>,)>,
)
>
>('globalEnv_CallBooleanMethod')
.asFunction<
jni$_.JniResult Function(
jni$_.Pointer<jni$_.Void>,
jni$_.JMethodIDPtr,
jni$_.Pointer<jni$_.Void>,
)
>();
/// from: `public boolean equals(java.lang.Object object)`
bool equals(jni$_.JObject? object) {
final _$object = object?.reference ?? jni$_.jNullReference;
return _equals(
reference.pointer,
_id_equals as jni$_.JMethodIDPtr,
_$object.pointer,
).boolean;
}
static final _id_new$1 = _class.constructorId(
r'(ILjava/lang/String;Ljava/lang/String;Lkotlinx/serialization/internal/SerializationConstructorMarker;)V',
);
static final _new$1 =
jni$_.ProtectedJniExtensions.lookup<
jni$_.NativeFunction<
jni$_.JniResult Function(
jni$_.Pointer<jni$_.Void>,
jni$_.JMethodIDPtr,
jni$_.VarArgs<
(
jni$_.Int32,
jni$_.Pointer<jni$_.Void>,
jni$_.Pointer<jni$_.Void>,
jni$_.Pointer<jni$_.Void>,
)
>,
)
>
>('globalEnv_NewObject')
.asFunction<
jni$_.JniResult Function(
jni$_.Pointer<jni$_.Void>,
jni$_.JMethodIDPtr,
int,
jni$_.Pointer<jni$_.Void>,
jni$_.Pointer<jni$_.Void>,
jni$_.Pointer<jni$_.Void>,
)
>();
/// from: `synthetic public void <init>(int i, java.lang.String string, java.lang.String string1, kotlinx.serialization.internal.SerializationConstructorMarker serializationConstructorMarker)`
/// The returned object must be released after use, by calling the [release] method.
factory JTrack.new$1(
int i,
jni$_.JString? string,
jni$_.JString? string1,
jni$_.JObject? serializationConstructorMarker,
) {
final _$string = string?.reference ?? jni$_.jNullReference;
final _$string1 = string1?.reference ?? jni$_.jNullReference;
final _$serializationConstructorMarker =
serializationConstructorMarker?.reference ?? jni$_.jNullReference;
return JTrack.fromReference(
_new$1(
_class.reference.pointer,
_id_new$1 as jni$_.JMethodIDPtr,
i,
_$string.pointer,
_$string1.pointer,
_$serializationConstructorMarker.pointer,
).reference,
);
}
}
final class $Track$NullableType extends jni$_.JObjType<JTrack?> {
@jni$_.internal
const $Track$NullableType();
@jni$_.internal
@core$_.override
String get signature => r'Leu/kanade/tachiyomi/animesource/model/Track;';
@jni$_.internal
@core$_.override
JTrack? fromReference(jni$_.JReference reference) =>
reference.isNull ? null : JTrack.fromReference(reference);
@jni$_.internal
@core$_.override
jni$_.JObjType get superType => const jni$_.JObjectType();
@jni$_.internal
@core$_.override
jni$_.JObjType<JTrack?> get nullableType => this;
@jni$_.internal
@core$_.override
final superCount = 1;
@core$_.override
int get hashCode => ($Track$NullableType).hashCode;
@core$_.override
bool operator ==(Object other) {
return other.runtimeType == ($Track$NullableType) &&
other is $Track$NullableType;
}
}
final class $Track$Type extends jni$_.JObjType<JTrack> {
@jni$_.internal
const $Track$Type();
@jni$_.internal
@core$_.override
String get signature => r'Leu/kanade/tachiyomi/animesource/model/Track;';
@jni$_.internal
@core$_.override
JTrack fromReference(jni$_.JReference reference) =>
JTrack.fromReference(reference);
@jni$_.internal
@core$_.override
jni$_.JObjType get superType => const jni$_.JObjectType();
@jni$_.internal
@core$_.override
jni$_.JObjType<JTrack?> get nullableType => const $Track$NullableType();
@jni$_.internal
@core$_.override
final superCount = 1;
@core$_.override
int get hashCode => ($Track$Type).hashCode;
@core$_.override
bool operator ==(Object other) {
return other.runtimeType == ($Track$Type) && other is $Track$Type;
}
}

View File

@@ -1,25 +1,28 @@
name: k3vinb5_aniyomi_bridge
description: "A new Flutter package project."
version: 0.0.1
homepage:
environment:
sdk: ^3.8.1
flutter: ">=1.17.0"
sdk: ^3.10.0
flutter: ">=3.38.1"
dependencies:
flutter:
sdk: flutter
# FFI / Native Integration
jni: ^0.14.2
jnigen: ^0.14.2
# Logger
logger: ^2.6.2
# Storage
path: ^1.9.1
path_provider: ^2.1.5
crypto: ^3.0.7
dev_dependencies:
flutter_test:
sdk: flutter
flutter_lints: ^5.0.0
flutter_lints: ^6.0.0
# For information on the generic Dart part of this file, see the
# following page: https://dart.dev/tools/pub/pubspec