Change routing assets order

This commit is contained in:
problematicconsumer
2024-01-13 16:54:17 +03:30
parent e0d434646c
commit a99751abda
8 changed files with 73 additions and 20 deletions

View File

@@ -242,6 +242,8 @@
},
"geoAssets": {
"pageTitle": "Routing Assets",
"geoip": "Geoip",
"geosite": "Geosite",
"version": "Version ${version}",
"fileMissing": "File Missing",
"update": "Update",

View File

@@ -243,7 +243,9 @@
"update": "Actualizar",
"download": "Descargar",
"failureMsg": "No se pudo actualizar el activo",
"addRecommended": "Agregar activos recomendados"
"addRecommended": "Agregar activos recomendados",
"geoip": "Geoip",
"geosite": "Geosite"
},
"pageTitle": "Ajustes",
"experimental": "Experimental"

View File

@@ -242,6 +242,8 @@
},
"geoAssets": {
"pageTitle": "فایل‌های مسیریابی",
"geoip": "Geoip",
"geosite": "Geosite",
"version": "نسخه ${version}",
"fileMissing": "فایل موجود نیست",
"update": "به روز رسانی",

View File

@@ -242,6 +242,8 @@
},
"geoAssets": {
"pageTitle": "Активы маршрутизации",
"geoip": "Geoip",
"geosite": "Geosite",
"version": "Версия ${version}",
"fileMissing": "Файл отсутствует",
"update": "Обновить",

View File

@@ -242,6 +242,8 @@
},
"geoAssets": {
"pageTitle": "Varlıkları Yönlendirme",
"geoip": "Geoip",
"geosite": "Geosite",
"version": "Sürüm ${version}",
"fileMissing": "Eksik dosya",
"update": "Güncelleme",

View File

@@ -242,6 +242,8 @@
},
"geoAssets": {
"pageTitle": "路由资源文件",
"geoip": "Geoip",
"geosite": "Geosite",
"version": "版本 ${version}",
"fileMissing": "文件丢失",
"update": "更新",

View File

@@ -1,3 +1,4 @@
import 'package:dartx/dartx.dart';
import 'package:hiddify/features/geo_asset/data/geo_asset_data_providers.dart';
import 'package:hiddify/features/geo_asset/data/geo_asset_repository.dart';
import 'package:hiddify/features/geo_asset/model/geo_asset_entity.dart';
@@ -7,17 +8,28 @@ import 'package:riverpod_annotation/riverpod_annotation.dart';
part 'geo_assets_overview_notifier.g.dart';
typedef GroupedRoutingAssets = ({
List<GeoAssetWithFileSize> geoip,
List<GeoAssetWithFileSize> geosite,
});
@riverpod
class GeoAssetsOverviewNotifier extends _$GeoAssetsOverviewNotifier
with AppLogger {
@override
Stream<List<GeoAssetWithFileSize>> build() {
Stream<GroupedRoutingAssets> build() {
ref.disposeDelay(const Duration(seconds: 5));
return ref
.watch(geoAssetRepositoryProvider)
.requireValue
.watchAll()
.map((event) => event.getOrElse((l) => throw l));
return ref.watch(geoAssetRepositoryProvider).requireValue.watchAll().map(
(event) {
final grouped = event
.getOrElse((l) => throw l)
.groupBy((element) => element.$1.type);
return (
geoip: grouped.getOrElse(GeoAssetType.geoip, () => []),
geosite: grouped.getOrElse(GeoAssetType.geosite, () => []),
);
},
);
}
GeoAssetRepository get _geoAssetRepo =>

View File

@@ -1,4 +1,5 @@
import 'package:flutter/material.dart';
import 'package:gap/gap.dart';
import 'package:hiddify/core/localization/translations.dart';
import 'package:hiddify/features/geo_asset/overview/geo_assets_overview_notifier.dart';
import 'package:hiddify/features/geo_asset/widget/geo_asset_tile.dart';
@@ -36,11 +37,11 @@ class GeoAssetsOverviewPage extends HookConsumerWidget {
),
],
),
if (state case AsyncData(value: final geoAssets))
if (state case AsyncData(value: (:final geoip, :final geosite)))
SliverPinnedHeader(
child: AnimatedSwitcher(
duration: const Duration(milliseconds: 200),
child: geoAssets
child: (geoip + geosite)
.where((e) => e.$1.active && e.$2 == null)
.isNotEmpty
? const MissingRoutingAssetsCard()
@@ -48,9 +49,16 @@ class GeoAssetsOverviewPage extends HookConsumerWidget {
),
),
switch (state) {
AsyncData(value: final geoAssets) => SliverList.builder(
AsyncData(value: (:final geoip, :final geosite)) => MultiSliver(
children: [
ListTile(
title: Text("${t.settings.geoAssets.geoip} "),
titleTextStyle: Theme.of(context).textTheme.headlineSmall,
dense: true,
),
SliverList.builder(
itemBuilder: (context, index) {
final geoAsset = geoAssets[index];
final geoAsset = geoip[index];
return GeoAssetTile(
geoAsset,
onMarkAsActive: () => ref
@@ -58,7 +66,28 @@ class GeoAssetsOverviewPage extends HookConsumerWidget {
.markAsActive(geoAsset.$1),
);
},
itemCount: geoAssets.length,
itemCount: geoip.length,
),
const Divider(indent: 16, endIndent: 16),
ListTile(
title: Text("${t.settings.geoAssets.geosite} "),
titleTextStyle: Theme.of(context).textTheme.headlineSmall,
dense: true,
),
SliverList.builder(
itemBuilder: (context, index) {
final geoAsset = geosite[index];
return GeoAssetTile(
geoAsset,
onMarkAsActive: () => ref
.read(geoAssetsOverviewNotifierProvider.notifier)
.markAsActive(geoAsset.$1),
);
},
itemCount: geosite.length,
),
const Gap(16),
],
),
_ => const SliverToBoxAdapter(),
},