Finish basic functionality

This commit is contained in:
Kevin Rodrigues Borges
2025-09-16 06:02:41 +01:00
parent 1ab7722459
commit 9152a4dad9
8 changed files with 3300 additions and 45 deletions

View File

@@ -1,20 +1,20 @@
import 'dart:io';
import 'package:flutter/foundation.dart';
import 'package:flutter/services.dart' show rootBundle;
import 'package:flutter/services.dart';
import 'package:k3vinb5_aniyomi_bridge/jmodels/jvideo.dart';
import 'package:path_provider/path_provider.dart';
import 'package:path/path.dart' as path;
import 'package:jni/jni.dart';
import 'package:k3vinb5_aniyomi_bridge/jmodels/janiyomibridge.dart';
import 'package:k3vinb5_aniyomi_bridge/jmodels/jsanime.dart';
import 'package:path/path.dart' as path;
import 'package:path_provider/path_provider.dart';
import 'package:archive/archive.dart';
import 'package:k3vinb5_aniyomi_bridge/jmodels/jsepisode.dart';
class AniyomiBridge {
static final _aniyomiBridgeDir = "aniyomibridge";
static final _packageAssetsDir = "packages/k3vinb5_aniyomi_bridge/assets";
static late final JAniyomiBridge _jAniyomiBridge;
Future<void> initJvm() async{
Future<void> initJvm() async {
Directory supportDirectory = await getApplicationSupportDirectory();
await _loadJarIfNeeded(supportDirectory);
Jni.spawn(
@@ -22,18 +22,47 @@ class AniyomiBridge {
classPath: _getClassPath(supportDirectory),
);
JAniyomiBridge.init();
JAniyomiBridge jAniyomiBridge = JAniyomiBridge();
jAniyomiBridge.loadExtension(JString.fromString("https://kohiden.xyz/Kohi-den/extensions/raw/branch/main/apk/aniyomi-en.allanime-v14.37.apk"));
JList<JObject?>? searchResults = jAniyomiBridge.getSearchResults(JString.fromString("Naruto"), 1, JString.fromString("allanime"));
print("Search results size: ${searchResults?.length}");
if (searchResults != null) {
for (JObject obj in searchResults.cast()) {
JSAnime jsAnime = obj.as<JSAnime>(JSAnime.type);
print(jsAnime.getTitle().toDartString());
}
}
_jAniyomiBridge = JAniyomiBridge();
}
List<JSAnime> getSearchResults(String query, int page, String source) {
JList<JObject?>? searchResults = _jAniyomiBridge.getSearchResults(JString.fromString(query), page, JString.fromString(source));
if (searchResults == null) {
return [];
}
return searchResults.cast<JObject?>().where(_jObjIsNotNull).map((jObj) => jObj!.as<JSAnime>(JSAnime.type)).toList();
}
List<JSEpisode> getEpisodeList(JSAnime sAnime, String source) {
JList<JObject?>? episodeList = _jAniyomiBridge.getEpisodeList(sAnime, JString.fromString(source));
if (episodeList == null) {
return [];
}
return episodeList.cast<JObject?>().where(_jObjIsNotNull).map((jObj) => jObj!.as<JSEpisode>(JSEpisode.type)).toList();
}
List<JVideo> getVideoList(JSEpisode sEpisode, String source) {
JList<JObject?>? videoList = _jAniyomiBridge.getVideoList(sEpisode, JString.fromString(source));
if (videoList == null) {
return [];
}
return videoList.cast<JObject?>().where(_jObjIsNotNull).map((jObj) => jObj!.as<JVideo>(JVideo.type)).toList();
}
void loadExtension(String extensionUrl) {
_jAniyomiBridge.loadExtension(JString.fromString(extensionUrl));
}
List<String>? getLoadedExtensions() {
JList<JString?>? loadedExtensions = _jAniyomiBridge.getLoadedExtensions();
if (loadedExtensions == null) {
return null;
}
return loadedExtensions.cast<JString>().map((jStr) => jStr.toDartString()).toList();
}
bool Function(JObject? jObj) get _jObjIsNotNull => (jObj) => jObj != null;
String _getDylibDir(Directory supportDirectory) {
String executablePath = File(Platform.resolvedExecutable).parent.path;
if (Platform.isLinux) {
@@ -56,11 +85,11 @@ class AniyomiBridge {
File aniyomiBridgeCore = File(aniyomiBridgeCorePath);
if (!(await aniyomiBridgeCore.exists())) {
print("Copying aniyomibridge-core.jar to $aniyomiBridgeCorePath");
copyAssetToFile("$_packageAssetsDir/aniyomibridge-core.jar", aniyomiBridgeCorePath);
_copyAssetToFile("$_packageAssetsDir/aniyomibridge-core.jar", aniyomiBridgeCorePath);
}
}
Future<File> copyAssetToFile(String assetPath, String outPath) async {
Future<File> _copyAssetToFile(String assetPath, String outPath) async {
final byteData = await rootBundle.load(assetPath);
final buffer = byteData.buffer.asUint8List();
final file = File(outPath);

1005
lib/jmodels/jsepisode.dart Normal file

File diff suppressed because it is too large Load Diff

2222
lib/jmodels/jvideo.dart Normal file

File diff suppressed because it is too large Load Diff