Skip to content

Commit ca3f632

Browse files
authored
Merge branch 'master' into file-jumping
2 parents 50ced69 + 0d90f42 commit ca3f632

17 files changed

+1136
-732
lines changed

Files UWP/App.xaml.cs

Lines changed: 338 additions & 62 deletions
Large diffs are not rendered by default.

Files UWP/Assets/Files UWP Icon.png

10.3 KB
Loading
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<ContentDialog
2+
x:Class="Files.Dialogs.ExtractFilesDialog"
3+
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
4+
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
5+
xmlns:local="using:Files.Dialogs"
6+
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
7+
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
8+
mc:Ignorable="d"
9+
CornerRadius="4"
10+
Title="Extract Compressed Archive"
11+
PrimaryButtonText="Extract"
12+
CloseButtonText="Cancel"
13+
DefaultButton="Primary"
14+
PrimaryButtonClick="ContentDialog_PrimaryButtonClick"
15+
CloseButtonClick="ContentDialog_CloseButtonClick">
16+
17+
<Grid MinWidth="375">
18+
<StackPanel Orientation="Vertical">
19+
<TextBlock TextWrapping="WrapWholeWords" Text="Pick a location to extract this compressed archive to. You'll need to stay in the current folder until we're done. A new tab will open up with the extracted items."/>
20+
<Grid ColumnSpacing="5" Margin="0,14,0,0" >
21+
<Grid.ColumnDefinitions>
22+
<ColumnDefinition Width="75*"/>
23+
<ColumnDefinition Width="25*"/>
24+
</Grid.ColumnDefinitions>
25+
<TextBox x:Name="DestPathText" Grid.Column="0"/>
26+
<Button x:Name="BrowseButton" Grid.Column="1" Content="Browse" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Click="BrowseButton_Click"/>
27+
</Grid>
28+
</StackPanel>
29+
</Grid>
30+
</ContentDialog>
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.IO;
4+
using System.Linq;
5+
using System.Runtime.InteropServices.WindowsRuntime;
6+
using Windows.Foundation;
7+
using Windows.Foundation.Collections;
8+
using Windows.UI.Xaml;
9+
using Windows.UI.Xaml.Controls;
10+
using Windows.UI.Xaml.Controls.Primitives;
11+
using Windows.UI.Xaml.Data;
12+
using Windows.UI.Xaml.Input;
13+
using Windows.UI.Xaml.Media;
14+
using Windows.UI.Xaml.Navigation;
15+
16+
// The Content Dialog item template is documented at https://go.microsoft.com/fwlink/?LinkId=234238
17+
18+
namespace Files.Dialogs
19+
{
20+
public sealed partial class ExtractFilesDialog : ContentDialog
21+
{
22+
public ExtractFilesDialog(string currentDirectory)
23+
{
24+
this.InitializeComponent();
25+
DestPathText.Text = currentDirectory;
26+
Windows.Storage.ApplicationData.Current.LocalSettings.Values["Extract_Destination_Path"] = currentDirectory;
27+
}
28+
29+
private void ContentDialog_PrimaryButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args)
30+
{
31+
Windows.Storage.ApplicationData.Current.LocalSettings.Values["Extract_Destination_Cancelled"] = false;
32+
}
33+
34+
35+
36+
private async void BrowseButton_Click(object sender, RoutedEventArgs e)
37+
{
38+
Windows.Storage.Pickers.FolderPicker folderPicker = new Windows.Storage.Pickers.FolderPicker();
39+
folderPicker.CommitButtonText = "Select Folder";
40+
folderPicker.FileTypeFilter.Add("*");
41+
var selectedFolder = await folderPicker.PickSingleFolderAsync();
42+
if(selectedFolder != null)
43+
{
44+
DestPathText.Text = selectedFolder.Path;
45+
Windows.Storage.ApplicationData.Current.LocalSettings.Values["Extract_Destination_Path"] = selectedFolder.Path;
46+
}
47+
}
48+
49+
private void ContentDialog_CloseButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args)
50+
{
51+
Windows.Storage.ApplicationData.Current.LocalSettings.Values["Extract_Destination_Cancelled"] = true;
52+
}
53+
}
54+
}

