Skip to content

Commit 9b4b697

Browse files
committed
Add tooltip for game installation and update
1 parent e707348 commit 9b4b697

6 files changed

Lines changed: 142 additions & 3 deletions

File tree

CollapseLauncher/Classes/GameManagement/Versioning/GameVersionBase.GameApi.cs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -323,6 +323,14 @@ protected virtual GameVersion? SdkVersionInstalled
323323
public virtual GameVersion? GetGameVersionApi() => GameVersionAPI;
324324

325325
public virtual GameVersion? GetGameVersionApiPreload() => GameVersionAPIPreload;
326+
327+
public virtual GameVersion? GetSdkVersionInstalled() => SdkVersionInstalled;
328+
329+
public virtual GameVersion? GetSdkVersionApi() => SdkVersionAPI;
330+
331+
public virtual Dictionary<string, GameVersion> GetPluginVersionsInstalled() => PluginVersionsInstalled;
332+
333+
public virtual List<HypPluginPackageInfo> GetMismatchPlugin() => MismatchPlugin;
326334
#endregion
327335

328336
#region Game Info Methods
@@ -449,4 +457,4 @@ public virtual List<HypChannelSdkData> GetGameSdkZip()
449457
}
450458
#endregion
451459
}
452-
}
460+
}

CollapseLauncher/Classes/Interfaces/IGameVersionCheck.cs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,31 @@ internal interface IGameVersion
114114
/// <returns>The version of the game installed</returns>
115115
GameVersion? GetGameExistingVersion();
116116

117+
/// <summary>
118+
/// Returns the SDK version of the game as provided by miHoYo's API.
119+
/// </summary>
120+
/// <returns>The SDK version of the game</returns>
121+
GameVersion? GetSdkVersionApi();
122+
123+
/// <summary>
124+
/// Returns the SDK version of the game installed.<br/>
125+
/// It will return a <c>null</c> if the game SDK doesn't installed.
126+
/// </summary>
127+
/// <returns>The SDK version of the game installed</returns>
128+
GameVersion? GetSdkVersionInstalled();
129+
130+
/// <summary>
131+
/// Returns the plugin versions of the game installed.
132+
/// </summary>
133+
/// <returns>The plugin versions of the game installed</returns>
134+
Dictionary<string, GameVersion> GetPluginVersionsInstalled();
135+
136+
/// <summary>
137+
/// Returns the difference between current version of the game plugin and the version provided by the miHoYo API.
138+
/// </summary>
139+
/// <returns>The difference between current version of the game plugin and the version provided by the miHoYo API</returns>
140+
List<HypPluginPackageInfo> GetMismatchPlugin();
141+
117142
/// <summary>
118143
/// Checks if the game version is installed or matches the version provided from miHoYo's API.
119144
/// </summary>

CollapseLauncher/XAMLs/MainApp/Pages/HomePage.Variable.cs

