Skip to content

Commit 948b476

Browse files
yaira2lukeblevins
andauthored
v0.7.1 patch (#442)
* Implement Win32 FileTimeToSystemTime * Handle/log exception during device StorageFolder initialization step * Prevent Pinning OneDrive Multiple Times * Added temp environment variables * Added some more variables * Recfactored variable paths * Save ribbon state * Added strings * Added strings * Added strings for share * Added strings * Fixed formating in RibbonArea xaml Co-authored-by: Luke Blevins <[email protected]>
1 parent adb94fe commit 948b476

File tree

17 files changed

+1277
-258
lines changed

17 files changed

+1277
-258
lines changed

Files/BaseLayout.cs

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -233,13 +233,6 @@ private void Page_Loaded(object sender, RoutedEventArgs e)
233233
{
234234
App.CurrentInstance = ItemViewModel.GetCurrentSelectedTabInstance<ProHome>();
235235
}
236-
237-
if (App.CurrentInstance.ViewModel == null && App.CurrentInstance.InteractionOperations == null)
238-
{
239-
//App.CurrentInstance.ViewModel = new ItemViewModel();
240-
//App.CurrentInstance.InteractionOperations = new Interaction();
241-
//Page_Loaded(null, null);
242-
}
243236
}
244237
}
245238

Files/Files.csproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -464,6 +464,9 @@
464464
<PackageReference Include="Microsoft.UI.Xaml">
465465
<Version>2.3.191211002</Version>
466466
</PackageReference>
467+
<PackageReference Include="Microsoft.Win32.Registry">
468+
<Version>4.7.0</Version>
469+
</PackageReference>
467470
<PackageReference Include="MvvmLight">
468471
<Version>5.4.1.1</Version>
469472
</PackageReference>

