Finish basic functionality
This commit is contained in:
@@ -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
1005
lib/jmodels/jsepisode.dart
Normal file
File diff suppressed because it is too large
Load Diff
2222
lib/jmodels/jvideo.dart
Normal file
2222
lib/jmodels/jvideo.dart
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user