diff --git a/violet/lib/pages/bookmark/crop_bookmark.dart b/violet/lib/pages/bookmark/crop_bookmark.dart index a5146d3a8..163674b8c 100644 --- a/violet/lib/pages/bookmark/crop_bookmark.dart +++ b/violet/lib/pages/bookmark/crop_bookmark.dart @@ -17,8 +17,6 @@ import 'package:material_design_icons_flutter/material_design_icons_flutter.dart import 'package:path_provider/path_provider.dart'; import 'package:provider/provider.dart'; import 'package:pull_down_button/pull_down_button.dart'; -import 'package:violet/component/hentai.dart'; -import 'package:violet/component/image_provider.dart'; import 'package:violet/database/user/bookmark.dart'; import 'package:violet/database/user/record.dart'; import 'package:violet/log/log.dart'; @@ -150,22 +148,11 @@ class _CropBookmarkPageState extends State { return FutureBuilder( future: Future.delayed(const Duration(milliseconds: 100)).then((value) async { - VioletImageProvider provider; - - if (ProviderManager.isExists(articleId)) { - provider = await ProviderManager.get(articleId); - } else { - final query = - (await HentaiManager.idSearch(articleId.toString())).results; - provider = await HentaiManager.getImageProvider(query[0]); - await provider.init(); - ProviderManager.insert(query[0].id(), provider); - } - - return ( - imagesUrlForEvict![index] = await provider.getImageUrl(page), - await provider.getHeader(page) - ); + final provider = await getImageProviderFromId(articleId); + final image = await provider.getImageUrl(page); + final header = await provider.getHeader(page); + imagesUrlForEvict![index] = image; + return (image, header); }), builder: (context, AsyncSnapshot<(String, Map)> snapshot) { diff --git a/violet/lib/pages/common/utils.dart b/violet/lib/pages/common/utils.dart index 51e1f3f0f..cfcc99ddf 100644 --- a/violet/lib/pages/common/utils.dart +++ b/violet/lib/pages/common/utils.dart @@ -44,15 +44,7 @@ Future showArticleInfoRaw({ queryResult = await HentaiManager.idQueryWeb('$id'); } - late final VioletImageProvider provider; - if (ProviderManager.isExists(id)) { - provider = await ProviderManager.get(id); - } else { - provider = await HentaiManager.getImageProvider(queryResult); - await provider.init(); - ProviderManager.insert(id, provider); - } - + final provider = await getImageProvider(queryResult); final thumbnail = await provider.getThumbnailUrl(); final headers = await provider.getHeader(0); @@ -100,3 +92,25 @@ Future showArticleInfoRaw({ }, ); } + +Future getImageProviderFromId(int id) async { + if (ProviderManager.isExists(id)) { + return await ProviderManager.get(id); + } + + final query = (await HentaiManager.idSearch(id.toString())).results; + return getImageProvider(query[0]); +} + +Future getImageProvider(QueryResult queryResult) async { + final id = queryResult.id(); + if (ProviderManager.isExists(id)) { + return await ProviderManager.get(id); + } + + final provider = await HentaiManager.getImageProvider(queryResult); + await provider.init(); + ProviderManager.insert(id, provider); + + return provider; +} diff --git a/violet/lib/pages/lab/lab/search_message.dart b/violet/lib/pages/lab/lab/search_message.dart index e7abaf724..428978c09 100644 --- a/violet/lib/pages/lab/lab/search_message.dart +++ b/violet/lib/pages/lab/lab/search_message.dart @@ -6,10 +6,8 @@ import 'dart:async'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:flutter_typeahead/flutter_typeahead.dart'; -import 'package:violet/component/hentai.dart'; import 'package:violet/component/hitomi/message_search.dart'; import 'package:violet/component/hitomi/tag_translate.dart'; -import 'package:violet/component/image_provider.dart'; import 'package:violet/other/dialogs.dart'; import 'package:violet/pages/common/utils.dart'; import 'package:violet/pages/lab/lab/search_message_rank.dart'; @@ -18,7 +16,6 @@ import 'package:violet/pages/segment/platform_navigator.dart'; import 'package:violet/script/script_manager.dart'; import 'package:violet/server/violet.dart'; import 'package:violet/util/evict_image_urls.dart'; -import 'package:violet/widgets/article_item/image_provider_manager.dart'; import 'package:violet/widgets/v_cached_network_image.dart'; class LabSearchMessage extends StatefulWidget { @@ -95,22 +92,12 @@ class _LabSearchMessageState extends State { return FutureBuilder( future: Future.delayed(const Duration(milliseconds: 100)) .then((value) async { - VioletImageProvider provider; - if (ProviderManager.isExists(e.id)) { - provider = await ProviderManager.get(e.id); - } else { - final query = - (await HentaiManager.idSearch(e.id.toString())) - .results; - provider = await HentaiManager.getImageProvider(query[0]); - await provider.init(); - ProviderManager.insert(query[0].id(), provider); - } + final provider = await getImageProviderFromId(e.id); + final image = await provider.getImageUrl(e.page); + final header = await provider.getHeader(e.page); + _urls![index] = image; - return ( - _urls![index] = await provider.getImageUrl(e.page), - await provider.getHeader(e.page) - ); + return (image, header); }), builder: (context, AsyncSnapshot<(String, Map)> snapshot) { @@ -258,22 +245,10 @@ class _LabSearchMessageState extends State { onChanged: (String? value) async { if (value == selected) return; messages.clear(); - setState(() { selected = value!; }); - - messages = (await VioletServer.searchMessage( - 'contains', text.text))!; - - evictImageUrls(_urls); - - _height = List.filled(messages.length, 0); - _keys = List.generate( - messages.length, (index) => GlobalKey()); - _urls = List.filled(messages.length, ''); - - setState(() {}); + _doSearch(); }, ), ), @@ -367,9 +342,13 @@ class _LabSearchMessageState extends State { if (latestSearch == text.text) return; latestSearch = text.text; messages.clear(); - setState(() {}); - messages = (await VioletServer.searchMessage('contains', text.text))!; + _doSearch(); + } + + _doSearch() async { + messages = + (await VioletServer.searchMessage(selected.toLowerCase(), text.text))!; evictImageUrls(_urls); diff --git a/violet/lib/widgets/article_item/article_list_item_widget_controller.dart b/violet/lib/widgets/article_item/article_list_item_widget_controller.dart index 847c3d9d9..bebfe38d2 100644 --- a/violet/lib/widgets/article_item/article_list_item_widget_controller.dart +++ b/violet/lib/widgets/article_item/article_list_item_widget_controller.dart @@ -8,13 +8,11 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:html_unescape/html_unescape.dart'; import 'package:intl/intl.dart'; -import 'package:violet/component/hentai.dart'; -import 'package:violet/component/image_provider.dart'; import 'package:violet/database/user/bookmark.dart'; import 'package:violet/database/user/record.dart'; import 'package:violet/model/article_list_item.dart'; +import 'package:violet/pages/common/utils.dart'; import 'package:violet/settings/settings.dart'; -import 'package:violet/widgets/article_item/image_provider_manager.dart'; class ArticleListItemWidgetController extends GetxController { final ArticleListItem articleListItem; @@ -130,15 +128,7 @@ class ArticleListItemWidgetController extends GetxController { } setProvider() async { - VioletImageProvider provider; - - if (!ProviderManager.isExists(articleListItem.queryResult.id())) { - provider = - await HentaiManager.getImageProvider(articleListItem.queryResult); - ProviderManager.insert(articleListItem.queryResult.id(), provider); - } else { - provider = await ProviderManager.get(articleListItem.queryResult.id()); - } + final provider = await getImageProvider(articleListItem.queryResult); thumbnail.value = await provider.getThumbnailUrl(); headers.value = await provider.getHeader(0);