From 519c68b0923699a02973d9ca6e0ed4736218bd9f Mon Sep 17 00:00:00 2001 From: Pierre HUBERT Date: Fri, 1 May 2020 20:10:25 +0200 Subject: [PATCH] Can change group virtual directory --- lib/helpers/groups_helper.dart | 10 ++++++++++ lib/models/group.dart | 2 +- lib/ui/dialogs/virtual_directory_dialog.dart | 8 +++++++- lib/ui/screens/group_settings_screen.dart | 20 ++++++++++++++++++++ 4 files changed, 38 insertions(+), 2 deletions(-) diff --git a/lib/helpers/groups_helper.dart b/lib/helpers/groups_helper.dart index 7d65142..381e960 100644 --- a/lib/helpers/groups_helper.dart +++ b/lib/helpers/groups_helper.dart @@ -193,6 +193,16 @@ class GroupsHelper { return groupInfo.info; } + /// Check the availability of a virtual directory + /// + /// Throws in case of error + static Future checkVirtualDirectoryAvailability( + int groupID, String dir) async => + await APIRequest(uri: "groups/checkVirtualDirectory", needLogin: true) + .addInt("groupID", groupID) + .addString("directory", dir) + .execWithThrow(); + /// Update (set) new group settings /// /// Throws in case of error diff --git a/lib/models/group.dart b/lib/models/group.dart index ba32f55..3f56bfa 100644 --- a/lib/models/group.dart +++ b/lib/models/group.dart @@ -28,7 +28,7 @@ class Group { final GroupVisibilityLevel visibilityLevel; final GroupRegistrationLevel registrationLevel; final GroupPostCreationLevel postCreationLevel; - final String virtualDirectory; + String virtualDirectory; bool following; Group({ diff --git a/lib/ui/dialogs/virtual_directory_dialog.dart b/lib/ui/dialogs/virtual_directory_dialog.dart index 4887791..ae9bcd1 100644 --- a/lib/ui/dialogs/virtual_directory_dialog.dart +++ b/lib/ui/dialogs/virtual_directory_dialog.dart @@ -1,3 +1,4 @@ +import 'package:comunic/helpers/groups_helper.dart'; import 'package:comunic/helpers/settings_helper.dart'; import 'package:comunic/ui/widgets/safe_state.dart'; import 'package:comunic/utils/intl_utils.dart'; @@ -8,7 +9,7 @@ import 'package:flutter/material.dart'; /// /// @author Pierre HUBERT -enum VirtualDirectoryTargetType { USER } +enum VirtualDirectoryTargetType { USER, GROUP } enum _CheckStatus { EMPTY, PENDING, VALID, INVALID } @@ -122,6 +123,11 @@ class __VirtualDirectoryPickerState extends SafeState<_VirtualDirectoryPicker> { case VirtualDirectoryTargetType.USER: await SettingsHelper.checkUserDirectoryAvailability(value); break; + + case VirtualDirectoryTargetType.GROUP: + await GroupsHelper.checkVirtualDirectoryAvailability( + widget.id, value); + break; } if (_currentValue == value) { diff --git a/lib/ui/screens/group_settings_screen.dart b/lib/ui/screens/group_settings_screen.dart index 7d4db8e..fb48882 100644 --- a/lib/ui/screens/group_settings_screen.dart +++ b/lib/ui/screens/group_settings_screen.dart @@ -1,5 +1,6 @@ import 'package:comunic/helpers/groups_helper.dart'; import 'package:comunic/models/advanced_group_info.dart'; +import 'package:comunic/ui/dialogs/virtual_directory_dialog.dart'; import 'package:comunic/ui/widgets/async_screen_widget.dart'; import 'package:comunic/ui/widgets/comunic_back_button_widget.dart'; import 'package:comunic/ui/widgets/safe_state.dart'; @@ -89,6 +90,25 @@ class _GroupSettingsScreenState extends SafeState { _groupSettings.name = s; _updateSettings(); }), + + // Group virtual directory + SettingsTile( + title: tr("Virtual directory (optional)"), + subtitle: _groupSettings.virtualDirectory, + onTap: () async { + final newDir = await showVirtualDirectoryDialog( + context: context, + initialDirectory: _groupSettings.virtualDirectory, + id: _groupSettings.id, + type: VirtualDirectoryTargetType.GROUP, + ); + + if (newDir == null) return; + + _groupSettings.virtualDirectory = newDir; + _updateSettings(); + }, + ), ], ); }