Added http response bridge to catch error
This commit is contained in:
parent
243962c6bb
commit
9187d81c7a
14 changed files with 244 additions and 145 deletions
|
|
@ -2,6 +2,7 @@ import 'dart:convert';
|
|||
import 'package:dart_eval/dart_eval.dart';
|
||||
import 'package:dart_eval/dart_eval_bridge.dart';
|
||||
import 'package:dart_eval/stdlib/core.dart';
|
||||
import 'package:mangayomi/eval/bridge/m_http_response.dart';
|
||||
import 'package:mangayomi/eval/model/m_bridge.dart';
|
||||
import 'package:mangayomi/eval/model/m_track.dart';
|
||||
import 'package:mangayomi/eval/model/m_video.dart';
|
||||
|
|
@ -679,8 +680,8 @@ class $MBridge extends MBridge with $Bridge {
|
|||
isStatic: true),
|
||||
'http': BridgeMethodDef(
|
||||
BridgeFunctionDef(
|
||||
returns: BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.future,
|
||||
[BridgeTypeRef.type(RuntimeTypes.stringType)])),
|
||||
returns: BridgeTypeAnnotation(
|
||||
BridgeTypeRef(CoreTypes.future, [$MHttpResponse.$type])),
|
||||
params: [
|
||||
BridgeParameter(
|
||||
'method',
|
||||
|
|
@ -1128,7 +1129,7 @@ class $MBridge extends MBridge with $Bridge {
|
|||
|
||||
static $Future $http(Runtime runtime, $Value? target, List<$Value?> args) =>
|
||||
$Future.wrap(MBridge.http(args[0]!.$value, args[1]!.$value)
|
||||
.then((value) => $String(value)));
|
||||
.then((value) => $MHttpResponse.wrap(value)));
|
||||
|
||||
static $Future $httpMultiparFormData(
|
||||
Runtime runtime, $Value? target, List<$Value?> args) =>
|
||||
|
|
@ -1236,7 +1237,6 @@ class $MBridge extends MBridge with $Bridge {
|
|||
void $bridgeSet(String identifier, $Value value) {}
|
||||
}
|
||||
|
||||
|
||||
$MVideo _toMVideo(Video e) => $MVideo.wrap(MVideo()
|
||||
..headers = e.headers
|
||||
..originalUrl = e.originalUrl
|
||||
|
|
@ -1256,4 +1256,3 @@ $MVideo _toMVideo(Video e) => $MVideo.wrap(MVideo()
|
|||
..file = t.file
|
||||
..label = t.label))
|
||||
.toList()));
|
||||
|
||||
|
|
|
|||
90
lib/eval/bridge/m_http_response.dart
Normal file
90
lib/eval/bridge/m_http_response.dart
Normal file
|
|
@ -0,0 +1,90 @@
|
|||
import 'package:dart_eval/dart_eval.dart';
|
||||
import 'package:dart_eval/dart_eval_bridge.dart';
|
||||
import 'package:dart_eval/stdlib/core.dart';
|
||||
import 'package:mangayomi/eval/model/m_http_response.dart';
|
||||
|
||||
class $MHttpResponse implements MHttpResponse, $Instance {
|
||||
$MHttpResponse.wrap(this.$value) : _superclass = $Object($value);
|
||||
|
||||
static const $type = BridgeTypeRef(
|
||||
BridgeTypeSpec('package:bridge_lib/bridge_lib.dart', 'MHttpResponse'));
|
||||
|
||||
static const $declaration = BridgeClassDef(BridgeClassType($type),
|
||||
constructors: {
|
||||
'': BridgeConstructorDef(BridgeFunctionDef(
|
||||
returns: BridgeTypeAnnotation($type),
|
||||
))
|
||||
},
|
||||
// Specify class fields
|
||||
fields: {
|
||||
'body': BridgeFieldDef(
|
||||
BridgeTypeAnnotation(BridgeTypeRef.type(RuntimeTypes.stringType))),
|
||||
'statusCode': BridgeFieldDef(
|
||||
BridgeTypeAnnotation(BridgeTypeRef.type(RuntimeTypes.intType))),
|
||||
'hasError': BridgeFieldDef(
|
||||
BridgeTypeAnnotation(BridgeTypeRef.type(RuntimeTypes.boolType))),
|
||||
},
|
||||
wrap: true);
|
||||
|
||||
static $Value? $new(Runtime runtime, $Value? target, List<$Value?> args) {
|
||||
return $MHttpResponse.wrap(MHttpResponse());
|
||||
}
|
||||
|
||||
@override
|
||||
final MHttpResponse $value;
|
||||
|
||||
@override
|
||||
MHttpResponse get $reified => $value;
|
||||
|
||||
final $Instance _superclass;
|
||||
|
||||
@override
|
||||
$Value? $getProperty(Runtime runtime, String identifier) {
|
||||
switch (identifier) {
|
||||
case 'body':
|
||||
return $String($value.body!);
|
||||
case 'statusCode':
|
||||
return $int($value.statusCode!);
|
||||
case 'hasError':
|
||||
return $bool($value.hasError!);
|
||||
|
||||
default:
|
||||
return _superclass.$getProperty(runtime, identifier);
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
int $getRuntimeType(Runtime runtime) => runtime.lookupType($type.spec!);
|
||||
|
||||
@override
|
||||
void $setProperty(Runtime runtime, String identifier, $Value value) {
|
||||
switch (identifier) {
|
||||
case 'body':
|
||||
$value.body = value.$reified;
|
||||
case 'statusCode':
|
||||
$value.statusCode = value.$reified;
|
||||
case 'hasError':
|
||||
$value.hasError = value.$reified;
|
||||
|
||||
default:
|
||||
_superclass.$setProperty(runtime, identifier, value);
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
String? get body => $value.body;
|
||||
|
||||
@override
|
||||
int? get statusCode => $value.statusCode;
|
||||
@override
|
||||
bool? get hasError => $value.hasError;
|
||||
|
||||
@override
|
||||
set body(String? body) {}
|
||||
|
||||
@override
|
||||
set statusCode(int? statusCode) {}
|
||||
|
||||
@override
|
||||
set hasError(bool? hasError) {}
|
||||
}
|
||||
|
|
@ -274,6 +274,7 @@ class $MManga implements MManga, $Instance {
|
|||
$value.images = value.$reified;
|
||||
case 'hasNextPage':
|
||||
$value.hasNextPage = value.$reified;
|
||||
case 'hasError':
|
||||
default:
|
||||
_superclass.$setProperty(runtime, identifier, value);
|
||||
}
|
||||
|
|
@ -302,44 +303,31 @@ class $MManga implements MManga, $Instance {
|
|||
|
||||
@override
|
||||
String? get lang => $value.lang;
|
||||
|
||||
@override
|
||||
int? get sourceId => $value.sourceId;
|
||||
@override
|
||||
int? get status => $value.status;
|
||||
|
||||
@override
|
||||
set author(String? author) {
|
||||
// implement author
|
||||
}
|
||||
set author(String? author) {}
|
||||
|
||||
@override
|
||||
set description(String? description) {
|
||||
// implement description
|
||||
}
|
||||
set description(String? description) {}
|
||||
|
||||
@override
|
||||
set imageUrl(String? imageUrl) {
|
||||
// implement imageUrl
|
||||
}
|
||||
set imageUrl(String? imageUrl) {}
|
||||
|
||||
@override
|
||||
set link(String? link) {
|
||||
// implement link
|
||||
}
|
||||
set link(String? link) {}
|
||||
|
||||
@override
|
||||
set name(String? name) {
|
||||
// implement name
|
||||
}
|
||||
set name(String? name) {}
|
||||
|
||||
@override
|
||||
set source(String? source) {
|
||||
// implement source
|
||||
}
|
||||
set source(String? source) {}
|
||||
@override
|
||||
set hasNextPage(bool? hasNextPage) {
|
||||
// implement hasNextPage
|
||||
}
|
||||
set hasNextPage(bool? hasNextPage) {}
|
||||
|
||||
@override
|
||||
List<dynamic>? get chaptersDateUploads => $value.chaptersDateUploads;
|
||||
|
|
@ -363,39 +351,25 @@ class $MManga implements MManga, $Instance {
|
|||
List<dynamic>? get statusList => $value.statusList;
|
||||
|
||||
@override
|
||||
set chaptersDateUploads(List? chaptersDateUploads) {
|
||||
// implement chaptersDateUploads
|
||||
}
|
||||
set chaptersDateUploads(List? chaptersDateUploads) {}
|
||||
|
||||
@override
|
||||
set names(List? names) {
|
||||
// implement names
|
||||
}
|
||||
set names(List? names) {}
|
||||
|
||||
@override
|
||||
set chaptersScanlators(List? chaptersScanlators) {
|
||||
// implement chaptersScanlators
|
||||
}
|
||||
set chaptersScanlators(List? chaptersScanlators) {}
|
||||
|
||||
@override
|
||||
set urls(List? urls) {
|
||||
// implement urls
|
||||
}
|
||||
set urls(List? urls) {}
|
||||
|
||||
@override
|
||||
set genre(List? genre) {
|
||||
// implement genre
|
||||
}
|
||||
set genre(List? genre) {}
|
||||
|
||||
@override
|
||||
set lang(String? lang) {
|
||||
// implement lang
|
||||
}
|
||||
set lang(String? lang) {}
|
||||
|
||||
@override
|
||||
set status(int? status) {
|
||||
// implement status
|
||||
}
|
||||
set status(int? status) {}
|
||||
|
||||
@override
|
||||
String? get apiUrl => $value.apiUrl;
|
||||
|
|
@ -413,60 +387,38 @@ class $MManga implements MManga, $Instance {
|
|||
bool? get hasNextPage => $value.hasNextPage;
|
||||
|
||||
@override
|
||||
set apiUrl(String? apiUrl) {
|
||||
// implement apiUrl
|
||||
}
|
||||
set apiUrl(String? apiUrl) {}
|
||||
|
||||
@override
|
||||
set baseUrl(String? baseUrl) {
|
||||
// implement baseUrl
|
||||
}
|
||||
set baseUrl(String? baseUrl) {}
|
||||
|
||||
@override
|
||||
set dateFormat(String? dateFormat) {
|
||||
// implement dateFormat
|
||||
}
|
||||
set dateFormat(String? dateFormat) {}
|
||||
|
||||
@override
|
||||
set dateFormatLocale(String? dateFormatLocale) {
|
||||
// implement dateFormatLocale
|
||||
}
|
||||
set dateFormatLocale(String? dateFormatLocale) {}
|
||||
|
||||
@override
|
||||
int? get page => $value.page;
|
||||
|
||||
@override
|
||||
set page(int? page) {
|
||||
// implement page
|
||||
}
|
||||
set page(int? page) {}
|
||||
@override
|
||||
String? get query => $value.query;
|
||||
|
||||
@override
|
||||
set query(String? query) {
|
||||
// implement query
|
||||
}
|
||||
set query(String? query) {}
|
||||
|
||||
@override
|
||||
set chaptersChaps(List? chaptersChaps) {
|
||||
// implement chaptersChaps
|
||||
}
|
||||
set chaptersChaps(List? chaptersChaps) {}
|
||||
|
||||
@override
|
||||
set chaptersVolumes(List? chaptersVolumes) {
|
||||
// implement chaptersVolumes
|
||||
}
|
||||
set chaptersVolumes(List? chaptersVolumes) {}
|
||||
@override
|
||||
set images(List? images) {
|
||||
// implement images
|
||||
}
|
||||
set images(List? images) {}
|
||||
@override
|
||||
set statusList(List? images) {
|
||||
// implement images
|
||||
}
|
||||
set statusList(List? images) {}
|
||||
|
||||
@override
|
||||
set sourceId(int? sourceId) {
|
||||
// implement sourceId
|
||||
}
|
||||
set sourceId(int? sourceId) {}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
import 'dart:typed_data';
|
||||
import 'package:dart_eval/dart_eval.dart';
|
||||
import 'package:mangayomi/eval/bridge/m_http_response.dart';
|
||||
import 'package:mangayomi/eval/bridge/m_manga.dart';
|
||||
import 'package:mangayomi/eval/bridge/m_status.dart';
|
||||
import 'package:mangayomi/eval/bridge/m_track.dart';
|
||||
|
|
@ -13,7 +14,8 @@ Uint8List compilerEval(String sourceCode) {
|
|||
$MBridge.$declaration,
|
||||
$MManga.$declaration,
|
||||
$MVideo.$declaration,
|
||||
$MTrack.$declaration
|
||||
$MTrack.$declaration,
|
||||
$MHttpResponse.$declaration
|
||||
]);
|
||||
compiler.defineBridgeEnum($MStatus.$declaration);
|
||||
final program = compiler.compile({
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ import 'package:intl/date_symbol_data_local.dart';
|
|||
import 'package:intl/intl.dart';
|
||||
import 'package:js_packer/js_packer.dart';
|
||||
import 'package:json_path/json_path.dart';
|
||||
import 'package:mangayomi/eval/model/m_http_response.dart';
|
||||
import 'package:mangayomi/services/anime_extractors/dood_extractor.dart';
|
||||
import 'package:mangayomi/services/anime_extractors/filemoon.dart';
|
||||
import 'package:mangayomi/services/anime_extractors/gogocdn_extractor.dart';
|
||||
|
|
@ -575,10 +576,9 @@ class MBridge {
|
|||
}
|
||||
|
||||
//http request and also webview
|
||||
static Future<String> http(String method, String datas) async {
|
||||
static Future<MHttpResponse> http(String method, String datas) async {
|
||||
try {
|
||||
hp.StreamedResponse? res;
|
||||
String result = "";
|
||||
|
||||
//Get headers
|
||||
final headersMap = jsonDecode(datas)["headers"] as Map?;
|
||||
|
|
@ -606,13 +606,6 @@ class MBridge {
|
|||
//Get the serie source
|
||||
final source = sourceId != null ? isar.sources.getSync(sourceId) : null;
|
||||
|
||||
//Check the serie if has cloudflare
|
||||
// if (source != null && source.hasCloudflare!) {
|
||||
// final res = await cloudflareBypass(
|
||||
// url: url, sourceId: source.id.toString(), method: method);
|
||||
// return res;
|
||||
// }
|
||||
|
||||
//Do the http request if the serie hasn't cloudflare
|
||||
var request = hp.Request(method, Uri.parse(url));
|
||||
|
||||
|
|
@ -623,22 +616,25 @@ class MBridge {
|
|||
request.headers.addAll(headers);
|
||||
|
||||
res = await request.send();
|
||||
|
||||
if (res.statusCode != 200 && source != null && source.hasCloudflare!) {
|
||||
result = await cloudflareBypass(
|
||||
url: url, sourceId: source.id.toString(), method: 0);
|
||||
} else if (res.statusCode != 200) {
|
||||
result = "400";
|
||||
} else if (res.statusCode == 200) {
|
||||
result = await res.stream.bytesToString();
|
||||
MHttpResponse httpResponse = MHttpResponse();
|
||||
if (res.statusCode != 200 && (source?.hasCloudflare ?? false)) {
|
||||
final result = await cloudflareBypass(
|
||||
url: url, sourceId: source!.id.toString(), method: 0);
|
||||
httpResponse =
|
||||
MHttpResponse(body: result, statusCode: 200, hasError: false);
|
||||
} else {
|
||||
result = res.reasonPhrase!;
|
||||
httpResponse = MHttpResponse(
|
||||
body: res.statusCode == 200
|
||||
? await res.stream.bytesToString()
|
||||
: res.reasonPhrase,
|
||||
statusCode: res.statusCode,
|
||||
hasError: res.statusCode != 200);
|
||||
}
|
||||
|
||||
return result;
|
||||
return httpResponse;
|
||||
} catch (e) {
|
||||
botToast(e.toString());
|
||||
return "";
|
||||
return MHttpResponse(body: e.toString(), statusCode: 0, hasError: true);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
7
lib/eval/model/m_http_response.dart
Normal file
7
lib/eval/model/m_http_response.dart
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
class MHttpResponse {
|
||||
bool? hasError;
|
||||
int? statusCode;
|
||||
String? body;
|
||||
|
||||
MHttpResponse({this.body, this.hasError, this.statusCode});
|
||||
}
|
||||
|
|
@ -1,6 +1,7 @@
|
|||
import 'dart:typed_data';
|
||||
|
||||
import 'package:dart_eval/dart_eval.dart';
|
||||
import 'package:mangayomi/eval/bridge/m_http_response.dart';
|
||||
import 'package:mangayomi/eval/bridge/m_status.dart';
|
||||
import 'package:mangayomi/eval/bridge/m_track.dart';
|
||||
import 'package:mangayomi/eval/bridge/m_video.dart';
|
||||
|
|
@ -20,7 +21,8 @@ Runtime runtimeEval(Uint8List bytecode) {
|
|||
'package:bridge_lib/bridge_lib.dart', 'MTrack.', $MTrack.$new);
|
||||
runtime.registerBridgeEnumValues(
|
||||
'package:bridge_lib/bridge_lib.dart', 'MStatus', $MStatus.$values);
|
||||
|
||||
runtime.registerBridgeFunc('package:bridge_lib/bridge_lib.dart',
|
||||
'MHttpResponse.', $MHttpResponse.$new);
|
||||
runtime.registerBridgeFunc(
|
||||
'package:bridge_lib/bridge_lib.dart', 'MBridge.http', $MBridge.$http);
|
||||
runtime.registerBridgeFunc('package:bridge_lib/bridge_lib.dart',
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
import 'package:mangayomi/eval/model/m_manga.dart';
|
||||
import 'package:mangayomi/main.dart';
|
||||
import 'package:mangayomi/models/chapter.dart';
|
||||
import 'package:mangayomi/models/manga.dart';
|
||||
|
|
@ -14,10 +15,14 @@ Future<dynamic> updateMangaDetail(UpdateMangaDetailRef ref,
|
|||
return;
|
||||
}
|
||||
final source = getSource(manga.lang!, manga.source!);
|
||||
|
||||
final getManga = await ref.watch(
|
||||
getMangaDetailProvider(manga: manga.toMManga(source!), source: source)
|
||||
.future);
|
||||
MManga getManga;
|
||||
try {
|
||||
getManga = await ref.watch(
|
||||
getMangaDetailProvider(manga: manga.toMManga(source!), source: source)
|
||||
.future);
|
||||
} catch (_) {
|
||||
return;
|
||||
}
|
||||
|
||||
manga
|
||||
..imageUrl = getManga.imageUrl ?? manga.imageUrl
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
import 'dart:async';
|
||||
import 'dart:io';
|
||||
import 'package:dart_eval/stdlib/core.dart';
|
||||
import 'package:mangayomi/eval/bridge/m_http_response.dart';
|
||||
import 'package:mangayomi/eval/bridge/m_manga.dart';
|
||||
import 'package:mangayomi/eval/model/m_track.dart';
|
||||
import 'package:mangayomi/eval/compiler/compiler.dart';
|
||||
|
|
@ -37,35 +38,47 @@ Future<(List<Video>, bool)> getAnimeServers(
|
|||
runtime.args = [$MManga.wrap(source.toMManga(link: episode.url!))];
|
||||
var res = await runtime.executeLib(
|
||||
'package:mangayomi/source_code.dart', 'getVideoList');
|
||||
if (res is $List) {
|
||||
video = res.$reified.map(
|
||||
(e) {
|
||||
List<Track>? subtitles = [];
|
||||
var subs = e.subtitles;
|
||||
if (subs is $List) {
|
||||
subtitles = subs.map((e) => Track(e.file, e.label)).toList();
|
||||
} else {
|
||||
try {
|
||||
subtitles = (subs as List<MTrack>).map((e) {
|
||||
return Track(e.file, e.label);
|
||||
}).toList();
|
||||
} catch (_) {}
|
||||
}
|
||||
List<Track>? audios = [];
|
||||
var auds = e.audios;
|
||||
if (auds is $List) {
|
||||
audios = auds.map((e) => Track(e.file, e.label)).toList();
|
||||
} else {
|
||||
try {
|
||||
audios = (subs as List<MTrack>).map((e) {
|
||||
return Track(e.file, e.label);
|
||||
}).toList();
|
||||
} catch (_) {}
|
||||
}
|
||||
return Video(e.url, e.quality, e.originalUrl,
|
||||
headers: e.headers, subtitles: subtitles, audios: audios);
|
||||
},
|
||||
).toList();
|
||||
|
||||
try {
|
||||
if (res is $MHttpResponse) {
|
||||
final value = res.$reified;
|
||||
if (value.hasError!) {
|
||||
throw value.body!;
|
||||
}
|
||||
}
|
||||
if (res is $List) {
|
||||
video = res.$reified.map(
|
||||
(e) {
|
||||
List<Track>? subtitles = [];
|
||||
var subs = e.subtitles;
|
||||
if (subs is $List) {
|
||||
subtitles = subs.map((e) => Track(e.file, e.label)).toList();
|
||||
} else {
|
||||
try {
|
||||
subtitles = (subs as List<MTrack>).map((e) {
|
||||
return Track(e.file, e.label);
|
||||
}).toList();
|
||||
} catch (_) {}
|
||||
}
|
||||
List<Track>? audios = [];
|
||||
var auds = e.audios;
|
||||
if (auds is $List) {
|
||||
audios = auds.map((e) => Track(e.file, e.label)).toList();
|
||||
} else {
|
||||
try {
|
||||
audios = (subs as List<MTrack>).map((e) {
|
||||
return Track(e.file, e.label);
|
||||
}).toList();
|
||||
} catch (_) {}
|
||||
}
|
||||
return Video(e.url, e.quality, e.originalUrl,
|
||||
headers: e.headers, subtitles: subtitles, audios: audios);
|
||||
},
|
||||
).toList();
|
||||
}
|
||||
} catch (e) {
|
||||
throw e.toString();
|
||||
}
|
||||
|
||||
return (video, false);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ import 'dart:io';
|
|||
import 'dart:typed_data';
|
||||
import 'package:dart_eval/dart_eval_bridge.dart';
|
||||
import 'package:dart_eval/stdlib/core.dart';
|
||||
import 'package:mangayomi/eval/bridge/m_http_response.dart';
|
||||
import 'package:mangayomi/eval/bridge/m_manga.dart';
|
||||
import 'package:mangayomi/eval/compiler/compiler.dart';
|
||||
import 'package:mangayomi/main.dart';
|
||||
|
|
@ -69,6 +70,13 @@ Future<GetChapterUrlModel> getChapterUrl(
|
|||
runtime.args = [$MManga.wrap(source.toMManga(link: chapter.url!))];
|
||||
var res = await runtime.executeLib(
|
||||
'package:mangayomi/source_code.dart', 'getChapterPages');
|
||||
|
||||
if (res is $MHttpResponse) {
|
||||
final value = res.$reified;
|
||||
if (value.hasError!) {
|
||||
throw value.body!;
|
||||
}
|
||||
}
|
||||
if (res is $List) {
|
||||
for (var element in res.$reified) {
|
||||
if (element is $Value) {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
import 'dart:async';
|
||||
import 'package:mangayomi/eval/bridge/m_http_response.dart';
|
||||
import 'package:mangayomi/eval/compiler/compiler.dart';
|
||||
import 'package:mangayomi/models/source.dart';
|
||||
import 'package:mangayomi/eval/bridge/m_manga.dart';
|
||||
|
|
@ -25,6 +26,12 @@ Future<List<MManga?>> getLatestUpdatesManga(
|
|||
'package:mangayomi/source_code.dart',
|
||||
source.isManga! ? 'getLatestUpdatesManga' : 'getLatestUpdatesAnime',
|
||||
);
|
||||
if (res is $MHttpResponse) {
|
||||
final value = res.$reified;
|
||||
if (value.hasError!) {
|
||||
throw value.body!;
|
||||
}
|
||||
}
|
||||
if (res is $MManga) {
|
||||
final value = res.$reified;
|
||||
List<MManga> newManga = [];
|
||||
|
|
@ -48,7 +55,7 @@ Future<List<MManga?>> getLatestUpdatesManga(
|
|||
(res.$reified as List<dynamic>).map((e) => e as MManga).toList();
|
||||
}
|
||||
} catch (e) {
|
||||
throw Exception(e);
|
||||
throw e.toString();
|
||||
}
|
||||
|
||||
return latestUpdatesManga;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
import 'dart:async';
|
||||
import 'package:mangayomi/eval/bridge/m_http_response.dart';
|
||||
import 'package:mangayomi/eval/compiler/compiler.dart';
|
||||
import 'package:mangayomi/models/source.dart';
|
||||
import 'package:mangayomi/eval/bridge/m_manga.dart';
|
||||
|
|
@ -21,15 +22,17 @@ Future<MManga> getMangaDetail(
|
|||
final runtime = runtimeEval(bytecode);
|
||||
runtime.args = [$MManga.wrap(manga)];
|
||||
|
||||
var result = await runtime.executeLib('package:mangayomi/source_code.dart',
|
||||
var res = await runtime.executeLib('package:mangayomi/source_code.dart',
|
||||
source.isManga! ? 'getMangaDetail' : 'getAnimeDetail');
|
||||
try {
|
||||
if (result is $MManga) {
|
||||
final value = result.$reified;
|
||||
mangadetail = value;
|
||||
if (res is $MHttpResponse) {
|
||||
final value = res.$reified;
|
||||
if (value.hasError!) {
|
||||
throw value.body!;
|
||||
}
|
||||
} catch (_) {
|
||||
return manga;
|
||||
}
|
||||
if (res is $MManga) {
|
||||
final value = res.$reified;
|
||||
mangadetail = value;
|
||||
}
|
||||
return mangadetail!;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
import 'dart:async';
|
||||
import 'package:mangayomi/eval/bridge/m_http_response.dart';
|
||||
import 'package:mangayomi/eval/compiler/compiler.dart';
|
||||
import 'package:mangayomi/models/source.dart';
|
||||
import 'package:mangayomi/eval/bridge/m_manga.dart';
|
||||
|
|
@ -25,6 +26,13 @@ Future<List<MManga?>> getPopularManga(
|
|||
source.isManga! ? 'getPopularManga' : 'getPopularAnime',
|
||||
);
|
||||
try {
|
||||
if (res is $MHttpResponse) {
|
||||
final value = res.$reified;
|
||||
if (value.hasError!) {
|
||||
throw value.body!;
|
||||
}
|
||||
}
|
||||
|
||||
if (res is $MManga) {
|
||||
final value = res.$reified;
|
||||
List<MManga> newManga = [];
|
||||
|
|
@ -48,7 +56,7 @@ Future<List<MManga?>> getPopularManga(
|
|||
(res.$reified as List<dynamic>).map((e) => e as MManga).toList();
|
||||
}
|
||||
} catch (e) {
|
||||
throw Exception(e);
|
||||
throw e.toString();
|
||||
}
|
||||
|
||||
return popularManga;
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
import 'package:mangayomi/eval/bridge/m_http_response.dart';
|
||||
import 'package:mangayomi/eval/compiler/compiler.dart';
|
||||
import 'package:mangayomi/models/source.dart';
|
||||
import 'package:mangayomi/eval/bridge/m_manga.dart';
|
||||
|
|
@ -27,6 +28,12 @@ Future<List<MManga?>> searchManga(
|
|||
source.isManga! ? 'searchManga' : 'searchAnime',
|
||||
);
|
||||
try {
|
||||
if (res is $MHttpResponse) {
|
||||
final value = res.$reified;
|
||||
if (value.hasError!) {
|
||||
throw value.body!;
|
||||
}
|
||||
}
|
||||
if (res is $MManga) {
|
||||
final value = res.$reified;
|
||||
List<MManga> newManga = [];
|
||||
|
|
@ -49,7 +56,7 @@ Future<List<MManga?>> searchManga(
|
|||
manga = (res.$reified as List<dynamic>).map((e) => e as MManga).toList();
|
||||
}
|
||||
} catch (e) {
|
||||
throw Exception(e);
|
||||
throw e.toString();
|
||||
}
|
||||
return manga;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue