52 lines
1.6 KiB
Dart
52 lines
1.6 KiB
Dart
import 'dart:io';
|
|
|
|
import 'package:aves/ref/mime_types.dart';
|
|
import 'package:aves/services/common/services.dart';
|
|
import 'package:aves/widgets/dialogs/aves_dialog.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:path/path.dart' as p;
|
|
|
|
class MediaStoreScanDirDialog extends StatefulWidget {
|
|
const MediaStoreScanDirDialog({Key? key}) : super(key: key);
|
|
|
|
@override
|
|
_MediaStoreScanDirDialogState createState() => _MediaStoreScanDirDialogState();
|
|
}
|
|
|
|
class _MediaStoreScanDirDialogState extends State<MediaStoreScanDirDialog> {
|
|
final TextEditingController _pathController = TextEditingController();
|
|
bool _processing = false;
|
|
|
|
@override
|
|
void dispose() {
|
|
_pathController.dispose();
|
|
super.dispose();
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return AvesDialog(
|
|
content: _processing ? const CircularProgressIndicator() : TextField(controller: _pathController),
|
|
actions: [
|
|
TextButton(
|
|
onPressed: _processing
|
|
? null
|
|
: () async {
|
|
final dir = _pathController.text;
|
|
if (dir.isNotEmpty) {
|
|
setState(() => _processing = true);
|
|
await Future.forEach<FileSystemEntity>(Directory(dir).listSync(), (file) async {
|
|
if (file is File) {
|
|
final mimeType = MimeTypes.forExtension(p.extension(file.path));
|
|
await mediaStoreService.scanFile(file.path, mimeType!);
|
|
}
|
|
});
|
|
}
|
|
Navigator.pop(context);
|
|
},
|
|
child: const Text('Scan'),
|
|
)
|
|
],
|
|
);
|
|
}
|
|
}
|