|
1 | | -// Copyright (c) Files Community |
| 1 | +// Copyright (c) Files Community |
2 | 2 | // Licensed under the MIT License. |
3 | 3 |
|
4 | 4 | using Files.App.Data.Parameters; |
5 | 5 | using Files.App.Utils; |
6 | 6 | using Files.App.ViewModels.Properties; |
7 | 7 | using Microsoft.UI.Xaml; |
8 | | -using Microsoft.UI.Xaml.Media; |
9 | 8 | using Microsoft.UI.Xaml.Controls; |
10 | 9 | using Microsoft.UI.Xaml.Controls.Primitives; |
11 | 10 | using Microsoft.UI.Xaml.Navigation; |
| 11 | +using System.IO; |
| 12 | +using System.Security.Cryptography; |
12 | 13 | using System.Threading.Tasks; |
13 | | -using Windows.UI; |
14 | 14 |
|
15 | 15 | namespace Files.App.Views.Properties |
16 | 16 | { |
@@ -79,6 +79,46 @@ private void CompareHashes() |
79 | 79 | HashMatchIcon.Visibility = Visibility.Visible; |
80 | 80 | } |
81 | 81 |
|
| 82 | + private async void CompareFileButton_Click(object sender, RoutedEventArgs e) |
| 83 | + { |
| 84 | + var picker = new Windows.Storage.Pickers.FileOpenPicker(); |
| 85 | + picker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.Desktop; |
| 86 | + picker.FileTypeFilter.Add("*"); |
| 87 | + WinRT.Interop.InitializeWithWindow.Initialize(picker, MainWindow.Instance.WindowHandle); |
| 88 | + |
| 89 | + var file = await picker.PickSingleFileAsync(); |
| 90 | + if (file != null) |
| 91 | + { |
| 92 | + var selectedFileHash = await CalculateSHA384HashAsync(file.Path); |
| 93 | + var currentFileHash = HashesViewModel.Hashes.FirstOrDefault(h => h.Algorithm == "SHA384")?.HashValue; |
| 94 | + |
| 95 | + if (selectedFileHash == currentFileHash) |
| 96 | + { |
| 97 | + HashMatchIcon.Glyph = "\uE73E"; // Check mark |
| 98 | + ToolTipService.SetToolTip(HashMatchIcon, Strings.HashesMatch.GetLocalizedResource()); |
| 99 | + } |
| 100 | + else |
| 101 | + { |
| 102 | + HashMatchIcon.Glyph = "\uE711"; // Cross mark |
| 103 | + ToolTipService.SetToolTip(HashMatchIcon, Strings.HashesMatch.GetLocalizedResource()); |
| 104 | + } |
| 105 | + |
| 106 | + HashMatchIcon.Visibility = Visibility.Visible; |
| 107 | + } |
| 108 | + } |
| 109 | + |
| 110 | + private async Task<string> CalculateSHA384HashAsync(string filePath) |
| 111 | + { |
| 112 | + using (var stream = File.OpenRead(filePath)) |
| 113 | + { |
| 114 | + using (var sha384 = SHA384.Create()) |
| 115 | + { |
| 116 | + var hash = await Task.Run(() => sha384.ComputeHash(stream)); |
| 117 | + return BitConverter.ToString(hash).Replace("-", "").ToLowerInvariant(); |
| 118 | + } |
| 119 | + } |
| 120 | + } |
| 121 | + |
82 | 122 | private void MenuFlyout_Closing(FlyoutBase sender, FlyoutBaseClosingEventArgs e) |
83 | 123 | { |
84 | 124 | e.Cancel = _cancel; |
|
0 commit comments