Add Supa account and search changes
This commit is contained in:
@@ -48,23 +48,6 @@ part 'tab_state.g.dart';
|
||||
|
||||
@Riverpod(keepAlive: true)
|
||||
class TabStates extends _$TabStates {
|
||||
/// Disposes images from a TabState to free GPU memory.
|
||||
void _disposeTabImages(TabState tab) {
|
||||
tab.icon?.dispose();
|
||||
tab.thumbnail?.dispose();
|
||||
}
|
||||
|
||||
/// Updates state while disposing images from removed tabs.
|
||||
void _updateState(Map<String, TabState> newState) {
|
||||
// Find and dispose images from tabs that are being removed
|
||||
for (final tabId in state.keys) {
|
||||
if (!newState.containsKey(tabId)) {
|
||||
_disposeTabImages(state[tabId]!);
|
||||
}
|
||||
}
|
||||
|
||||
state = newState;
|
||||
}
|
||||
|
||||
Future<void> _onTabContentStateChange(TabContentState contentState) async {
|
||||
final current = await patchedState(contentState.id);
|
||||
@@ -103,7 +86,7 @@ class TabStates extends _$TabStates {
|
||||
showToolbarAsExpanded: contentState.showToolbarAsExpanded,
|
||||
);
|
||||
|
||||
_updateState({...state}..[contentState.id] = newState);
|
||||
state = {...state}..[contentState.id] = newState;
|
||||
|
||||
if (newState.isFinishedLoading) {
|
||||
ref
|
||||
@@ -139,9 +122,6 @@ class TabStates extends _$TabStates {
|
||||
final image = await bytes.mapNotNull((bytes) => tryDecodeImage(bytes));
|
||||
final current = state[tabId] ?? TabState.$default(tabId);
|
||||
|
||||
// Dispose old icon only after successfully creating new one
|
||||
current.icon?.dispose();
|
||||
|
||||
state = {...state}..[tabId] = current.copyWith.icon(image);
|
||||
}
|
||||
|
||||
@@ -151,9 +131,6 @@ class TabStates extends _$TabStates {
|
||||
final image = await bytes.mapNotNull((bytes) => tryDecodeImage(bytes));
|
||||
final current = state[tabId] ?? TabState.$default(tabId);
|
||||
|
||||
// Dispose old thumbnail only after successfully creating new one
|
||||
current.thumbnail?.dispose();
|
||||
|
||||
state = {...state}..[tabId] = current.copyWith.thumbnail(image);
|
||||
}
|
||||
|
||||
@@ -368,12 +345,6 @@ class TabStates extends _$TabStates {
|
||||
);
|
||||
|
||||
ref.onDispose(() async {
|
||||
// Dispose all remaining tab images
|
||||
for (final tab in state.values) {
|
||||
_disposeTabImages(tab);
|
||||
}
|
||||
|
||||
// Cancel all stream subscriptions
|
||||
for (final sub in subscriptions) {
|
||||
await sub.cancel();
|
||||
}
|
||||
|
||||
@@ -41,7 +41,7 @@ final class TabStatesProvider
|
||||
}
|
||||
}
|
||||
|
||||
String _$tabStatesHash() => r'6fc9a91b1343f9ae0b442100bed20e42448afa37';
|
||||
String _$tabStatesHash() => r'd7efef406dd132a3ef1a67da06c794d18ccb484a';
|
||||
|
||||
abstract class _$TabStates extends $Notifier<Map<String, TabState>> {
|
||||
Map<String, TabState> build();
|
||||
|
||||
@@ -35,8 +35,7 @@ part 'web_extensions_state.g.dart';
|
||||
class WebExtensionsState extends _$WebExtensionsState {
|
||||
late final LRUCache<String, EquatableImage> _imageCache;
|
||||
|
||||
WebExtensionsState()
|
||||
: _imageCache = LRUCache(50, onEvict: (image) => image.dispose());
|
||||
WebExtensionsState() : _imageCache = LRUCache(50);
|
||||
|
||||
void _onExtensionUpdate(ExtensionDataEvent event) {
|
||||
if (!ref.mounted) {
|
||||
@@ -46,11 +45,6 @@ class WebExtensionsState extends _$WebExtensionsState {
|
||||
final ExtensionDataEvent(:extensionId, :data) = event;
|
||||
|
||||
if (data != null) {
|
||||
final cachedIcon = _imageCache.get(extensionId);
|
||||
if (cachedIcon != null && cachedIcon.value == null) {
|
||||
_imageCache.remove(extensionId);
|
||||
}
|
||||
|
||||
final current =
|
||||
state[extensionId] ??
|
||||
WebExtensionState(
|
||||
@@ -74,7 +68,6 @@ class WebExtensionsState extends _$WebExtensionsState {
|
||||
} else {
|
||||
if (state.containsKey(extensionId)) {
|
||||
state = {...state}..remove(extensionId);
|
||||
// remove() triggers onEvict which handles disposal
|
||||
_imageCache.remove(extensionId);
|
||||
}
|
||||
}
|
||||
@@ -91,7 +84,6 @@ class WebExtensionsState extends _$WebExtensionsState {
|
||||
}
|
||||
|
||||
if (image != null) {
|
||||
// set() will evict the old entry via onEvict callback, which handles disposal
|
||||
_imageCache.set(extensionId, image);
|
||||
|
||||
if (state.containsKey(extensionId)) {
|
||||
@@ -198,7 +190,6 @@ class WebExtensionsState extends _$WebExtensionsState {
|
||||
// Dispose all cached images
|
||||
_imageCache.clear();
|
||||
|
||||
// Cancel all stream subscriptions
|
||||
for (final sub in subscriptions) {
|
||||
unawaited(sub.cancel());
|
||||
}
|
||||
|
||||
@@ -62,7 +62,7 @@ final class WebExtensionsStateProvider
|
||||
}
|
||||
|
||||
String _$webExtensionsStateHash() =>
|
||||
r'e067323e9a0a466e46e0c4d529667950ee62d4ca';
|
||||
r'59379bbaa9ae867f9dc50dae5c0f06b159faaedf';
|
||||
|
||||
final class WebExtensionsStateFamily extends $Family
|
||||
with
|
||||
|
||||
Reference in New Issue
Block a user