Files UWP/FilesUWP.csproj

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,9 @@
131131
<Compile Include="Dialogs\ExceptionDialog.xaml.cs">
132132
<DependentUpon>ExceptionDialog.xaml</DependentUpon>
133133
</Compile>
134+
<Compile Include="Dialogs\ExtractFilesDialog.xaml.cs">
135+
<DependentUpon>ExtractFilesDialog.xaml</DependentUpon>
136+
</Compile>
134137
<Compile Include="Dialogs\LayoutDialog.xaml.cs">
135138
<DependentUpon>LayoutDialog.xaml</DependentUpon>
136139
</Compile>
@@ -146,6 +149,7 @@
146149
<Compile Include="Filesystem\DriveItem.cs" />
147150
<Compile Include="Filesystem\ItemViewModel.cs" />
148151
<Compile Include="Filesystem\ListedItem.cs" />
152+
<Compile Include="Filesystem\SidebarItem.cs" />
149153
<Compile Include="GenericFileBrowser.xaml.cs">
150154
<DependentUpon>GenericFileBrowser.xaml</DependentUpon>
151155
</Compile>
@@ -198,6 +202,7 @@
198202
</Compile>
199203
</ItemGroup>
200204
<ItemGroup>
205+
<Content Include="Assets\Files UWP Icon.png" />
201206
<Content Include="Assets\FilesHome.png" />
202207
<Content Include="Assets\FilesDrive.png" />
203208
<Content Include="Assets\logo.bmp" />
@@ -225,6 +230,10 @@
225230
<SubType>Designer</SubType>
226231
<Generator>MSBuild:Compile</Generator>
227232
</Page>
233+
<Page Include="Dialogs\ExtractFilesDialog.xaml">
234+
<SubType>Designer</SubType>
235+
<Generator>MSBuild:Compile</Generator>
236+
</Page>
228237
<Page Include="Dialogs\LayoutDialog.xaml">
229238
<SubType>Designer</SubType>
230239
<Generator>MSBuild:Compile</Generator>

Files UWP/Filesystem/DriveItem.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using System.Text;
55
using System.Threading.Tasks;
66
using Windows.UI.Xaml;
7+
using Windows.UI.Xaml.Media.Imaging;
78

89
namespace Files.Filesystem
910
{
@@ -16,5 +17,8 @@ public class DriveItem
1617
public string tag { get; set; }
1718
public Visibility progressBarVisibility { get; set; }
1819
public string spaceText { get; set; }
20+
public Visibility cloudGlyphVisibility { get; set; } = Visibility.Collapsed;
21+
public Visibility driveGlyphVisibility { get; set; } = Visibility.Visible;
22+
1923
}
2024
}

Files UWP/Filesystem/SidebarItem.cs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
using System.Threading.Tasks;
6+
7+
namespace Files.Filesystem
8+
{
9+
public class SidebarItem
10+
{
11+
public string IconGlyph { get; set; }
12+
13+
public string Text { get; set; }
14+
15+
public bool isDefaultLocation { get; set; } = false;
16+
17+
public string Path { get; set; } = null;
18+
}
19+
}

Files UWP/GenericFileBrowser.xaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,11 @@
244244
<Setter Property="ContextFlyout">
245245
<Setter.Value>
246246
<MenuFlyout Opened="RightClickContextMenu_Opened" x:Name="RightClickContextMenu" MenuFlyoutPresenterStyle="{StaticResource MenuFlyoutFluentThemeResources}">
247+
<MenuFlyoutItem Text="Extract" x:Name="UnzipItem">
248+
<MenuFlyoutItem.Icon>
249+
<FontIcon Glyph="&#xED25;"/>
250+
</MenuFlyoutItem.Icon>
251+
</MenuFlyoutItem>
247252
<MenuFlyoutItem Text="Open with..." x:Name="OpenItem">
248253
<MenuFlyoutItem.Icon>
249254
<FontIcon Glyph="&#xE7AC;"/>

Files UWP/GenericFileBrowser.xaml.cs

Lines changed: 62 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using Microsoft.Toolkit.Uwp.UI;
1+
using Microsoft.Toolkit.Uwp.UI;
22
using Microsoft.Toolkit.Uwp.UI.Controls;
33
using System;
44
using System.ComponentModel;
@@ -11,10 +11,13 @@
1111
using Files.Filesystem;
1212
using Files.Interacts;
1313
using System.IO;
14+
using Windows.UI.Xaml.Media;
15+
using System.Collections.Generic;
1416
using System.Runtime.CompilerServices;
1517
using Windows.System;
1618
using Windows.UI.Xaml.Input;
1719
using Windows.UI.Core;
20+
using System.Linq;
1821

