Don't cache errors anymore and abstarcted sendMessage Method
This commit is contained in:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user