Lines changed: 89 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,12 @@
33
using CollapseLauncher.Helper.Metadata;
44
using CollapseLauncher.Statics;
55
using Hi3Helper;
6+
using Hi3Helper.Shared.ClassStruct;
67
using Microsoft.UI.Xaml;
78
using System;
89
using System.Collections.Generic;
10+
using System.Text;
11+
using System.Threading.Tasks;
912
using static Hi3Helper.Shared.Region.LauncherConfig;
1013
// ReSharper disable StringLiteralTypo
1114
// ReSharper disable IdentifierTypo
@@ -223,7 +226,7 @@ internal bool IsPlaytimeSyncDb
223226
CurrentGameProperty.GameSettings.SettingsCollapseMisc.IsSyncPlaytimeToDatabase = value;
224227
CurrentGameProperty?.GameSettings?.SaveBaseSettings();
225228
SyncDbPlaytimeBtn.IsEnabled = value;
226-
229+
227230
// Run DbSync if toggle is changed to enable
228231
if (value) CurrentGameProperty?.GamePlaytime?.CheckDb();
229232
}
@@ -295,5 +298,90 @@ internal VerticalAlignment CurrentBannerIconVerticalAlign
295298
WindowSize.WindowSize.CurrentWindowSize.BannerIconAlignVertical :
296299
WindowSize.WindowSize.CurrentWindowSize.BannerIconAlignVerticalHYP;
297300
}
301+
302+
internal string? StartTooltipText
303+
{
304+
get
305+
{
306+
if (CurrentGameProperty.GameVersion == null)
307+
return null;
308+
309+
var installed = CurrentGameProperty.GameVersion.GetGameExistingVersion();
310+
if (installed is null)
311+
return null;
312+
return string.Format(Locale.Lang._HomePage.StartGameTooltip, installed);
313+
}
314+
}
315+
316+
internal string? InstallUpdateTooltipText
317+
{
318+
get
319+
{
320+
if (CurrentGameProperty.GameVersion == null)
321+
return null;
322+
323+
var state = Task.Run(async () => await CurrentGameProperty.GameVersion.GetGameState()).GetAwaiter().GetResult();
324+
switch (state)
325+
{
326+
case GameInstallStateEnum.NotInstalled:
327+
{
328+
var remote = CurrentGameProperty.GameVersion.GetGameVersionApi();
329+
return string.Format(Locale.Lang._HomePage.InstallGameTooltip, remote);
330+
}
331+
case GameInstallStateEnum.NeedsUpdate:
332+
{
333+
var installed = CurrentGameProperty.GameVersion.GetGameExistingVersion();
334+
var remote = CurrentGameProperty.GameVersion.GetGameVersionApi();
335+
if (remote is null || installed == remote)
336+
return null;
337+
338+
if (installed is null)
339+
return string.Format(Locale.Lang._HomePage.InstallGameTooltip, remote);
340+
341+
return string.Format(Locale.Lang._HomePage.UpdateGameTooltip, installed, remote);
342+
}
343+
case GameInstallStateEnum.InstalledHavePlugin:
344+
{
345+
var tooltip = new StringBuilder();
346+
347+
// SDK
348+
{
349+
var installed = CurrentGameProperty.GameVersion.GetSdkVersionInstalled();
350+
var remote = CurrentGameProperty.GameVersion.GetSdkVersionApi();
351+
if (remote is not null && installed != remote)
352+
{
353+
if (installed is null)
354+
tooltip.Append(string.Format(Locale.Lang._HomePage.InstallSdkTooltip, remote));
355+
else
356+
tooltip.Append(string.Format(Locale.Lang._HomePage.UpdateSdkTooltip, installed, remote));
357+
}
358+
}
359+
360+
// Plugin
361+
{
362+
var installedDict = CurrentGameProperty.GameVersion.GetPluginVersionsInstalled();
363+
var mismatchList = CurrentGameProperty.GameVersion.GetMismatchPlugin();
364+
foreach (var mismatch in mismatchList)
365+
{
366+
if (tooltip.Length != 0)
367+
tooltip.Append('\n');
368+
369+
var remote = mismatch.Version;
370+
if (!installedDict.TryGetValue(mismatch.PluginId!, out var installed))
371+
tooltip.Append(string.Format(Locale.Lang._HomePage.InstallPluginTooltip, mismatch.PluginId, remote));
372+
else
373+
tooltip.Append(string.Format(Locale.Lang._HomePage.UpdatePluginTooltip, mismatch.PluginId, installed, remote));
374+
}
375+
}
376+
377+
if (tooltip.Length == 0)
378+
return null;
379+
return tooltip.ToString();
380+
}
381+
default:
382+
return null;
383+
}
384+
}
385+
}
298386
}
299387
}