1922
namespace Files
2023
{
@@ -110,6 +113,7 @@ public GenericFileBrowser()
110113
NewFolder.Click += tabInstance.instanceInteraction.NewFolder_Click;
111114
NewBitmapImage.Click += tabInstance.instanceInteraction.NewBitmapImage_Click;
112115
NewTextDocument.Click += tabInstance.instanceInteraction.NewTextDocument_Click;
116+
UnzipItem.Click += tabInstance.instanceInteraction.ExtractItems_Click;
113117
PropertiesItem.Click += tabInstance.ShowPropertiesButton_Click;
114118
OpenInNewWindowItem.Click += tabInstance.instanceInteraction.OpenInNewWindowItem_Click;
115119

@@ -150,7 +154,8 @@ private void ViewModel_PropertyChanged(object sender, PropertyChangedEventArgs e
150154
SortedColumn = sizeColumn;
151155
break;
152156
}
153-
} else if (e.PropertyName == "DirectorySortDirection")
157+
}
158+
else if (e.PropertyName == "DirectorySortDirection")
154159
{
155160
// Swap arrows
156161
SortedColumn = _sortedColumn;
@@ -181,7 +186,7 @@ private void Clipboard_ContentChanged(object sender, object e)
181186
protected override void OnNavigatedTo(NavigationEventArgs eventArgs)
182187
{
183188
base.OnNavigatedTo(eventArgs);
184-
189+
185190
tabInstance.BackButton.IsEnabled = tabInstance.accessibleContentFrame.CanGoBack;
186191
tabInstance.ForwardButton.IsEnabled = tabInstance.accessibleContentFrame.CanGoForward;
187192
tabInstance.RefreshButton.IsEnabled = true;
@@ -262,7 +267,7 @@ protected override void OnNavigatedTo(NavigationEventArgs eventArgs)
262267
protected override void OnNavigatingFrom(NavigatingCancelEventArgs e)
263268
{
264269
base.OnNavigatingFrom(e);
265-
if(tabInstance.instanceViewModel._fileQueryResult != null)
270+
if (tabInstance.instanceViewModel._fileQueryResult != null)
266271
{
267272
tabInstance.instanceViewModel._fileQueryResult.ContentsChanged -= tabInstance.instanceViewModel.FileContentsChanged;
268273
}
@@ -276,24 +281,24 @@ protected override void OnNavigatingFrom(NavigatingCancelEventArgs e)
276281
private void AllView_DragOver(object sender, DragEventArgs e)
277282
{
278283
e.AcceptedOperation = DataPackageOperation.Copy;
279-
284+
280285
}
281286

282287
private async void AllView_DropAsync(object sender, DragEventArgs e)
283288
{
284289
if (e.DataView.Contains(StandardDataFormats.StorageItems))
285290
{
286-
foreach (IStorageItem item in await e.DataView.GetStorageItemsAsync())
291+
foreach (IStorageItem item in await e.DataView.GetStorageItemsAsync())
292+
{
293+
if (item.IsOfType(StorageItemTypes.Folder))
294+
{
295+
tabInstance.instanceInteraction.CloneDirectoryAsync((item as StorageFolder).Path, tabInstance.instanceViewModel.Universal.path, (item as StorageFolder).DisplayName);
296+
}
297+
else
287298
{
288-
if (item.IsOfType(StorageItemTypes.Folder))
289-
{
290-
tabInstance.instanceInteraction.CloneDirectoryAsync((item as StorageFolder).Path, tabInstance.instanceViewModel.Universal.path, (item as StorageFolder).DisplayName);
291-
}
292-
else
293-
{
294-
await (item as StorageFile).CopyAsync(await StorageFolder.GetFolderFromPathAsync(tabInstance.instanceViewModel.Universal.path));
295-
}
299+
await (item as StorageFile).CopyAsync(await StorageFolder.GetFolderFromPathAsync(tabInstance.instanceViewModel.Universal.path));
296300
}
301+
}
297302
}
298303
}
299304

@@ -351,13 +356,13 @@ private void GenericItemView_PointerReleased(object sender, Windows.UI.Xaml.Inpu
351356
private void AllView_SelectionChanged(object sender, SelectionChangedEventArgs e)
352357
{
353358
AllView.CommitEdit();
354-
if(e.AddedItems.Count > 0)
359+
if (e.AddedItems.Count > 0)
355360
{
356361
tabInstance.HomeItems.isEnabled = true;
357362
tabInstance.ShareItems.isEnabled = true;
358363

359364
}
360-
else if(data.SelectedItems.Count == 0)
365+
else if (data.SelectedItems.Count == 0)
361366
{
362367
tabInstance.HomeItems.isEnabled = false;
363368
tabInstance.ShareItems.isEnabled = false;
@@ -386,34 +391,66 @@ private void AllView_DragStarting(UIElement sender, DragStartingEventArgs args)
386391

387392
private void AllView_DragLeave(object sender, DragEventArgs e)
388393
{
389-
394+
390395
}
391396

392397
private void RightClickContextMenu_Opened(object sender, object e)
393398
{
394399
var selectedDataItem = AllView.SelectedItem as ListedItem;
395-
if (selectedDataItem.FileType != "Folder" || AllView.SelectedItems.Count > 1)
400+
401+
// Search selected items for non-Folders
402+
if(AllView.SelectedItems.Cast<ListedItem>().Any(x => x.FileType != "Folder"))
396403
{
397404
SidebarPinItem.Visibility = Visibility.Collapsed;
398405
OpenInNewTab.Visibility = Visibility.Collapsed;
399406
OpenInNewWindowItem.Visibility = Visibility.Collapsed;
407+
if (AllView.SelectedItems.Count == 1)
408+
{
409+
if (selectedDataItem.DotFileExtension.Equals(".zip", StringComparison.OrdinalIgnoreCase))
410+
{
411+
OpenItem.Visibility = Visibility.Collapsed;
412+
UnzipItem.Visibility = Visibility.Collapsed;
413+
}
414+
else if (!selectedDataItem.DotFileExtension.Equals(".zip", StringComparison.OrdinalIgnoreCase))
415+
{
416+
OpenItem.Visibility = Visibility.Visible;
417+
UnzipItem.Visibility = Visibility.Collapsed;
418+
}
419+
}
420+
else if (AllView.SelectedItems.Count > 1)
421+
{
422+
OpenItem.Visibility = Visibility.Collapsed;
423+
UnzipItem.Visibility = Visibility.Collapsed;
424+
}
400425
}
401-
else if (selectedDataItem.FileType == "Folder")
426+
else // All are Folders
402427
{
403-
SidebarPinItem.Visibility = Visibility.Visible;
404-
OpenInNewTab.Visibility = Visibility.Visible;
405-
OpenInNewWindowItem.Visibility = Visibility.Visible;
428+
OpenItem.Visibility = Visibility.Collapsed;
429+
if (AllView.SelectedItems.Count <= 5 && AllView.SelectedItems.Count > 0)
430+
{
431+
SidebarPinItem.Visibility = Visibility.Visible;
432+
OpenInNewTab.Visibility = Visibility.Visible;
433+
OpenInNewWindowItem.Visibility = Visibility.Visible;
434+
UnzipItem.Visibility = Visibility.Collapsed;
435+
}
436+
else if (AllView.SelectedItems.Count > 5)
437+
{
438+
SidebarPinItem.Visibility = Visibility.Visible;
439+
OpenInNewTab.Visibility = Visibility.Collapsed;
440+
OpenInNewWindowItem.Visibility = Visibility.Collapsed;
441+
UnzipItem.Visibility = Visibility.Collapsed;
442+
}
443+
406444
}
407445
}
408-
409446
private void AllView_Sorting(object sender, DataGridColumnEventArgs e)
410447
{
411448
if (e.Column == SortedColumn)
412449
viewModelInstance.IsSortedAscending = !viewModelInstance.IsSortedAscending;
413450
else if (e.Column != iconColumn)
414451
SortedColumn = e.Column;
415452
}
416-
453+
417454
private void AllView_PreviewKeyDown(object sender, KeyRoutedEventArgs e)
418455
{
419456
if (e.Key == VirtualKey.Enter)
@@ -468,4 +505,4 @@ private void NotifyPropertyChanged([CallerMemberName] string propertyName = "")
468505
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
469506
}
470507
}
471-
}
508+
}

0 commit comments

Comments
 (0)