Files/Filesystem/Drives.cs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,16 @@ private async void DeviceWatcher_EnumerationCompleted(DeviceWatcher sender, obje
7777
private async void DeviceAdded(DeviceWatcher sender, DeviceInformation args)
7878
{
7979
var deviceId = args.Id;
80-
81-
var root = StorageDevice.FromId(deviceId);
80+
StorageFolder root = null;
81+
try
82+
{
83+
root = StorageDevice.FromId(deviceId);
84+
}
85+
catch (UnauthorizedAccessException)
86+
{
87+
Logger.Warn($"UnauthorizedAccessException: Attemting to add the device, {args.Name}, failed at the StorageFolder initialization step. This device will be ignored. Device ID: {args.Id}");
88+
return;
89+
}
8290

8391
// If drive already in list, skip.
8492
if (Drives.Any(x => x.tag == root.Name))

Files/Filesystem/ItemViewModel.cs

Lines changed: 51 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
using System.Linq;
1414
using System.Runtime.CompilerServices;
1515
using System.Runtime.InteropServices;
16+
using System.Runtime.InteropServices.ComTypes;
1617
using System.Threading;
1718
using System.Threading.Tasks;
1819
using Windows.ApplicationModel.Core;
@@ -479,6 +480,32 @@ public static T GetCurrentSelectedTabInstance<T>()
479480
return default;
480481
}
481482

483+
[StructLayout(LayoutKind.Sequential)]
484+
private struct SYSTEMTIME
485+
{
486+
[MarshalAs(UnmanagedType.U2)] public short Year;
487+
[MarshalAs(UnmanagedType.U2)] public short Month;
488+
[MarshalAs(UnmanagedType.U2)] public short DayOfWeek;
489+
[MarshalAs(UnmanagedType.U2)] public short Day;
490+
[MarshalAs(UnmanagedType.U2)] public short Hour;
491+
[MarshalAs(UnmanagedType.U2)] public short Minute;
492+
[MarshalAs(UnmanagedType.U2)] public short Second;
493+
[MarshalAs(UnmanagedType.U2)] public short Milliseconds;
494+
495+
public SYSTEMTIME(DateTime dt)
496+
{
497+
dt = dt.ToUniversalTime(); // SetSystemTime expects the SYSTEMTIME in UTC
498+
Year = (short)dt.Year;
499+
Month = (short)dt.Month;
500+
DayOfWeek = (short)dt.DayOfWeek;
501+
Day = (short)dt.Day;
502+
Hour = (short)dt.Hour;
503+
Minute = (short)dt.Minute;
504+
Second = (short)dt.Second;
505+
Milliseconds = (short)dt.Millisecond;
506+
}
507+
}
508+
482509
public enum FINDEX_INFO_LEVELS
483510
{
484511
FindExInfoStandard = 0,
@@ -526,6 +553,10 @@ public static extern IntPtr FindFirstFileExFromApp(
526553

527554
[DllImport("api-ms-win-core-file-l1-1-0.dll")]
528555
static extern bool FindClose(IntPtr hFindFile);
556+
557+
[DllImport("api-ms-win-core-timezone-l1-1-0.dll", SetLastError = true)]
558+
static extern bool FileTimeToSystemTime(ref FILETIME lpFileTime, out SYSTEMTIME lpSystemTime);
559+
529560
private bool _isLoadingItems = false;
530561
public bool isLoadingItems
531562
{
@@ -745,7 +776,15 @@ private void AddFolder(WIN32_FIND_DATA findData, string pathRoot)
745776
isLoadingItems = false;
746777
return;
747778
}
748-
var itemDate = DateTime.FromFileTimeUtc((findData.ftLastWriteTime.dwHighDateTime << 32) + (long)(uint)findData.ftLastWriteTime.dwLowDateTime);
779+
FileTimeToSystemTime(ref findData.ftLastWriteTime, out SYSTEMTIME systemTimeOutput);
780+
var itemDate = new DateTime(
781+
systemTimeOutput.Year,
782+
systemTimeOutput.Month,
783+
systemTimeOutput.Day,
784+
systemTimeOutput.Hour,
785+
systemTimeOutput.Minute,
786+
systemTimeOutput.Second,
787+
systemTimeOutput.Milliseconds);
749788
var itemPath = Path.Combine(pathRoot, findData.cFileName);
750789

751790
_filesAndFolders.Add(new ListedItem(null)
@@ -767,11 +806,18 @@ private void AddFolder(WIN32_FIND_DATA findData, string pathRoot)
767806
}
768807
}
769808

770-
private async void AddFile(WIN32_FIND_DATA findData, string pathRoot)
809+
private void AddFile(WIN32_FIND_DATA findData, string pathRoot)
771810
{
772-
773811
var itemName = findData.cFileName;
774-
var itemDate = DateTime.FromFileTimeUtc((findData.ftLastWriteTime.dwHighDateTime << 32) + (long) (uint) findData.ftLastWriteTime.dwLowDateTime);
812+
FileTimeToSystemTime(ref findData.ftLastWriteTime, out SYSTEMTIME systemTimeOutput);
813+
var itemDate = new DateTime(
814+
systemTimeOutput.Year,
815+
systemTimeOutput.Month,
816+
systemTimeOutput.Day,
817+
systemTimeOutput.Hour,
818+
systemTimeOutput.Minute,
819+
systemTimeOutput.Second,
820+
systemTimeOutput.Milliseconds);
775821
var itemPath = Path.Combine(pathRoot, findData.cFileName);
776822
var itemSize = ByteSize.FromBytes((findData.nFileSizeHigh << 32) + (long)(uint)findData.nFileSizeLow).ToString();
777823
var itemSizeBytes = (findData.nFileSizeHigh << 32) + (ulong)(uint)findData.nFileSizeLow;
@@ -796,7 +842,7 @@ private async void AddFile(WIN32_FIND_DATA findData, string pathRoot)
796842
itemEmptyImgVis = Visibility.Visible;
797843
itemThumbnailImgVis = Visibility.Collapsed;
798844

799-
845+
800846
if (_cancellationTokenSource.IsCancellationRequested)
801847
{
802848
isLoadingItems = false;

Files/MultilingualResources/Files.de-DE.xlf

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,130 @@
246246
<source>Flags</source>
247247
<target state="new">Flags</target>
248248
</trans-unit>
249+
<trans-unit id="RibbonAreaFile.Header" translate="yes" xml:space="preserve">
250+
<source>File</source>
251+
<target state="new">File</target>
252+
</trans-unit>
253+
<trans-unit id="RibbonAreaHome.Header" translate="yes" xml:space="preserve">
254+
<source>Home</source>
255+
<target state="new">Home</target>
256+
</trans-unit>
257+
<trans-unit id="RibbonAreaShare.Header" translate="yes" xml:space="preserve">
258+
<source>Share</source>
259+
<target state="new">Share</target>
260+
</trans-unit>
261+
<trans-unit id="RibbonAreaView.Header" translate="yes" xml:space="preserve">
262+
<source>View</source>
263+
<target state="new">View</target>
264+
</trans-unit>
265+
<trans-unit id="RibbonAreaFileCloseDescription.Text" translate="yes" xml:space="preserve">
266+
<source>Closes this window</source>
267+
<target state="new">Closes this window</target>
268+
</trans-unit>
269+
<trans-unit id="RibbonAreaFileCloseTitle.Text" translate="yes" xml:space="preserve">
270+
<source>Close Files</source>
271+
<target state="new">Close Files</target>
272+
</trans-unit>
273+
<trans-unit id="RibbonAreaFileOpenNewWindowDescription.Text" translate="yes" xml:space="preserve">
274+
<source>Creates a new instance of Files</source>
275+
<target state="new">Creates a new instance of Files</target>
276+
</trans-unit>
277+
<trans-unit id="RibbonAreaFileOpenNewWindowTitle.Text" translate="yes" xml:space="preserve">
278+
<source>Open new window</source>
279+
<target state="new">Open new window</target>
280+
</trans-unit>
281+
<trans-unit id="RibbonAreaFileSettingsDescription.Text" translate="yes" xml:space="preserve">
282+
<source>Make changes to app preferences</source>
283+
<target state="new">Make changes to app preferences</target>
284+
</trans-unit>
285+
<trans-unit id="RibbonAreaFileSettingsTitle.Text" translate="yes" xml:space="preserve">
286+
<source>Settings</source>
287+
<target state="new">Settings</target>
288+
</trans-unit>
289+
<trans-unit id="RibbonAreaCutButton.LabelText" translate="yes" xml:space="preserve">
290+
<source>Cut</source>
291+
<target state="new">Cut</target>
292+
</trans-unit>
293+
<trans-unit id="RibbonAreaCopyButton.LabelText" translate="yes" xml:space="preserve">
294+
<source>Copy</source>
295+
<target state="new">Copy</target>
296+
</trans-unit>
297+
<trans-unit id="RibbonAreaAddItemButton.LabelText" translate="yes" xml:space="preserve">
298+
<source>New</source>
299+
<target state="new">New</target>
300+
</trans-unit>
301+
<trans-unit id="RibbonAreaCopyPathButton.LabelText" translate="yes" xml:space="preserve">
302+
<source>Copy Path</source>
303+
<target state="new">Copy Path</target>
304+
</trans-unit>
305+
<trans-unit id="RibbonAreaDeleteButton.LabelText" translate="yes" xml:space="preserve">
306+
<source>Delete</source>
307+
<target state="new">Delete</target>
308+
</trans-unit>
309+
<trans-unit id="RibbonAreaFolderProperties.LabelText" translate="yes" xml:space="preserve">
310+
<source>Folder Properties</source>
311+
<target state="new">Folder Properties</target>
312+
</trans-unit>
313+
<trans-unit id="RibbonAreaOpenWithButton.LabelText" translate="yes" xml:space="preserve">
314+
<source>Open With</source>
315+
<target state="new">Open With</target>
316+
</trans-unit>
317+
<trans-unit id="RibbonAreaPasteButton.LabelText" translate="yes" xml:space="preserve">
318+
<source>Paste</source>
319+
<target state="new">Paste</target>
320+
</trans-unit>
321+
<trans-unit id="RibbonAreaRenameButton.LabelText" translate="yes" xml:space="preserve">
322+
<source>Rename</source>
323+
<target state="new">Rename</target>
324+
</trans-unit>
325+
<trans-unit id="RibbonAreaShowPropertiesButton.LabelText" translate="yes" xml:space="preserve">
326+
<source>Properties</source>
327+
<target state="new">Properties</target>
328+
</trans-unit>
329+
<trans-unit id="RibbonAreaShareButton.LabelText" translate="yes" xml:space="preserve">
330+
<source>Share</source>
331+
<target state="new">Share</target>
332+
</trans-unit>
333+
<trans-unit id="RibbonAreaClearAllButton.LabelText" translate="yes" xml:space="preserve">
334+
<source>Clear All</source>
335+
<target state="new">Clear All</target>
336+
</trans-unit>
337+
<trans-unit id="RibbonAreaLayoutButton.LabelText" translate="yes" xml:space="preserve">
338+
<source>Layout Mode</source>
339+
<target state="new">Layout Mode</target>
340+
</trans-unit>
341+
<trans-unit id="RibbonAreaSelectAllButton.LabelText" translate="yes" xml:space="preserve">
342+
<source>Select All</source>
343+
<target state="new">Select All</target>
344+
</trans-unit>
345+
<trans-unit id="RibbonAreaSortByButton.LabelText" translate="yes" xml:space="preserve">
346+
<source>Sort By</source>
347+
<target state="new">Sort By</target>
348+
</trans-unit>
349+
<trans-unit id="RibbonAreaSortByAscending.Text" translate="yes" xml:space="preserve">
350+
<source>Ascending</source>
351+
<target state="new">Ascending</target>
352+
</trans-unit>
353+
<trans-unit id="RibbonAreaSortByDate.Text" translate="yes" xml:space="preserve">
354+
<source>Date Modified</source>
355+
<target state="new">Date Modified</target>
356+
</trans-unit>
357+
<trans-unit id="RibbonAreaSortByDescending.Text" translate="yes" xml:space="preserve">
358+
<source>Descending</source>
359+
<target state="new">Descending</target>
360+
</trans-unit>
361+
<trans-unit id="RibbonAreaSortByName.Text" translate="yes" xml:space="preserve">
362+
<source>Name</source>
363+
<target state="new">Name</target>
364+
</trans-unit>
365+
<trans-unit id="RibbonAreaSortBySize.Text" translate="yes" xml:space="preserve">
366+
<source>Size</source>
367+
<target state="new">Size</target>
368+
</trans-unit>
369+
<trans-unit id="RibbonAreaSortByType.Text" translate="yes" xml:space="preserve">
370+
<source>Type</source>
371+
<target state="new">Type</target>
372+
</trans-unit>
249373
</group>
250374
</body>
251375
</file>

0 commit comments

Comments
 (0)