From f30438b95968774b9b50a17231d75274820d6659 Mon Sep 17 00:00:00 2001 From: Davide Giacometti Date: Sat, 9 Dec 2023 13:15:24 +0100 Subject: [PATCH] set window icon/title and use centralized logger (#30091) --- .../peek/Peek.Common/Helpers/Logger.cs | 78 ------------------- .../peek/Peek.Common/Models/FileItem.cs | 4 +- .../peek/Peek.Common/Models/FolderItem.cs | 4 +- .../peek/Peek.Common/Peek.Common.csproj | 1 + .../Controls/BrowserControl.xaml.cs | 2 +- .../Peek.FilePreviewer/FilePreview.xaml.cs | 1 + .../Previewers/Archives/Helpers/IconCache.cs | 2 +- .../MediaPreviewer/ImagePreviewer.cs | 1 + .../Extensions/IShellItemExtensions.cs | 3 +- .../peek/Peek.UI/Helpers/DefaultAppHelper.cs | 4 +- .../peek/Peek.UI/MainWindowViewModel.cs | 13 ++++ .../peek/Peek.UI/PeekXAML/MainWindow.xaml | 1 + .../peek/Peek.UI/PeekXAML/MainWindow.xaml.cs | 1 + .../Peek.UI/PeekXAML/Views/TitleBar.xaml.cs | 6 -- .../peek/Peek.UI/Strings/en-us/Resources.resw | 4 + 15 files changed, 29 insertions(+), 96 deletions(-) delete mode 100644 src/modules/peek/Peek.Common/Helpers/Logger.cs diff --git a/src/modules/peek/Peek.Common/Helpers/Logger.cs b/src/modules/peek/Peek.Common/Helpers/Logger.cs deleted file mode 100644 index 14b278358f0..00000000000 --- a/src/modules/peek/Peek.Common/Helpers/Logger.cs +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright (c) Microsoft Corporation -// The Microsoft Corporation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information. - -using System; -using System.Diagnostics; -using System.Globalization; -using System.IO; -using Scripting; - -namespace Peek.Common.Helpers -{ - public static class Logger - { - private static readonly IFileSystem _fileSystem = new FileSystemObject(); - private static readonly string ApplicationLogPath = Path.Combine(interop.Constants.AppDataPath(), "Peek\\Logs"); - - static Logger() - { - if (!_fileSystem.FolderExists(ApplicationLogPath)) - { - _fileSystem.CreateFolder(ApplicationLogPath); - } - - // Using InvariantCulture since this is used for a log file name - var logFilePath = _fileSystem.BuildPath(ApplicationLogPath, "Log_" + DateTime.Now.ToString(@"yyyy-MM-dd", CultureInfo.InvariantCulture) + ".txt"); - - Trace.Listeners.Add(new TextWriterTraceListener(logFilePath)); - - Trace.AutoFlush = true; - } - - public static void LogError(string message) - { - Log(message, "ERROR"); - } - - public static void LogError(string message, Exception ex) - { - Log( - message + Environment.NewLine + - ex?.Message + Environment.NewLine + - "Inner exception: " + Environment.NewLine + - ex?.InnerException?.Message + Environment.NewLine + - "Stack trace: " + Environment.NewLine + - ex?.StackTrace, - "ERROR"); - } - - public static void LogWarning(string message) - { - Log(message, "WARNING"); - } - - public static void LogInfo(string message) - { - Log(message, "INFO"); - } - - private static void Log(string message, string type) - { - Trace.WriteLine(type + ": " + DateTime.Now.TimeOfDay); - Trace.Indent(); - Trace.WriteLine(GetCallerInfo()); - Trace.WriteLine(message); - Trace.Unindent(); - } - - private static string GetCallerInfo() - { - StackTrace stackTrace = new StackTrace(); - - var methodName = stackTrace.GetFrame(3)?.GetMethod(); - var className = methodName?.DeclaringType?.Name ?? string.Empty; - return "[Method]: " + methodName?.Name + " [Class]: " + className; - } - } -} diff --git a/src/modules/peek/Peek.Common/Models/FileItem.cs b/src/modules/peek/Peek.Common/Models/FileItem.cs index da146f3e474..4714d30f6e6 100644 --- a/src/modules/peek/Peek.Common/Models/FileItem.cs +++ b/src/modules/peek/Peek.Common/Models/FileItem.cs @@ -3,10 +3,8 @@ // See the LICENSE file in the project root for more information. using System; -using System.Runtime.InteropServices; using System.Threading.Tasks; -using Peek.Common.Extensions; -using Peek.Common.Helpers; +using ManagedCommon; using Windows.Storage; #nullable enable diff --git a/src/modules/peek/Peek.Common/Models/FolderItem.cs b/src/modules/peek/Peek.Common/Models/FolderItem.cs index 77780fb5759..a270ff0c7b4 100644 --- a/src/modules/peek/Peek.Common/Models/FolderItem.cs +++ b/src/modules/peek/Peek.Common/Models/FolderItem.cs @@ -3,10 +3,8 @@ // See the LICENSE file in the project root for more information. using System; -using System.Runtime.InteropServices; using System.Threading.Tasks; -using Peek.Common.Extensions; -using Peek.Common.Helpers; +using ManagedCommon; using Windows.Storage; #nullable enable diff --git a/src/modules/peek/Peek.Common/Peek.Common.csproj b/src/modules/peek/Peek.Common/Peek.Common.csproj index 9612f2273dd..cd2ccb540c9 100644 --- a/src/modules/peek/Peek.Common/Peek.Common.csproj +++ b/src/modules/peek/Peek.Common/Peek.Common.csproj @@ -32,6 +32,7 @@ + diff --git a/src/modules/peek/Peek.FilePreviewer/Controls/BrowserControl.xaml.cs b/src/modules/peek/Peek.FilePreviewer/Controls/BrowserControl.xaml.cs index 08412489718..70960ab0f2f 100644 --- a/src/modules/peek/Peek.FilePreviewer/Controls/BrowserControl.xaml.cs +++ b/src/modules/peek/Peek.FilePreviewer/Controls/BrowserControl.xaml.cs @@ -4,12 +4,12 @@ using System; using System.Threading.Tasks; +using ManagedCommon; using Microsoft.UI; using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls; using Microsoft.Web.WebView2.Core; using Peek.Common.Constants; -using Peek.Common.Helpers; using Windows.ApplicationModel.DataTransfer; using Windows.System; using Windows.UI; diff --git a/src/modules/peek/Peek.FilePreviewer/FilePreview.xaml.cs b/src/modules/peek/Peek.FilePreviewer/FilePreview.xaml.cs index bfa8c34d999..aef380e9ecd 100644 --- a/src/modules/peek/Peek.FilePreviewer/FilePreview.xaml.cs +++ b/src/modules/peek/Peek.FilePreviewer/FilePreview.xaml.cs @@ -8,6 +8,7 @@ using System.Threading; using System.Threading.Tasks; using CommunityToolkit.Mvvm.ComponentModel; +using ManagedCommon; using Microsoft.PowerToys.Telemetry; using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls; diff --git a/src/modules/peek/Peek.FilePreviewer/Previewers/Archives/Helpers/IconCache.cs b/src/modules/peek/Peek.FilePreviewer/Previewers/Archives/Helpers/IconCache.cs index d9e3c009c98..f07eecc7b29 100644 --- a/src/modules/peek/Peek.FilePreviewer/Previewers/Archives/Helpers/IconCache.cs +++ b/src/modules/peek/Peek.FilePreviewer/Previewers/Archives/Helpers/IconCache.cs @@ -8,9 +8,9 @@ using System.Runtime.InteropServices; using System.Threading; using System.Threading.Tasks; +using ManagedCommon; using Microsoft.UI.Xaml.Media.Imaging; using Peek.Common; -using Peek.Common.Helpers; using Peek.Common.Models; using Peek.FilePreviewer.Previewers.Helpers; diff --git a/src/modules/peek/Peek.FilePreviewer/Previewers/MediaPreviewer/ImagePreviewer.cs b/src/modules/peek/Peek.FilePreviewer/Previewers/MediaPreviewer/ImagePreviewer.cs index f02f703c047..d01a60e56e3 100644 --- a/src/modules/peek/Peek.FilePreviewer/Previewers/MediaPreviewer/ImagePreviewer.cs +++ b/src/modules/peek/Peek.FilePreviewer/Previewers/MediaPreviewer/ImagePreviewer.cs @@ -8,6 +8,7 @@ using System.Threading; using System.Threading.Tasks; using CommunityToolkit.Mvvm.ComponentModel; +using ManagedCommon; using Microsoft.UI.Dispatching; using Microsoft.UI.Xaml.Media; using Microsoft.UI.Xaml.Media.Imaging; diff --git a/src/modules/peek/Peek.UI/Extensions/IShellItemExtensions.cs b/src/modules/peek/Peek.UI/Extensions/IShellItemExtensions.cs index 753b7a61ce5..3d2fd2e57fc 100644 --- a/src/modules/peek/Peek.UI/Extensions/IShellItemExtensions.cs +++ b/src/modules/peek/Peek.UI/Extensions/IShellItemExtensions.cs @@ -4,8 +4,7 @@ using System; using System.IO; -using System.Runtime.CompilerServices; -using Peek.Common.Helpers; +using ManagedCommon; using Peek.Common.Models; namespace Peek.UI.Extensions diff --git a/src/modules/peek/Peek.UI/Helpers/DefaultAppHelper.cs b/src/modules/peek/Peek.UI/Helpers/DefaultAppHelper.cs index 8796157cd92..2938c70e012 100644 --- a/src/modules/peek/Peek.UI/Helpers/DefaultAppHelper.cs +++ b/src/modules/peek/Peek.UI/Helpers/DefaultAppHelper.cs @@ -4,7 +4,7 @@ using System.Runtime.InteropServices; using System.Text; -using Peek.Common.Helpers; +using ManagedCommon; using Peek.Common.Models; using Peek.UI.Native; @@ -30,7 +30,7 @@ public static string TryGetDefaultAppName(string extension) ret = NativeMethods.AssocQueryString(NativeMethods.AssocF.Verify, NativeMethods.AssocStr.FriendlyAppName, extension, null, sb, ref length); if (ret != HResult.Ok) { - Logger.LogError($"Error when getting accessString for {extension} file: {Marshal.GetExceptionForHR((int)ret)!.Message}" ); + Logger.LogError($"Error when getting accessString for {extension} file: {Marshal.GetExceptionForHR((int)ret)!.Message}"); return appName; } diff --git a/src/modules/peek/Peek.UI/MainWindowViewModel.cs b/src/modules/peek/Peek.UI/MainWindowViewModel.cs index c7d57bd83e8..d5c442c3c2f 100644 --- a/src/modules/peek/Peek.UI/MainWindowViewModel.cs +++ b/src/modules/peek/Peek.UI/MainWindowViewModel.cs @@ -5,6 +5,7 @@ using System; using System.Linq; using CommunityToolkit.Mvvm.ComponentModel; +using ManagedCommon; using Microsoft.UI.Xaml; using Peek.Common.Helpers; using Peek.Common.Models; @@ -15,6 +16,7 @@ namespace Peek.UI { public partial class MainWindowViewModel : ObservableObject { + private static readonly string _defaultWindowTitle = ResourceLoaderInstance.ResourceLoader.GetString("AppTitle/Title"); private const int NavigationThrottleDelayMs = 100; [ObservableProperty] @@ -23,6 +25,16 @@ public partial class MainWindowViewModel : ObservableObject [ObservableProperty] private IFileSystemItem? _currentItem; + partial void OnCurrentItemChanged(IFileSystemItem? value) + { + WindowTitle = value != null + ? ReadableStringHelper.FormatResourceString("WindowTitle", value.Name) + : _defaultWindowTitle; + } + + [ObservableProperty] + private string _windowTitle; + [ObservableProperty] private NeighboringItems? _items; @@ -36,6 +48,7 @@ public partial class MainWindowViewModel : ObservableObject public MainWindowViewModel(NeighboringItemsQuery query) { NeighboringItemsQuery = query; + WindowTitle = _defaultWindowTitle; NavigationThrottleTimer.Tick += NavigationThrottleTimer_Tick; NavigationThrottleTimer.Interval = TimeSpan.FromMilliseconds(NavigationThrottleDelayMs); diff --git a/src/modules/peek/Peek.UI/PeekXAML/MainWindow.xaml b/src/modules/peek/Peek.UI/PeekXAML/MainWindow.xaml index e3c8c7d4ec8..1a5762d7544 100644 --- a/src/modules/peek/Peek.UI/PeekXAML/MainWindow.xaml +++ b/src/modules/peek/Peek.UI/PeekXAML/MainWindow.xaml @@ -10,6 +10,7 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:views="using:Peek.UI.Views" xmlns:winuiex="using:WinUIEx" + Title="{x:Bind ViewModel.WindowTitle, Mode=OneWay}" MinWidth="450" MinHeight="400" mc:Ignorable="d"> diff --git a/src/modules/peek/Peek.UI/PeekXAML/MainWindow.xaml.cs b/src/modules/peek/Peek.UI/PeekXAML/MainWindow.xaml.cs index 7fc54a55201..e9b5cc83c95 100644 --- a/src/modules/peek/Peek.UI/PeekXAML/MainWindow.xaml.cs +++ b/src/modules/peek/Peek.UI/PeekXAML/MainWindow.xaml.cs @@ -47,6 +47,7 @@ public MainWindow() ViewModel = Application.Current.GetService(); TitleBarControl.SetTitleBarToWindow(this); + AppWindow.SetIcon("Assets/Peek/Icon.ico"); AppWindow.Closing += AppWindow_Closing; } diff --git a/src/modules/peek/Peek.UI/PeekXAML/Views/TitleBar.xaml.cs b/src/modules/peek/Peek.UI/PeekXAML/Views/TitleBar.xaml.cs index 68ad63dd48d..f24aedaf751 100644 --- a/src/modules/peek/Peek.UI/PeekXAML/Views/TitleBar.xaml.cs +++ b/src/modules/peek/Peek.UI/PeekXAML/Views/TitleBar.xaml.cs @@ -21,7 +21,6 @@ using Windows.Graphics; using Windows.Storage; using Windows.System; -using WinUIEx; namespace Peek.UI.Views { @@ -123,11 +122,6 @@ public void SetTitleBarToWindow(MainWindow mainWindow) var hWnd = WinRT.Interop.WindowNative.GetWindowHandle(this); ThemeHelpers.SetImmersiveDarkMode(hWnd, ThemeHelpers.GetAppTheme() == AppTheme.Dark); Visibility = Visibility.Collapsed; - - // Set window icon - WindowId windowId = Win32Interop.GetWindowIdFromWindow(hWnd); - AppWindow appWindow = AppWindow.GetFromWindowId(windowId); - appWindow.SetIcon("Assets/Peek/Icon.ico"); } } diff --git a/src/modules/peek/Peek.UI/Strings/en-us/Resources.resw b/src/modules/peek/Peek.UI/Strings/en-us/Resources.resw index b711a9e26f2..726796babb8 100644 --- a/src/modules/peek/Peek.UI/Strings/en-us/Resources.resw +++ b/src/modules/peek/Peek.UI/Strings/en-us/Resources.resw @@ -261,4 +261,8 @@ ({1:N0} byte) Displays unit byte. Don't localize the "{1:N0}" part. + + {0} - Peek + Title of the Peek window. {0} is the name of the currently previewed item."Peek" is the name of the utility. + \ No newline at end of file