feat: 下载时若存在数据丢失风险则弹窗提示;服务端增加占用信息查看功能
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
# https://dart.dev/tools/private-files
|
||||
# Created by `dart pub`
|
||||
.dart_tool/
|
||||
repo/
|
||||
|
||||
+37
-2
@@ -2,6 +2,7 @@ import 'dart:io';
|
||||
|
||||
import 'package:args/args.dart';
|
||||
import 'package:file/local.dart';
|
||||
import 'package:shelf/shelf.dart';
|
||||
import 'package:shelf/shelf_io.dart';
|
||||
import 'package:shelf_dav/shelf_dav.dart';
|
||||
|
||||
@@ -24,6 +25,7 @@ void main(List<String> args) async {
|
||||
if (!rootDir.existsSync()) {
|
||||
rootDir.createSync(recursive: true);
|
||||
}
|
||||
var user = argResults.option('user')!;
|
||||
final config = DAVConfig(
|
||||
root: rootDir,
|
||||
prefix: '/dav',
|
||||
@@ -33,7 +35,7 @@ void main(List<String> args) async {
|
||||
readOnly: false,
|
||||
propertyStorageType: PropertyStorageType.file,
|
||||
authenticationProvider: BasicAuthenticationProvider.plaintext(
|
||||
users: {argResults.option('user')!: argResults.option('auth')!},
|
||||
users: {user: argResults.option('auth')!},
|
||||
),
|
||||
);
|
||||
|
||||
@@ -42,6 +44,39 @@ void main(List<String> args) async {
|
||||
final ip = InternetAddress.anyIPv4;
|
||||
|
||||
final port = int.parse(argResults.option('port') ?? '8800');
|
||||
final server = await serve(dav.handler, ip, port);
|
||||
final server = await serve(
|
||||
(request) {
|
||||
if (request.method == 'GET' && request.url.path == 'info/$user') {
|
||||
return getInfo(rootDir);
|
||||
}
|
||||
|
||||
return dav.handler.call(request);
|
||||
},
|
||||
ip,
|
||||
port,
|
||||
);
|
||||
print('WebDAV server listening on port ${server.port}');
|
||||
}
|
||||
|
||||
Response getInfo(Directory dir) {
|
||||
var du = Process.runSync('du', [
|
||||
'-h',
|
||||
'--time',
|
||||
dir.absolute.path,
|
||||
]).stdout.toString();
|
||||
var result = <String>[];
|
||||
for (var line in du.split('\n')) {
|
||||
var parts = line.split(dir.absolute.path);
|
||||
if (parts.length == 2) {
|
||||
if (parts.last.trim().isEmpty) {
|
||||
result.insert(0, '${parts.first}总占用\n');
|
||||
} else {
|
||||
result.add('${parts.first}${Uri.decodeComponent(parts.last)}');
|
||||
}
|
||||
}
|
||||
}
|
||||
return Response.ok(
|
||||
result.join('\n'),
|
||||
headers: {'content-type': 'text/plain'},
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user