CollapseLauncher/XAMLs/MainApp/Pages/HomePage.xaml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2491,7 +2491,8 @@
24912491
HorizontalContentAlignment="Stretch"
24922492
Click="InstallGameDialog"
24932493
CornerRadius="{x:Bind extension:UIElementExtensions.AttachRoundedKindCornerRadius(InstallGameBtn)}"
2494-
Style="{ThemeResource NewAccentButtonStyle}">
2494+
Style="{ThemeResource NewAccentButtonStyle}"
2495+
ToolTipService.ToolTip="{x:Bind InstallUpdateTooltipText}">
24952496
<Button.Content>
24962497
<Grid Margin="8,0">
24972498
<Grid.ColumnDefinitions>
@@ -2525,6 +2526,7 @@
25252526
CornerRadius="{x:Bind extension:UIElementExtensions.AttachRoundedKindCornerRadius(UpdateGameBtn)}"
25262527
Loaded="SetHandCursor"
25272528
Style="{ThemeResource NewAccentButtonStyle}"
2529+
ToolTipService.ToolTip="{x:Bind InstallUpdateTooltipText}"
25282530
Visibility="Collapsed">
25292531
<Button.Content>
25302532
<Grid Margin="8,0">
@@ -2560,6 +2562,7 @@
25602562
CornerRadius="{x:Bind extension:UIElementExtensions.AttachRoundedKindCornerRadius(StartGameBtn)}"
25612563
Loaded="SetHandCursor"
25622564
Style="{ThemeResource NewAccentButtonStyle}"
2565+
ToolTipService.ToolTip="{x:Bind StartTooltipText}"
25632566
Visibility="Collapsed">
25642567
<Grid Margin="8,0">
25652568
<Grid.ColumnDefinitions>
@@ -2625,6 +2628,7 @@
26252628
CornerRadius="{x:Bind extension:UIElementExtensions.AttachRoundedKindCornerRadius(ResumeDownloadBtn)}"
26262629
Loaded="SetHandCursor"
26272630
Style="{ThemeResource NewAccentButtonStyle}"
2631+
ToolTipService.ToolTip="{x:Bind InstallUpdateTooltipText}"
26282632
Visibility="Collapsed">
26292633
<Grid Margin="8,0">
26302634
<Grid.ColumnDefinitions>

Hi3Helper.Core/Lang/Locale/LangHomePage.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,13 @@ public sealed partial class LangHomePage
3939
public string PauseCancelDownloadBtn { get; set; } = LangFallback?._HomePage.PauseCancelDownloadBtn;
4040
public string PauseCancelBtn { get; set; } = LangFallback?._HomePage.PauseCancelBtn;
4141
public string DownloadBtn { get; set; } = LangFallback?._HomePage.DownloadBtn;
42+
public string StartGameTooltip { get; set; } = LangFallback?._HomePage.StartGameTooltip;
43+
public string InstallGameTooltip { get; set; } = LangFallback?._HomePage.InstallGameTooltip;
44+
public string UpdateGameTooltip { get; set; } = LangFallback?._HomePage.UpdateGameTooltip;
45+
public string InstallSdkTooltip { get; set; } = LangFallback?._HomePage.InstallSdkTooltip;
46+
public string UpdateSdkTooltip { get; set; } = LangFallback?._HomePage.UpdateSdkTooltip;
47+
public string InstallPluginTooltip { get; set; } = LangFallback?._HomePage.InstallPluginTooltip;
48+
public string UpdatePluginTooltip { get; set; } = LangFallback?._HomePage.UpdatePluginTooltip;
4249
public string GameStatusPlaceholderComingSoonBtn { get; set; } = LangFallback?._HomePage.GameStatusPlaceholderComingSoonBtn;
4350
public string GameStatusPlaceholderPreRegisterBtn { get; set; } = LangFallback?._HomePage.GameStatusPlaceholderPreRegisterBtn;
4451
public string GameSettingsBtn { get; set; } = LangFallback?._HomePage.GameSettingsBtn;

Hi3Helper.Core/Lang/en_US.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,13 @@
139139
"PauseCancelDownloadBtn": "Pause/Cancel",
140140
"PauseCancelBtn": "Pause/Cancel",
141141
"DownloadBtn": "Download Game",
142+
"StartGameTooltip": "Start Game: v{0}",
143+
"InstallGameTooltip": "Install Game: v{0}",
144+
"UpdateGameTooltip": "Update Game: v{0} -> v{1}",
145+
"InstallSdkTooltip": "Install SDK: v{0}",
146+
"UpdateSdkUpdateTooltip": "Update SDK: v{0} -> v{1}",
147+
"InstallPluginTooltip": "Install Plugin: {0} v{1}",
148+
"UpdatePluginTooltip": "Update Plugin: {0} v{1} -> v{2}",
142149

143150
"GameStatusPlaceholderComingSoonBtn": "Coming Soon",
144151
"GameStatusPlaceholderPreRegisterBtn": "Pre-Register Now!",

0 commit comments

Comments
 (0)