diff --git a/.github/ISSUE_TEMPLATE/cn-bug-report.yaml b/.github/ISSUE_TEMPLATE/cn-bug-report.yaml index 6ca3528320..c5c45971c7 100644 --- a/.github/ISSUE_TEMPLATE/cn-bug-report.yaml +++ b/.github/ISSUE_TEMPLATE/cn-bug-report.yaml @@ -34,6 +34,9 @@ body: Resource Version: UI Version: Core Version: + 或 + Resource Version: + MAA Version: validations: required: true - type: textarea diff --git a/.github/ISSUE_TEMPLATE/cn-mumu-report.yaml b/.github/ISSUE_TEMPLATE/cn-mumu-report.yaml index 2c8f07235f..f8b30a5f33 100644 --- a/.github/ISSUE_TEMPLATE/cn-mumu-report.yaml +++ b/.github/ISSUE_TEMPLATE/cn-mumu-report.yaml @@ -38,6 +38,10 @@ body: UI Version: Core Version: MuMu 版本号: + 或 + Resource Version: + MAA Version: + MuMu 版本号: validations: required: true - type: textarea diff --git a/.github/ISSUE_TEMPLATE/en-bug-report.yaml b/.github/ISSUE_TEMPLATE/en-bug-report.yaml index 35b8d04599..9228e79d2d 100644 --- a/.github/ISSUE_TEMPLATE/en-bug-report.yaml +++ b/.github/ISSUE_TEMPLATE/en-bug-report.yaml @@ -48,6 +48,9 @@ body: Resource Version: UI Version: Core Version: + OR + Resource Version: + MAA Version: validations: required: true - type: textarea diff --git a/MAA.sln.DotSettings b/MAA.sln.DotSettings index 3e53fc188c..57ad328c91 100644 --- a/MAA.sln.DotSettings +++ b/MAA.sln.DotSettings @@ -52,6 +52,7 @@ True True True + True True True True diff --git a/src/MaaWpfGui/Constants/ConfigurationKeys.cs b/src/MaaWpfGui/Constants/ConfigurationKeys.cs index e3163b7458..a44df19c86 100755 --- a/src/MaaWpfGui/Constants/ConfigurationKeys.cs +++ b/src/MaaWpfGui/Constants/ConfigurationKeys.cs @@ -52,6 +52,7 @@ namespace MaaWpfGui.Constants public const string Cheers = "GUI.Cheers"; public const string Hangover = "GUI.Hangover"; public const string LastBuyWineTime = "GUI.LastBuyWineTime"; + public const string CustomCulture = "GUI.CustomCulture"; public const string AddressHistory = "Connect.AddressHistory"; public const string AutoDetect = "Connect.AutoDetect"; diff --git a/src/MaaWpfGui/Extensions/DateTimeExtension.cs b/src/MaaWpfGui/Extensions/DateTimeExtension.cs index 23fefebda2..c8a7dfea88 100644 --- a/src/MaaWpfGui/Extensions/DateTimeExtension.cs +++ b/src/MaaWpfGui/Extensions/DateTimeExtension.cs @@ -11,9 +11,11 @@ // but WITHOUT ANY WARRANTY // +#nullable enable using System; using System.Collections.Generic; using System.Globalization; +using System.Linq; using MaaWpfGui.Constants; using MaaWpfGui.Helper; @@ -25,7 +27,7 @@ namespace MaaWpfGui.Extensions private static string ClientType => ConfigurationHelper.GetValue(ConfigurationKeys.ClientType, string.Empty); - private static readonly Dictionary _clientTypeTimezone = new Dictionary + private static readonly Dictionary _clientTypeTimezone = new() { { string.Empty, 8 }, { "Official", 8 }, @@ -56,6 +58,15 @@ namespace MaaWpfGui.Extensions return dt is { Month: 4, Day: 1 }; } + public static CultureInfo CustomCultureInfo => LocalizationHelper.CustomCultureInfo; + + public static string ToLocalTimeString(this DateTime dt, string? format = null) + { + return string.IsNullOrEmpty(format) + ? dt.ToLocalTime().ToString($"{CustomCultureInfo.DateTimeFormat.ShortDatePattern} HH:mm:ss", CustomCultureInfo) + : dt.ToLocalTime().ToString(format, CustomCultureInfo); + } + public static DateTime ToDateTime(this System.Runtime.InteropServices.ComTypes.FILETIME filetime) { return DateTime.FromFileTime(((long)filetime.dwHighDateTime << 32) | (uint)filetime.dwLowDateTime); diff --git a/src/MaaWpfGui/Helper/LocalizationHelper.cs b/src/MaaWpfGui/Helper/LocalizationHelper.cs index 123236e122..9a0fd1bc1a 100644 --- a/src/MaaWpfGui/Helper/LocalizationHelper.cs +++ b/src/MaaWpfGui/Helper/LocalizationHelper.cs @@ -70,6 +70,24 @@ namespace MaaWpfGui.Helper private static readonly string _culture = ConfigurationHelper.GetValue(ConfigurationKeys.Localization, DefaultLanguage); + private static readonly string _customCulture = ConfigurationHelper.GetGlobalValue(ConfigurationKeys.CustomCulture, string.Empty); + + public static CultureInfo CustomCultureInfo + { + get + { + if (string.IsNullOrEmpty(_customCulture)) + { + return CultureInfo.CurrentCulture; + } + + return CultureInfo.GetCultures(CultureTypes.AllCultures) + .Any(c => c.Name.Equals(_customCulture, StringComparison.OrdinalIgnoreCase)) + ? new CultureInfo(_customCulture) + : CultureInfo.CurrentCulture; + } + } + /// /// Loads localizations. /// @@ -114,7 +132,9 @@ namespace MaaWpfGui.Helper try { - Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo(_culture); + Thread.CurrentThread.CurrentCulture = !string.IsNullOrEmpty(_customCulture) + ? CustomCultureInfo + : CultureInfo.GetCultureInfo(_culture); FrameworkElement.LanguageProperty.OverrideMetadata(typeof(FrameworkElement), new FrameworkPropertyMetadata(XmlLanguage.GetLanguage(Thread.CurrentThread.CurrentCulture.Name))); } catch diff --git a/src/MaaWpfGui/MaaWpfGui.csproj b/src/MaaWpfGui/MaaWpfGui.csproj index e41c8f8421..2e56be68fc 100644 --- a/src/MaaWpfGui/MaaWpfGui.csproj +++ b/src/MaaWpfGui/MaaWpfGui.csproj @@ -42,6 +42,12 @@ 0.0.1 + + + <_Parameter1>$([System.DateTime]::UtcNow.ToString("yyyy-MM-ddTHH:mm:ss")) + + + newlogo.ico diff --git a/src/MaaWpfGui/Properties/BuildDateTimeAttribute.cs b/src/MaaWpfGui/Properties/BuildDateTimeAttribute.cs new file mode 100644 index 0000000000..ece26b3eb1 --- /dev/null +++ b/src/MaaWpfGui/Properties/BuildDateTimeAttribute.cs @@ -0,0 +1,25 @@ +// +// MaaWpfGui - A part of the MaaCoreArknights project +// Copyright (C) 2021 MistEO and Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License v3.0 only as published by +// the Free Software Foundation, either version 3 of the License, or +// any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY +// + +using System; + +namespace MaaWpfGui.Properties +{ + [AttributeUsage(AttributeTargets.Assembly)] + public class BuildDateTimeAttribute(string date) : Attribute + { + private const string DateFormat = "yyyy-MM-ddTHH:mm:ss"; + + public DateTime BuildDateTime { get; } = DateTime.ParseExact(date, DateFormat, null); + } +} diff --git a/src/MaaWpfGui/Res/Localizations/en-us.xaml b/src/MaaWpfGui/Res/Localizations/en-us.xaml index 8ee2bd2af7..b78f7572ba 100644 --- a/src/MaaWpfGui/Res/Localizations/en-us.xaml +++ b/src/MaaWpfGui/Res/Localizations/en-us.xaml @@ -18,9 +18,12 @@ HotKeys Update About us + MAA Version + Build Date Core Version UI Version Resource Version + Resource Date Off Please note: The external notification feature currently only sends 「All tasks completed」 notifications. External notifications diff --git a/src/MaaWpfGui/Res/Localizations/ja-jp.xaml b/src/MaaWpfGui/Res/Localizations/ja-jp.xaml index c338edd374..105d7a1c98 100644 --- a/src/MaaWpfGui/Res/Localizations/ja-jp.xaml +++ b/src/MaaWpfGui/Res/Localizations/ja-jp.xaml @@ -18,9 +18,12 @@ ホットキー設定 アップデート設定 About us + MAA バージョン + ビルド日付 Core バージョン UI バージョン リソースバーション + リソース日付 シャットダウン 注:外部通知機能は現在、「すべてのタスクが完了しました」という通知のみを送信します。 外部通知 @@ -219,7 +222,7 @@ 4. 内部テスト版の更新方法を非開発ユーザーに共有しないでください。不要な混乱とリスクを避けるためです。 設定 - About us - フィードバックのリンクをクリックして、このポップアップをキャンセルできます。ご理解とご協力をお願いいたします! - Update version + 更新バージョン aria2を使う アップデートを確認する 変更履歴 diff --git a/src/MaaWpfGui/Res/Localizations/ko-kr.xaml b/src/MaaWpfGui/Res/Localizations/ko-kr.xaml index 048415a5af..7006492666 100644 --- a/src/MaaWpfGui/Res/Localizations/ko-kr.xaml +++ b/src/MaaWpfGui/Res/Localizations/ko-kr.xaml @@ -18,9 +18,12 @@ 단축키 설정 업데이트 정보 + MAA 버전 + 빌드 날짜 Core 버전 UI 버전 Resource 버전 + 자원 날짜 끄기 팁: 외부 알림 기능은 현재 「모든 작업 완료」 알림만 보냅니다. 외부 알림 diff --git a/src/MaaWpfGui/Res/Localizations/zh-cn.xaml b/src/MaaWpfGui/Res/Localizations/zh-cn.xaml index da9cee9ac2..1a98517265 100644 --- a/src/MaaWpfGui/Res/Localizations/zh-cn.xaml +++ b/src/MaaWpfGui/Res/Localizations/zh-cn.xaml @@ -18,9 +18,12 @@ 热键设置 软件更新 关于我们 + MAA 版本 + 构建日期 核心版本 界面版本 资源版本 + 资源日期 关闭 请注意:外部通知功能目前仅会发送“所有任务完成”的通知。 外部通知 diff --git a/src/MaaWpfGui/Res/Localizations/zh-tw.xaml b/src/MaaWpfGui/Res/Localizations/zh-tw.xaml index 98b8419aff..fa3b852bb9 100644 --- a/src/MaaWpfGui/Res/Localizations/zh-tw.xaml +++ b/src/MaaWpfGui/Res/Localizations/zh-tw.xaml @@ -18,9 +18,12 @@ 熱鍵設定 軟體更新 關於我們 - Core 版本號 - UI 版本號 - 資源版本號 + MAA 版本 + 構建日期 + Core 版本 + UI 版本 + 資源版本 + 資源日期 關閉 請注意:外部通知功能目前僅會發送「所有任務完成」 的通知。 外部通知 diff --git a/src/MaaWpfGui/Services/RemoteControl/RemoteControlService.cs b/src/MaaWpfGui/Services/RemoteControl/RemoteControlService.cs index a71a6da0b5..477a6ceada 100644 --- a/src/MaaWpfGui/Services/RemoteControl/RemoteControlService.cs +++ b/src/MaaWpfGui/Services/RemoteControl/RemoteControlService.cs @@ -619,10 +619,6 @@ namespace MaaWpfGui.Services.RemoteControl /*await Task.Run(() => Instances.SettingsViewModel.RunScript("StartsWithScript"));*/ Instances.TaskQueueViewModel.AddLog(LocalizationHelper.GetString("ConnectingToEmulator")); - if (!Instances.SettingsViewModel.AdbReplaced && !Instances.SettingsViewModel.IsAdbTouchMode()) - { - Instances.TaskQueueViewModel.AddLog(LocalizationHelper.GetString("AdbReplacementTips"), UiLogColor.Info); - } // 一般是点了“停止”按钮了 if (Instances.TaskQueueViewModel.Stopping) diff --git a/src/MaaWpfGui/ViewModels/UI/CopilotViewModel.cs b/src/MaaWpfGui/ViewModels/UI/CopilotViewModel.cs index 289c4b2ae4..2d4c186dc8 100644 --- a/src/MaaWpfGui/ViewModels/UI/CopilotViewModel.cs +++ b/src/MaaWpfGui/ViewModels/UI/CopilotViewModel.cs @@ -1027,10 +1027,6 @@ namespace MaaWpfGui.ViewModels.UI } AddLog(LocalizationHelper.GetString("ConnectingToEmulator")); - if (!Instances.SettingsViewModel.AdbReplaced && !Instances.SettingsViewModel.IsAdbTouchMode()) - { - AddLog(LocalizationHelper.GetString("AdbReplacementTips"), UiLogColor.Info); - } string errMsg = string.Empty; _caught = await Task.Run(() => Instances.AsstProxy.AsstConnect(ref errMsg)); diff --git a/src/MaaWpfGui/ViewModels/UI/SettingsViewModel.cs b/src/MaaWpfGui/ViewModels/UI/SettingsViewModel.cs index 4590a9b47f..39de7e4b3e 100755 --- a/src/MaaWpfGui/ViewModels/UI/SettingsViewModel.cs +++ b/src/MaaWpfGui/ViewModels/UI/SettingsViewModel.cs @@ -33,13 +33,13 @@ using System.Windows.Controls; using System.Windows.Media.Imaging; using HandyControl.Controls; using HandyControl.Data; -using HandyControl.Tools.Extension; using MaaWpfGui.Configuration; using MaaWpfGui.Constants; using MaaWpfGui.Extensions; using MaaWpfGui.Helper; using MaaWpfGui.Main; using MaaWpfGui.Models; +using MaaWpfGui.Properties; using MaaWpfGui.Services; using MaaWpfGui.Services.HotKeys; using MaaWpfGui.Services.Notification; @@ -1484,7 +1484,9 @@ namespace MaaWpfGui.ViewModels.UI { SetAndNotify(ref _clientType, value); ConfigurationHelper.SetValue(ConfigurationKeys.ClientType, value); - ResourceVersion = GetResourceVersionByClientType(_clientType); + _resourceInfo = GetResourceVersionByClientType(_clientType); + ResourceVersion = _resourceInfo.VersionName; + ResourceDateTime = _resourceInfo.DateTime; UpdateWindowTitle(); // 每次修改客户端时更新WindowTitle Instances.TaskQueueViewModel.UpdateStageList(true); Instances.TaskQueueViewModel.UpdateDatePrompt(); @@ -3627,6 +3629,8 @@ namespace MaaWpfGui.ViewModels.UI /// public static string CoreVersion { get; } = Marshal.PtrToStringAnsi(MaaService.AsstGetVersion()) ?? "0.0.1"; + public static string CoreVersionDisplay => string.Join("\u200B", CoreVersion.ToCharArray()); + private static readonly string _uiVersion = Assembly.GetExecutingAssembly().GetCustomAttribute()?.InformationalVersion.Split('+')[0] ?? "0.0.1"; /// @@ -3634,7 +3638,15 @@ namespace MaaWpfGui.ViewModels.UI /// public static string UiVersion { get; } = _uiVersion == "0.0.1" ? "DEBUG VERSION" : _uiVersion; - private static string _resourceVersion = GetResourceVersionByClientType(ConfigurationHelper.GetValue(ConfigurationKeys.ClientType, string.Empty)); + public static string UiVersionDisplay => string.Join("\u200B", UiVersion.ToCharArray()); + + public static DateTime BuildDateTime { get; } = Assembly.GetExecutingAssembly().GetCustomAttribute()?.BuildDateTime ?? DateTime.MinValue; + + public static string BuildDateTimeCurrentCultureString => BuildDateTime.ToLocalTimeString(); + + private static (DateTime DateTime, string VersionName) _resourceInfo = GetResourceVersionByClientType(ConfigurationHelper.GetValue(ConfigurationKeys.ClientType, string.Empty)); + + private static string _resourceVersion = _resourceInfo.VersionName; /// /// Gets or sets the resource version. @@ -3645,7 +3657,17 @@ namespace MaaWpfGui.ViewModels.UI set => SetAndNotify(ref _resourceVersion, value); } - private static string GetResourceVersionByClientType(string clientType) + private static DateTime _resourceDateTime = _resourceInfo.DateTime; + + public DateTime ResourceDateTime + { + get => _resourceDateTime; + set => SetAndNotify(ref _resourceDateTime, value); + } + + public string ResourceDateTimeCurrentCultureString => ResourceDateTime.ToLocalTimeString(); + + private static (DateTime DateTime, string VersionName) GetResourceVersionByClientType(string clientType) { const string OfficialClientType = "Official"; const string BilibiliClientType = "Bilibili"; @@ -3655,10 +3677,10 @@ namespace MaaWpfGui.ViewModels.UI jsonPath = $"resource/global/{clientType}/resource/version.json"; } - string versionName = string.Empty; + string versionName; if (!File.Exists(jsonPath)) { - return versionName; + return (DateTime.MinValue, string.Empty); } var versionJson = (JObject?)JsonConvert.DeserializeObject(File.ReadAllText(jsonPath)); @@ -3666,11 +3688,9 @@ namespace MaaWpfGui.ViewModels.UI var poolTime = (ulong?)versionJson?["gacha"]?["time"]; // 卡池的开始时间 var activityTime = (ulong?)versionJson?["activity"]?["time"]; // 活动的开始时间 var lastUpdated = (string?)versionJson?["last_updated"]; // 最后更新时间 - string dateOnly = string.Empty; - if (DateTime.TryParse(lastUpdated, out DateTime parsedDateTime)) - { - dateOnly = parsedDateTime.ToString("yy.MM.dd"); - } + var dateTime = lastUpdated == null + ? DateTime.MinValue + : DateTime.ParseExact(lastUpdated, "yyyy-MM-dd HH:mm:ss.fff", null); if ((currentTime < poolTime) && (currentTime < activityTime)) { @@ -3693,7 +3713,7 @@ namespace MaaWpfGui.ViewModels.UI versionName = versionJson?["activity"]?["name"]?.ToString() ?? string.Empty; } - return versionName + dateOnly; + return (dateTime, versionName); } private UpdateVersionType _versionType = (UpdateVersionType)Enum.Parse( @@ -4611,7 +4631,14 @@ namespace MaaWpfGui.ViewModels.UI } } - string resourceVersion = !string.IsNullOrEmpty(ResourceVersion) ? $" - {ResourceVersion}" : string.Empty; + string resourceVersion = !string.IsNullOrEmpty(ResourceVersion) + ? LocalizationHelper.CustomCultureInfo.Name.ToLowerInvariant() switch + { + "zh-cn" => $" - {ResourceVersion}{ResourceDateTime:#MMdd}", + "zh-tw" => $" - {ResourceVersion}{ResourceDateTime:#MMdd}", + _ => $" - {ResourceDateTime.ToString(LocalizationHelper.CustomCultureInfo.DateTimeFormat.ShortDatePattern.Replace("yyyy", string.Empty).Trim('/', '.'))} {ResourceVersion}", + } + : string.Empty; rvm.WindowTitle = $"{prefix}MAA{currentConfiguration} - {CoreVersion}{resourceVersion}{connectConfigName}{connectAddress}{clientName}"; } diff --git a/src/MaaWpfGui/ViewModels/UI/TaskQueueViewModel.cs b/src/MaaWpfGui/ViewModels/UI/TaskQueueViewModel.cs index 1bdaf9ea6a..9419020177 100644 --- a/src/MaaWpfGui/ViewModels/UI/TaskQueueViewModel.cs +++ b/src/MaaWpfGui/ViewModels/UI/TaskQueueViewModel.cs @@ -1051,22 +1051,31 @@ namespace MaaWpfGui.ViewModels.UI ClearLog(); + var buildDateTimeLong = SettingsViewModel.BuildDateTimeCurrentCultureString; + var resourceDateTimeLong = Instances.SettingsViewModel.ResourceDateTimeCurrentCultureString; + AddLog($"Build Time:\n{buildDateTimeLong}\nResource Time:\n{resourceDateTimeLong}"); + var uiVersion = SettingsViewModel.UiVersion; var coreVersion = SettingsViewModel.CoreVersion; if (uiVersion != coreVersion && Instances.VersionUpdateViewModel.IsStdVersion(uiVersion) && Instances.VersionUpdateViewModel.IsStdVersion(coreVersion)) { - AddLog(string.Format(LocalizationHelper.GetString("VersionMismatch"), uiVersion, coreVersion), UiLogColor.Warning); + AddLog(string.Format(LocalizationHelper.GetString("VersionMismatch"), uiVersion, coreVersion), UiLogColor.Error); + return; } await Task.Run(() => Instances.SettingsViewModel.RunScript("StartsWithScript")); AddLog(LocalizationHelper.GetString("ConnectingToEmulator")); + + /* + // 现在的主流模拟器都已经更新过自带的 adb 了,不再需要替换 if (!Instances.SettingsViewModel.AdbReplaced && !Instances.SettingsViewModel.IsAdbTouchMode()) { AddLog(LocalizationHelper.GetString("AdbReplacementTips"), UiLogColor.Info); } + */ // 一般是点了“停止”按钮了 if (Stopping) @@ -1277,10 +1286,14 @@ namespace MaaWpfGui.ViewModels.UI await Task.Run(() => Instances.SettingsViewModel.RunScript("StartsWithScript")); AddLog(LocalizationHelper.GetString("ConnectingToEmulator")); + + /* + // 现在的主流模拟器都已经更新过自带的 adb 了,不再需要替换 if (!Instances.SettingsViewModel.AdbReplaced && !Instances.SettingsViewModel.IsAdbTouchMode()) { AddLog(LocalizationHelper.GetString("AdbReplacementTips"), UiLogColor.Info); } + */ // 一般是点了“停止”按钮了 if (Stopping) diff --git a/src/MaaWpfGui/Views/UserControl/VersionUpdateSettingsUserControl.xaml b/src/MaaWpfGui/Views/UserControl/VersionUpdateSettingsUserControl.xaml old mode 100755 new mode 100644 index f26680b858..f9976b7dd0 --- a/src/MaaWpfGui/Views/UserControl/VersionUpdateSettingsUserControl.xaml +++ b/src/MaaWpfGui/Views/UserControl/VersionUpdateSettingsUserControl.xaml @@ -14,7 +14,6 @@ xmlns:viewModels="clr-namespace:MaaWpfGui.ViewModels" xmlns:vm="clr-namespace:MaaWpfGui" d:DataContext="{d:DesignInstance {x:Type ui:SettingsViewModel}}" - d:DesignHeight="300" d:DesignWidth="550" mc:Ignorable="d"> @@ -26,7 +25,7 @@ TextAlignment="Center" /> - + @@ -60,19 +59,16 @@ VerticalAlignment="Center" Content="{DynamicResource AutoInstallUpdatePackage}" IsChecked="{Binding AutoInstallUpdatePackage}" /> - - - - + - - + + + + CornerRadius="3,0,0,3" + Visibility="{c:Binding 'UiVersion == CoreVersion'}"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/MaaWpfGui/Views/UserControl/VersionUpdateSettingsUserControl.xaml.cs b/src/MaaWpfGui/Views/UserControl/VersionUpdateSettingsUserControl.xaml.cs index 9e24589e97..7a4edfce7b 100644 --- a/src/MaaWpfGui/Views/UserControl/VersionUpdateSettingsUserControl.xaml.cs +++ b/src/MaaWpfGui/Views/UserControl/VersionUpdateSettingsUserControl.xaml.cs @@ -49,6 +49,11 @@ namespace MaaWpfGui.Views.UserControl Interval = new TimeSpan(0, 0, 6), }; + private void MaaVersionClick(object sender, MouseButtonEventArgs e) + { + CopyToClipboardAsync($"UI Version: {SettingsViewModel.UiVersion}\nCore Version: {SettingsViewModel.CoreVersion}\nBuild Time: {SettingsViewModel.BuildDateTimeCurrentCultureString}"); + } + private void CoreVersionClick(object sender, MouseButtonEventArgs e) { CopyToClipboardAsync("Core Version: " + SettingsViewModel.CoreVersion); @@ -62,7 +67,7 @@ namespace MaaWpfGui.Views.UserControl private void ResourceVersionClick(object sender, MouseButtonEventArgs e) { - CopyToClipboardAsync("Resource Version: " + Instances.SettingsViewModel.ResourceVersion); + CopyToClipboardAsync($"Resource Version: {Instances.SettingsViewModel.ResourceVersion}\nResource Time: {Instances.SettingsViewModel.ResourceDateTimeCurrentCultureString}"); } private static void CopyToClipboardAsync(string text)