installed windows client save incoming recording to a specific directory (#7974)

Signed-off-by: 21pages <pages21@163.com>
This commit is contained in:
21pages
2024-05-08 17:04:53 +08:00
committed by GitHub
parent 35832f8f7f
commit 09f3850250
51 changed files with 173 additions and 45 deletions

View File

@@ -485,42 +485,72 @@ class _GeneralState extends State<_General> {
}
Widget record(BuildContext context) {
final showRootDir = isWindows && bind.mainIsInstalled();
return futureBuilder(future: () async {
String defaultDirectory = await bind.mainDefaultVideoSaveDirectory();
String user_dir = await bind.mainVideoSaveDirectory(root: false);
String root_dir =
showRootDir ? await bind.mainVideoSaveDirectory(root: true) : '';
bool user_dir_exists = await Directory(user_dir).exists();
bool root_dir_exists =
showRootDir ? await Directory(root_dir).exists() : false;
// canLaunchUrl blocked on windows portable, user SYSTEM
return {'dir': defaultDirectory, 'canlaunch': true};
return {
'user_dir': user_dir,
'root_dir': root_dir,
'user_dir_exists': user_dir_exists,
'root_dir_exists': root_dir_exists,
};
}(), hasData: (data) {
Map<String, dynamic> map = data as Map<String, dynamic>;
String dir = map['dir']!;
String customDirectory =
bind.mainGetOptionSync(key: 'video-save-directory');
if (customDirectory.isNotEmpty) {
dir = customDirectory;
}
bool canlaunch = map['canlaunch']! as bool;
String user_dir = map['user_dir']!;
String root_dir = map['root_dir']!;
bool root_dir_exists = map['root_dir_exists']!;
bool user_dir_exists = map['user_dir_exists']!;
return _Card(title: 'Recording', children: [
_OptionCheckBox(context, 'Automatically record incoming sessions',
'allow-auto-record-incoming'),
if (showRootDir)
Row(
children: [
Text('${translate("Incoming")}:'),
Expanded(
child: GestureDetector(
onTap: root_dir_exists
? () => launchUrl(Uri.file(root_dir))
: null,
child: Text(
root_dir,
softWrap: true,
style: root_dir_exists
? const TextStyle(
decoration: TextDecoration.underline)
: null,
)).marginOnly(left: 10),
),
],
).marginOnly(left: _kContentHMargin),
Row(
children: [
Text('${translate("Directory")}:'),
Text('${translate(showRootDir ? "Outgoing" : "Directory")}:'),
Expanded(
child: GestureDetector(
onTap: canlaunch ? () => launchUrl(Uri.file(dir)) : null,
onTap: user_dir_exists
? () => launchUrl(Uri.file(user_dir))
: null,
child: Text(
dir,
user_dir,
softWrap: true,
style:
const TextStyle(decoration: TextDecoration.underline),
style: user_dir_exists
? const TextStyle(decoration: TextDecoration.underline)
: null,
)).marginOnly(left: 10),
),
ElevatedButton(
onPressed: () async {
String? initialDirectory;
if (await Directory.fromUri(Uri.directory(dir))
if (await Directory.fromUri(Uri.directory(user_dir))
.exists()) {
initialDirectory = dir;
initialDirectory = user_dir;
}
String? selectedDirectory = await FilePicker.platform
.getDirectoryPath(initialDirectory: initialDirectory);

View File

@@ -525,7 +525,7 @@ class _SettingsState extends State<SettingsPage> with WidgetsBindingObserver {
builder: (ctx, data) => Offstage(
offstage: !data.hasData,
child: Text("${translate("Directory")}: ${data.data}")),
future: bind.mainDefaultVideoSaveDirectory()),
future: bind.mainVideoSaveDirectory(root: false)),
initialValue: _autoRecordIncomingSession,
onToggle: (v) async {
await bind.mainSetOption(

View File

@@ -943,7 +943,7 @@ class RustdeskImpl {
throw UnimplementedError();
}
Future<String> mainDefaultVideoSaveDirectory({dynamic hint}) {
Future<String> mainVideoSaveDirectory({required bool root, dynamic hint}) {
throw UnimplementedError();
}