aboutsummaryrefslogtreecommitdiffstats
path: root/Software
diff options
context:
space:
mode:
authorRoy Ben Shabat <Roy.mail.net@gmail.com>2020-03-25 00:26:47 +0200
committerRoy Ben Shabat <Roy.mail.net@gmail.com>2020-03-25 00:26:47 +0200
commit42c06402ff6648c356fba8315958283762ed2542 (patch)
tree24edf6b746afef0f3a7887e8d83d371d3cf351dc /Software
parentc7ceaf96e0ae6d8cb0e1ae7373e6a054f72f52cd (diff)
downloadTango-42c06402ff6648c356fba8315958283762ed2542.tar.gz
Tango-42c06402ff6648c356fba8315958283762ed2542.zip
Added Download menu implementation to file system.
Added several stun and turn servers to web rtc.
Diffstat (limited to 'Software')
-rw-r--r--Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/ViewModels/FileSystemViewVM.cs53
-rw-r--r--Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/Views/FileSystemView.xaml17
-rw-r--r--Software/Visual_Studio/FSE/Tango.FSE.Common/Controls/FileSystemControl.xaml11
-rw-r--r--Software/Visual_Studio/FSE/Tango.FSE.Common/FileSystem/IFileSystemProvider.cs1
-rw-r--r--Software/Visual_Studio/FSE/Tango.FSE.UI/FileSystem/DefaultFileSystemProvider.cs11
-rw-r--r--Software/Visual_Studio/FSE/Tango.FSE.UI/Storage/DefaultStorageProvider.cs2
-rw-r--r--Software/Visual_Studio/FSE/Tango.FSE.UI/ViewModels/LoginViewVM.cs4
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.Common/FileSystem/DefaultFileSystemService.cs14
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.UI/app.manifest2
-rw-r--r--Software/Visual_Studio/Tango.FileSystem/FileExplorerControl.cs53
-rw-r--r--Software/Visual_Studio/Tango.FileSystem/FileSystemManager.cs17
-rw-r--r--Software/Visual_Studio/Tango.FileSystem/Network/CreateFolderRequest.cs14
-rw-r--r--Software/Visual_Studio/Tango.FileSystem/Network/CreateFolderResponse.cs13
-rw-r--r--Software/Visual_Studio/Tango.FileSystem/Tango.FileSystem.csproj2
-rw-r--r--Software/Visual_Studio/Tango.WebRTC/WebRtcClient.cs17
15 files changed, 219 insertions, 12 deletions
diff --git a/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/ViewModels/FileSystemViewVM.cs b/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/ViewModels/FileSystemViewVM.cs
index 4e2ca1882..e10cc0ad1 100644
--- a/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/ViewModels/FileSystemViewVM.cs
+++ b/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/ViewModels/FileSystemViewVM.cs
@@ -58,6 +58,7 @@ namespace Tango.FSE.PPCConsole.ViewModels
public RelayCommand<List<FileSystemItem>> CutPasteCommand { get; set; }
public RelayCommand<List<FileSystemItem>> DownloadCommand { get; set; }
public RelayCommand<FileSystemItem> RenameCommand { get; set; }
+ public RelayCommand NewFolderCommand { get; set; }
public FileSystemViewVM()
@@ -78,6 +79,7 @@ namespace Tango.FSE.PPCConsole.ViewModels
CutPasteCommand = new RelayCommand<List<FileSystemItem>>((items) => PasteItems(items, true));
DownloadCommand = new RelayCommand<List<FileSystemItem>>(DownloadSelectedItems);
RenameCommand = new RelayCommand<FileSystemItem>(RenameFileSystemItem);
+ NewFolderCommand = new RelayCommand(CreateNewFolder);
}
private async void NavigateBack()
@@ -341,7 +343,24 @@ namespace Tango.FSE.PPCConsole.ViewModels
var result = await StorageProvider.SelectFolder("Select download destination folder");
if (result)
{
+
+ String destination = result.SelectedItem;
+
Debug.WriteLine($"Download to {result.SelectedItem}");
+
+ foreach (var item in items.Where(x => x.Type != FileSystemItemType.Drive))
+ {
+ if (File.Exists(Path.Combine(destination, item.Name)) || Directory.Exists(Path.Combine(destination, item.Name)))
+ {
+ if (!await NotificationProvider.ShowWarningQuestion($"'{item.Name}' already exists on '{Path.GetDirectoryName(destination)}'. Do you want to overwrite?"))
+ {
+ continue;
+ }
+ }
+
+ var handler = await FileSystemProvider.Download(item, destination);
+ FileSystemHandlers.Insert(0, handler);
+ }
}
}
@@ -376,6 +395,40 @@ namespace Tango.FSE.PPCConsole.ViewModels
}
}
+ private async void CreateNewFolder()
+ {
+ if (CurrentItem == null) return;
+ if (CurrentItem is FolderItem)
+ {
+ if ((CurrentItem as FolderItem).IsRoot) return;
+ }
+
+ var result = await NotificationProvider.ShowInputBox(
+ "New Folder",
+ $"Please enter a folder name and press 'ENTER'.",
+ PackIconKind.FolderAdd, "untitled",
+ "folder name",
+ 100,
+ "CREATE");
+
+ if (result.Confirmed)
+ {
+ try
+ {
+ using (NotificationProvider.PushTaskItem("Creating new folder..."))
+ {
+ var folderItem = await FileSystemProvider.CreateFolder(CurrentItem, result.Input);
+ NavigateToCurrentPath(); //Instead of inserting folder item just refresh the current path...
+ }
+ }
+ catch (Exception ex)
+ {
+ LogManager.Log(ex, $"Error creating new folder '{Path.Combine(CurrentItem.Path,result.Input)}.");
+ await NotificationProvider.ShowError($"Error creating folder '{result.Input}'.\n{ex.FlattenMessage()}");
+ }
+ }
+ }
+
private void OnCurrentItemChanged()
{
CurrentPath = CurrentItem.Path;
diff --git a/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/Views/FileSystemView.xaml b/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/Views/FileSystemView.xaml
index d1143ede4..67f1dc1c5 100644
--- a/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/Views/FileSystemView.xaml
+++ b/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/Views/FileSystemView.xaml
@@ -121,6 +121,7 @@
<RowDefinition Height="100" MinHeight="0" />
</Grid.RowDefinitions>
<controls:FileSystemControl
+ x:Name="fileSystemControl"
IsEnabled="{Binding MachineProvider.IsConnected}"
AllowDrag="True"
AllowDrop="True"
@@ -135,7 +136,8 @@
CopyPasteCommand="{Binding CopyPasteCommand}"
DownloadCommand="{Binding DownloadCommand}"
BackCommand="{Binding BackCommand}"
- RenameCommand="{Binding RenameCommand}"/>
+ RenameCommand="{Binding RenameCommand}"
+ NewFolderCommand="{Binding NewFolderCommand}"/>
<GridSplitter Grid.Row="1" Height="5" HorizontalAlignment="Stretch" VerticalAlignment="Center" />
@@ -163,7 +165,18 @@
<Border Margin="5 5 5 0" CornerRadius="3" BorderBrush="{StaticResource FSE_PrimaryBackgroundLightBrush}" BorderThickness="2" Padding="10">
<DockPanel Height="40">
<Grid DockPanel.Dock="Left" Width="40">
- <Image HorizontalAlignment="Left" Source="{Binding FileSystemItem.Icon}" RenderOptions.BitmapScalingMode="Fant" Stretch="Uniform" />
+ <Image HorizontalAlignment="Left" RenderOptions.BitmapScalingMode="Fant" Stretch="Uniform">
+ <Image.Style>
+ <Style TargetType="Image">
+ <Setter Property="Source" Value="{Binding FileSystemItem.Icon}"></Setter>
+ <Style.Triggers>
+ <DataTrigger Binding="{Binding FileSystemItem.Type}" Value="Folder">
+ <Setter Property="Source" Value="{Binding ElementName=fileSystemControl,Path=FolderIcon}"></Setter>
+ </DataTrigger>
+ </Style.Triggers>
+ </Style>
+ </Image.Style>
+ </Image>
<Ellipse Margin="-5 -5 0 0" Fill="{StaticResource FSE_PrimaryBackgroundDarkBrush}" HorizontalAlignment="Left" VerticalAlignment="Top" Width="20" Height="20" />
<material:PackIcon Margin="-3 -3 0 0" HorizontalAlignment="Left" VerticalAlignment="Top" Width="15" Height="15">
<material:PackIcon.Style>
diff --git a/Software/Visual_Studio/FSE/Tango.FSE.Common/Controls/FileSystemControl.xaml b/Software/Visual_Studio/FSE/Tango.FSE.Common/Controls/FileSystemControl.xaml
index eb1007609..5bc75ca54 100644
--- a/Software/Visual_Studio/FSE/Tango.FSE.Common/Controls/FileSystemControl.xaml
+++ b/Software/Visual_Studio/FSE/Tango.FSE.Common/Controls/FileSystemControl.xaml
@@ -49,6 +49,13 @@
<material:PackIcon Kind="SubdirectoryArrowRight" />
</MenuItem.Icon>
</MenuItem>
+ <Separator/>
+ <MenuItem Header="New Folder" InputGestureText="Ctrl+N" Command="{TemplateBinding NewFolderCommandInternal}">
+ <MenuItem.Icon>
+ <material:PackIcon Kind="FolderAdd" />
+ </MenuItem.Icon>
+ </MenuItem>
+ <Separator/>
<MenuItem Header="Copy" InputGestureText="Ctrl+C" Command="{TemplateBinding CopyCommand}">
<MenuItem.Icon>
<material:PackIcon Kind="ContentCopy" />
@@ -93,7 +100,7 @@
</Border.ContextMenu>
<Grid Background="Transparent">
- <ListBox x:Name="PART_listbox" IsTextSearchEnabled="True" TextSearch.TextPath="Name" Background="Transparent" SelectionMode="{TemplateBinding SelectionMode}" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ScrollViewer.VerticalScrollBarVisibility="Auto" ItemsSource="{Binding RelativeSource={RelativeSource Mode=TemplatedParent},Path=CurrentItem.Items}" SelectedItem="{Binding RelativeSource={RelativeSource Mode=TemplatedParent},Path=SelectedItem,Mode=TwoWay}">
+ <ListBox x:Name="PART_listbox" IsTextSearchEnabled="True" TextSearch.TextPath="Name" Background="Transparent" SelectionMode="{TemplateBinding SelectionMode}" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ScrollViewer.VerticalScrollBarVisibility="Auto" ItemsSource="{Binding RelativeSource={RelativeSource Mode=TemplatedParent},Path=CurrentItem.Items}">
<ListBox.Style>
<Style TargetType="ListBox" BasedOn="{StaticResource {x:Type ListBox}}">
<Setter Property="Visibility" Value="Collapsed"></Setter>
@@ -164,7 +171,7 @@
</Style.Triggers>
</Style>
</Grid.Style>
- <local:FileSystemDataGrid x:Name="PART_datagrid" IsTextSearchEnabled="True" TextSearch.TextPath="Name" ItemsSource="{Binding RelativeSource={RelativeSource Mode=TemplatedParent},Path=CurrentItem.Items}" SelectedItem="{Binding RelativeSource={RelativeSource Mode=TemplatedParent},Path=SelectedItem,Mode=TwoWay}" CellStyle="{StaticResource FileSystemCellStyle}">
+ <local:FileSystemDataGrid x:Name="PART_datagrid" IsTextSearchEnabled="True" TextSearch.TextPath="Name" ItemsSource="{Binding RelativeSource={RelativeSource Mode=TemplatedParent},Path=CurrentItem.Items}" CellStyle="{StaticResource FileSystemCellStyle}">
<DataGrid.Style>
<Style TargetType="DataGrid" BasedOn="{StaticResource {x:Type DataGrid}}">
<Setter Property="Background" Value="Transparent"></Setter>
diff --git a/Software/Visual_Studio/FSE/Tango.FSE.Common/FileSystem/IFileSystemProvider.cs b/Software/Visual_Studio/FSE/Tango.FSE.Common/FileSystem/IFileSystemProvider.cs
index 253bf801b..00546094e 100644
--- a/Software/Visual_Studio/FSE/Tango.FSE.Common/FileSystem/IFileSystemProvider.cs
+++ b/Software/Visual_Studio/FSE/Tango.FSE.Common/FileSystem/IFileSystemProvider.cs
@@ -21,5 +21,6 @@ namespace Tango.FSE.Common.FileSystem
Task Move(FileSystemItem source, FileSystemItem target);
Task Rename(FileSystemItem source, String newName);
Task Delete(FileSystemItem item);
+ Task<FolderItem> CreateFolder(FileSystemItem parent, String folderName);
}
}
diff --git a/Software/Visual_Studio/FSE/Tango.FSE.UI/FileSystem/DefaultFileSystemProvider.cs b/Software/Visual_Studio/FSE/Tango.FSE.UI/FileSystem/DefaultFileSystemProvider.cs
index 1f6641f3a..b13b797e9 100644
--- a/Software/Visual_Studio/FSE/Tango.FSE.UI/FileSystem/DefaultFileSystemProvider.cs
+++ b/Software/Visual_Studio/FSE/Tango.FSE.UI/FileSystem/DefaultFileSystemProvider.cs
@@ -399,5 +399,16 @@ namespace Tango.FSE.UI.FileSystem
Path = item.Path
}, new TransportRequestConfig() { Timeout = TimeSpan.FromSeconds(120) });
}
+
+ public async Task<FolderItem> CreateFolder(FileSystemItem parent, string folderName)
+ {
+ var response = await _machineProvider.MachineOperator.SendGenericRequest<CreateFolderRequest, CreateFolderResponse>(new CreateFolderRequest()
+ {
+ Path = parent.Path,
+ FolderName = folderName,
+ });
+
+ return FileSystemItem.FromDTO(response.FolderItem) as FolderItem;
+ }
}
}
diff --git a/Software/Visual_Studio/FSE/Tango.FSE.UI/Storage/DefaultStorageProvider.cs b/Software/Visual_Studio/FSE/Tango.FSE.UI/Storage/DefaultStorageProvider.cs
index 9a40888a3..627b380da 100644
--- a/Software/Visual_Studio/FSE/Tango.FSE.UI/Storage/DefaultStorageProvider.cs
+++ b/Software/Visual_Studio/FSE/Tango.FSE.UI/Storage/DefaultStorageProvider.cs
@@ -29,7 +29,7 @@ namespace Tango.FSE.UI.Storage
[TangoInject(Mode = TangoInjectMode.WhenAvailable)]
private INotificationProvider NotificationProvider { get; set; }
- public bool UseNativeDialogs { get; set; } = false;
+ public bool UseNativeDialogs { get; set; } = true;
private bool _isOpened;
public bool IsOpened
diff --git a/Software/Visual_Studio/FSE/Tango.FSE.UI/ViewModels/LoginViewVM.cs b/Software/Visual_Studio/FSE/Tango.FSE.UI/ViewModels/LoginViewVM.cs
index 8622daab2..8b14ac69e 100644
--- a/Software/Visual_Studio/FSE/Tango.FSE.UI/ViewModels/LoginViewVM.cs
+++ b/Software/Visual_Studio/FSE/Tango.FSE.UI/ViewModels/LoginViewVM.cs
@@ -131,9 +131,9 @@ namespace Tango.FSE.UI.ViewModels
try
{
- var s = await StorageProvider.SelectFolder("Select download destination folder");
+ //var s = await StorageProvider.SelectFolder("Select download destination folder");
- return;
+ //return;
if (!Validate())
{
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Common/FileSystem/DefaultFileSystemService.cs b/Software/Visual_Studio/PPC/Tango.PPC.Common/FileSystem/DefaultFileSystemService.cs
index 512935b50..edb004344 100644
--- a/Software/Visual_Studio/PPC/Tango.PPC.Common/FileSystem/DefaultFileSystemService.cs
+++ b/Software/Visual_Studio/PPC/Tango.PPC.Common/FileSystem/DefaultFileSystemService.cs
@@ -334,6 +334,20 @@ namespace Tango.PPC.Common.FileSystem
}
}
+ [ExternalBridgeRequestHandlerMethod(typeof(CreateFolderRequest))]
+ public async void OnCreateFolderRequest(CreateFolderRequest request, String token, ExternalBridgeReceiver receiver)
+ {
+ try
+ {
+ var dto = _manager.CreateFolder(request.Path, request.FolderName);
+ await receiver.SendGenericResponse(new CreateFolderResponse() { FolderItem = dto }, token);
+ }
+ catch (Exception ex)
+ {
+ await receiver.SendErrorResponse(ex, token);
+ }
+ }
+
public void OnReceiverDisconnected(ExternalBridgeReceiver receiver)
{
if (_webRtcClients.ContainsKey(receiver))
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/app.manifest b/Software/Visual_Studio/PPC/Tango.PPC.UI/app.manifest
index d72e75011..efc5f8179 100644
--- a/Software/Visual_Studio/PPC/Tango.PPC.UI/app.manifest
+++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/app.manifest
@@ -16,7 +16,7 @@
Remove this element if your application requires this virtualization for backwards
compatibility.
-->
- <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
+ <!--<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />-->
</requestedPrivileges>
</security>
</trustInfo>
diff --git a/Software/Visual_Studio/Tango.FileSystem/FileExplorerControl.cs b/Software/Visual_Studio/Tango.FileSystem/FileExplorerControl.cs
index c624178a0..3660a18f0 100644
--- a/Software/Visual_Studio/Tango.FileSystem/FileExplorerControl.cs
+++ b/Software/Visual_Studio/Tango.FileSystem/FileExplorerControl.cs
@@ -105,6 +105,22 @@ namespace Tango.FileSystem
public static readonly DependencyProperty DeleteCommandInternalProperty =
DependencyProperty.Register("DeleteCommandInternal", typeof(ICommand), typeof(FileExplorerControl), new PropertyMetadata(null));
+ public ICommand NewFolderCommandInternal
+ {
+ get { return (ICommand)GetValue(NewFolderCommandInternalProperty); }
+ set { SetValue(NewFolderCommandInternalProperty, value); }
+ }
+ public static readonly DependencyProperty NewFolderCommandInternalProperty =
+ DependencyProperty.Register("NewFolderCommandInternal", typeof(ICommand), typeof(FileExplorerControl), new PropertyMetadata(null));
+
+ public ICommand NewFolderCommand
+ {
+ get { return (ICommand)GetValue(NewFolderCommandProperty); }
+ set { SetValue(NewFolderCommandProperty, value); }
+ }
+ public static readonly DependencyProperty NewFolderCommandProperty =
+ DependencyProperty.Register("NewFolderCommand", typeof(ICommand), typeof(FileExplorerControl), new PropertyMetadata(null));
+
public ICommand DropCommand
{
get { return (ICommand)GetValue(DropCommandProperty); }
@@ -273,7 +289,6 @@ namespace Tango.FileSystem
public static readonly DependencyProperty SelectionModeProperty =
DependencyProperty.Register("SelectionMode", typeof(SelectionMode), typeof(FileExplorerControl), new PropertyMetadata(SelectionMode.Extended));
-
static FileExplorerControl()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(FileExplorerControl), new FrameworkPropertyMetadata(typeof(FileExplorerControl)));
@@ -343,21 +358,43 @@ namespace Tango.FileSystem
OpenCommand = new RelayCommand(() =>
{
ItemDoubleClickedCommand?.Execute(SelectedItems.FirstOrDefault());
- }, () => SelectedItems != null && SelectedItems.Count == 1);
+ }, () =>
+ {
+ return SelectedItems != null && SelectedItems.Count == 1;
+ });
DeleteCommandInternal = new RelayCommand(() =>
{
DeleteCommand?.Execute(SelectedItems.ToList());
- }, () => SelectedItems != null && SelectedItems.Count > 1 && SelectedItems.All(x => x.Type != FileSystemItemType.Drive));
+ }, () => SelectedItems != null && SelectedItems.Count > 0 && SelectedItems.All(x => x.Type != FileSystemItemType.Drive));
- RenameCommandInternal = new RelayCommand(() =>
+ RenameCommandInternal = new RelayCommand(() =>
{
RenameCommand?.Execute(SelectedItems.FirstOrDefault());
}, () => SelectedItems != null && SelectedItems.Count == 1 && SelectedItems.All(x => x.Type != FileSystemItemType.Drive));
+
+ NewFolderCommandInternal = new RelayCommand(() =>
+ {
+ NewFolderCommand?.Execute(null);
+ },
+ () =>
+ {
+ if (CurrentItem == null) return false;
+
+ if (CurrentItem is FolderItem)
+ {
+ if ((CurrentItem as FolderItem).IsRoot)
+ {
+ return false;
+ }
+ }
+
+ return true;
+ });
}
private void OnIsContextMenuOpenedChanged()
@@ -370,6 +407,7 @@ namespace Tango.FileSystem
(OpenCommand as RelayCommand)?.RaiseCanExecuteChanged();
(DeleteCommandInternal as RelayCommand)?.RaiseCanExecuteChanged();
(RenameCommandInternal as RelayCommand)?.RaiseCanExecuteChanged();
+ (NewFolderCommandInternal as RelayCommand)?.RaiseCanExecuteChanged();
if (IsContextMenuOpened)
{
@@ -479,6 +517,13 @@ namespace Tango.FileSystem
DownloadCommandInternal.Execute(null);
}
}
+ else if (e.Key == Key.N && Keyboard.IsKeyDown(Key.LeftCtrl))
+ {
+ if (NewFolderCommandInternal != null && NewFolderCommandInternal.CanExecute(null))
+ {
+ DownloadCommandInternal.Execute(null);
+ }
+ }
else if (e.Key == Key.F2)
{
if (RenameCommandInternal != null && RenameCommandInternal.CanExecute(null))
diff --git a/Software/Visual_Studio/Tango.FileSystem/FileSystemManager.cs b/Software/Visual_Studio/Tango.FileSystem/FileSystemManager.cs
index f72785f81..46ca080a2 100644
--- a/Software/Visual_Studio/Tango.FileSystem/FileSystemManager.cs
+++ b/Software/Visual_Studio/Tango.FileSystem/FileSystemManager.cs
@@ -181,5 +181,22 @@ namespace Tango.FileSystem
throw new FileNotFoundException("Could not locate the source file or folder.");
}
}
+
+ public FileSystemItemDTO CreateFolder(String path, String folderName)
+ {
+ String fullPath = Path.Combine(path, folderName);
+
+ if (Directory.Exists(fullPath))
+ {
+ throw new IOException("The specified directory name already exists.");
+ }
+
+ Directory.CreateDirectory(fullPath);
+
+ return GetFolder(new GetFileSystemItemRequest()
+ {
+ Path = fullPath
+ });
+ }
}
}
diff --git a/Software/Visual_Studio/Tango.FileSystem/Network/CreateFolderRequest.cs b/Software/Visual_Studio/Tango.FileSystem/Network/CreateFolderRequest.cs
new file mode 100644
index 000000000..77452dcdf
--- /dev/null
+++ b/Software/Visual_Studio/Tango.FileSystem/Network/CreateFolderRequest.cs
@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Tango.FileSystem.Network
+{
+ public class CreateFolderRequest
+ {
+ public String Path { get; set; }
+ public String FolderName { get; set; }
+ }
+}
diff --git a/Software/Visual_Studio/Tango.FileSystem/Network/CreateFolderResponse.cs b/Software/Visual_Studio/Tango.FileSystem/Network/CreateFolderResponse.cs
new file mode 100644
index 000000000..d52e52c47
--- /dev/null
+++ b/Software/Visual_Studio/Tango.FileSystem/Network/CreateFolderResponse.cs
@@ -0,0 +1,13 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Tango.FileSystem.Network
+{
+ public class CreateFolderResponse
+ {
+ public FileSystemItemDTO FolderItem { get; set; }
+ }
+}
diff --git a/Software/Visual_Studio/Tango.FileSystem/Tango.FileSystem.csproj b/Software/Visual_Studio/Tango.FileSystem/Tango.FileSystem.csproj
index a1218f12d..a31af216c 100644
--- a/Software/Visual_Studio/Tango.FileSystem/Tango.FileSystem.csproj
+++ b/Software/Visual_Studio/Tango.FileSystem/Tango.FileSystem.csproj
@@ -60,6 +60,8 @@
<Compile Include="Network\ChunkDownloadResponse.cs" />
<Compile Include="Network\CopyRequest.cs" />
<Compile Include="Network\CopyResponse.cs" />
+ <Compile Include="Network\CreateFolderRequest.cs" />
+ <Compile Include="Network\CreateFolderResponse.cs" />
<Compile Include="Network\DeleteRequest.cs" />
<Compile Include="Network\DeleteResponse.cs" />
<Compile Include="Network\InitWebRtcRequest.cs" />
diff --git a/Software/Visual_Studio/Tango.WebRTC/WebRtcClient.cs b/Software/Visual_Studio/Tango.WebRTC/WebRtcClient.cs
index e1d49e18c..f2ac1212a 100644
--- a/Software/Visual_Studio/Tango.WebRTC/WebRtcClient.cs
+++ b/Software/Visual_Studio/Tango.WebRTC/WebRtcClient.cs
@@ -157,9 +157,26 @@ namespace Tango.WebRTC
{
ManagedConductor.InitializeSSL();
+ //Stun
_conductor.AddServerConfig("stun:stun.l.google.com:19302", String.Empty, String.Empty);
_conductor.AddServerConfig("stun:stun.anyfirewall.com:3478", String.Empty, String.Empty);
_conductor.AddServerConfig("stun:stun.stunprotocol.org:3478", String.Empty, String.Empty);
+ _conductor.AddServerConfig("stun:stun1.l.google.com:19302", String.Empty, String.Empty);
+ _conductor.AddServerConfig("stun:stun2.l.google.com:19302", String.Empty, String.Empty);
+ _conductor.AddServerConfig("stun:stun3.l.google.com:19302", String.Empty, String.Empty);
+ _conductor.AddServerConfig("stun:stun4.l.google.com:19302", String.Empty, String.Empty);
+ _conductor.AddServerConfig("stun:eu-turn3.xirsys.com", "mjyn-kODdallq7iIZN1-eCYHo4GZy36urKu-8GTtdKwcuEUe8i4LjeHVoej-OePwAAAAAF56hb1Sb3liZW4=", "83b30e94-6e1c-11ea-b4c3-72c9c257b255");
+ _conductor.AddServerConfig("stun:numb.viagenie.ca:3478", "roy.mail.net@gmail.com", "X7jPGh8Y@BjTi8G");
+
+ //Turn
+ _conductor.AddServerConfig("turn:eu-turn3.xirsys.com:80?transport=udp", "mjyn-kODdallq7iIZN1-eCYHo4GZy36urKu-8GTtdKwcuEUe8i4LjeHVoej-OePwAAAAAF56hb1Sb3liZW4=", "83b30e94-6e1c-11ea-b4c3-72c9c257b255");
+ _conductor.AddServerConfig("turn:eu-turn3.xirsys.com:3478?transport=udp", "mjyn-kODdallq7iIZN1-eCYHo4GZy36urKu-8GTtdKwcuEUe8i4LjeHVoej-OePwAAAAAF56hb1Sb3liZW4=", "83b30e94-6e1c-11ea-b4c3-72c9c257b255");
+ _conductor.AddServerConfig("turn:eu-turn3.xirsys.com:80?transport=tcp", "mjyn-kODdallq7iIZN1-eCYHo4GZy36urKu-8GTtdKwcuEUe8i4LjeHVoej-OePwAAAAAF56hb1Sb3liZW4=", "83b30e94-6e1c-11ea-b4c3-72c9c257b255");
+ _conductor.AddServerConfig("turn:eu-turn3.xirsys.com:3478?transport=tcp", "mjyn-kODdallq7iIZN1-eCYHo4GZy36urKu-8GTtdKwcuEUe8i4LjeHVoej-OePwAAAAAF56hb1Sb3liZW4=", "83b30e94-6e1c-11ea-b4c3-72c9c257b255");
+ _conductor.AddServerConfig("turns:eu-turn3.xirsys.com:443?transport=tcp", "mjyn-kODdallq7iIZN1-eCYHo4GZy36urKu-8GTtdKwcuEUe8i4LjeHVoej-OePwAAAAAF56hb1Sb3liZW4=", "83b30e94-6e1c-11ea-b4c3-72c9c257b255");
+ _conductor.AddServerConfig("turns:eu-turn3.xirsys.com:5349?transport=tcp", "mjyn-kODdallq7iIZN1-eCYHo4GZy36urKu-8GTtdKwcuEUe8i4LjeHVoej-OePwAAAAAF56hb1Sb3liZW4=", "83b30e94-6e1c-11ea-b4c3-72c9c257b255");
+ _conductor.AddServerConfig("turn:numb.viagenie.ca:3478", "roy.mail.net@gmail.com", "X7jPGh8Y@BjTi8G");
+ _conductor.AddServerConfig("turn:turn.anyfirewall.com:443?transport=tcp", "webrtc", "webrtc");
_conductor.SetAudio(false);
_conductor.SetVideoCapturer(FrameWidth, FrameHeight, FrameRate, false);