diff --git a/app/lib/domain/entities/equatable_image.dart b/app/lib/domain/entities/equatable_image.dart index 41439026..259d5ff1 100644 --- a/app/lib/domain/entities/equatable_image.dart +++ b/app/lib/domain/entities/equatable_image.dart @@ -1,18 +1,18 @@ import 'dart:ui'; -import 'package:lensai/extensions/image.dart'; - class EquatableImage { final Image value; final int? _imageHash; EquatableImage(this.value, {required int? hash}) : _imageHash = hash; - static Future calculate(Image image) async { - final imageHash = await image.calculateHash(); + //For now we only calculate the has from encoded image on decoding - return EquatableImage(image, hash: imageHash); - } + // static Future calculate(Image image) async { + // final imageHash = await image.calculateHash(); + + // return EquatableImage(image, hash: imageHash); + // } @override int get hashCode => _imageHash.hashCode; diff --git a/app/lib/extensions/image.dart b/app/lib/extensions/image.dart index 31ea2012..cd46d759 100644 --- a/app/lib/extensions/image.dart +++ b/app/lib/extensions/image.dart @@ -1,6 +1,5 @@ import 'dart:ui'; -import 'package:lensai/domain/entities/equatable_image.dart'; import 'package:xxh3/xxh3.dart'; extension ImageHash on Image { @@ -14,7 +13,7 @@ extension ImageHash on Image { return null; } - Future toEquatable() { - return EquatableImage.calculate(this); - } + // Future toEquatable() { + // return EquatableImage.calculate(this); + // } } diff --git a/app/lib/features/geckoview/domain/entities/browser_icon.dart b/app/lib/features/geckoview/domain/entities/browser_icon.dart index f006ad9b..2f24e3ae 100644 --- a/app/lib/features/geckoview/domain/entities/browser_icon.dart +++ b/app/lib/features/geckoview/domain/entities/browser_icon.dart @@ -18,12 +18,10 @@ class BrowserIcon with FastEquatable { required Color? dominantColor, required IconSource source, }) async { - final image = await tryDecodeImage( - bytes, - ).then((image) => image!.toEquatable()); + final image = await tryDecodeImage(bytes); return BrowserIcon( - image: image, + image: image!, dominantColor: dominantColor, source: source, ); diff --git a/app/lib/features/geckoview/domain/providers/tab_state.dart b/app/lib/features/geckoview/domain/providers/tab_state.dart index 3d7d44c9..54454d5e 100644 --- a/app/lib/features/geckoview/domain/providers/tab_state.dart +++ b/app/lib/features/geckoview/domain/providers/tab_state.dart @@ -39,10 +39,7 @@ class TabStates extends _$TabStates { Future _onIconChange(IconChangeEvent event) async { final IconChangeEvent(:tabId, :bytes) = event; - final image = await bytes.mapNotNull( - (bytes) => - tryDecodeImage(bytes).then((image) async => image?.toEquatable()), - ); + final image = await bytes.mapNotNull((bytes) => tryDecodeImage(bytes)); final current = state[tabId] ?? TabState.$default(tabId); state = {...state}..[tabId] = current.copyWith.icon(image); @@ -51,10 +48,7 @@ class TabStates extends _$TabStates { Future _onThumbnailChange(ThumbnailEvent event) async { final ThumbnailEvent(:tabId, :bytes) = event; - final image = await bytes.mapNotNull( - (bytes) => - tryDecodeImage(bytes).then((image) async => image?.toEquatable()), - ); + final image = await bytes.mapNotNull((bytes) => tryDecodeImage(bytes)); final current = state[tabId] ?? TabState.$default(tabId); state = {...state}..[tabId] = current.copyWith.thumbnail(image); diff --git a/app/lib/features/geckoview/domain/providers/tab_state.g.dart b/app/lib/features/geckoview/domain/providers/tab_state.g.dart index fafd59b6..15e8f3c9 100644 --- a/app/lib/features/geckoview/domain/providers/tab_state.g.dart +++ b/app/lib/features/geckoview/domain/providers/tab_state.g.dart @@ -173,7 +173,7 @@ final selectedTabStateProvider = AutoDisposeProvider.internal( @Deprecated('Will be removed in 3.0. Use Ref instead') // ignore: unused_element typedef SelectedTabStateRef = AutoDisposeProviderRef; -String _$tabStatesHash() => r'c2169e467962d006015bf50d09e93b3f4bf596e6'; +String _$tabStatesHash() => r'2f4af9df4d648f7fb940f02e14f4a6762bb21d8a'; /// See also [TabStates]. @ProviderFor(TabStates) diff --git a/app/lib/features/geckoview/domain/providers/web_extensions_state.dart b/app/lib/features/geckoview/domain/providers/web_extensions_state.dart index 4eca8444..303a3e61 100644 --- a/app/lib/features/geckoview/domain/providers/web_extensions_state.dart +++ b/app/lib/features/geckoview/domain/providers/web_extensions_state.dart @@ -50,9 +50,7 @@ class WebExtensionsState extends _$WebExtensionsState { Future _onIconChange(ExtensionIconEvent event) async { final ExtensionIconEvent(:extensionId, :bytes) = event; - final image = await tryDecodeImage( - bytes, - ).then((image) async => image?.toEquatable()); + final image = await tryDecodeImage(bytes); if (image != null) { if (_imageCache[extensionId] != image) { diff --git a/app/lib/features/geckoview/domain/providers/web_extensions_state.g.dart b/app/lib/features/geckoview/domain/providers/web_extensions_state.g.dart index 65a5e87f..8aeb5f8d 100644 --- a/app/lib/features/geckoview/domain/providers/web_extensions_state.g.dart +++ b/app/lib/features/geckoview/domain/providers/web_extensions_state.g.dart @@ -7,7 +7,7 @@ part of 'web_extensions_state.dart'; // ************************************************************************** String _$webExtensionsStateHash() => - r'7fd0cb313fb433f7896bfe0f89a4545f94f58793'; + r'9382461e7e72c31946a5308642baaac307977a15'; /// Copied from Dart SDK class _SystemHash { diff --git a/app/lib/features/geckoview/features/search/presentation/widgets/search_modules/history_suggestions.dart b/app/lib/features/geckoview/features/search/presentation/widgets/search_modules/history_suggestions.dart index 3497ed77..482da42c 100644 --- a/app/lib/features/geckoview/features/search/presentation/widgets/search_modules/history_suggestions.dart +++ b/app/lib/features/geckoview/features/search/presentation/widgets/search_modules/history_suggestions.dart @@ -66,7 +66,7 @@ class HistorySuggestions extends HookConsumerWidget { return ListTile( leading: RepaintBoundary( child: RawImage( - image: icon.data, + image: icon.data?.value, height: 24, width: 24, ), diff --git a/app/lib/features/geckoview/utils/image_helper.dart b/app/lib/features/geckoview/utils/image_helper.dart index 00327ec3..9866de2a 100644 --- a/app/lib/features/geckoview/utils/image_helper.dart +++ b/app/lib/features/geckoview/utils/image_helper.dart @@ -1,12 +1,13 @@ import 'dart:typed_data'; import 'dart:ui'; +import 'package:lensai/domain/entities/equatable_image.dart'; import 'package:lensai/utils/lru_cache.dart'; import 'package:xxh3/xxh3.dart'; -final _cache = LRUCache(100); +final _cache = LRUCache(100); -Future tryDecodeImage( +Future tryDecodeImage( Uint8List bytes, { int? targetWidth, int? targetHeight, @@ -28,9 +29,9 @@ Future tryDecodeImage( ); final frameInfo = await codec.getNextFrame(); - final image = frameInfo.image; + final image = EquatableImage(frameInfo.image, hash: digest); - if (image.width > 0) { + if (image.value.width > 0) { _cache.set(digest, image); return image; }