Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
446 changes: 1 addition & 445 deletions ContextMenuProfiler.QualityChecks/Program.cs

Large diffs are not rendered by default.

20 changes: 9 additions & 11 deletions ContextMenuProfiler.UI/Converters/IconToImageConverter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ public class IconToImageConverter : IValueConverter
// 解析 URI 和可选的 Binary Hint
string actualUri = uriStr;
string? hintDllPath = null;
int pipeIndex = uriStr.IndexOf(BenchmarkSemantics.IconLocation.HintSeparator);
int pipeIndex = uriStr.IndexOf('|');
if (pipeIndex > 0) {
actualUri = uriStr.Substring(0, pipeIndex);
hintDllPath = uriStr.Substring(pipeIndex + 1);
Expand Down Expand Up @@ -74,9 +74,9 @@ public class IconToImageConverter : IValueConverter
string ext = Path.GetExtension(fullPath);
var files = Directory.GetFiles(dir, $"{fileName}*{ext}");
var best = files.OrderByDescending(f =>
f.Contains(BenchmarkSemantics.IconLocation.MrtPreferredTargetSizeToken, StringComparison.OrdinalIgnoreCase))
f.Contains("targetsize-48", StringComparison.OrdinalIgnoreCase))
.ThenByDescending(f =>
f.Contains(BenchmarkSemantics.IconLocation.MrtPreferredScaleToken, StringComparison.OrdinalIgnoreCase))
f.Contains("scale-200", StringComparison.OrdinalIgnoreCase))
.FirstOrDefault();
if (best != null) return best;
}
Expand Down Expand Up @@ -119,7 +119,7 @@ public object Convert(object value, Type targetType, object parameter, CultureIn
try
{
// Handle ms-appx:// URIs (UWP resources)
if (path.StartsWith(BenchmarkSemantics.IconLocation.MsAppxUriPrefix, StringComparison.OrdinalIgnoreCase))
if (path.StartsWith("ms-appx://", StringComparison.OrdinalIgnoreCase))
{
var resolvedPath = ResolveMsAppxUri(path);
if (string.IsNullOrEmpty(resolvedPath)) return null;
Expand All @@ -130,9 +130,9 @@ public object Convert(object value, Type targetType, object parameter, CultureIn
path = Environment.ExpandEnvironmentVariables(path);

// Handle MUI / UWP Resource strings (starts with @)
if (path.StartsWith(BenchmarkSemantics.IconLocation.IndirectStringPrefix, StringComparison.Ordinal))
if (path.StartsWith("@"))
{
StringBuilder sb = new StringBuilder(BenchmarkSemantics.IconLocation.IndirectStringBufferSize);
StringBuilder sb = new StringBuilder(1024);
int res = SHLoadIndirectString(path, sb, (uint)sb.Capacity, IntPtr.Zero);
if (res == 0) // S_OK
{
Expand All @@ -150,15 +150,15 @@ public object Convert(object value, Type targetType, object parameter, CultureIn
else
{
// Remove @ prefix and try parsing as normal path
path = path.Substring(BenchmarkSemantics.IconLocation.IndirectStringPrefix.Length);
path = path.Substring(1);
}
}

int iconIndex = 0;
string filePath = path;

// Parse resource index (path,index or path,-id)
int commaIndex = path.LastIndexOf(BenchmarkSemantics.IconLocation.IconResourceIndexSeparator);
int commaIndex = path.LastIndexOf(',');
if (commaIndex > 0)
{
string indexStr = path.Substring(commaIndex + 1);
Expand All @@ -183,9 +183,7 @@ public object Convert(object value, Type targetType, object parameter, CultureIn
{
string ext = Path.GetExtension(filePath).ToLower();

if (ext == BenchmarkSemantics.IconFileExtension.Png
|| ext == BenchmarkSemantics.IconFileExtension.Jpg
|| ext == BenchmarkSemantics.IconFileExtension.Bmp)
if (ext == ".png" || ext == ".jpg" || ext == ".bmp")
{
var bitmap = new BitmapImage();
bitmap.BeginInit();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,24 +10,22 @@ public class NullOrEmptyToLocalizedConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
string text = value?.ToString() ?? string.Empty;
if (!string.IsNullOrWhiteSpace(text))
if (value is string str)
{
if (string.Equals(text, BenchmarkSemantics.IconSource.ManifestAppLogo, StringComparison.Ordinal))
if (string.IsNullOrEmpty(str))
{
return LocalizationService.Instance["Dashboard.Value.ManifestAppLogo"];
return LocalizationService.Instance["Dashboard.Value.None"];
}

return text;
}
if (string.Equals(str, "ManifestAppLogo", StringComparison.OrdinalIgnoreCase))
{
return LocalizationService.Instance["Dashboard.Value.ManifestAppLogo"];
}

string key = parameter?.ToString() ?? string.Empty;
if (string.IsNullOrWhiteSpace(key))
{
return string.Empty;
return str;
}

return LocalizationService.Instance[key];
return LocalizationService.Instance["Dashboard.Value.None"];
}

public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
Expand Down
4 changes: 2 additions & 2 deletions ContextMenuProfiler.UI/Converters/TypeToIconConverter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ public object Convert(object value, Type targetType, object parameter, CultureIn
if (value is string type)
{
if (BenchmarkSemantics.IsPackagedExtensionType(type)) return SymbolRegular.AppGeneric24;
if (string.Equals(type, BenchmarkSemantics.Type.Com, StringComparison.OrdinalIgnoreCase)) return SymbolRegular.PuzzlePiece24; // Default generic icon
if (string.Equals(type, BenchmarkSemantics.Type.Static, StringComparison.OrdinalIgnoreCase)) return SymbolRegular.WindowConsole20;
if (string.Equals(type, "COM", StringComparison.OrdinalIgnoreCase)) return SymbolRegular.PuzzlePiece24; // Default generic icon
if (string.Equals(type, "Static", StringComparison.OrdinalIgnoreCase)) return SymbolRegular.WindowConsole20;
}
return SymbolRegular.PuzzlePiece24; // Default fallback
}
Expand Down
Loading
Loading