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": { "geoAssets": {
"pageTitle": "Routing Assets", "pageTitle": "Routing Assets",
"geoip": "Geoip",
"geosite": "Geosite",
"version": "Version ${version}", "version": "Version ${version}",
"fileMissing": "File Missing", "fileMissing": "File Missing",
"update": "Update", "update": "Update",

View File

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

View File

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

View File

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

View File

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

View File

@@ -242,6 +242,8 @@
}, },
"geoAssets": { "geoAssets": {
"pageTitle": "路由资源文件", "pageTitle": "路由资源文件",
"geoip": "Geoip",
"geosite": "Geosite",
"version": "版本 ${version}", "version": "版本 ${version}",
"fileMissing": "文件丢失", "fileMissing": "文件丢失",
"update": "更新", "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_data_providers.dart';
import 'package:hiddify/features/geo_asset/data/geo_asset_repository.dart'; import 'package:hiddify/features/geo_asset/data/geo_asset_repository.dart';
import 'package:hiddify/features/geo_asset/model/geo_asset_entity.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'; part 'geo_assets_overview_notifier.g.dart';
typedef GroupedRoutingAssets = ({
List<GeoAssetWithFileSize> geoip,
List<GeoAssetWithFileSize> geosite,
});
@riverpod @riverpod
class GeoAssetsOverviewNotifier extends _$GeoAssetsOverviewNotifier class GeoAssetsOverviewNotifier extends _$GeoAssetsOverviewNotifier
with AppLogger { with AppLogger {
@override @override
Stream<List<GeoAssetWithFileSize>> build() { Stream<GroupedRoutingAssets> build() {
ref.disposeDelay(const Duration(seconds: 5)); ref.disposeDelay(const Duration(seconds: 5));
return ref return ref.watch(geoAssetRepositoryProvider).requireValue.watchAll().map(
.watch(geoAssetRepositoryProvider) (event) {
.requireValue final grouped = event
.watchAll() .getOrElse((l) => throw l)
.map((event) => event.getOrElse((l) => throw l)); .groupBy((element) => element.$1.type);
return (
geoip: grouped.getOrElse(GeoAssetType.geoip, () => []),
geosite: grouped.getOrElse(GeoAssetType.geosite, () => []),
);
},
);
} }
GeoAssetRepository get _geoAssetRepo => GeoAssetRepository get _geoAssetRepo =>

View File

@@ -1,4 +1,5 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:gap/gap.dart';
import 'package:hiddify/core/localization/translations.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/overview/geo_assets_overview_notifier.dart';
import 'package:hiddify/features/geo_asset/widget/geo_asset_tile.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( SliverPinnedHeader(
child: AnimatedSwitcher( child: AnimatedSwitcher(
duration: const Duration(milliseconds: 200), duration: const Duration(milliseconds: 200),
child: geoAssets child: (geoip + geosite)
.where((e) => e.$1.active && e.$2 == null) .where((e) => e.$1.active && e.$2 == null)
.isNotEmpty .isNotEmpty
? const MissingRoutingAssetsCard() ? const MissingRoutingAssetsCard()
@@ -48,9 +49,16 @@ class GeoAssetsOverviewPage extends HookConsumerWidget {
), ),
), ),
switch (state) { 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) { itemBuilder: (context, index) {
final geoAsset = geoAssets[index]; final geoAsset = geoip[index];
return GeoAssetTile( return GeoAssetTile(
geoAsset, geoAsset,
onMarkAsActive: () => ref onMarkAsActive: () => ref
@@ -58,7 +66,28 @@ class GeoAssetsOverviewPage extends HookConsumerWidget {
.markAsActive(geoAsset.$1), .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(), _ => const SliverToBoxAdapter(),
}, },