Skip to content

Commit af4d30b

Browse files
committed
OSバージョン判定処理修正
1 parent 54f9ded commit af4d30b

3 files changed

Lines changed: 23 additions & 14 deletions

File tree

Plugins/WindowTranslator.Plugin.OneOcrPlugin/OneOcrValidator.cs

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
1-
using WindowTranslator.Modules;
1+
using Microsoft.Extensions.Logging;
2+
using WindowTranslator.Modules;
23
using WindowTranslator.Plugin.OneOcrPlugin.Properties;
34
using Wpf.Ui;
45
using Wpf.Ui.Controls;
56
using Wpf.Ui.Extensions;
67

78
namespace WindowTranslator.Plugin.OneOcrPlugin;
89

9-
public class OneOcrValidator(IContentDialogService dialogService) : ITargetSettingsValidator
10+
public class OneOcrValidator(IContentDialogService dialogService, ILogger<OneOcrValidator> logger) : ITargetSettingsValidator
1011
{
11-
private static readonly ValidateResult Invalid = ValidateResult.Invalid("OneOcr", Resources.NotFoundModule);
12+
private static readonly ValidateResult Invalid = ValidateResult.Invalid(Resources.OneOcr, Resources.NotFoundModule);
1213
private readonly IContentDialogService dialogService = dialogService;
14+
private readonly ILogger<OneOcrValidator> logger = logger;
1315
private bool versionChecked = false;
1416

1517
public async ValueTask<ValidateResult> Validate(TargetSettings settings)
@@ -21,7 +23,7 @@ public async ValueTask<ValidateResult> Validate(TargetSettings settings)
2123
}
2224

2325
// ScreenSketchのバージョンをチェック
24-
if (!this.versionChecked && !await Utility.CheckScreenSketchVersionAsync().ConfigureAwait(false))
26+
if (!this.versionChecked && !await Utility.CheckScreenSketchVersionAsync(this.logger))
2527
{
2628
// バージョンが古い場合、確認ダイアログを表示
2729
var confirmResult = await this.dialogService.ShowSimpleDialogAsync(new()
@@ -49,9 +51,9 @@ public async ValueTask<ValidateResult> Validate(TargetSettings settings)
4951
{
5052
while (!checkCts.Token.IsCancellationRequested)
5153
{
52-
await Task.Delay(TimeSpan.FromSeconds(5), checkCts.Token).ConfigureAwait(false);
54+
await Task.Delay(TimeSpan.FromSeconds(5), checkCts.Token);
5355

54-
if (await Utility.CheckScreenSketchVersionAsync().ConfigureAwait(false))
56+
if (await Utility.CheckScreenSketchVersionAsync(this.logger))
5557
{
5658
// 更新完了
5759
dialogCts.Cancel();
@@ -97,10 +99,10 @@ await this.dialogService.ShowSimpleDialogAsync(new()
9799
}
98100

99101
// OneOcrのインストール先を取得
100-
var oneOcrPath = await Utility.FindOneOcrPath().ConfigureAwait(false);
102+
var oneOcrPath = await Utility.FindOneOcrPath();
101103
if (oneOcrPath == null)
102104
{
103-
return ValidateResult.Invalid("OneOcr", Resources.NotFoundModule);
105+
return Invalid;
104106
}
105107

106108
// DLLをコピー
@@ -110,7 +112,7 @@ await this.dialogService.ShowSimpleDialogAsync(new()
110112
}
111113
catch (Exception ex)
112114
{
113-
return ValidateResult.Invalid("OneOcr", string.Format(Resources.CopyFaild, ex.Message));
115+
return ValidateResult.Invalid(Resources.OneOcr, string.Format(Resources.CopyFaild, ex.Message));
114116
}
115117

116118
return ValidateResult.Valid;

Plugins/WindowTranslator.Plugin.OneOcrPlugin/Utility.cs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System.Diagnostics;
2+
using Microsoft.Extensions.Logging;
23

34
namespace WindowTranslator.Plugin.OneOcrPlugin;
45

@@ -21,6 +22,9 @@ static class Utility
2122

2223
public static string OneOcrPath { get; } = Path.Combine(PathUtility.UserDir, "OneOcr");
2324

25+
private static int GetOsVersion()
26+
=> Environment.OSVersion.Version is { Major: 10, Build: < 22000 } ? 10 : 11;
27+
2428
private static async ValueTask<string?> GetInstallLocation(string appName)
2529
{
2630
var info = new ProcessStartInfo("powershell.exe", $"-Command \"(Get-AppxPackage -Name {appName}).InstallLocation\"")
@@ -89,20 +93,22 @@ static class Utility
8993
/// ScreenSketchのバージョンをチェックし、必要に応じてMicrosoft Storeを開く
9094
/// </summary>
9195
/// <returns>バージョンが十分か、または更新が必要かを示す情報</returns>
92-
public static async ValueTask<bool> CheckScreenSketchVersionAsync()
96+
public static async ValueTask<bool> CheckScreenSketchVersionAsync(ILogger logger)
9397
{
9498
// インストール済みのScreenSketchバージョンを取得
9599
var installedVersion = await GetInstallVersion(ScreenSketchAppName).ConfigureAwait(false);
96100

97101
if (installedVersion == null)
98102
{
103+
logger.LogWarning("ScreenSketch is not installed.");
99104
// ScreenSketchがインストールされていない
100105
return false;
101106
}
102107

103108
// 必要な最小バージョンを取得
104-
if (!MinimumVersions.TryGetValue(Environment.OSVersion.Version.Major, out var minVersion))
109+
if (!MinimumVersions.TryGetValue(GetOsVersion(), out var minVersion))
105110
{
111+
logger.LogWarning("Unsupported OS version: {OSVersion}", Environment.OSVersion.Version);
106112
// サポートされていないOSバージョン(OSバージョンに応じたチェックをスキップ)
107113
return false;
108114
}
@@ -114,6 +120,7 @@ public static async ValueTask<bool> CheckScreenSketchVersionAsync()
114120
return true;
115121
}
116122

123+
logger.LogInformation("ScreenSketch version is outdated. Installed: {InstalledVersion}, Required: {RequiredVersion}", installedVersion, minVersion);
117124
// バージョンが古い
118125
return false;
119126
}

Sandbox/Program.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -113,11 +113,11 @@ His first person is "儂" in Kanji.
113113
Console.WriteLine(translated[0]);
114114
}
115115

116-
static async Task ClipTextRect([Argument] string imagePath, [FromServices] ILogger<OneOcr> logger, [FromServices] IOptionsSnapshot<LanguageOptions> langOptions, [FromServices] IOptionsSnapshot<BasicOcrParam> ocrParam)
116+
static async Task ClipTextRect([Argument] string imagePath, [FromServices] ILoggerFactory loggerFactory, [FromServices] IOptionsSnapshot<LanguageOptions> langOptions, [FromServices] IOptionsSnapshot<BasicOcrParam> ocrParam)
117117
{
118-
var validator = new OneOcrValidator(null!);
118+
var validator = new OneOcrValidator(null!, loggerFactory.CreateLogger<OneOcrValidator>());
119119
await validator.Validate(new() { SelectedPlugins = { [nameof(IOcrModule)] = nameof(OneOcr) } }).ConfigureAwait(false);
120-
var ocr = new OneOcr(logger, langOptions, ocrParam);
120+
var ocr = new OneOcr(loggerFactory.CreateLogger<OneOcr>(), langOptions, ocrParam);
121121

122122
// 画像ファイルの読み込み
123123
using var fileStream = new FileStream(imagePath, FileMode.Open);

0 commit comments

Comments
 (0)