🐛 Fix file upload

This commit is contained in:
2025-09-24 20:29:30 +08:00
parent 457d1bac60
commit 5f84751fd5
4 changed files with 9 additions and 36 deletions

View File

@@ -34,20 +34,4 @@ extension SnFilePoolList on List<SnFilePool> {
}
throw ArgumentError('Unexpected response format: $data');
}
List<SnFilePool> filterValid() {
return where((p) {
final accept = p.policyConfig?['accept_types'];
if (accept is List) {
final acceptsOnlyMedia = accept.every((t) =>
t is String &&
(t.startsWith('image/') ||
t.startsWith('video/') ||
t.startsWith('audio/')));
if (acceptsOnlyMedia) return false;
}
return true;
}).toList();
}
}

View File

@@ -6,23 +6,16 @@ import 'package:island/pods/network.dart';
final poolsProvider = FutureProvider<List<SnFilePool>>((ref) async {
final dio = ref.watch(apiClientProvider);
final response = await dio.get('/drive/pools');
final pools = SnFilePoolList.listFromResponse(response.data);
return pools.filterValid();
return response.data.map((e) => SnFilePool.fromJson(e)).toList();
});
String resolveDefaultPoolId(WidgetRef ref, List<SnFilePool> pools) {
String? resolveDefaultPoolId(WidgetRef ref, List<SnFilePool> pools) {
final settings = ref.watch(appSettingsNotifierProvider);
final validPools = pools.filterValid();
final configuredId = settings.defaultPoolId;
if (configuredId != null && validPools.any((p) => p.id == configuredId)) {
if (configuredId != null && pools.any((p) => p.id == configuredId)) {
return configuredId;
}
if (validPools.isNotEmpty) {
return validPools.first.id;
return pools.firstOrNull?.id;
}
// DEFAULT: Solar Network Driver
return '500e5ed8-bd44-4359-bc0a-ec85e2adf447'; }

View File

@@ -935,7 +935,7 @@ class _ChatAttachmentUploaderSheetState
if (snapshot.hasError) {
return Center(child: Text('errorLoadingPools'.tr()));
}
final pools = snapshot.data!.filterValid();
final pools = snapshot.data!;
selectedPoolId ??= resolveDefaultPoolId(widget.ref, pools);
return Column(
@@ -1162,9 +1162,7 @@ class _ChatAttachmentUploaderSheetState
// Get the selected pool to check constraints
final pools = await widget.ref.read(poolsProvider.future);
final selectedPool = pools.filterValid().firstWhere(
(p) => p.id == selectedPoolId,
);
final selectedPool = pools.firstWhere((p) => p.id == selectedPoolId);
// Check constraints
final maxFileSize = selectedPool.policyConfig?['max_file_size'] as int?;

View File

@@ -59,7 +59,7 @@ class _AttachmentUploaderSheetState extends State<AttachmentUploaderSheet> {
if (snapshot.hasError) {
return Center(child: Text('errorLoadingPools'.tr()));
}
final pools = snapshot.data!.filterValid();
final pools = snapshot.data!;
selectedPoolId ??= resolveDefaultPoolId(widget.ref, pools);
return Column(
@@ -286,9 +286,7 @@ class _AttachmentUploaderSheetState extends State<AttachmentUploaderSheet> {
// Get the selected pool to check constraints
final pools = await widget.ref.read(poolsProvider.future);
final selectedPool = pools.filterValid().firstWhere(
(p) => p.id == selectedPoolId,
);
final selectedPool = pools.firstWhere((p) => p.id == selectedPoolId);
// Check constraints
final maxFileSize = selectedPool.policyConfig?['max_file_size'] as int?;