Don't cache errors anymore and abstarcted sendMessage Method

This commit is contained in:
Kevin Rodrigues Borges
2026-05-12 22:35:11 +01:00
parent 1200d45e68
commit 18af239f88

View File

@@ -103,114 +103,66 @@ class AniyomiBridge {
return _isReady;
}
Future<List<JSAnime>> getAnimeSearchResults(String query, int page, String packageName) async {
Map<String, dynamic> args = {
'query': query,
'page': page,
'source': packageName,
};
Future<List<JSAnime>>? cachedResponse = _getCachedResponse<Future<List<JSAnime>>>(JniIsolateMessageType.getAnimeSearchResults, args);
if (cachedResponse != null) return cachedResponse;
Future<List<JSAnime>> response = _sendJniIsolateMessage<List<JSAnime>>(
JniIsolateMessage(
id: _random.nextInt(1 << 32),
type: JniIsolateMessageType.getAnimeSearchResults,
args: args,
),
Future<List<JSAnime>> getAnimeSearchResults(String query, int page, String packageName) {
return _sendJniIsolateMessageWithCache<List<JSAnime>>(
JniIsolateMessageType.getAnimeSearchResults,
{
'query': query,
'page': page,
'source': packageName,
},
);
_cacheResponse(response, JniIsolateMessageType.getAnimeSearchResults, args);
return response;
}
Future<List<JSManga>> getMangaSearchResults(String query, int page, String packageName) async {
Map<String, dynamic> args = {
'query': query,
'page': page,
'source': packageName,
};
Future<List<JSManga>>? cachedResponse = _getCachedResponse<Future<List<JSManga>>>(JniIsolateMessageType.getMangaSearchResults, args);
if (cachedResponse != null) return cachedResponse;
Future<List<JSManga>> response = _sendJniIsolateMessage<List<JSManga>>(
JniIsolateMessage(
id: _random.nextInt(1 << 32),
type: JniIsolateMessageType.getMangaSearchResults,
args: args,
),
Future<List<JSManga>> getMangaSearchResults(String query, int page, String packageName) {
return _sendJniIsolateMessageWithCache<List<JSManga>>(
JniIsolateMessageType.getMangaSearchResults,
{
'query': query,
'page': page,
'source': packageName,
},
);
_cacheResponse(response, JniIsolateMessageType.getMangaSearchResults, args);
return response;
}
Future<List<JSEpisode>> getEpisodeList(JSAnime sAnime, String packageName) async {
Map<String, dynamic> args = {
'sAnime': sAnime,
'source': packageName,
};
Future<List<JSEpisode>>? cachedResponse = _getCachedResponse<Future<List<JSEpisode>>>(JniIsolateMessageType.getEpisodeList, args);
if (cachedResponse != null) return cachedResponse;
Future<List<JSEpisode>> response = _sendJniIsolateMessage<List<JSEpisode>>(
JniIsolateMessage(
id: _random.nextInt(1 << 32),
type: JniIsolateMessageType.getEpisodeList,
args: args,
),
Future<List<JSEpisode>> getEpisodeList(JSAnime sAnime, String packageName) {
return _sendJniIsolateMessageWithCache<List<JSEpisode>>(
JniIsolateMessageType.getEpisodeList,
{
'sAnime': sAnime,
'source': packageName,
},
);
_cacheResponse(response, JniIsolateMessageType.getEpisodeList, args);
return response;
}
Future<List<JSChapter>> getChapterList(JSManga sManga, String packageName) async {
Map<String, dynamic> args = {
'sManga': sManga,
'source': packageName,
};
Future<List<JSChapter>>? cachedResponse = _getCachedResponse<Future<List<JSChapter>>>(JniIsolateMessageType.getChapterList, args);
if (cachedResponse != null) return cachedResponse;
Future<List<JSChapter>> response = _sendJniIsolateMessage<List<JSChapter>>(
JniIsolateMessage(
id: _random.nextInt(1 << 32),
type: JniIsolateMessageType.getChapterList,
args: args,
),
Future<List<JSChapter>> getChapterList(JSManga sManga, String packageName) {
return _sendJniIsolateMessageWithCache<List<JSChapter>>(
JniIsolateMessageType.getChapterList,
{
'sManga': sManga,
'source': packageName,
},
);
_cacheResponse(response, JniIsolateMessageType.getChapterList, args);
return response;
}
Future<List<JVideo>> getVideoList(JSEpisode sEpisode, String packageName) async {
Map<String, dynamic> args = {
'sEpisode': sEpisode,
'source': packageName,
};
Future<List<JVideo>>? cachedResponse = _getCachedResponse<Future<List<JVideo>>>(JniIsolateMessageType.getVideoList, args);
if (cachedResponse != null) return cachedResponse;
Future<List<JVideo>> response = _sendJniIsolateMessage<List<JVideo>>(
JniIsolateMessage(
id: _random.nextInt(1 << 32),
type: JniIsolateMessageType.getVideoList,
args: args,
),
Future<List<JVideo>> getVideoList(JSEpisode sEpisode, String packageName) {
return _sendJniIsolateMessageWithCache<List<JVideo>>(
JniIsolateMessageType.getVideoList,
{
'sEpisode': sEpisode,
'source': packageName,
},
);
_cacheResponse(response, JniIsolateMessageType.getVideoList, args);
return response;
}
Future<List<JPage>> getPageList(JSChapter sChapter, String packageName) async {
Map<String, dynamic> args = {
'sChapter': sChapter,
'source': packageName,
};
Future<List<JPage>>? cachedResponse = _getCachedResponse<Future<List<JPage>>>(JniIsolateMessageType.getPageList, args);
if (cachedResponse != null) return cachedResponse;
Future<List<JPage>> response = _sendJniIsolateMessage<List<JPage>>(
JniIsolateMessage(
id: _random.nextInt(1 << 32),
type: JniIsolateMessageType.getPageList,
args: args,
),
Future<List<JPage>> getPageList(JSChapter sChapter, String packageName) {
return _sendJniIsolateMessageWithCache<List<JPage>>(
JniIsolateMessageType.getPageList,
{
'sChapter': sChapter,
'source': packageName,
},
);
_cacheResponse(response, JniIsolateMessageType.getPageList, args);
return response;
}
Future<void> loadAnimeExtension(String extensionUrl, String packageName) async {
@@ -361,6 +313,30 @@ class AniyomiBridge {
);
}
Future<T> _sendJniIsolateMessageWithCache<T>(
JniIsolateMessageType messageType,
Map<String, dynamic> args,
) {
final cachedResult = _getCachedResponse<T>(messageType, args);
if (cachedResult != null) {
_logger.d("Cache hit for ${messageType.name}, returning cached result");
return Future.value(cachedResult);
}
final message = JniIsolateMessage(
id: _random.nextInt(1 << 32),
type: messageType,
args: args,
);
final future = _sendJniIsolateMessage<T>(message);
// Only cache on success, never cache errors
future.then((result) {
_cacheResponse(result, messageType, args);
}).catchError((error) {
_logger.d("Not caching error for ${messageType.name}: $error");
});
return future;
}
String _getDylibDir(Directory supportDirectory) {
String executablePath = File(Platform.resolvedExecutable).parent.path;
if (Platform.isLinux) {