add basic routing options, auto update routing assets,use ruleset, remove geo assets
This commit is contained in:
@@ -1,116 +1,116 @@
|
||||
import 'package:dartx/dartx.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:hiddify/core/localization/translations.dart';
|
||||
import 'package:hiddify/core/model/failures.dart';
|
||||
import 'package:hiddify/core/widget/adaptive_icon.dart';
|
||||
import 'package:hiddify/features/geo_asset/model/geo_asset_entity.dart';
|
||||
import 'package:hiddify/features/geo_asset/model/geo_asset_failure.dart';
|
||||
import 'package:hiddify/features/geo_asset/notifier/geo_asset_notifier.dart';
|
||||
import 'package:hiddify/utils/utils.dart';
|
||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||
import 'package:humanizer/humanizer.dart';
|
||||
// import 'package:dartx/dartx.dart';
|
||||
// import 'package:flutter/material.dart';
|
||||
// import 'package:hiddify/core/localization/translations.dart';
|
||||
// import 'package:hiddify/core/model/failures.dart';
|
||||
// import 'package:hiddify/core/widget/adaptive_icon.dart';
|
||||
// import 'package:hiddify/features/geo_asset/model/geo_asset_entity.dart';
|
||||
// import 'package:hiddify/features/geo_asset/model/geo_asset_failure.dart';
|
||||
// import 'package:hiddify/features/geo_asset/notifier/geo_asset_notifier.dart';
|
||||
// import 'package:hiddify/utils/utils.dart';
|
||||
// import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||
// import 'package:humanizer/humanizer.dart';
|
||||
|
||||
class GeoAssetTile extends HookConsumerWidget {
|
||||
GeoAssetTile(
|
||||
GeoAssetWithFileSize geoAssetWithFileSize, {
|
||||
super.key,
|
||||
required this.onMarkAsActive,
|
||||
}) : geoAsset = geoAssetWithFileSize.$1,
|
||||
size = geoAssetWithFileSize.$2;
|
||||
// class GeoAssetTile extends HookConsumerWidget {
|
||||
// GeoAssetTile(
|
||||
// GeoAssetWithFileSize geoAssetWithFileSize, {
|
||||
// super.key,
|
||||
// required this.onMarkAsActive,
|
||||
// }) : geoAsset = geoAssetWithFileSize.$1,
|
||||
// size = geoAssetWithFileSize.$2;
|
||||
|
||||
final GeoAssetEntity geoAsset;
|
||||
final int? size;
|
||||
final VoidCallback onMarkAsActive;
|
||||
// final GeoAssetEntity geoAsset;
|
||||
// final int? size;
|
||||
// final VoidCallback onMarkAsActive;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context, WidgetRef ref) {
|
||||
final t = ref.watch(translationsProvider);
|
||||
final fetchState = ref.watch(fetchGeoAssetProvider(geoAsset.id));
|
||||
final fileMissing = size == null;
|
||||
// @override
|
||||
// Widget build(BuildContext context, WidgetRef ref) {
|
||||
// final t = ref.watch(translationsProvider);
|
||||
// final fetchState = ref.watch(fetchGeoAssetProvider(geoAsset.id));
|
||||
// final fileMissing = size == null;
|
||||
|
||||
ref.listen(
|
||||
fetchGeoAssetProvider(geoAsset.id),
|
||||
(_, next) {
|
||||
switch (next) {
|
||||
case AsyncError(:final error):
|
||||
if (error case GeoAssetNoUpdateAvailable()) {
|
||||
return CustomToast(t.failure.geoAssets.notUpdate).show(context);
|
||||
}
|
||||
CustomAlertDialog.fromErr(t.presentError(error)).show(context);
|
||||
case AsyncData(value: final _?):
|
||||
CustomToast.success(t.settings.geoAssets.successMsg).show(context);
|
||||
}
|
||||
},
|
||||
);
|
||||
// ref.listen(
|
||||
// fetchGeoAssetProvider(geoAsset.id),
|
||||
// (_, next) {
|
||||
// switch (next) {
|
||||
// case AsyncError(:final error):
|
||||
// if (error case GeoAssetNoUpdateAvailable()) {
|
||||
// return CustomToast(t.failure.geoAssets.notUpdate).show(context);
|
||||
// }
|
||||
// CustomAlertDialog.fromErr(t.presentError(error)).show(context);
|
||||
// case AsyncData(value: final _?):
|
||||
// CustomToast.success(t.settings.geoAssets.successMsg).show(context);
|
||||
// }
|
||||
// },
|
||||
// );
|
||||
|
||||
return ListTile(
|
||||
title: Text.rich(
|
||||
TextSpan(
|
||||
children: [
|
||||
TextSpan(text: geoAsset.name),
|
||||
if (geoAsset.providerName.isNotBlank)
|
||||
TextSpan(text: " (${geoAsset.providerName})"),
|
||||
],
|
||||
),
|
||||
),
|
||||
isThreeLine: true,
|
||||
subtitle: fetchState.isLoading
|
||||
? const LinearProgressIndicator()
|
||||
: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
if (geoAsset.version.isNotNullOrBlank)
|
||||
Padding(
|
||||
padding: const EdgeInsetsDirectional.only(end: 8),
|
||||
child: Text(
|
||||
t.settings.geoAssets.version(version: geoAsset.version!),
|
||||
overflow: TextOverflow.ellipsis,
|
||||
),
|
||||
)
|
||||
else
|
||||
const SizedBox(),
|
||||
Flexible(
|
||||
child: Text.rich(
|
||||
TextSpan(
|
||||
children: [
|
||||
if (fileMissing)
|
||||
TextSpan(
|
||||
text: t.settings.geoAssets.fileMissing,
|
||||
style: TextStyle(
|
||||
color: Theme.of(context).colorScheme.error,
|
||||
),
|
||||
)
|
||||
else
|
||||
TextSpan(text: size?.bytes().toString()),
|
||||
if (geoAsset.lastCheck != null) ...[
|
||||
const TextSpan(text: " • "),
|
||||
TextSpan(text: geoAsset.lastCheck!.format()),
|
||||
],
|
||||
],
|
||||
),
|
||||
overflow: TextOverflow.ellipsis,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
selected: geoAsset.active,
|
||||
onTap: onMarkAsActive,
|
||||
trailing: PopupMenuButton(
|
||||
icon: Icon(AdaptiveIcon(context).more),
|
||||
itemBuilder: (context) {
|
||||
return [
|
||||
PopupMenuItem(
|
||||
enabled: !fetchState.isLoading,
|
||||
onTap: () => ref
|
||||
.read(FetchGeoAssetProvider(geoAsset.id).notifier)
|
||||
.fetch(geoAsset),
|
||||
child: fileMissing
|
||||
? Text(t.settings.geoAssets.download)
|
||||
: Text(t.settings.geoAssets.update),
|
||||
),
|
||||
];
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
// return ListTile(
|
||||
// title: Text.rich(
|
||||
// TextSpan(
|
||||
// children: [
|
||||
// TextSpan(text: geoAsset.name),
|
||||
// if (geoAsset.providerName.isNotBlank)
|
||||
// TextSpan(text: " (${geoAsset.providerName})"),
|
||||
// ],
|
||||
// ),
|
||||
// ),
|
||||
// isThreeLine: true,
|
||||
// subtitle: fetchState.isLoading
|
||||
// ? const LinearProgressIndicator()
|
||||
// : Row(
|
||||
// mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
// children: [
|
||||
// if (geoAsset.version.isNotNullOrBlank)
|
||||
// Padding(
|
||||
// padding: const EdgeInsetsDirectional.only(end: 8),
|
||||
// child: Text(
|
||||
// t.settings.geoAssets.version(version: geoAsset.version!),
|
||||
// overflow: TextOverflow.ellipsis,
|
||||
// ),
|
||||
// )
|
||||
// else
|
||||
// const SizedBox(),
|
||||
// Flexible(
|
||||
// child: Text.rich(
|
||||
// TextSpan(
|
||||
// children: [
|
||||
// if (fileMissing)
|
||||
// TextSpan(
|
||||
// text: t.settings.geoAssets.fileMissing,
|
||||
// style: TextStyle(
|
||||
// color: Theme.of(context).colorScheme.error,
|
||||
// ),
|
||||
// )
|
||||
// else
|
||||
// TextSpan(text: size?.bytes().toString()),
|
||||
// if (geoAsset.lastCheck != null) ...[
|
||||
// const TextSpan(text: " • "),
|
||||
// TextSpan(text: geoAsset.lastCheck!.format()),
|
||||
// ],
|
||||
// ],
|
||||
// ),
|
||||
// overflow: TextOverflow.ellipsis,
|
||||
// ),
|
||||
// ),
|
||||
// ],
|
||||
// ),
|
||||
// selected: geoAsset.active,
|
||||
// onTap: onMarkAsActive,
|
||||
// trailing: PopupMenuButton(
|
||||
// icon: Icon(AdaptiveIcon(context).more),
|
||||
// itemBuilder: (context) {
|
||||
// return [
|
||||
// PopupMenuItem(
|
||||
// enabled: !fetchState.isLoading,
|
||||
// onTap: () => ref
|
||||
// .read(FetchGeoAssetProvider(geoAsset.id).notifier)
|
||||
// .fetch(geoAsset),
|
||||
// child: fileMissing
|
||||
// ? Text(t.settings.geoAssets.download)
|
||||
// : Text(t.settings.geoAssets.update),
|
||||
// ),
|
||||
// ];
|
||||
// },
|
||||
// ),
|
||||
// );
|
||||
// }
|
||||
// }
|
||||
|
||||
Reference in New Issue
Block a user