switch to equatablevalue
This commit is contained in:
@@ -2,17 +2,9 @@ import 'dart:ui';
|
|||||||
|
|
||||||
class EquatableImage {
|
class EquatableImage {
|
||||||
final Image value;
|
final Image value;
|
||||||
final int? _imageHash;
|
final int _imageHash;
|
||||||
|
|
||||||
EquatableImage(this.value, {required int? hash}) : _imageHash = hash;
|
EquatableImage(this.value, {required int hash}) : _imageHash = hash;
|
||||||
|
|
||||||
//For now we only calculate the has from encoded image on decoding
|
|
||||||
|
|
||||||
// static Future<EquatableImage> calculate(Image image) async {
|
|
||||||
// final imageHash = await image.calculateHash();
|
|
||||||
|
|
||||||
// return EquatableImage(image, hash: imageHash);
|
|
||||||
// }
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
int get hashCode => _imageHash.hashCode;
|
int get hashCode => _imageHash.hashCode;
|
||||||
|
|||||||
@@ -1,18 +0,0 @@
|
|||||||
import 'package:fast_equatable/fast_equatable.dart';
|
|
||||||
|
|
||||||
class EquatableCollection<T> with FastEquatable {
|
|
||||||
final T collection;
|
|
||||||
final bool immutable;
|
|
||||||
|
|
||||||
EquatableCollection(this.collection, {required this.immutable})
|
|
||||||
: assert(
|
|
||||||
collection is Map || collection is Iterable || collection == null,
|
|
||||||
'Collection type not supported',
|
|
||||||
);
|
|
||||||
|
|
||||||
@override
|
|
||||||
bool get cacheHash => immutable;
|
|
||||||
|
|
||||||
@override
|
|
||||||
List<Object?> get hashParameters => [collection, immutable];
|
|
||||||
}
|
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
|
||||||
|
import 'package:fast_equatable/fast_equatable.dart';
|
||||||
import 'package:flutter_mozilla_components/flutter_mozilla_components.dart';
|
import 'package:flutter_mozilla_components/flutter_mozilla_components.dart';
|
||||||
import 'package:lensai/domain/entities/equatable_iterable.dart';
|
|
||||||
import 'package:lensai/features/geckoview/domain/providers.dart';
|
import 'package:lensai/features/geckoview/domain/providers.dart';
|
||||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||||
|
|
||||||
@@ -10,7 +10,7 @@ part 'tab_list.g.dart';
|
|||||||
@Riverpod(keepAlive: true)
|
@Riverpod(keepAlive: true)
|
||||||
class TabList extends _$TabList {
|
class TabList extends _$TabList {
|
||||||
@override
|
@override
|
||||||
EquatableCollection<List<String>> build() {
|
EquatableValue<List<String>> build() {
|
||||||
final eventService = ref.watch(eventServiceProvider);
|
final eventService = ref.watch(eventServiceProvider);
|
||||||
|
|
||||||
ref.listen(fireImmediately: true, engineReadyStateProvider, (
|
ref.listen(fireImmediately: true, engineReadyStateProvider, (
|
||||||
@@ -23,7 +23,7 @@ class TabList extends _$TabList {
|
|||||||
});
|
});
|
||||||
|
|
||||||
final tabListSub = eventService.tabListEvents.listen((tabs) {
|
final tabListSub = eventService.tabListEvents.listen((tabs) {
|
||||||
final equatableTabs = EquatableCollection(tabs, immutable: true);
|
final equatableTabs = EquatableValue(tabs);
|
||||||
|
|
||||||
if (equatableTabs != state) {
|
if (equatableTabs != state) {
|
||||||
state = equatableTabs;
|
state = equatableTabs;
|
||||||
@@ -34,6 +34,6 @@ class TabList extends _$TabList {
|
|||||||
unawaited(tabListSub.cancel());
|
unawaited(tabListSub.cancel());
|
||||||
});
|
});
|
||||||
|
|
||||||
return EquatableCollection([], immutable: true);
|
return EquatableValue([]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,12 +6,12 @@ part of 'tab_list.dart';
|
|||||||
// RiverpodGenerator
|
// RiverpodGenerator
|
||||||
// **************************************************************************
|
// **************************************************************************
|
||||||
|
|
||||||
String _$tabListHash() => r'cdcbfd9c12e06f350d8284d48c81826b3aa57b6d';
|
String _$tabListHash() => r'2b98ccdf62c15670e0a12e38064e8186e6555cf8';
|
||||||
|
|
||||||
/// See also [TabList].
|
/// See also [TabList].
|
||||||
@ProviderFor(TabList)
|
@ProviderFor(TabList)
|
||||||
final tabListProvider =
|
final tabListProvider =
|
||||||
NotifierProvider<TabList, EquatableCollection<List<String>>>.internal(
|
NotifierProvider<TabList, EquatableValue<List<String>>>.internal(
|
||||||
TabList.new,
|
TabList.new,
|
||||||
name: r'tabListProvider',
|
name: r'tabListProvider',
|
||||||
debugGetCreateSourceHash:
|
debugGetCreateSourceHash:
|
||||||
@@ -20,6 +20,6 @@ final tabListProvider =
|
|||||||
allTransitiveDependencies: null,
|
allTransitiveDependencies: null,
|
||||||
);
|
);
|
||||||
|
|
||||||
typedef _$TabList = Notifier<EquatableCollection<List<String>>>;
|
typedef _$TabList = Notifier<EquatableValue<List<String>>>;
|
||||||
// ignore_for_file: type=lint
|
// ignore_for_file: type=lint
|
||||||
// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member, deprecated_member_use_from_same_package
|
// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member, deprecated_member_use_from_same_package
|
||||||
|
|||||||
@@ -129,11 +129,10 @@ class TabRepository extends _$TabRepository {
|
|||||||
ref.listen(tabListProvider, (previous, next) async {
|
ref.listen(tabListProvider, (previous, next) async {
|
||||||
//Only sync tabs if there has been a previous value or is not empty
|
//Only sync tabs if there has been a previous value or is not empty
|
||||||
final syncTabs =
|
final syncTabs =
|
||||||
next.collection.isNotEmpty ||
|
next.value.isNotEmpty || (previous?.value.isNotEmpty ?? false);
|
||||||
(previous?.collection.isNotEmpty ?? false);
|
|
||||||
|
|
||||||
if (syncTabs) {
|
if (syncTabs) {
|
||||||
await db.tabDao.syncTabs(retainTabIds: next.collection);
|
await db.tabDao.syncTabs(retainTabIds: next.value);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ part of 'tab.dart';
|
|||||||
// RiverpodGenerator
|
// RiverpodGenerator
|
||||||
// **************************************************************************
|
// **************************************************************************
|
||||||
|
|
||||||
String _$tabRepositoryHash() => r'e6f9d58982f3bbe389e3a3299bb498c6e8e101eb';
|
String _$tabRepositoryHash() => r'12e4fb7e9bf36a6df9f0a29df4b410f051d5c38e';
|
||||||
|
|
||||||
/// See also [TabRepository].
|
/// See also [TabRepository].
|
||||||
@ProviderFor(TabRepository)
|
@ProviderFor(TabRepository)
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
|
||||||
import 'package:lensai/domain/entities/equatable_iterable.dart';
|
import 'package:fast_equatable/fast_equatable.dart';
|
||||||
import 'package:lensai/features/bangs/data/models/bang_data.dart';
|
import 'package:lensai/features/bangs/data/models/bang_data.dart';
|
||||||
import 'package:lensai/features/bangs/domain/repositories/data.dart';
|
import 'package:lensai/features/bangs/domain/repositories/data.dart';
|
||||||
import 'package:lensai/features/geckoview/domain/entities/states/tab.dart';
|
import 'package:lensai/features/geckoview/domain/entities/states/tab.dart';
|
||||||
@@ -71,7 +71,7 @@ class ShowFindInPage extends _$ShowFindInPage {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Riverpod()
|
@Riverpod()
|
||||||
EquatableCollection<List<String>> availableTabIds(
|
EquatableValue<List<String>> availableTabIds(
|
||||||
Ref ref,
|
Ref ref,
|
||||||
ContainerFilter containerFilter,
|
ContainerFilter containerFilter,
|
||||||
) {
|
) {
|
||||||
@@ -82,31 +82,28 @@ EquatableCollection<List<String>> availableTabIds(
|
|||||||
);
|
);
|
||||||
final tabList = ref.watch(tabListProvider);
|
final tabList = ref.watch(tabListProvider);
|
||||||
|
|
||||||
return EquatableCollection(
|
return EquatableValue(
|
||||||
containerTabs
|
containerTabs?.where((tabId) => tabList.value.contains(tabId)).toList() ??
|
||||||
?.where((tabId) => tabList.collection.contains(tabId))
|
|
||||||
.toList() ??
|
|
||||||
[],
|
[],
|
||||||
immutable: true,
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Riverpod()
|
@Riverpod()
|
||||||
EquatableCollection<Map<String, TabState>> availableTabStates(
|
EquatableValue<Map<String, TabState>> availableTabStates(
|
||||||
Ref ref,
|
Ref ref,
|
||||||
ContainerFilter containerFilter,
|
ContainerFilter containerFilter,
|
||||||
) {
|
) {
|
||||||
final availableTabs = ref.watch(availableTabIdsProvider(containerFilter));
|
final availableTabs = ref.watch(availableTabIdsProvider(containerFilter));
|
||||||
final tabStates = ref.watch(tabStatesProvider);
|
final tabStates = ref.watch(tabStatesProvider);
|
||||||
|
|
||||||
return EquatableCollection({
|
return EquatableValue({
|
||||||
for (final tabId in availableTabs.collection)
|
for (final tabId in availableTabs.value)
|
||||||
if (tabStates.containsKey(tabId)) tabId: tabStates[tabId]!,
|
if (tabStates.containsKey(tabId)) tabId: tabStates[tabId]!,
|
||||||
}, immutable: true);
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Riverpod()
|
@Riverpod()
|
||||||
EquatableCollection<List<String>> seamlessFilteredTabIds(
|
EquatableValue<List<String>> seamlessFilteredTabIds(
|
||||||
Ref ref,
|
Ref ref,
|
||||||
TabSearchPartition searchPartition,
|
TabSearchPartition searchPartition,
|
||||||
ContainerFilter containerFilter,
|
ContainerFilter containerFilter,
|
||||||
@@ -115,13 +112,12 @@ EquatableCollection<List<String>> seamlessFilteredTabIds(
|
|||||||
ref
|
ref
|
||||||
.watch(
|
.watch(
|
||||||
tabSearchRepositoryProvider(searchPartition).select(
|
tabSearchRepositoryProvider(searchPartition).select(
|
||||||
(value) => EquatableCollection(
|
(value) => EquatableValue(
|
||||||
value.valueOrNull?.map((tab) => tab.id).toList(),
|
value.valueOrNull?.map((tab) => tab.id).toList(),
|
||||||
immutable: true,
|
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
.collection;
|
.value;
|
||||||
|
|
||||||
final availableTabs = ref.watch(availableTabIdsProvider(containerFilter));
|
final availableTabs = ref.watch(availableTabIdsProvider(containerFilter));
|
||||||
|
|
||||||
@@ -129,16 +125,13 @@ EquatableCollection<List<String>> seamlessFilteredTabIds(
|
|||||||
return availableTabs;
|
return availableTabs;
|
||||||
}
|
}
|
||||||
|
|
||||||
return EquatableCollection(
|
return EquatableValue(
|
||||||
tabSearchResults
|
tabSearchResults.where((tab) => availableTabs.value.contains(tab)).toList(),
|
||||||
.where((tab) => availableTabs.collection.contains(tab))
|
|
||||||
.toList(),
|
|
||||||
immutable: true,
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Riverpod()
|
@Riverpod()
|
||||||
EquatableCollection<List<TabPreview>> seamlessFilteredTabPreviews(
|
EquatableValue<List<TabPreview>> seamlessFilteredTabPreviews(
|
||||||
Ref ref,
|
Ref ref,
|
||||||
TabSearchPartition searchPartition,
|
TabSearchPartition searchPartition,
|
||||||
ContainerFilter containerFilter,
|
ContainerFilter containerFilter,
|
||||||
@@ -146,20 +139,19 @@ EquatableCollection<List<TabPreview>> seamlessFilteredTabPreviews(
|
|||||||
final tabSearchResults =
|
final tabSearchResults =
|
||||||
ref
|
ref
|
||||||
.watch(
|
.watch(
|
||||||
tabSearchRepositoryProvider(searchPartition).select(
|
tabSearchRepositoryProvider(
|
||||||
(value) =>
|
searchPartition,
|
||||||
EquatableCollection(value.valueOrNull, immutable: true),
|
).select((value) => EquatableValue(value.valueOrNull)),
|
||||||
),
|
|
||||||
)
|
)
|
||||||
.collection;
|
.value;
|
||||||
|
|
||||||
final availableTabStates = ref.watch(
|
final availableTabStates = ref.watch(
|
||||||
availableTabStatesProvider(containerFilter),
|
availableTabStatesProvider(containerFilter),
|
||||||
);
|
);
|
||||||
|
|
||||||
if (tabSearchResults == null) {
|
if (tabSearchResults == null) {
|
||||||
return EquatableCollection(
|
return EquatableValue(
|
||||||
availableTabStates.collection.values
|
availableTabStates.value.values
|
||||||
.map(
|
.map(
|
||||||
(state) => TabPreview(
|
(state) => TabPreview(
|
||||||
id: state.id,
|
id: state.id,
|
||||||
@@ -171,25 +163,23 @@ EquatableCollection<List<TabPreview>> seamlessFilteredTabPreviews(
|
|||||||
),
|
),
|
||||||
)
|
)
|
||||||
.toList(),
|
.toList(),
|
||||||
immutable: true,
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return EquatableCollection(
|
return EquatableValue(
|
||||||
tabSearchResults
|
tabSearchResults
|
||||||
.where((tab) => availableTabStates.collection.containsKey(tab.id))
|
.where((tab) => availableTabStates.value.containsKey(tab.id))
|
||||||
.map((tab) {
|
.map((tab) {
|
||||||
return TabPreview(
|
return TabPreview(
|
||||||
id: tab.id,
|
id: tab.id,
|
||||||
title: tab.title ?? availableTabStates.collection[tab.id]!.title,
|
title: tab.title ?? availableTabStates.value[tab.id]!.title,
|
||||||
icon: null,
|
icon: null,
|
||||||
url: tab.cleanUrl ?? availableTabStates.collection[tab.id]!.url,
|
url: tab.cleanUrl ?? availableTabStates.value[tab.id]!.url,
|
||||||
highlightedUrl: tab.url,
|
highlightedUrl: tab.url,
|
||||||
content: tab.extractedContent ?? tab.fullContent,
|
content: tab.extractedContent ?? tab.fullContent,
|
||||||
);
|
);
|
||||||
})
|
})
|
||||||
.whereType<TabPreview>()
|
.whereType<TabPreview>()
|
||||||
.toList(),
|
.toList(),
|
||||||
immutable: true,
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ part of 'providers.dart';
|
|||||||
// RiverpodGenerator
|
// RiverpodGenerator
|
||||||
// **************************************************************************
|
// **************************************************************************
|
||||||
|
|
||||||
String _$availableTabIdsHash() => r'e5c5f25dea67f7739dfb1d0d9e4453079817a7bc';
|
String _$availableTabIdsHash() => r'ec3691063293e1c19c997f7b60178938ae631c7f';
|
||||||
|
|
||||||
/// Copied from Dart SDK
|
/// Copied from Dart SDK
|
||||||
class _SystemHash {
|
class _SystemHash {
|
||||||
@@ -34,7 +34,7 @@ class _SystemHash {
|
|||||||
const availableTabIdsProvider = AvailableTabIdsFamily();
|
const availableTabIdsProvider = AvailableTabIdsFamily();
|
||||||
|
|
||||||
/// See also [availableTabIds].
|
/// See also [availableTabIds].
|
||||||
class AvailableTabIdsFamily extends Family<EquatableCollection<List<String>>> {
|
class AvailableTabIdsFamily extends Family<EquatableValue<List<String>>> {
|
||||||
/// See also [availableTabIds].
|
/// See also [availableTabIds].
|
||||||
const AvailableTabIdsFamily();
|
const AvailableTabIdsFamily();
|
||||||
|
|
||||||
@@ -67,7 +67,7 @@ class AvailableTabIdsFamily extends Family<EquatableCollection<List<String>>> {
|
|||||||
|
|
||||||
/// See also [availableTabIds].
|
/// See also [availableTabIds].
|
||||||
class AvailableTabIdsProvider
|
class AvailableTabIdsProvider
|
||||||
extends AutoDisposeProvider<EquatableCollection<List<String>>> {
|
extends AutoDisposeProvider<EquatableValue<List<String>>> {
|
||||||
/// See also [availableTabIds].
|
/// See also [availableTabIds].
|
||||||
AvailableTabIdsProvider(ContainerFilter containerFilter)
|
AvailableTabIdsProvider(ContainerFilter containerFilter)
|
||||||
: this._internal(
|
: this._internal(
|
||||||
@@ -98,8 +98,7 @@ class AvailableTabIdsProvider
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Override overrideWith(
|
Override overrideWith(
|
||||||
EquatableCollection<List<String>> Function(AvailableTabIdsRef provider)
|
EquatableValue<List<String>> Function(AvailableTabIdsRef provider) create,
|
||||||
create,
|
|
||||||
) {
|
) {
|
||||||
return ProviderOverride(
|
return ProviderOverride(
|
||||||
origin: this,
|
origin: this,
|
||||||
@@ -116,8 +115,7 @@ class AvailableTabIdsProvider
|
|||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
AutoDisposeProviderElement<EquatableCollection<List<String>>>
|
AutoDisposeProviderElement<EquatableValue<List<String>>> createElement() {
|
||||||
createElement() {
|
|
||||||
return _AvailableTabIdsProviderElement(this);
|
return _AvailableTabIdsProviderElement(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -139,13 +137,13 @@ class AvailableTabIdsProvider
|
|||||||
@Deprecated('Will be removed in 3.0. Use Ref instead')
|
@Deprecated('Will be removed in 3.0. Use Ref instead')
|
||||||
// ignore: unused_element
|
// ignore: unused_element
|
||||||
mixin AvailableTabIdsRef
|
mixin AvailableTabIdsRef
|
||||||
on AutoDisposeProviderRef<EquatableCollection<List<String>>> {
|
on AutoDisposeProviderRef<EquatableValue<List<String>>> {
|
||||||
/// The parameter `containerFilter` of this provider.
|
/// The parameter `containerFilter` of this provider.
|
||||||
ContainerFilter get containerFilter;
|
ContainerFilter get containerFilter;
|
||||||
}
|
}
|
||||||
|
|
||||||
class _AvailableTabIdsProviderElement
|
class _AvailableTabIdsProviderElement
|
||||||
extends AutoDisposeProviderElement<EquatableCollection<List<String>>>
|
extends AutoDisposeProviderElement<EquatableValue<List<String>>>
|
||||||
with AvailableTabIdsRef {
|
with AvailableTabIdsRef {
|
||||||
_AvailableTabIdsProviderElement(super.provider);
|
_AvailableTabIdsProviderElement(super.provider);
|
||||||
|
|
||||||
@@ -155,7 +153,7 @@ class _AvailableTabIdsProviderElement
|
|||||||
}
|
}
|
||||||
|
|
||||||
String _$availableTabStatesHash() =>
|
String _$availableTabStatesHash() =>
|
||||||
r'ca42dc8cb88070fb58ab085ab6c9bcbf31ef4f0b';
|
r'f506b050e1dc4f50fbd2699d97af5a16a037bc4b';
|
||||||
|
|
||||||
/// See also [availableTabStates].
|
/// See also [availableTabStates].
|
||||||
@ProviderFor(availableTabStates)
|
@ProviderFor(availableTabStates)
|
||||||
@@ -163,7 +161,7 @@ const availableTabStatesProvider = AvailableTabStatesFamily();
|
|||||||
|
|
||||||
/// See also [availableTabStates].
|
/// See also [availableTabStates].
|
||||||
class AvailableTabStatesFamily
|
class AvailableTabStatesFamily
|
||||||
extends Family<EquatableCollection<Map<String, TabState>>> {
|
extends Family<EquatableValue<Map<String, TabState>>> {
|
||||||
/// See also [availableTabStates].
|
/// See also [availableTabStates].
|
||||||
const AvailableTabStatesFamily();
|
const AvailableTabStatesFamily();
|
||||||
|
|
||||||
@@ -196,7 +194,7 @@ class AvailableTabStatesFamily
|
|||||||
|
|
||||||
/// See also [availableTabStates].
|
/// See also [availableTabStates].
|
||||||
class AvailableTabStatesProvider
|
class AvailableTabStatesProvider
|
||||||
extends AutoDisposeProvider<EquatableCollection<Map<String, TabState>>> {
|
extends AutoDisposeProvider<EquatableValue<Map<String, TabState>>> {
|
||||||
/// See also [availableTabStates].
|
/// See also [availableTabStates].
|
||||||
AvailableTabStatesProvider(ContainerFilter containerFilter)
|
AvailableTabStatesProvider(ContainerFilter containerFilter)
|
||||||
: this._internal(
|
: this._internal(
|
||||||
@@ -228,7 +226,7 @@ class AvailableTabStatesProvider
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Override overrideWith(
|
Override overrideWith(
|
||||||
EquatableCollection<Map<String, TabState>> Function(
|
EquatableValue<Map<String, TabState>> Function(
|
||||||
AvailableTabStatesRef provider,
|
AvailableTabStatesRef provider,
|
||||||
)
|
)
|
||||||
create,
|
create,
|
||||||
@@ -248,7 +246,7 @@ class AvailableTabStatesProvider
|
|||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
AutoDisposeProviderElement<EquatableCollection<Map<String, TabState>>>
|
AutoDisposeProviderElement<EquatableValue<Map<String, TabState>>>
|
||||||
createElement() {
|
createElement() {
|
||||||
return _AvailableTabStatesProviderElement(this);
|
return _AvailableTabStatesProviderElement(this);
|
||||||
}
|
}
|
||||||
@@ -271,14 +269,13 @@ class AvailableTabStatesProvider
|
|||||||
@Deprecated('Will be removed in 3.0. Use Ref instead')
|
@Deprecated('Will be removed in 3.0. Use Ref instead')
|
||||||
// ignore: unused_element
|
// ignore: unused_element
|
||||||
mixin AvailableTabStatesRef
|
mixin AvailableTabStatesRef
|
||||||
on AutoDisposeProviderRef<EquatableCollection<Map<String, TabState>>> {
|
on AutoDisposeProviderRef<EquatableValue<Map<String, TabState>>> {
|
||||||
/// The parameter `containerFilter` of this provider.
|
/// The parameter `containerFilter` of this provider.
|
||||||
ContainerFilter get containerFilter;
|
ContainerFilter get containerFilter;
|
||||||
}
|
}
|
||||||
|
|
||||||
class _AvailableTabStatesProviderElement
|
class _AvailableTabStatesProviderElement
|
||||||
extends
|
extends AutoDisposeProviderElement<EquatableValue<Map<String, TabState>>>
|
||||||
AutoDisposeProviderElement<EquatableCollection<Map<String, TabState>>>
|
|
||||||
with AvailableTabStatesRef {
|
with AvailableTabStatesRef {
|
||||||
_AvailableTabStatesProviderElement(super.provider);
|
_AvailableTabStatesProviderElement(super.provider);
|
||||||
|
|
||||||
@@ -288,7 +285,7 @@ class _AvailableTabStatesProviderElement
|
|||||||
}
|
}
|
||||||
|
|
||||||
String _$seamlessFilteredTabIdsHash() =>
|
String _$seamlessFilteredTabIdsHash() =>
|
||||||
r'2e29ca53c35be89972d3f9aea24198fe1feb9e05';
|
r'171e0b942735066e25894dc2c1d99c367bf0d01a';
|
||||||
|
|
||||||
/// See also [seamlessFilteredTabIds].
|
/// See also [seamlessFilteredTabIds].
|
||||||
@ProviderFor(seamlessFilteredTabIds)
|
@ProviderFor(seamlessFilteredTabIds)
|
||||||
@@ -296,7 +293,7 @@ const seamlessFilteredTabIdsProvider = SeamlessFilteredTabIdsFamily();
|
|||||||
|
|
||||||
/// See also [seamlessFilteredTabIds].
|
/// See also [seamlessFilteredTabIds].
|
||||||
class SeamlessFilteredTabIdsFamily
|
class SeamlessFilteredTabIdsFamily
|
||||||
extends Family<EquatableCollection<List<String>>> {
|
extends Family<EquatableValue<List<String>>> {
|
||||||
/// See also [seamlessFilteredTabIds].
|
/// See also [seamlessFilteredTabIds].
|
||||||
const SeamlessFilteredTabIdsFamily();
|
const SeamlessFilteredTabIdsFamily();
|
||||||
|
|
||||||
@@ -332,7 +329,7 @@ class SeamlessFilteredTabIdsFamily
|
|||||||
|
|
||||||
/// See also [seamlessFilteredTabIds].
|
/// See also [seamlessFilteredTabIds].
|
||||||
class SeamlessFilteredTabIdsProvider
|
class SeamlessFilteredTabIdsProvider
|
||||||
extends AutoDisposeProvider<EquatableCollection<List<String>>> {
|
extends AutoDisposeProvider<EquatableValue<List<String>>> {
|
||||||
/// See also [seamlessFilteredTabIds].
|
/// See also [seamlessFilteredTabIds].
|
||||||
SeamlessFilteredTabIdsProvider(
|
SeamlessFilteredTabIdsProvider(
|
||||||
TabSearchPartition searchPartition,
|
TabSearchPartition searchPartition,
|
||||||
@@ -372,9 +369,7 @@ class SeamlessFilteredTabIdsProvider
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Override overrideWith(
|
Override overrideWith(
|
||||||
EquatableCollection<List<String>> Function(
|
EquatableValue<List<String>> Function(SeamlessFilteredTabIdsRef provider)
|
||||||
SeamlessFilteredTabIdsRef provider,
|
|
||||||
)
|
|
||||||
create,
|
create,
|
||||||
) {
|
) {
|
||||||
return ProviderOverride(
|
return ProviderOverride(
|
||||||
@@ -393,8 +388,7 @@ class SeamlessFilteredTabIdsProvider
|
|||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
AutoDisposeProviderElement<EquatableCollection<List<String>>>
|
AutoDisposeProviderElement<EquatableValue<List<String>>> createElement() {
|
||||||
createElement() {
|
|
||||||
return _SeamlessFilteredTabIdsProviderElement(this);
|
return _SeamlessFilteredTabIdsProviderElement(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -418,7 +412,7 @@ class SeamlessFilteredTabIdsProvider
|
|||||||
@Deprecated('Will be removed in 3.0. Use Ref instead')
|
@Deprecated('Will be removed in 3.0. Use Ref instead')
|
||||||
// ignore: unused_element
|
// ignore: unused_element
|
||||||
mixin SeamlessFilteredTabIdsRef
|
mixin SeamlessFilteredTabIdsRef
|
||||||
on AutoDisposeProviderRef<EquatableCollection<List<String>>> {
|
on AutoDisposeProviderRef<EquatableValue<List<String>>> {
|
||||||
/// The parameter `searchPartition` of this provider.
|
/// The parameter `searchPartition` of this provider.
|
||||||
TabSearchPartition get searchPartition;
|
TabSearchPartition get searchPartition;
|
||||||
|
|
||||||
@@ -427,7 +421,7 @@ mixin SeamlessFilteredTabIdsRef
|
|||||||
}
|
}
|
||||||
|
|
||||||
class _SeamlessFilteredTabIdsProviderElement
|
class _SeamlessFilteredTabIdsProviderElement
|
||||||
extends AutoDisposeProviderElement<EquatableCollection<List<String>>>
|
extends AutoDisposeProviderElement<EquatableValue<List<String>>>
|
||||||
with SeamlessFilteredTabIdsRef {
|
with SeamlessFilteredTabIdsRef {
|
||||||
_SeamlessFilteredTabIdsProviderElement(super.provider);
|
_SeamlessFilteredTabIdsProviderElement(super.provider);
|
||||||
|
|
||||||
@@ -440,7 +434,7 @@ class _SeamlessFilteredTabIdsProviderElement
|
|||||||
}
|
}
|
||||||
|
|
||||||
String _$seamlessFilteredTabPreviewsHash() =>
|
String _$seamlessFilteredTabPreviewsHash() =>
|
||||||
r'6beefa943d298b81482276f12484e27346ff9907';
|
r'c59c2819eda4f132e1a0f5f7784ddb3b5ceec817';
|
||||||
|
|
||||||
/// See also [seamlessFilteredTabPreviews].
|
/// See also [seamlessFilteredTabPreviews].
|
||||||
@ProviderFor(seamlessFilteredTabPreviews)
|
@ProviderFor(seamlessFilteredTabPreviews)
|
||||||
@@ -448,7 +442,7 @@ const seamlessFilteredTabPreviewsProvider = SeamlessFilteredTabPreviewsFamily();
|
|||||||
|
|
||||||
/// See also [seamlessFilteredTabPreviews].
|
/// See also [seamlessFilteredTabPreviews].
|
||||||
class SeamlessFilteredTabPreviewsFamily
|
class SeamlessFilteredTabPreviewsFamily
|
||||||
extends Family<EquatableCollection<List<TabPreview>>> {
|
extends Family<EquatableValue<List<TabPreview>>> {
|
||||||
/// See also [seamlessFilteredTabPreviews].
|
/// See also [seamlessFilteredTabPreviews].
|
||||||
const SeamlessFilteredTabPreviewsFamily();
|
const SeamlessFilteredTabPreviewsFamily();
|
||||||
|
|
||||||
@@ -487,7 +481,7 @@ class SeamlessFilteredTabPreviewsFamily
|
|||||||
|
|
||||||
/// See also [seamlessFilteredTabPreviews].
|
/// See also [seamlessFilteredTabPreviews].
|
||||||
class SeamlessFilteredTabPreviewsProvider
|
class SeamlessFilteredTabPreviewsProvider
|
||||||
extends AutoDisposeProvider<EquatableCollection<List<TabPreview>>> {
|
extends AutoDisposeProvider<EquatableValue<List<TabPreview>>> {
|
||||||
/// See also [seamlessFilteredTabPreviews].
|
/// See also [seamlessFilteredTabPreviews].
|
||||||
SeamlessFilteredTabPreviewsProvider(
|
SeamlessFilteredTabPreviewsProvider(
|
||||||
TabSearchPartition searchPartition,
|
TabSearchPartition searchPartition,
|
||||||
@@ -527,7 +521,7 @@ class SeamlessFilteredTabPreviewsProvider
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Override overrideWith(
|
Override overrideWith(
|
||||||
EquatableCollection<List<TabPreview>> Function(
|
EquatableValue<List<TabPreview>> Function(
|
||||||
SeamlessFilteredTabPreviewsRef provider,
|
SeamlessFilteredTabPreviewsRef provider,
|
||||||
)
|
)
|
||||||
create,
|
create,
|
||||||
@@ -548,8 +542,7 @@ class SeamlessFilteredTabPreviewsProvider
|
|||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
AutoDisposeProviderElement<EquatableCollection<List<TabPreview>>>
|
AutoDisposeProviderElement<EquatableValue<List<TabPreview>>> createElement() {
|
||||||
createElement() {
|
|
||||||
return _SeamlessFilteredTabPreviewsProviderElement(this);
|
return _SeamlessFilteredTabPreviewsProviderElement(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -573,7 +566,7 @@ class SeamlessFilteredTabPreviewsProvider
|
|||||||
@Deprecated('Will be removed in 3.0. Use Ref instead')
|
@Deprecated('Will be removed in 3.0. Use Ref instead')
|
||||||
// ignore: unused_element
|
// ignore: unused_element
|
||||||
mixin SeamlessFilteredTabPreviewsRef
|
mixin SeamlessFilteredTabPreviewsRef
|
||||||
on AutoDisposeProviderRef<EquatableCollection<List<TabPreview>>> {
|
on AutoDisposeProviderRef<EquatableValue<List<TabPreview>>> {
|
||||||
/// The parameter `searchPartition` of this provider.
|
/// The parameter `searchPartition` of this provider.
|
||||||
TabSearchPartition get searchPartition;
|
TabSearchPartition get searchPartition;
|
||||||
|
|
||||||
@@ -582,7 +575,7 @@ mixin SeamlessFilteredTabPreviewsRef
|
|||||||
}
|
}
|
||||||
|
|
||||||
class _SeamlessFilteredTabPreviewsProviderElement
|
class _SeamlessFilteredTabPreviewsProviderElement
|
||||||
extends AutoDisposeProviderElement<EquatableCollection<List<TabPreview>>>
|
extends AutoDisposeProviderElement<EquatableValue<List<TabPreview>>>
|
||||||
with SeamlessFilteredTabPreviewsRef {
|
with SeamlessFilteredTabPreviewsRef {
|
||||||
_SeamlessFilteredTabPreviewsProviderElement(super.provider);
|
_SeamlessFilteredTabPreviewsProviderElement(super.provider);
|
||||||
|
|
||||||
|
|||||||
+4
-5
@@ -1,5 +1,5 @@
|
|||||||
|
import 'package:fast_equatable/fast_equatable.dart';
|
||||||
import 'package:flutter_mozilla_components/flutter_mozilla_components.dart';
|
import 'package:flutter_mozilla_components/flutter_mozilla_components.dart';
|
||||||
import 'package:lensai/domain/entities/equatable_iterable.dart';
|
|
||||||
import 'package:lensai/features/geckoview/features/tabs/domain/providers.dart';
|
import 'package:lensai/features/geckoview/features/tabs/domain/providers.dart';
|
||||||
import 'package:lensai/features/tor/domain/services/tor_proxy.dart';
|
import 'package:lensai/features/tor/domain/services/tor_proxy.dart';
|
||||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||||
@@ -23,18 +23,17 @@ class ProxySettingsReplucation extends _$ProxySettingsReplucation {
|
|||||||
|
|
||||||
ref.listen(
|
ref.listen(
|
||||||
containersWithCountProvider.select(
|
containersWithCountProvider.select(
|
||||||
(value) => EquatableCollection(
|
(value) => EquatableValue(
|
||||||
value.valueOrNull
|
value.valueOrNull
|
||||||
?.where((container) => container.metadata.useProxy)
|
?.where((container) => container.metadata.useProxy)
|
||||||
.map((container) => container.metadata.contextualIdentity)
|
.map((container) => container.metadata.contextualIdentity)
|
||||||
.nonNulls
|
.nonNulls
|
||||||
.toList(),
|
.toList(),
|
||||||
immutable: true,
|
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
(previous, next) async {
|
(previous, next) async {
|
||||||
if (next.collection != null) {
|
if (next.value != null) {
|
||||||
for (final contextId in next.collection!) {
|
for (final contextId in next.value!) {
|
||||||
await _service.addContainerProxy(contextId);
|
await _service.addContainerProxy(contextId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -7,7 +7,7 @@ part of 'proxy_settings_replucation.dart';
|
|||||||
// **************************************************************************
|
// **************************************************************************
|
||||||
|
|
||||||
String _$proxySettingsReplucationHash() =>
|
String _$proxySettingsReplucationHash() =>
|
||||||
r'08cb19e895056d4ddbf0399b23a9d159a0c86915';
|
r'b00fc9a9c8b385a0f8a5830e9ba1c329d340c0ae';
|
||||||
|
|
||||||
/// See also [ProxySettingsReplucation].
|
/// See also [ProxySettingsReplucation].
|
||||||
@ProviderFor(ProxySettingsReplucation)
|
@ProviderFor(ProxySettingsReplucation)
|
||||||
|
|||||||
@@ -119,7 +119,7 @@ class BrowserScreen extends HookConsumerWidget {
|
|||||||
: null;
|
: null;
|
||||||
|
|
||||||
final tabCount = ref.read(
|
final tabCount = ref.read(
|
||||||
tabListProvider.select((tabs) => tabs.collection.length),
|
tabListProvider.select((tabs) => tabs.value.length),
|
||||||
);
|
);
|
||||||
|
|
||||||
//Don't do anything if a child route is active
|
//Don't do anything if a child route is active
|
||||||
|
|||||||
+5
-5
@@ -226,7 +226,7 @@ class ViewTabsSheetWidget extends HookConsumerWidget {
|
|||||||
);
|
);
|
||||||
|
|
||||||
useEffect(() {
|
useEffect(() {
|
||||||
final index = filteredTabIds.collection.indexWhere(
|
final index = filteredTabIds.value.indexWhere(
|
||||||
(webView) => webView == activeTab,
|
(webView) => webView == activeTab,
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -248,7 +248,7 @@ class ViewTabsSheetWidget extends HookConsumerWidget {
|
|||||||
}, [filteredTabIds, activeTab]);
|
}, [filteredTabIds, activeTab]);
|
||||||
|
|
||||||
final tabs = useMemoized(() {
|
final tabs = useMemoized(() {
|
||||||
return filteredTabIds.collection
|
return filteredTabIds.value
|
||||||
.mapIndexed(
|
.mapIndexed(
|
||||||
(index, tabId) => CustomDraggable(
|
(index, tabId) => CustomDraggable(
|
||||||
key: Key(tabId),
|
key: Key(tabId),
|
||||||
@@ -320,7 +320,7 @@ class ViewTabsSheetWidget extends HookConsumerWidget {
|
|||||||
containerRepositoryProvider.notifier,
|
containerRepositoryProvider.notifier,
|
||||||
);
|
);
|
||||||
|
|
||||||
final tabId = filteredTabIds.collection[oldIndex];
|
final tabId = filteredTabIds.value[oldIndex];
|
||||||
final containerId = await ref
|
final containerId = await ref
|
||||||
.read(tabDataRepositoryProvider.notifier)
|
.read(tabDataRepositoryProvider.notifier)
|
||||||
.containerTabId(tabId);
|
.containerTabId(tabId);
|
||||||
@@ -331,14 +331,14 @@ class ViewTabsSheetWidget extends HookConsumerWidget {
|
|||||||
containerId,
|
containerId,
|
||||||
);
|
);
|
||||||
} else if (newIndex >=
|
} else if (newIndex >=
|
||||||
filteredTabIds.collection.length - 1) {
|
filteredTabIds.value.length - 1) {
|
||||||
key = await containerRepository.getTrailingOrderKey(
|
key = await containerRepository.getTrailingOrderKey(
|
||||||
containerId,
|
containerId,
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
final orderAfterIndex = newIndex;
|
final orderAfterIndex = newIndex;
|
||||||
key = await containerRepository.getOrderKeyAfterTab(
|
key = await containerRepository.getOrderKeyAfterTab(
|
||||||
filteredTabIds.collection[orderAfterIndex],
|
filteredTabIds.value[orderAfterIndex],
|
||||||
containerId,
|
containerId,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -19,7 +19,7 @@ class TabsActionButton extends HookConsumerWidget {
|
|||||||
final theme = Theme.of(context);
|
final theme = Theme.of(context);
|
||||||
|
|
||||||
final tabCount = ref.watch(
|
final tabCount = ref.watch(
|
||||||
tabListProvider.select((tabs) => tabs.collection.length),
|
tabListProvider.select((tabs) => tabs.value.length),
|
||||||
);
|
);
|
||||||
|
|
||||||
return InkWell(
|
return InkWell(
|
||||||
|
|||||||
+1
-1
@@ -44,7 +44,7 @@ class TabSearch extends HookConsumerWidget {
|
|||||||
: ContainerFilterDisabled(),
|
: ContainerFilterDisabled(),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
.collection;
|
.value;
|
||||||
|
|
||||||
useListenableCallback(searchTextController, () async {
|
useListenableCallback(searchTextController, () async {
|
||||||
await ref
|
await ref
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
|
import 'package:fast_equatable/fast_equatable.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_hooks/flutter_hooks.dart';
|
import 'package:flutter_hooks/flutter_hooks.dart';
|
||||||
import 'package:go_router/go_router.dart';
|
import 'package:go_router/go_router.dart';
|
||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
import 'package:lensai/core/routing/routes.dart';
|
import 'package:lensai/core/routing/routes.dart';
|
||||||
import 'package:lensai/domain/entities/equatable_iterable.dart';
|
|
||||||
import 'package:lensai/extensions/nullable.dart';
|
import 'package:lensai/extensions/nullable.dart';
|
||||||
import 'package:lensai/features/geckoview/features/preferences/data/repositories/preference_settings.dart';
|
import 'package:lensai/features/geckoview/features/preferences/data/repositories/preference_settings.dart';
|
||||||
import 'package:lensai/features/geckoview/features/tabs/utils/setting_groups_serializer.dart';
|
import 'package:lensai/features/geckoview/features/tabs/utils/setting_groups_serializer.dart';
|
||||||
@@ -25,7 +25,7 @@ class WebEngineHardeningScreen extends HookConsumerWidget {
|
|||||||
(element) => element.isActive,
|
(element) => element.isActive,
|
||||||
) ??
|
) ??
|
||||||
false,
|
false,
|
||||||
[EquatableCollection(preferenceGroups.valueOrNull, immutable: true)],
|
[EquatableValue(preferenceGroups.valueOrNull)],
|
||||||
);
|
);
|
||||||
|
|
||||||
final theme = Theme.of(context);
|
final theme = Theme.of(context);
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
|
import 'package:fast_equatable/fast_equatable.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_hooks/flutter_hooks.dart';
|
import 'package:flutter_hooks/flutter_hooks.dart';
|
||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
import 'package:lensai/domain/entities/equatable_iterable.dart';
|
|
||||||
import 'package:lensai/extensions/nullable.dart';
|
import 'package:lensai/extensions/nullable.dart';
|
||||||
import 'package:lensai/features/web_feed/data/models/feed_filter.dart';
|
import 'package:lensai/features/web_feed/data/models/feed_filter.dart';
|
||||||
import 'package:lensai/features/web_feed/domain/providers.dart';
|
import 'package:lensai/features/web_feed/domain/providers.dart';
|
||||||
@@ -60,15 +60,12 @@ class FeedArticleListScreen extends HookConsumerWidget {
|
|||||||
builder: (context, ref, child) {
|
builder: (context, ref, child) {
|
||||||
final tags = ref.watch(
|
final tags = ref.watch(
|
||||||
articleFilterProvider.select(
|
articleFilterProvider.select(
|
||||||
(value) => EquatableCollection(
|
(value) => EquatableValue(value.tags ?? const {}),
|
||||||
value.tags ?? const {},
|
|
||||||
immutable: false,
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
return FeedArticleCard(
|
return FeedArticleCard(
|
||||||
selectedTags: tags.collection,
|
selectedTags: tags.value,
|
||||||
onTagSelected: (tagId, value) {
|
onTagSelected: (tagId, value) {
|
||||||
if (value) {
|
if (value) {
|
||||||
ref
|
ref
|
||||||
|
|||||||
Reference in New Issue
Block a user