mirror of
https://github.com/KRTirtho/spotube.git
synced 2025-09-13 07:55:18 +00:00
chore: add proper error handling
This commit is contained in:
parent
7491175bb6
commit
9a861b9954
@ -1,6 +1,8 @@
|
|||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
|
|
||||||
|
import 'package:flutter_js/extensions/fetch.dart';
|
||||||
|
import 'package:flutter_js/extensions/xhr.dart';
|
||||||
import 'package:flutter_js/flutter_js.dart';
|
import 'package:flutter_js/flutter_js.dart';
|
||||||
import 'package:spotube/models/metadata/metadata.dart';
|
import 'package:spotube/models/metadata/metadata.dart';
|
||||||
import 'package:spotube/services/logger/logger.dart';
|
import 'package:spotube/services/logger/logger.dart';
|
||||||
@ -11,11 +13,14 @@ const int defaultMetadataOffset = 0;
|
|||||||
/// Signature for metadata and related methods that will return Spotube native
|
/// Signature for metadata and related methods that will return Spotube native
|
||||||
/// objects e.g. SpotubeTrack, SpotubePlaylist, etc.
|
/// objects e.g. SpotubeTrack, SpotubePlaylist, etc.
|
||||||
class MetadataApiSignature {
|
class MetadataApiSignature {
|
||||||
late final JavascriptRuntime runtime;
|
final JavascriptRuntime runtime;
|
||||||
|
|
||||||
MetadataApiSignature(String libraryCode) {
|
MetadataApiSignature._(this.runtime);
|
||||||
runtime = getJavascriptRuntime(xhr: true);
|
|
||||||
|
static Future<MetadataApiSignature> init(String libraryCode) async {
|
||||||
|
final runtime = getJavascriptRuntime(xhr: true).enableXhr();
|
||||||
runtime.enableHandlePromises();
|
runtime.enableHandlePromises();
|
||||||
|
await runtime.enableFetch();
|
||||||
|
|
||||||
Timer.periodic(
|
Timer.periodic(
|
||||||
const Duration(milliseconds: 100),
|
const Duration(milliseconds: 100),
|
||||||
@ -24,12 +29,20 @@ class MetadataApiSignature {
|
|||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
runtime.evaluate(
|
final res = runtime.evaluate(
|
||||||
"""
|
"""
|
||||||
;$libraryCode;
|
;$libraryCode;
|
||||||
const metadataApi = new MetadataApi();
|
const metadataApi = new MetadataApi();
|
||||||
""",
|
""",
|
||||||
);
|
);
|
||||||
|
|
||||||
|
if (res.isError) {
|
||||||
|
AppLogger.reportError(
|
||||||
|
"Error evaluating code: $libraryCode\n${res.rawResult}",
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return MetadataApiSignature._(runtime);
|
||||||
}
|
}
|
||||||
|
|
||||||
void dispose() {
|
void dispose() {
|
||||||
@ -40,8 +53,8 @@ class MetadataApiSignature {
|
|||||||
final completer = Completer();
|
final completer = Completer();
|
||||||
runtime.onMessage(method, (result) {
|
runtime.onMessage(method, (result) {
|
||||||
try {
|
try {
|
||||||
if (result == null) {
|
if (result is Map && result.containsKey("error")) {
|
||||||
completer.completeError("Result is null");
|
completer.completeError(result["error"]);
|
||||||
} else {
|
} else {
|
||||||
completer.complete(result is String ? jsonDecode(result) : result);
|
completer.complete(result is String ? jsonDecode(result) : result);
|
||||||
}
|
}
|
||||||
@ -52,13 +65,19 @@ class MetadataApiSignature {
|
|||||||
final code = """
|
final code = """
|
||||||
$method(...${args != null ? jsonEncode(args) : "[]"})
|
$method(...${args != null ? jsonEncode(args) : "[]"})
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
sendMessage("$method", JSON.stringify(res));
|
try {
|
||||||
}).catch((err) => {
|
sendMessage("$method", JSON.stringify(res));
|
||||||
sendMessage("$method", null);
|
} catch (e) {
|
||||||
async}){
|
console.error("Failed to send message in $method.then: ", `\${e.toString()}\n\${e.stack.toString()}`);
|
||||||
} final res"metadataApi.=>", [limit, offset] ;= await invoke()
|
}
|
||||||
|
}).catch((e) => {
|
||||||
return res.map(es.fromJson).toList();
|
try {
|
||||||
|
console.error("Error in $method: ", `\${e.toString()}\n\${e.stack.toString()}`);
|
||||||
|
sendMessage("$method", JSON.stringify({error: `\${e.toString()}\n\${e.stack.toString()}`}));
|
||||||
|
} catch (e) {
|
||||||
|
console.error("Failed to send message in $method.catch: ", `\${e.toString()}\n\${e.stack.toString()}`);
|
||||||
|
}
|
||||||
|
});
|
||||||
""";
|
""";
|
||||||
|
|
||||||
final res = await runtime.evaluateAsync(code);
|
final res = await runtime.evaluateAsync(code);
|
||||||
|
Loading…
Reference in New Issue
Block a user