mirror of
https://github.com/microsoft/PowerToys.git
synced 2025-06-12 04:33:10 +08:00
Audit culture bugs (#7707)
* Added comments and fixed CultureInfo / StringComparison where appropriate * Addressed comments * Fixed comment
This commit is contained in:
parent
bd34127cd4
commit
2c5b9b4d52
@ -20,6 +20,7 @@ namespace Microsoft.PowerToys.Settings.UI.Library.Utilities
|
|||||||
Directory.CreateDirectory(ApplicationLogPath);
|
Directory.CreateDirectory(ApplicationLogPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Using InvariantCulture since this is used for a log file name
|
||||||
var logFilePath = Path.Combine(ApplicationLogPath, "Log_" + DateTime.Now.ToString(@"yyyy-MM-dd", CultureInfo.InvariantCulture) + ".txt");
|
var logFilePath = Path.Combine(ApplicationLogPath, "Log_" + DateTime.Now.ToString(@"yyyy-MM-dd", CultureInfo.InvariantCulture) + ".txt");
|
||||||
|
|
||||||
Trace.Listeners.Add(new TextWriterTraceListener(logFilePath));
|
Trace.Listeners.Add(new TextWriterTraceListener(logFilePath));
|
||||||
|
@ -45,7 +45,7 @@ namespace Microsoft.PowerToys.Settings.UI.UnitTests.BackwardsCompatibility
|
|||||||
|
|
||||||
public static Mock<IIOProvider>GetModuleIOProvider(string version, string module, string fileName)
|
public static Mock<IIOProvider>GetModuleIOProvider(string version, string module, string fileName)
|
||||||
{
|
{
|
||||||
|
// Using StringComparison.Ordinal / CultureInfo.InvariantCulture since this is used internally
|
||||||
var stubSettingsPath = string.Format(CultureInfo.InvariantCulture, BackCompatTestProperties.RootPathStubFiles, version, module, fileName);
|
var stubSettingsPath = string.Format(CultureInfo.InvariantCulture, BackCompatTestProperties.RootPathStubFiles, version, module, fileName);
|
||||||
Expression<Func<string, bool>> filterExpression = (string s) => s.Contains(module, StringComparison.Ordinal);
|
Expression<Func<string, bool>> filterExpression = (string s) => s.Contains(module, StringComparison.Ordinal);
|
||||||
var mockIOProvider = IIOProviderMocks.GetMockIOReadWithStubFile(stubSettingsPath, filterExpression);
|
var mockIOProvider = IIOProviderMocks.GetMockIOReadWithStubFile(stubSettingsPath, filterExpression);
|
||||||
@ -59,6 +59,7 @@ namespace Microsoft.PowerToys.Settings.UI.UnitTests.BackwardsCompatibility
|
|||||||
throw new ArgumentNullException(nameof(provider));
|
throw new ArgumentNullException(nameof(provider));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Using Ordinal since this is used internally
|
||||||
Expression<Func<string, bool>> filterExpression = (string s) => s.Contains(module, StringComparison.Ordinal);
|
Expression<Func<string, bool>> filterExpression = (string s) => s.Contains(module, StringComparison.Ordinal);
|
||||||
|
|
||||||
IIOProviderMocks.VerifyIOReadWithStubFile(provider, filterExpression, expectedCallCount);
|
IIOProviderMocks.VerifyIOReadWithStubFile(provider, filterExpression, expectedCallCount);
|
||||||
@ -66,6 +67,7 @@ namespace Microsoft.PowerToys.Settings.UI.UnitTests.BackwardsCompatibility
|
|||||||
|
|
||||||
public static Mock<IIOProvider> GetGeneralSettingsIOProvider(string version)
|
public static Mock<IIOProvider> GetGeneralSettingsIOProvider(string version)
|
||||||
{
|
{
|
||||||
|
// Using StringComparison.Ordinal / CultureInfo.InvariantCulture since this is used internally for a path
|
||||||
var stubGeneralSettingsPath = string.Format(CultureInfo.InvariantCulture, BackCompatTestProperties.RootPathStubFiles, version, string.Empty, "settings.json");
|
var stubGeneralSettingsPath = string.Format(CultureInfo.InvariantCulture, BackCompatTestProperties.RootPathStubFiles, version, string.Empty, "settings.json");
|
||||||
Expression<Func<string, bool>> filterExpression = (string s) => s.Contains("Microsoft\\PowerToys\\settings.json", StringComparison.Ordinal);
|
Expression<Func<string, bool>> filterExpression = (string s) => s.Contains("Microsoft\\PowerToys\\settings.json", StringComparison.Ordinal);
|
||||||
var mockGeneralIOProvider = IIOProviderMocks.GetMockIOReadWithStubFile(stubGeneralSettingsPath, filterExpression);
|
var mockGeneralIOProvider = IIOProviderMocks.GetMockIOReadWithStubFile(stubGeneralSettingsPath, filterExpression);
|
||||||
@ -78,7 +80,7 @@ namespace Microsoft.PowerToys.Settings.UI.UnitTests.BackwardsCompatibility
|
|||||||
{
|
{
|
||||||
throw new ArgumentNullException(nameof(provider));
|
throw new ArgumentNullException(nameof(provider));
|
||||||
}
|
}
|
||||||
|
// Using Ordinal since this is used internally for a path
|
||||||
Expression<Func<string, bool>> filterExpression = (string s) => s.Contains("Microsoft\\PowerToys\\settings.json", StringComparison.Ordinal);
|
Expression<Func<string, bool>> filterExpression = (string s) => s.Contains("Microsoft\\PowerToys\\settings.json", StringComparison.Ordinal);
|
||||||
IIOProviderMocks.VerifyIOReadWithStubFile(provider, filterExpression, expectedCallCount);
|
IIOProviderMocks.VerifyIOReadWithStubFile(provider, filterExpression, expectedCallCount);
|
||||||
}
|
}
|
||||||
|
@ -26,11 +26,13 @@ namespace Microsoft.PowerToys.Settings.UI.UnitTests.Mocks
|
|||||||
savePath = path;
|
savePath = path;
|
||||||
saveContent = content;
|
saveContent = content;
|
||||||
});
|
});
|
||||||
|
// Using Ordinal since this is used internally for a path
|
||||||
mockIOProvider.Setup(x => x.ReadAllText(It.Is<string>(x => x.Equals(savePath, StringComparison.Ordinal))))
|
mockIOProvider.Setup(x => x.ReadAllText(It.Is<string>(x => x.Equals(savePath, StringComparison.Ordinal))))
|
||||||
.Returns(() => saveContent);
|
.Returns(() => saveContent);
|
||||||
|
// Using Ordinal since this is used internally for a path
|
||||||
mockIOProvider.Setup(x => x.FileExists(It.Is<string>(x => x.Equals(savePath, StringComparison.Ordinal))))
|
mockIOProvider.Setup(x => x.FileExists(It.Is<string>(x => x.Equals(savePath, StringComparison.Ordinal))))
|
||||||
.Returns(true);
|
.Returns(true);
|
||||||
|
// Using Ordinal since this is used internally for a path
|
||||||
mockIOProvider.Setup(x => x.FileExists(It.Is<string>(x => !x.Equals(savePath, StringComparison.Ordinal))))
|
mockIOProvider.Setup(x => x.FileExists(It.Is<string>(x => !x.Equals(savePath, StringComparison.Ordinal))))
|
||||||
.Returns(false);
|
.Returns(false);
|
||||||
|
|
||||||
|
@ -167,6 +167,7 @@ namespace ViewModelTests
|
|||||||
var settingUtils = ISettingsUtilsMocks.GetStubSettingsUtils<ImageResizerSettings>();
|
var settingUtils = ISettingsUtilsMocks.GetStubSettingsUtils<ImageResizerSettings>();
|
||||||
|
|
||||||
var expectedSettingsString = new ImageResizerSettings() { Properties = new ImageResizerProperties() { ImageresizerKeepDateModified = new BoolProperty() { Value = true } } }.ToJsonString();
|
var expectedSettingsString = new ImageResizerSettings() { Properties = new ImageResizerProperties() { ImageresizerKeepDateModified = new BoolProperty() { Value = true } } }.ToJsonString();
|
||||||
|
// Using Ordinal since this is used internally
|
||||||
settingUtils.Setup(x => x.SaveSettings(
|
settingUtils.Setup(x => x.SaveSettings(
|
||||||
It.Is<string>(content => content.Equals(expectedSettingsString, StringComparison.Ordinal)),
|
It.Is<string>(content => content.Equals(expectedSettingsString, StringComparison.Ordinal)),
|
||||||
It.Is<string>(module => module.Equals(ImageResizerSettings.ModuleName, StringComparison.Ordinal)),
|
It.Is<string>(module => module.Equals(ImageResizerSettings.ModuleName, StringComparison.Ordinal)),
|
||||||
|
@ -66,6 +66,7 @@ namespace ColorPicker.Helpers
|
|||||||
saturation = Math.Round(saturation * 100);
|
saturation = Math.Round(saturation * 100);
|
||||||
lightness = Math.Round(lightness * 100);
|
lightness = Math.Round(lightness * 100);
|
||||||
|
|
||||||
|
// Using InvariantCulture since this is used for color representation
|
||||||
return $"hsl({hue.ToString(CultureInfo.InvariantCulture)}"
|
return $"hsl({hue.ToString(CultureInfo.InvariantCulture)}"
|
||||||
+ $", {saturation.ToString(CultureInfo.InvariantCulture)}%"
|
+ $", {saturation.ToString(CultureInfo.InvariantCulture)}%"
|
||||||
+ $", {lightness.ToString(CultureInfo.InvariantCulture)}%)";
|
+ $", {lightness.ToString(CultureInfo.InvariantCulture)}%)";
|
||||||
@ -84,6 +85,7 @@ namespace ColorPicker.Helpers
|
|||||||
saturation = Math.Round(saturation * 100);
|
saturation = Math.Round(saturation * 100);
|
||||||
value = Math.Round(value * 100);
|
value = Math.Round(value * 100);
|
||||||
|
|
||||||
|
// Using InvariantCulture since this is used for color representation
|
||||||
return $"hsv({hue.ToString(CultureInfo.InvariantCulture)}"
|
return $"hsv({hue.ToString(CultureInfo.InvariantCulture)}"
|
||||||
+ $", {saturation.ToString(CultureInfo.InvariantCulture)}%"
|
+ $", {saturation.ToString(CultureInfo.InvariantCulture)}%"
|
||||||
+ $", {value.ToString(CultureInfo.InvariantCulture)}%)";
|
+ $", {value.ToString(CultureInfo.InvariantCulture)}%)";
|
||||||
@ -103,6 +105,7 @@ namespace ColorPicker.Helpers
|
|||||||
yellow = Math.Round(yellow * 100);
|
yellow = Math.Round(yellow * 100);
|
||||||
blackKey = Math.Round(blackKey * 100);
|
blackKey = Math.Round(blackKey * 100);
|
||||||
|
|
||||||
|
// Using InvariantCulture since this is used for color representation
|
||||||
return $"cmyk({cyan.ToString(CultureInfo.InvariantCulture)}%"
|
return $"cmyk({cyan.ToString(CultureInfo.InvariantCulture)}%"
|
||||||
+ $", {magenta.ToString(CultureInfo.InvariantCulture)}%"
|
+ $", {magenta.ToString(CultureInfo.InvariantCulture)}%"
|
||||||
+ $", {yellow.ToString(CultureInfo.InvariantCulture)}%"
|
+ $", {yellow.ToString(CultureInfo.InvariantCulture)}%"
|
||||||
|
@ -20,7 +20,8 @@ namespace ColorPicker.Helpers
|
|||||||
Directory.CreateDirectory(ApplicationLogPath);
|
Directory.CreateDirectory(ApplicationLogPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
var logFilePath = Path.Combine(ApplicationLogPath, "Log_" + DateTime.Now.ToString(@"yyyy-MM-dd", CultureInfo.CurrentCulture) + ".txt");
|
// Using InvariantCulture since this is used for a log file name
|
||||||
|
var logFilePath = Path.Combine(ApplicationLogPath, "Log_" + DateTime.Now.ToString(@"yyyy-MM-dd", CultureInfo.InvariantCulture) + ".txt");
|
||||||
|
|
||||||
Trace.Listeners.Add(new TextWriterTraceListener(logFilePath));
|
Trace.Listeners.Add(new TextWriterTraceListener(logFilePath));
|
||||||
|
|
||||||
|
@ -157,6 +157,8 @@ namespace FancyZonesEditor
|
|||||||
|
|
||||||
sb.AppendLine("## " + CrashReportEnvironmentTag);
|
sb.AppendLine("## " + CrashReportEnvironmentTag);
|
||||||
sb.AppendLine(CrashReportCommandLineTag + Environment.CommandLine);
|
sb.AppendLine(CrashReportCommandLineTag + Environment.CommandLine);
|
||||||
|
|
||||||
|
// Using InvariantCulture since this is used for a timestamp internally
|
||||||
sb.AppendLine(CrashReportTimestampTag + DateTime.Now.ToString(CultureInfo.InvariantCulture));
|
sb.AppendLine(CrashReportTimestampTag + DateTime.Now.ToString(CultureInfo.InvariantCulture));
|
||||||
sb.AppendLine(CrashReportOSVersionTag + Environment.OSVersion.VersionString);
|
sb.AppendLine(CrashReportOSVersionTag + Environment.OSVersion.VersionString);
|
||||||
sb.AppendLine(CrashReportIntPtrLengthTag + IntPtr.Size);
|
sb.AppendLine(CrashReportIntPtrLengthTag + IntPtr.Size);
|
||||||
|
@ -170,6 +170,7 @@ namespace ImageResizer.Properties
|
|||||||
|
|
||||||
var result = ((IDataErrorInfo)settings)["JpegQualityLevel"];
|
var result = ((IDataErrorInfo)settings)["JpegQualityLevel"];
|
||||||
|
|
||||||
|
// Using InvariantCulture since this is used internally
|
||||||
Assert.Equal(
|
Assert.Equal(
|
||||||
string.Format(CultureInfo.InvariantCulture, Resources.ValueMustBeBetween, 1, 100),
|
string.Format(CultureInfo.InvariantCulture, Resources.ValueMustBeBetween, 1, 100),
|
||||||
result);
|
result);
|
||||||
|
@ -28,6 +28,7 @@ namespace ImageResizer.Views
|
|||||||
var timeRemaining = new TimeSpan(hours, minutes, seconds);
|
var timeRemaining = new TimeSpan(hours, minutes, seconds);
|
||||||
var converter = new TimeRemainingConverter();
|
var converter = new TimeRemainingConverter();
|
||||||
|
|
||||||
|
// Using InvariantCulture since these are internal
|
||||||
var result = converter.Convert(
|
var result = converter.Convert(
|
||||||
timeRemaining,
|
timeRemaining,
|
||||||
targetType: null,
|
targetType: null,
|
||||||
|
@ -189,6 +189,7 @@ namespace ImageResizer.Models
|
|||||||
extension = supportedExtensions.FirstOrDefault();
|
extension = supportedExtensions.FirstOrDefault();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Using CurrentCulture since this is user facing
|
||||||
var fileName = string.Format(
|
var fileName = string.Format(
|
||||||
CultureInfo.CurrentCulture,
|
CultureInfo.CurrentCulture,
|
||||||
_settings.FileNameFormat,
|
_settings.FileNameFormat,
|
||||||
|
@ -63,6 +63,7 @@ namespace ImageResizer.Properties
|
|||||||
|
|
||||||
public IEnumerable<ResizeSize> AllSizes { get; set; }
|
public IEnumerable<ResizeSize> AllSizes { get; set; }
|
||||||
|
|
||||||
|
// Using OrdinalIgnoreCase since this is internal and used for comparison with symbols
|
||||||
public string FileNameFormat
|
public string FileNameFormat
|
||||||
=> _fileNameFormat
|
=> _fileNameFormat
|
||||||
?? (_fileNameFormat = FileName
|
?? (_fileNameFormat = FileName
|
||||||
@ -111,6 +112,7 @@ namespace ImageResizer.Properties
|
|||||||
|
|
||||||
if (JpegQualityLevel < 1 || JpegQualityLevel > 100)
|
if (JpegQualityLevel < 1 || JpegQualityLevel > 100)
|
||||||
{
|
{
|
||||||
|
// Using CurrentCulture since this is user facing
|
||||||
return string.Format(CultureInfo.CurrentCulture, Resources.ValueMustBeBetween, 1, 100);
|
return string.Format(CultureInfo.CurrentCulture, Resources.ValueMustBeBetween, 1, 100);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -68,6 +68,7 @@ namespace Microsoft.Plugin.Calculator.UnitTests
|
|||||||
var engine = new CalculateEngine();
|
var engine = new CalculateEngine();
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
|
// Using InvariantCulture since this is internal
|
||||||
var result = engine.Interpret(input, CultureInfo.InvariantCulture);
|
var result = engine.Interpret(input, CultureInfo.InvariantCulture);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
@ -84,6 +85,7 @@ namespace Microsoft.Plugin.Calculator.UnitTests
|
|||||||
var engine = new CalculateEngine();
|
var engine = new CalculateEngine();
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
|
// Using InvariantCulture since this is internal
|
||||||
var result = engine.Interpret(input, CultureInfo.InvariantCulture);
|
var result = engine.Interpret(input, CultureInfo.InvariantCulture);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
@ -140,6 +142,7 @@ namespace Microsoft.Plugin.Calculator.UnitTests
|
|||||||
var engine = new CalculateEngine();
|
var engine = new CalculateEngine();
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
|
// Using InvariantCulture since this is internal
|
||||||
var result = engine.Interpret(input, CultureInfo.InvariantCulture);
|
var result = engine.Interpret(input, CultureInfo.InvariantCulture);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
@ -158,6 +161,7 @@ namespace Microsoft.Plugin.Calculator.UnitTests
|
|||||||
var engine = new CalculateEngine();
|
var engine = new CalculateEngine();
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
|
// Using InvariantCulture since this is internal
|
||||||
var result = engine.Interpret(input, CultureInfo.InvariantCulture);
|
var result = engine.Interpret(input, CultureInfo.InvariantCulture);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
|
@ -15,6 +15,7 @@ namespace Microsoft.Plugin.Calculator
|
|||||||
|
|
||||||
public CalculateResult Interpret(string input)
|
public CalculateResult Interpret(string input)
|
||||||
{
|
{
|
||||||
|
// Using CurrentCulture this is user facing
|
||||||
return Interpret(input, CultureInfo.CurrentCulture);
|
return Interpret(input, CultureInfo.CurrentCulture);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -35,6 +35,7 @@ namespace Microsoft.Plugin.Calculator
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
// Using CurrentUICulture since this is user facing
|
||||||
var result = CalculateEngine.Interpret(query.Search, CultureInfo.CurrentUICulture);
|
var result = CalculateEngine.Interpret(query.Search, CultureInfo.CurrentUICulture);
|
||||||
|
|
||||||
// This could happen for some incorrect queries, like pi(2)
|
// This could happen for some incorrect queries, like pi(2)
|
||||||
|
@ -27,6 +27,7 @@ namespace Microsoft.Plugin.Calculator
|
|||||||
|
|
||||||
return new Result
|
return new Result
|
||||||
{
|
{
|
||||||
|
// Using CurrentCulture since this is user facing
|
||||||
Title = roundedResult?.ToString(CultureInfo.CurrentCulture),
|
Title = roundedResult?.ToString(CultureInfo.CurrentCulture),
|
||||||
IcoPath = iconPath,
|
IcoPath = iconPath,
|
||||||
Score = 300,
|
Score = 300,
|
||||||
@ -45,6 +46,7 @@ namespace Microsoft.Plugin.Calculator
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
// Using CurrentUICulture since this is user facing
|
||||||
Clipboard.SetText(roundedResult?.ToString(CultureInfo.CurrentUICulture.NumberFormat));
|
Clipboard.SetText(roundedResult?.ToString(CultureInfo.CurrentUICulture.NumberFormat));
|
||||||
ret = true;
|
ret = true;
|
||||||
}
|
}
|
||||||
|
@ -69,8 +69,10 @@ namespace Microsoft.Plugin.Folder.UnitTests
|
|||||||
{
|
{
|
||||||
// Setup
|
// Setup
|
||||||
var folderHelperMock = new Mock<IFolderHelper>();
|
var folderHelperMock = new Mock<IFolderHelper>();
|
||||||
|
|
||||||
|
// Using Ordinal since this is used with paths
|
||||||
folderHelperMock.Setup(r => r.IsDriveOrSharedFolder(It.IsAny<string>()))
|
folderHelperMock.Setup(r => r.IsDriveOrSharedFolder(It.IsAny<string>()))
|
||||||
.Returns<string>(s => s.StartsWith("C:", StringComparison.CurrentCultureIgnoreCase));
|
.Returns<string>(s => s.StartsWith("C:", StringComparison.Ordinal));
|
||||||
|
|
||||||
var itemResultMock = new Mock<IItemResult>();
|
var itemResultMock = new Mock<IItemResult>();
|
||||||
|
|
||||||
|
@ -73,15 +73,17 @@ namespace Microsoft.Plugin.Folder.UnitTests
|
|||||||
switch (isRecursive)
|
switch (isRecursive)
|
||||||
{
|
{
|
||||||
case false:
|
case false:
|
||||||
folderSearchFunc = s => s.Equals(search, StringComparison.CurrentCultureIgnoreCase);
|
// Using Ordinal since this is internal
|
||||||
|
folderSearchFunc = s => s.Equals(search, StringComparison.Ordinal);
|
||||||
|
|
||||||
var regexSearch = TrimDirectoryEnd(search);
|
var regexSearch = TrimDirectoryEnd(search);
|
||||||
|
|
||||||
fileSearchFunc = s => Regex.IsMatch(s, $"^{Regex.Escape(regexSearch)}[^\\\\]*$");
|
fileSearchFunc = s => Regex.IsMatch(s, $"^{Regex.Escape(regexSearch)}[^\\\\]*$");
|
||||||
break;
|
break;
|
||||||
case true:
|
case true:
|
||||||
folderSearchFunc = s => s.StartsWith(search, StringComparison.CurrentCultureIgnoreCase);
|
// Using Ordinal since this is internal
|
||||||
fileSearchFunc = s => s.StartsWith(search, StringComparison.CurrentCultureIgnoreCase);
|
folderSearchFunc = s => s.StartsWith(search, StringComparison.Ordinal);
|
||||||
|
fileSearchFunc = s => s.StartsWith(search, StringComparison.Ordinal);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -17,6 +17,8 @@ namespace Microsoft.Plugin.Folder.Sources
|
|||||||
private static IEnumerable<string> InitialDriverList()
|
private static IEnumerable<string> InitialDriverList()
|
||||||
{
|
{
|
||||||
var directorySeparatorChar = System.IO.Path.DirectorySeparatorChar;
|
var directorySeparatorChar = System.IO.Path.DirectorySeparatorChar;
|
||||||
|
|
||||||
|
// Using InvariantCulture since this is internal
|
||||||
return DriveInfo.GetDrives()
|
return DriveInfo.GetDrives()
|
||||||
.Select(driver => driver.Name.ToLower(CultureInfo.InvariantCulture).TrimEnd(directorySeparatorChar));
|
.Select(driver => driver.Name.ToLower(CultureInfo.InvariantCulture).TrimEnd(directorySeparatorChar));
|
||||||
}
|
}
|
||||||
|
@ -27,6 +27,7 @@ namespace Microsoft.Plugin.Folder.Sources
|
|||||||
throw new ArgumentNullException(paramName: nameof(query));
|
throw new ArgumentNullException(paramName: nameof(query));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Using OrdinalIgnoreCase since this is internal
|
||||||
return _folderLinks.FolderLinks()
|
return _folderLinks.FolderLinks()
|
||||||
.Where(x => x.Nickname.StartsWith(query, StringComparison.OrdinalIgnoreCase));
|
.Where(x => x.Nickname.StartsWith(query, StringComparison.OrdinalIgnoreCase));
|
||||||
}
|
}
|
||||||
@ -38,7 +39,8 @@ namespace Microsoft.Plugin.Folder.Sources
|
|||||||
throw new ArgumentNullException(nameof(search));
|
throw new ArgumentNullException(nameof(search));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (search.StartsWith(@"\\", StringComparison.InvariantCulture))
|
// Using Ordinal this is internal and we're comparing symbols
|
||||||
|
if (search.StartsWith(@"\\", StringComparison.Ordinal))
|
||||||
{ // share folder
|
{ // share folder
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -48,6 +50,7 @@ namespace Microsoft.Plugin.Folder.Sources
|
|||||||
|
|
||||||
if (driverNames.Any())
|
if (driverNames.Any())
|
||||||
{
|
{
|
||||||
|
// Using InvariantCultureIgnoreCase since this is searching for drive names
|
||||||
if (driverNames.Any(dn => search.StartsWith(dn, StringComparison.InvariantCultureIgnoreCase)))
|
if (driverNames.Any(dn => search.StartsWith(dn, StringComparison.InvariantCultureIgnoreCase)))
|
||||||
{
|
{
|
||||||
// normal drive letter
|
// normal drive letter
|
||||||
|
@ -60,6 +60,7 @@ namespace Microsoft.Plugin.Folder.Sources
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Remove everything after the last \ and add *
|
// Remove everything after the last \ and add *
|
||||||
|
// Using InvariantCulture since this is internal
|
||||||
incompleteName = search.Substring(index + 1)
|
incompleteName = search.Substring(index + 1)
|
||||||
.ToLower(CultureInfo.InvariantCulture) + "*";
|
.ToLower(CultureInfo.InvariantCulture) + "*";
|
||||||
search = search.Substring(0, index + 1);
|
search = search.Substring(0, index + 1);
|
||||||
@ -71,7 +72,8 @@ namespace Microsoft.Plugin.Folder.Sources
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
// folder exist, add \ at the end of doesn't exist
|
// folder exist, add \ at the end of doesn't exist
|
||||||
if (!search.EndsWith(@"\", StringComparison.InvariantCulture))
|
// Using Ordinal since this is internal and is used for a symbol
|
||||||
|
if (!search.EndsWith(@"\", StringComparison.Ordinal))
|
||||||
{
|
{
|
||||||
search += @"\";
|
search += @"\";
|
||||||
}
|
}
|
||||||
|
@ -24,6 +24,8 @@ namespace Microsoft.Plugin.Folder.Sources.Result
|
|||||||
var result = new Wox.Plugin.Result(StringMatcher.FuzzySearch(Search, Path.GetFileName(FilePath)).MatchData)
|
var result = new Wox.Plugin.Result(StringMatcher.FuzzySearch(Search, Path.GetFileName(FilePath)).MatchData)
|
||||||
{
|
{
|
||||||
Title = Title,
|
Title = Title,
|
||||||
|
|
||||||
|
// Using CurrentCulture since this is user facing
|
||||||
SubTitle = string.Format(CultureInfo.CurrentCulture, Properties.Resources.wox_plugin_folder_select_file_result_subtitle, FilePath),
|
SubTitle = string.Format(CultureInfo.CurrentCulture, Properties.Resources.wox_plugin_folder_select_file_result_subtitle, FilePath),
|
||||||
IcoPath = FilePath,
|
IcoPath = FilePath,
|
||||||
Action = c => ShellAction.Execute(FilePath, contextApi),
|
Action = c => ShellAction.Execute(FilePath, contextApi),
|
||||||
|
@ -37,6 +37,8 @@ namespace Microsoft.Plugin.Folder.Sources.Result
|
|||||||
{
|
{
|
||||||
Title = Title,
|
Title = Title,
|
||||||
IcoPath = Path,
|
IcoPath = Path,
|
||||||
|
|
||||||
|
// Using CurrentCulture since this is user facing
|
||||||
SubTitle = string.Format(CultureInfo.CurrentCulture, Properties.Resources.wox_plugin_folder_select_folder_result_subtitle, Subtitle),
|
SubTitle = string.Format(CultureInfo.CurrentCulture, Properties.Resources.wox_plugin_folder_select_folder_result_subtitle, Subtitle),
|
||||||
QueryTextDisplay = Path,
|
QueryTextDisplay = Path,
|
||||||
ContextData = new SearchResult { Type = ResultType.Folder, FullPath = Path },
|
ContextData = new SearchResult { Type = ResultType.Folder, FullPath = Path },
|
||||||
|
@ -23,6 +23,8 @@ namespace Microsoft.Plugin.Folder.Sources.Result
|
|||||||
{
|
{
|
||||||
Title = Properties.Resources.Microsoft_plugin_folder_truncation_warning_title,
|
Title = Properties.Resources.Microsoft_plugin_folder_truncation_warning_title,
|
||||||
QueryTextDisplay = Search,
|
QueryTextDisplay = Search,
|
||||||
|
|
||||||
|
// Using CurrentCulture since this is user facing
|
||||||
SubTitle = string.Format(CultureInfo.CurrentCulture, Properties.Resources.Microsoft_plugin_folder_truncation_warning_subtitle, PostTruncationCount, PreTruncationCount),
|
SubTitle = string.Format(CultureInfo.CurrentCulture, Properties.Resources.Microsoft_plugin_folder_truncation_warning_subtitle, PostTruncationCount, PreTruncationCount),
|
||||||
IcoPath = WarningIconPath,
|
IcoPath = WarningIconPath,
|
||||||
};
|
};
|
||||||
|
@ -39,7 +39,8 @@ namespace Microsoft.Plugin.Folder.Sources
|
|||||||
var sanitizedPath = Regex.Replace(search, @"[\/\\]+", "\\");
|
var sanitizedPath = Regex.Replace(search, @"[\/\\]+", "\\");
|
||||||
|
|
||||||
// A network path must start with \\
|
// A network path must start with \\
|
||||||
if (!sanitizedPath.StartsWith("\\", StringComparison.InvariantCulture))
|
// Using Ordinal since this is internal and used with a symbol
|
||||||
|
if (!sanitizedPath.StartsWith("\\", StringComparison.Ordinal))
|
||||||
{
|
{
|
||||||
return sanitizedPath;
|
return sanitizedPath;
|
||||||
}
|
}
|
||||||
|
@ -28,6 +28,8 @@ namespace Microsoft.Plugin.Folder
|
|||||||
{
|
{
|
||||||
Title = Title,
|
Title = Title,
|
||||||
IcoPath = Path,
|
IcoPath = Path,
|
||||||
|
|
||||||
|
// Using CurrentCulture since this is user facing
|
||||||
SubTitle = string.Format(CultureInfo.CurrentCulture, Properties.Resources.wox_plugin_folder_select_folder_result_subtitle, Subtitle),
|
SubTitle = string.Format(CultureInfo.CurrentCulture, Properties.Resources.wox_plugin_folder_select_folder_result_subtitle, Subtitle),
|
||||||
QueryTextDisplay = Path,
|
QueryTextDisplay = Path,
|
||||||
ContextData = new SearchResult { Type = ResultType.Folder, FullPath = Path },
|
ContextData = new SearchResult { Type = ResultType.Folder, FullPath = Path },
|
||||||
|
@ -150,6 +150,7 @@ namespace Microsoft.Plugin.Indexer
|
|||||||
string fileExtension = Path.GetExtension(path);
|
string fileExtension = Path.GetExtension(path);
|
||||||
foreach (string extension in appExtensions)
|
foreach (string extension in appExtensions)
|
||||||
{
|
{
|
||||||
|
// Using OrdinalIgnoreCase since this is internal
|
||||||
if (extension.Equals(fileExtension, StringComparison.OrdinalIgnoreCase))
|
if (extension.Equals(fileExtension, StringComparison.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
|
@ -110,6 +110,8 @@ namespace Microsoft.Plugin.Indexer
|
|||||||
foreach (var searchResult in searchResultsList)
|
foreach (var searchResult in searchResultsList)
|
||||||
{
|
{
|
||||||
var path = searchResult.Path;
|
var path = searchResult.Path;
|
||||||
|
|
||||||
|
// Using CurrentCulture since this is user facing
|
||||||
var toolTipTitle = string.Format(CultureInfo.CurrentCulture, "{0} : {1}", Properties.Resources.Microsoft_plugin_indexer_name, searchResult.Title);
|
var toolTipTitle = string.Format(CultureInfo.CurrentCulture, "{0} : {1}", Properties.Resources.Microsoft_plugin_indexer_name, searchResult.Title);
|
||||||
var toolTipText = string.Format(CultureInfo.CurrentCulture, "{0} : {1}", Properties.Resources.Microsoft_plugin_indexer_path, path);
|
var toolTipText = string.Format(CultureInfo.CurrentCulture, "{0} : {1}", Properties.Resources.Microsoft_plugin_indexer_path, path);
|
||||||
string workingDir = null;
|
string workingDir = null;
|
||||||
|
@ -59,6 +59,7 @@ namespace Microsoft.Plugin.Indexer.SearchHelper
|
|||||||
}
|
}
|
||||||
|
|
||||||
// # is URI syntax for the fragment component, need to be encoded so LocalPath returns complete path
|
// # is URI syntax for the fragment component, need to be encoded so LocalPath returns complete path
|
||||||
|
// Using OrdinalIgnoreCase since this is internal and used with symbols
|
||||||
var string_path = ((string)oleDBResult.FieldData[0]).Replace("#", "%23", StringComparison.OrdinalIgnoreCase);
|
var string_path = ((string)oleDBResult.FieldData[0]).Replace("#", "%23", StringComparison.OrdinalIgnoreCase);
|
||||||
var uri_path = new Uri(string_path);
|
var uri_path = new Uri(string_path);
|
||||||
|
|
||||||
@ -89,10 +90,11 @@ namespace Microsoft.Plugin.Indexer.SearchHelper
|
|||||||
// convert file pattern if it is not '*'. Don't create restriction for '*' as it includes all files.
|
// convert file pattern if it is not '*'. Don't create restriction for '*' as it includes all files.
|
||||||
if (pattern != "*")
|
if (pattern != "*")
|
||||||
{
|
{
|
||||||
pattern = pattern.Replace("*", "%", StringComparison.InvariantCulture);
|
// Using Ordinal since these are internal and used with symbols
|
||||||
pattern = pattern.Replace("?", "_", StringComparison.InvariantCulture);
|
pattern = pattern.Replace("*", "%", StringComparison.Ordinal);
|
||||||
|
pattern = pattern.Replace("?", "_", StringComparison.Ordinal);
|
||||||
|
|
||||||
if (pattern.Contains("%", StringComparison.InvariantCulture) || pattern.Contains("_", StringComparison.InvariantCulture))
|
if (pattern.Contains("%", StringComparison.Ordinal) || pattern.Contains("_", StringComparison.Ordinal))
|
||||||
{
|
{
|
||||||
queryHelper.QueryWhereRestrictions += " AND System.FileName LIKE '" + pattern + "' ";
|
queryHelper.QueryWhereRestrictions += " AND System.FileName LIKE '" + pattern + "' ";
|
||||||
}
|
}
|
||||||
|
@ -567,6 +567,7 @@ namespace Microsoft.Plugin.Program.UnitTests.Programs
|
|||||||
var result = _cmderRunCommand.Result("cmder", string.Empty, mock.Object);
|
var result = _cmderRunCommand.Result("cmder", string.Empty, mock.Object);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
|
// Using Ordinal since this is used internally
|
||||||
Assert.IsTrue(result.Title.Equals(_cmderRunCommand.Name, StringComparison.Ordinal));
|
Assert.IsTrue(result.Title.Equals(_cmderRunCommand.Name, StringComparison.Ordinal));
|
||||||
Assert.IsFalse(result.Title.Equals(_cmderRunCommand.Description, StringComparison.Ordinal));
|
Assert.IsFalse(result.Title.Equals(_cmderRunCommand.Description, StringComparison.Ordinal));
|
||||||
}
|
}
|
||||||
|
@ -23,6 +23,7 @@ namespace Microsoft.Plugin.Program
|
|||||||
{
|
{
|
||||||
for (var i = 1; i < query.Terms.Count; i++)
|
for (var i = 1; i < query.Terms.Count; i++)
|
||||||
{
|
{
|
||||||
|
// Using Ordinal since this is internal and used with a symbol
|
||||||
if (!string.Equals(query.Terms[i], DoubleDash, StringComparison.Ordinal))
|
if (!string.Equals(query.Terms[i], DoubleDash, StringComparison.Ordinal))
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
|
@ -204,6 +204,7 @@ namespace Microsoft.Plugin.Program.Programs
|
|||||||
{
|
{
|
||||||
if (obj is UWP uwp)
|
if (obj is UWP uwp)
|
||||||
{
|
{
|
||||||
|
// Using CurrentCultureIgnoreCase since this is used with FamilyName
|
||||||
return FamilyName.Equals(uwp.FamilyName, StringComparison.CurrentCultureIgnoreCase);
|
return FamilyName.Equals(uwp.FamilyName, StringComparison.CurrentCultureIgnoreCase);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -214,6 +215,7 @@ namespace Microsoft.Plugin.Program.Programs
|
|||||||
|
|
||||||
public override int GetHashCode()
|
public override int GetHashCode()
|
||||||
{
|
{
|
||||||
|
// Using CurrentCultureIgnoreCase since this is used with FamilyName
|
||||||
return FamilyName.GetHashCode(StringComparison.CurrentCultureIgnoreCase);
|
return FamilyName.GetHashCode(StringComparison.CurrentCultureIgnoreCase);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -111,6 +111,7 @@ namespace Microsoft.Plugin.Program.Programs
|
|||||||
result.Title = DisplayName;
|
result.Title = DisplayName;
|
||||||
result.SetTitleHighlightData(StringMatcher.FuzzySearch(query, Name).MatchData);
|
result.SetTitleHighlightData(StringMatcher.FuzzySearch(query, Name).MatchData);
|
||||||
|
|
||||||
|
// Using CurrentCulture since this is user facing
|
||||||
var toolTipTitle = string.Format(CultureInfo.CurrentCulture, "{0}: {1}", Properties.Resources.powertoys_run_plugin_program_file_name, result.Title);
|
var toolTipTitle = string.Format(CultureInfo.CurrentCulture, "{0}: {1}", Properties.Resources.powertoys_run_plugin_program_file_name, result.Title);
|
||||||
var toolTipText = string.Format(CultureInfo.CurrentCulture, "{0}: {1}", Properties.Resources.powertoys_run_plugin_program_file_path, Package.Location);
|
var toolTipText = string.Format(CultureInfo.CurrentCulture, "{0}: {1}", Properties.Resources.powertoys_run_plugin_program_file_path, Package.Location);
|
||||||
result.ToolTipData = new ToolTipData(toolTipTitle, toolTipText);
|
result.ToolTipData = new ToolTipData(toolTipTitle, toolTipText);
|
||||||
@ -263,6 +264,8 @@ namespace Microsoft.Plugin.Program.Programs
|
|||||||
if (File.Exists(manifest))
|
if (File.Exists(manifest))
|
||||||
{
|
{
|
||||||
var file = File.ReadAllText(manifest);
|
var file = File.ReadAllText(manifest);
|
||||||
|
|
||||||
|
// Using OrdinalIgnoreCase since this is used internally
|
||||||
if (file.Contains("TrustLevel=\"mediumIL\"", StringComparison.OrdinalIgnoreCase))
|
if (file.Contains("TrustLevel=\"mediumIL\"", StringComparison.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
@ -276,12 +279,16 @@ namespace Microsoft.Plugin.Program.Programs
|
|||||||
internal string ResourceFromPri(string packageFullName, string resourceReference)
|
internal string ResourceFromPri(string packageFullName, string resourceReference)
|
||||||
{
|
{
|
||||||
const string prefix = "ms-resource:";
|
const string prefix = "ms-resource:";
|
||||||
|
|
||||||
|
// Using OrdinalIgnoreCase since this is used internally
|
||||||
if (!string.IsNullOrWhiteSpace(resourceReference) && resourceReference.StartsWith(prefix, StringComparison.OrdinalIgnoreCase))
|
if (!string.IsNullOrWhiteSpace(resourceReference) && resourceReference.StartsWith(prefix, StringComparison.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
// magic comes from @talynone
|
// magic comes from @talynone
|
||||||
// https://github.com/talynone/Wox.Plugin.WindowsUniversalAppLauncher/blob/master/StoreAppLauncher/Helpers/NativeApiHelper.cs#L139-L153
|
// https://github.com/talynone/Wox.Plugin.WindowsUniversalAppLauncher/blob/master/StoreAppLauncher/Helpers/NativeApiHelper.cs#L139-L153
|
||||||
string key = resourceReference.Substring(prefix.Length);
|
string key = resourceReference.Substring(prefix.Length);
|
||||||
string parsed;
|
string parsed;
|
||||||
|
|
||||||
|
// Using Ordinal/OrdinalIgnorcase since these are used internally
|
||||||
if (key.StartsWith("//", StringComparison.Ordinal))
|
if (key.StartsWith("//", StringComparison.Ordinal))
|
||||||
{
|
{
|
||||||
parsed = prefix + key;
|
parsed = prefix + key;
|
||||||
@ -540,6 +547,8 @@ namespace Microsoft.Plugin.Program.Programs
|
|||||||
// windows 8 https://msdn.microsoft.com/en-us/library/windows/apps/br211475.aspx
|
// windows 8 https://msdn.microsoft.com/en-us/library/windows/apps/br211475.aspx
|
||||||
string path;
|
string path;
|
||||||
bool isLogoUriSet;
|
bool isLogoUriSet;
|
||||||
|
|
||||||
|
// Using Ordinal since this is used internally with uri
|
||||||
if (uri.Contains("\\", StringComparison.Ordinal))
|
if (uri.Contains("\\", StringComparison.Ordinal))
|
||||||
{
|
{
|
||||||
path = Path.Combine(Package.Location, uri);
|
path = Path.Combine(Package.Location, uri);
|
||||||
@ -598,6 +607,7 @@ namespace Microsoft.Plugin.Program.Programs
|
|||||||
string currentBackgroundColor;
|
string currentBackgroundColor;
|
||||||
if (BackgroundColor == "transparent")
|
if (BackgroundColor == "transparent")
|
||||||
{
|
{
|
||||||
|
// Using InvariantCulture since this is internal
|
||||||
currentBackgroundColor = SystemParameters.WindowGlassBrush.ToString(CultureInfo.InvariantCulture);
|
currentBackgroundColor = SystemParameters.WindowGlassBrush.ToString(CultureInfo.InvariantCulture);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -98,6 +98,7 @@ namespace Microsoft.Plugin.Program.Programs
|
|||||||
// To Filter PWAs when the user searches for the main application
|
// To Filter PWAs when the user searches for the main application
|
||||||
// All Chromium based applications contain the --app-id argument
|
// All Chromium based applications contain the --app-id argument
|
||||||
// Reference : https://codereview.chromium.org/399045/show
|
// Reference : https://codereview.chromium.org/399045/show
|
||||||
|
// Using Ordinal IgnoreCase since this is used internally
|
||||||
bool isWebApplication = FullPath.Contains(ProxyWebApp, StringComparison.OrdinalIgnoreCase) && Arguments.Contains(AppIdArgument, StringComparison.OrdinalIgnoreCase);
|
bool isWebApplication = FullPath.Contains(ProxyWebApp, StringComparison.OrdinalIgnoreCase) && Arguments.Contains(AppIdArgument, StringComparison.OrdinalIgnoreCase);
|
||||||
return isWebApplication;
|
return isWebApplication;
|
||||||
}
|
}
|
||||||
@ -121,6 +122,7 @@ namespace Microsoft.Plugin.Program.Programs
|
|||||||
// check if any space separated query is a part of the app name or path name
|
// check if any space separated query is a part of the app name or path name
|
||||||
foreach (var subquery in subqueries)
|
foreach (var subquery in subqueries)
|
||||||
{
|
{
|
||||||
|
// Using OrdinalIgnoreCase since these are used internally
|
||||||
if (FullPath.Contains(subquery, StringComparison.OrdinalIgnoreCase))
|
if (FullPath.Contains(subquery, StringComparison.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
pathContainsQuery = true;
|
pathContainsQuery = true;
|
||||||
@ -172,6 +174,7 @@ namespace Microsoft.Plugin.Program.Programs
|
|||||||
{
|
{
|
||||||
if (query != null && AppType == ApplicationType.RunCommand)
|
if (query != null && AppType == ApplicationType.RunCommand)
|
||||||
{
|
{
|
||||||
|
// Using OrdinalIgnoreCase since this is used internally
|
||||||
if (!query.Equals(Name, StringComparison.OrdinalIgnoreCase) && !query.Equals(ExecutableName, StringComparison.OrdinalIgnoreCase))
|
if (!query.Equals(Name, StringComparison.OrdinalIgnoreCase) && !query.Equals(ExecutableName, StringComparison.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
@ -235,6 +238,7 @@ namespace Microsoft.Plugin.Program.Programs
|
|||||||
result.Title = Name;
|
result.Title = Name;
|
||||||
result.SetTitleHighlightData(StringMatcher.FuzzySearch(query, Name).MatchData);
|
result.SetTitleHighlightData(StringMatcher.FuzzySearch(query, Name).MatchData);
|
||||||
|
|
||||||
|
// Using CurrentCulture since this is user facing
|
||||||
var toolTipTitle = string.Format(CultureInfo.CurrentCulture, "{0}: {1}", Properties.Resources.powertoys_run_plugin_program_file_name, result.Title);
|
var toolTipTitle = string.Format(CultureInfo.CurrentCulture, "{0}: {1}", Properties.Resources.powertoys_run_plugin_program_file_name, result.Title);
|
||||||
var toolTipText = string.Format(CultureInfo.CurrentCulture, "{0}: {1}", Properties.Resources.powertoys_run_plugin_program_file_path, FullPath);
|
var toolTipText = string.Format(CultureInfo.CurrentCulture, "{0}: {1}", Properties.Resources.powertoys_run_plugin_program_file_path, FullPath);
|
||||||
result.ToolTipData = new ToolTipData(toolTipTitle, toolTipText);
|
result.ToolTipData = new ToolTipData(toolTipTitle, toolTipText);
|
||||||
@ -342,6 +346,8 @@ namespace Microsoft.Plugin.Program.Programs
|
|||||||
Name = Path.GetFileNameWithoutExtension(path),
|
Name = Path.GetFileNameWithoutExtension(path),
|
||||||
ExecutableName = Path.GetFileName(path),
|
ExecutableName = Path.GetFileName(path),
|
||||||
IcoPath = path,
|
IcoPath = path,
|
||||||
|
|
||||||
|
// Using CurrentCulture since this is user facing
|
||||||
FullPath = path.ToLower(CultureInfo.CurrentCulture),
|
FullPath = path.ToLower(CultureInfo.CurrentCulture),
|
||||||
UniqueIdentifier = path,
|
UniqueIdentifier = path,
|
||||||
ParentDirectory = Directory.GetParent(path).FullName,
|
ParentDirectory = Directory.GetParent(path).FullName,
|
||||||
@ -384,6 +390,7 @@ namespace Microsoft.Plugin.Program.Programs
|
|||||||
|
|
||||||
foreach (string line in lines)
|
foreach (string line in lines)
|
||||||
{
|
{
|
||||||
|
// Using OrdinalIgnoreCase since this is used internally
|
||||||
if (line.StartsWith(urlPrefix, StringComparison.OrdinalIgnoreCase))
|
if (line.StartsWith(urlPrefix, StringComparison.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
urlPath = line.Substring(urlPrefix.Length);
|
urlPath = line.Substring(urlPrefix.Length);
|
||||||
@ -407,6 +414,7 @@ namespace Microsoft.Plugin.Program.Programs
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Using OrdinalIgnoreCase since this is used internally
|
||||||
if (line.StartsWith(iconFilePrefix, StringComparison.OrdinalIgnoreCase))
|
if (line.StartsWith(iconFilePrefix, StringComparison.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
iconPath = line.Substring(iconFilePrefix.Length);
|
iconPath = line.Substring(iconFilePrefix.Length);
|
||||||
@ -465,6 +473,8 @@ namespace Microsoft.Plugin.Program.Programs
|
|||||||
if (File.Exists(target) || Directory.Exists(target))
|
if (File.Exists(target) || Directory.Exists(target))
|
||||||
{
|
{
|
||||||
program.LnkResolvedPath = program.FullPath;
|
program.LnkResolvedPath = program.FullPath;
|
||||||
|
|
||||||
|
// Using CurrentCulture since this is user facing
|
||||||
program.FullPath = Path.GetFullPath(target).ToLower(CultureInfo.CurrentCulture);
|
program.FullPath = Path.GetFullPath(target).ToLower(CultureInfo.CurrentCulture);
|
||||||
program.AppType = GetAppTypeFromPath(target);
|
program.AppType = GetAppTypeFromPath(target);
|
||||||
|
|
||||||
@ -543,6 +553,7 @@ namespace Microsoft.Plugin.Program.Programs
|
|||||||
string extension = Extension(path);
|
string extension = Extension(path);
|
||||||
ApplicationType appType = ApplicationType.GenericFile;
|
ApplicationType appType = ApplicationType.GenericFile;
|
||||||
|
|
||||||
|
// Using OrdinalIgnoreCase since these are used internally with paths
|
||||||
if (ExecutableApplicationExtensions.Contains(extension))
|
if (ExecutableApplicationExtensions.Contains(extension))
|
||||||
{
|
{
|
||||||
appType = ApplicationType.Win32Application;
|
appType = ApplicationType.Win32Application;
|
||||||
@ -677,6 +688,7 @@ namespace Microsoft.Plugin.Program.Programs
|
|||||||
|
|
||||||
private static string Extension(string path)
|
private static string Extension(string path)
|
||||||
{
|
{
|
||||||
|
// Using CurrentCulture since this is user facing
|
||||||
var extension = Path.GetExtension(path)?.ToLower(CultureInfo.CurrentCulture);
|
var extension = Path.GetExtension(path)?.ToLower(CultureInfo.CurrentCulture);
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(extension))
|
if (!string.IsNullOrEmpty(extension))
|
||||||
@ -734,6 +746,7 @@ namespace Microsoft.Plugin.Program.Programs
|
|||||||
.Distinct()
|
.Distinct()
|
||||||
.ToArray();
|
.ToArray();
|
||||||
|
|
||||||
|
// Using OrdinalIgnoreCase since this is used internally with paths
|
||||||
var programs1 = allPaths.AsParallel().Where(p => Extension(p).Equals(ShortcutExtension, StringComparison.OrdinalIgnoreCase)).Select(LnkProgram);
|
var programs1 = allPaths.AsParallel().Where(p => Extension(p).Equals(ShortcutExtension, StringComparison.OrdinalIgnoreCase)).Select(LnkProgram);
|
||||||
var programs2 = allPaths.AsParallel().Where(p => Extension(p).Equals(ApplicationReferenceExtension, StringComparison.OrdinalIgnoreCase)).Select(CreateWin32Program);
|
var programs2 = allPaths.AsParallel().Where(p => Extension(p).Equals(ApplicationReferenceExtension, StringComparison.OrdinalIgnoreCase)).Select(CreateWin32Program);
|
||||||
var programs3 = allPaths.AsParallel().Where(p => Extension(p).Equals(InternetShortcutExtension, StringComparison.OrdinalIgnoreCase)).Select(InternetShortcutProgram);
|
var programs3 = allPaths.AsParallel().Where(p => Extension(p).Equals(InternetShortcutExtension, StringComparison.OrdinalIgnoreCase)).Select(InternetShortcutProgram);
|
||||||
@ -768,6 +781,7 @@ namespace Microsoft.Plugin.Program.Programs
|
|||||||
.Distinct()
|
.Distinct()
|
||||||
.ToArray();
|
.ToArray();
|
||||||
|
|
||||||
|
// Using OrdinalIgnoreCase since this is used internally with paths
|
||||||
var programs1 = paths.AsParallel().Where(p => Extension(p).Equals(ShortcutExtension, StringComparison.OrdinalIgnoreCase)).Select(LnkProgram);
|
var programs1 = paths.AsParallel().Where(p => Extension(p).Equals(ShortcutExtension, StringComparison.OrdinalIgnoreCase)).Select(LnkProgram);
|
||||||
var programs2 = paths.AsParallel().Where(p => Extension(p).Equals(ApplicationReferenceExtension, StringComparison.OrdinalIgnoreCase)).Select(CreateWin32Program);
|
var programs2 = paths.AsParallel().Where(p => Extension(p).Equals(ApplicationReferenceExtension, StringComparison.OrdinalIgnoreCase)).Select(CreateWin32Program);
|
||||||
var programs3 = paths.AsParallel().Where(p => Extension(p).Equals(InternetShortcutExtension, StringComparison.OrdinalIgnoreCase)).Select(InternetShortcutProgram);
|
var programs3 = paths.AsParallel().Where(p => Extension(p).Equals(InternetShortcutExtension, StringComparison.OrdinalIgnoreCase)).Select(InternetShortcutProgram);
|
||||||
@ -908,6 +922,7 @@ namespace Microsoft.Plugin.Program.Programs
|
|||||||
&& !string.IsNullOrEmpty(app1.ExecutableName) && !string.IsNullOrEmpty(app2.ExecutableName)
|
&& !string.IsNullOrEmpty(app1.ExecutableName) && !string.IsNullOrEmpty(app2.ExecutableName)
|
||||||
&& !string.IsNullOrEmpty(app1.FullPath) && !string.IsNullOrEmpty(app2.FullPath))
|
&& !string.IsNullOrEmpty(app1.FullPath) && !string.IsNullOrEmpty(app2.FullPath))
|
||||||
{
|
{
|
||||||
|
// Using OrdinalIgnoreCase since this is used internally
|
||||||
return app1.Name.Equals(app2.Name, StringComparison.OrdinalIgnoreCase)
|
return app1.Name.Equals(app2.Name, StringComparison.OrdinalIgnoreCase)
|
||||||
&& app1.ExecutableName.Equals(app2.ExecutableName, StringComparison.OrdinalIgnoreCase)
|
&& app1.ExecutableName.Equals(app2.ExecutableName, StringComparison.OrdinalIgnoreCase)
|
||||||
&& app1.FullPath.Equals(app2.FullPath, StringComparison.OrdinalIgnoreCase);
|
&& app1.FullPath.Equals(app2.FullPath, StringComparison.OrdinalIgnoreCase);
|
||||||
@ -924,6 +939,8 @@ namespace Microsoft.Plugin.Program.Programs
|
|||||||
int fullPathPrime = 31;
|
int fullPathPrime = 31;
|
||||||
|
|
||||||
int result = 1;
|
int result = 1;
|
||||||
|
|
||||||
|
// Using Ordinal since this is used internally
|
||||||
result = (result * namePrime) + obj.Name.ToUpperInvariant().GetHashCode(StringComparison.Ordinal);
|
result = (result * namePrime) + obj.Name.ToUpperInvariant().GetHashCode(StringComparison.Ordinal);
|
||||||
result = (result * executablePrime) + obj.ExecutableName.ToUpperInvariant().GetHashCode(StringComparison.Ordinal);
|
result = (result * executablePrime) + obj.ExecutableName.ToUpperInvariant().GetHashCode(StringComparison.Ordinal);
|
||||||
result = (result * fullPathPrime) + obj.FullPath.ToUpperInvariant().GetHashCode(StringComparison.Ordinal);
|
result = (result * fullPathPrime) + obj.FullPath.ToUpperInvariant().GetHashCode(StringComparison.Ordinal);
|
||||||
|
@ -24,6 +24,7 @@ namespace Microsoft.Plugin.Program.Storage
|
|||||||
// To obtain the last event associated with a particular app.
|
// To obtain the last event associated with a particular app.
|
||||||
while (eventHandlingQueue.TryPeek(out string currentAppPath))
|
while (eventHandlingQueue.TryPeek(out string currentAppPath))
|
||||||
{
|
{
|
||||||
|
// Using OrdinalIgnoreCase since this is used internally with paths
|
||||||
if (string.IsNullOrEmpty(previousAppPath) || previousAppPath.Equals(currentAppPath, StringComparison.OrdinalIgnoreCase))
|
if (string.IsNullOrEmpty(previousAppPath) || previousAppPath.Equals(currentAppPath, StringComparison.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
// To dequeue a path only if it is the first one in the queue or if the path was the same as thre previous one (to avoid trying to create apps on duplicate events)
|
// To dequeue a path only if it is the first one in the queue or if the path was the same as thre previous one (to avoid trying to create apps on duplicate events)
|
||||||
|
@ -145,6 +145,7 @@ namespace Microsoft.Plugin.Program.Storage
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
// To mitigate the issue of not having a FullPath for a shortcut app, we iterate through the items and find the app with the same hashcode.
|
// To mitigate the issue of not having a FullPath for a shortcut app, we iterate through the items and find the app with the same hashcode.
|
||||||
|
// Using OrdinalIgnoreCase since this is used internally
|
||||||
if (extension.Equals(LnkExtension, StringComparison.OrdinalIgnoreCase))
|
if (extension.Equals(LnkExtension, StringComparison.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
app = GetAppWithSameLnkResolvedPath(path);
|
app = GetAppWithSameLnkResolvedPath(path);
|
||||||
@ -174,6 +175,7 @@ namespace Microsoft.Plugin.Program.Storage
|
|||||||
{
|
{
|
||||||
foreach (Win32Program app in Items)
|
foreach (Win32Program app in Items)
|
||||||
{
|
{
|
||||||
|
// Using CurrentCultureIgnoreCase since application names could be dependent on currentculture See: https://github.com/microsoft/PowerToys/pull/5847/files#r468245190
|
||||||
if (name.Equals(app.Name, StringComparison.CurrentCultureIgnoreCase) && executableName.Equals(app.ExecutableName, StringComparison.CurrentCultureIgnoreCase))
|
if (name.Equals(app.Name, StringComparison.CurrentCultureIgnoreCase) && executableName.Equals(app.ExecutableName, StringComparison.CurrentCultureIgnoreCase))
|
||||||
{
|
{
|
||||||
return app;
|
return app;
|
||||||
@ -189,7 +191,8 @@ namespace Microsoft.Plugin.Program.Storage
|
|||||||
{
|
{
|
||||||
foreach (Programs.Win32Program app in Items)
|
foreach (Programs.Win32Program app in Items)
|
||||||
{
|
{
|
||||||
if (lnkResolvedPath.ToLower(CultureInfo.CurrentCulture).Equals(app.LnkResolvedPath, StringComparison.CurrentCultureIgnoreCase))
|
// Using Invariant / OrdinalIgnoreCase since we're comparing paths
|
||||||
|
if (lnkResolvedPath.ToUpperInvariant().Equals(app.LnkResolvedPath, StringComparison.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
return app;
|
return app;
|
||||||
}
|
}
|
||||||
@ -201,7 +204,9 @@ namespace Microsoft.Plugin.Program.Storage
|
|||||||
private void OnAppCreated(object sender, FileSystemEventArgs e)
|
private void OnAppCreated(object sender, FileSystemEventArgs e)
|
||||||
{
|
{
|
||||||
string path = e.FullPath;
|
string path = e.FullPath;
|
||||||
if (!Path.GetExtension(path).Equals(UrlExtension, StringComparison.CurrentCultureIgnoreCase) && !Path.GetExtension(path).Equals(LnkExtension, StringComparison.CurrentCultureIgnoreCase))
|
|
||||||
|
// Using OrdinalIgnoreCase since we're comparing extensions
|
||||||
|
if (!Path.GetExtension(path).Equals(UrlExtension, StringComparison.OrdinalIgnoreCase) && !Path.GetExtension(path).Equals(LnkExtension, StringComparison.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
Programs.Win32Program app = Programs.Win32Program.GetAppFromPath(path);
|
Programs.Win32Program app = Programs.Win32Program.GetAppFromPath(path);
|
||||||
if (app != null)
|
if (app != null)
|
||||||
@ -214,7 +219,9 @@ namespace Microsoft.Plugin.Program.Storage
|
|||||||
private void OnAppChanged(object sender, FileSystemEventArgs e)
|
private void OnAppChanged(object sender, FileSystemEventArgs e)
|
||||||
{
|
{
|
||||||
string path = e.FullPath;
|
string path = e.FullPath;
|
||||||
if (Path.GetExtension(path).Equals(UrlExtension, StringComparison.CurrentCultureIgnoreCase) || Path.GetExtension(path).Equals(LnkExtension, StringComparison.CurrentCultureIgnoreCase))
|
|
||||||
|
// Using OrdinalIgnoreCase since we're comparing extensions
|
||||||
|
if (Path.GetExtension(path).Equals(UrlExtension, StringComparison.OrdinalIgnoreCase) || Path.GetExtension(path).Equals(LnkExtension, StringComparison.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
// When a url or lnk app is installed, multiple created and changed events are triggered.
|
// When a url or lnk app is installed, multiple created and changed events are triggered.
|
||||||
// To prevent the code from acting on the first such event (which may still be during app installation), the events are added a common queue and dequeued by a background task at regular intervals - https://github.com/microsoft/PowerToys/issues/6429.
|
// To prevent the code from acting on the first such event (which may still be during app installation), the events are added a common queue and dequeued by a background task at regular intervals - https://github.com/microsoft/PowerToys/issues/6429.
|
||||||
|
@ -84,6 +84,7 @@ namespace Microsoft.Plugin.Shell
|
|||||||
{
|
{
|
||||||
if (m.Key == cmd)
|
if (m.Key == cmd)
|
||||||
{
|
{
|
||||||
|
// Using CurrentCulture since this is user facing
|
||||||
result.SubTitle = Properties.Resources.wox_plugin_cmd_plugin_name + ": " + string.Format(CultureInfo.CurrentCulture, Properties.Resources.wox_plugin_cmd_cmd_has_been_executed_times, m.Value);
|
result.SubTitle = Properties.Resources.wox_plugin_cmd_plugin_name + ": " + string.Format(CultureInfo.CurrentCulture, Properties.Resources.wox_plugin_cmd_cmd_has_been_executed_times, m.Value);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -91,6 +92,8 @@ namespace Microsoft.Plugin.Shell
|
|||||||
var ret = new Result
|
var ret = new Result
|
||||||
{
|
{
|
||||||
Title = m.Key,
|
Title = m.Key,
|
||||||
|
|
||||||
|
// Using CurrentCulture since this is user facing
|
||||||
SubTitle = Properties.Resources.wox_plugin_cmd_plugin_name + ": " + string.Format(CultureInfo.CurrentCulture, Properties.Resources.wox_plugin_cmd_cmd_has_been_executed_times, m.Value),
|
SubTitle = Properties.Resources.wox_plugin_cmd_plugin_name + ": " + string.Format(CultureInfo.CurrentCulture, Properties.Resources.wox_plugin_cmd_cmd_has_been_executed_times, m.Value),
|
||||||
IcoPath = IconPath,
|
IcoPath = IconPath,
|
||||||
Action = c =>
|
Action = c =>
|
||||||
@ -128,6 +131,8 @@ namespace Microsoft.Plugin.Shell
|
|||||||
.Select(m => new Result
|
.Select(m => new Result
|
||||||
{
|
{
|
||||||
Title = m.Key,
|
Title = m.Key,
|
||||||
|
|
||||||
|
// Using CurrentCulture since this is user facing
|
||||||
SubTitle = Properties.Resources.wox_plugin_cmd_plugin_name + ": " + string.Format(CultureInfo.CurrentCulture, Properties.Resources.wox_plugin_cmd_cmd_has_been_executed_times, m.Value),
|
SubTitle = Properties.Resources.wox_plugin_cmd_plugin_name + ": " + string.Format(CultureInfo.CurrentCulture, Properties.Resources.wox_plugin_cmd_cmd_has_been_executed_times, m.Value),
|
||||||
IcoPath = IconPath,
|
IcoPath = IconPath,
|
||||||
Action = c =>
|
Action = c =>
|
||||||
|
@ -119,6 +119,7 @@ namespace Microsoft.Plugin.Uri
|
|||||||
?? _registeryWrapper.GetRegistryValue("HKEY_CLASSES_ROOT\\" + progId + "\\DefaultIcon", null);
|
?? _registeryWrapper.GetRegistryValue("HKEY_CLASSES_ROOT\\" + progId + "\\DefaultIcon", null);
|
||||||
|
|
||||||
// "Handles 'Indirect Strings' (UWP programs)"
|
// "Handles 'Indirect Strings' (UWP programs)"
|
||||||
|
// Using Ordinal since this is internal and used with a symbol
|
||||||
if (programLocation.StartsWith("@", StringComparison.Ordinal))
|
if (programLocation.StartsWith("@", StringComparison.Ordinal))
|
||||||
{
|
{
|
||||||
var directProgramLocationStringBuilder = new StringBuilder(128);
|
var directProgramLocationStringBuilder = new StringBuilder(128);
|
||||||
@ -137,6 +138,7 @@ namespace Microsoft.Plugin.Uri
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
// Using Ordinal since this is internal and used with a symbol
|
||||||
var indexOfComma = programLocation.IndexOf(',', StringComparison.Ordinal);
|
var indexOfComma = programLocation.IndexOf(',', StringComparison.Ordinal);
|
||||||
BrowserIconPath = indexOfComma > 0
|
BrowserIconPath = indexOfComma > 0
|
||||||
? programLocation.Substring(0, indexOfComma)
|
? programLocation.Substring(0, indexOfComma)
|
||||||
|
@ -18,9 +18,10 @@ namespace Microsoft.Plugin.Uri.UriHelper
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Handle common cases UriBuilder does not handle
|
// Handle common cases UriBuilder does not handle
|
||||||
if (input.EndsWith(":", StringComparison.Ordinal)
|
// Using CurrentCulture since this is a user typed string
|
||||||
|| input.EndsWith(".", StringComparison.Ordinal)
|
if (input.EndsWith(":", StringComparison.CurrentCulture)
|
||||||
|| input.EndsWith(":/", StringComparison.Ordinal))
|
|| input.EndsWith(".", StringComparison.CurrentCulture)
|
||||||
|
|| input.EndsWith(":/", StringComparison.CurrentCulture))
|
||||||
{
|
{
|
||||||
result = default;
|
result = default;
|
||||||
return false;
|
return false;
|
||||||
|
@ -37,6 +37,7 @@ namespace Microsoft.Plugin.WindowWalker.Components
|
|||||||
throw new ArgumentNullException(nameof(text));
|
throw new ArgumentNullException(nameof(text));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Using CurrentCulture since this is user facing
|
||||||
searchText = searchText.ToLower(CultureInfo.CurrentCulture);
|
searchText = searchText.ToLower(CultureInfo.CurrentCulture);
|
||||||
text = text.ToLower(CultureInfo.CurrentCulture);
|
text = text.ToLower(CultureInfo.CurrentCulture);
|
||||||
|
|
||||||
|
@ -563,6 +563,7 @@ namespace Microsoft.Plugin.WindowWalker.Components
|
|||||||
|
|
||||||
public override string ToString()
|
public override string ToString()
|
||||||
{
|
{
|
||||||
|
// Using CurrentCulture since this is user facing
|
||||||
return string.Format(System.Globalization.CultureInfo.CurrentCulture, "{{Left={0},Top={1},Right={2},Bottom={3}}}", Left, Top, Right, Bottom);
|
return string.Format(System.Globalization.CultureInfo.CurrentCulture, "{{Left={0},Top={1},Right={2},Bottom={3}}}", Left, Top, Right, Bottom);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -54,6 +54,7 @@ namespace Microsoft.Plugin.WindowWalker.Components
|
|||||||
|
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
|
// Using CurrentCulture since this is user facing
|
||||||
searchText = value.ToLower(CultureInfo.CurrentCulture).Trim();
|
searchText = value.ToLower(CultureInfo.CurrentCulture).Trim();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -252,6 +252,7 @@ namespace Microsoft.Plugin.WindowWalker.Components
|
|||||||
// 1) There is a weird flashing behavior when trying
|
// 1) There is a weird flashing behavior when trying
|
||||||
// to use ShowWindow for switching tabs in IE
|
// to use ShowWindow for switching tabs in IE
|
||||||
// 2) SetForegroundWindow fails on minimized windows
|
// 2) SetForegroundWindow fails on minimized windows
|
||||||
|
// Using Ordinal since this is internal
|
||||||
if (ProcessName.ToUpperInvariant().Equals("IEXPLORE.EXE", StringComparison.Ordinal) || !Minimized)
|
if (ProcessName.ToUpperInvariant().Equals("IEXPLORE.EXE", StringComparison.Ordinal) || !Minimized)
|
||||||
{
|
{
|
||||||
NativeMethods.SetForegroundWindow(Hwnd);
|
NativeMethods.SetForegroundWindow(Hwnd);
|
||||||
@ -270,6 +271,7 @@ namespace Microsoft.Plugin.WindowWalker.Components
|
|||||||
/// <returns>The title of the window</returns>
|
/// <returns>The title of the window</returns>
|
||||||
public override string ToString()
|
public override string ToString()
|
||||||
{
|
{
|
||||||
|
// Using CurrentCulture since this is user facing
|
||||||
return Title + " (" + ProcessName.ToUpper(CultureInfo.CurrentCulture) + ")";
|
return Title + " (" + ProcessName.ToUpper(CultureInfo.CurrentCulture) + ")";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -34,7 +34,8 @@ namespace PowerLauncher.Helper
|
|||||||
{
|
{
|
||||||
string uriString = uri.AbsoluteUri;
|
string uriString = uri.AbsoluteUri;
|
||||||
|
|
||||||
int commaIndex = uriString.IndexOf(',', StringComparison.InvariantCultureIgnoreCase);
|
// Using Ordinal since this is internal and used with a symbol
|
||||||
|
int commaIndex = uriString.IndexOf(',', StringComparison.Ordinal);
|
||||||
var headers = uriString.Substring(0, commaIndex).Split(';');
|
var headers = uriString.Substring(0, commaIndex).Split(';');
|
||||||
_contentType = headers[0];
|
_contentType = headers[0];
|
||||||
string dataString = uriString.Substring(commaIndex + 1);
|
string dataString = uriString.Substring(commaIndex + 1);
|
||||||
|
@ -44,7 +44,9 @@ namespace PowerLauncher
|
|||||||
|
|
||||||
StringBuilder content = new StringBuilder();
|
StringBuilder content = new StringBuilder();
|
||||||
content.AppendLine(ErrorReporting.RuntimeInfo());
|
content.AppendLine(ErrorReporting.RuntimeInfo());
|
||||||
content.AppendLine($"Date: {DateTime.Now.ToString(CultureInfo.InvariantCulture)}");
|
|
||||||
|
// Using CurrentCulture since this is displayed to user in the report window
|
||||||
|
content.AppendLine($"Date: {DateTime.Now.ToString(CultureInfo.CurrentCulture)}");
|
||||||
content.AppendLine("Exception:");
|
content.AppendLine("Exception:");
|
||||||
content.AppendLine(exception.ToString());
|
content.AppendLine(exception.ToString());
|
||||||
var paragraph = new Paragraph();
|
var paragraph = new Paragraph();
|
||||||
|
@ -92,6 +92,7 @@ namespace PowerLauncher
|
|||||||
_settings.IgnoreHotkeysOnFullscreen = overloadSettings.Properties.IgnoreHotkeysInFullscreen;
|
_settings.IgnoreHotkeysOnFullscreen = overloadSettings.Properties.IgnoreHotkeysInFullscreen;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Using OrdinalIgnoreCase since this is internal
|
||||||
var indexer = PluginManager.AllPlugins.Find(p => p.Metadata.Name.Equals("Windows Indexer", StringComparison.OrdinalIgnoreCase));
|
var indexer = PluginManager.AllPlugins.Find(p => p.Metadata.Name.Equals("Windows Indexer", StringComparison.OrdinalIgnoreCase));
|
||||||
if (indexer != null)
|
if (indexer != null)
|
||||||
{
|
{
|
||||||
|
@ -132,6 +132,7 @@ namespace PowerLauncher.ViewModel
|
|||||||
|
|
||||||
if (index != null)
|
if (index != null)
|
||||||
{
|
{
|
||||||
|
// Using InvariantCulture since this is internal
|
||||||
results.SelectedIndex = int.Parse(index.ToString(), CultureInfo.InvariantCulture);
|
results.SelectedIndex = int.Parse(index.ToString(), CultureInfo.InvariantCulture);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -438,8 +439,9 @@ namespace PowerLauncher.ViewModel
|
|||||||
|
|
||||||
private void QueryHistory()
|
private void QueryHistory()
|
||||||
{
|
{
|
||||||
|
// Using CurrentCulture since query is received from user and used in downstream comparisons using CurrentCulture
|
||||||
#pragma warning disable CA1308 // Normalize strings to uppercase
|
#pragma warning disable CA1308 // Normalize strings to uppercase
|
||||||
var query = QueryText.ToLower(CultureInfo.InvariantCulture).Trim();
|
var query = QueryText.ToLower(CultureInfo.CurrentCulture).Trim();
|
||||||
#pragma warning restore CA1308 // Normalize strings to uppercase
|
#pragma warning restore CA1308 // Normalize strings to uppercase
|
||||||
History.Clear();
|
History.Clear();
|
||||||
|
|
||||||
@ -528,6 +530,7 @@ namespace PowerLauncher.ViewModel
|
|||||||
|
|
||||||
lock (_addResultsLock)
|
lock (_addResultsLock)
|
||||||
{
|
{
|
||||||
|
// Using CurrentCultureIgnoreCase since this is user facing
|
||||||
if (queryText.Equals(_currentQuery, StringComparison.CurrentCultureIgnoreCase))
|
if (queryText.Equals(_currentQuery, StringComparison.CurrentCultureIgnoreCase))
|
||||||
{
|
{
|
||||||
Results.Clear();
|
Results.Clear();
|
||||||
@ -565,6 +568,7 @@ namespace PowerLauncher.ViewModel
|
|||||||
{
|
{
|
||||||
lock (_addResultsLock)
|
lock (_addResultsLock)
|
||||||
{
|
{
|
||||||
|
// Using CurrentCultureIgnoreCase since this is user facing
|
||||||
if (queryText.Equals(_currentQuery, StringComparison.CurrentCultureIgnoreCase))
|
if (queryText.Equals(_currentQuery, StringComparison.CurrentCultureIgnoreCase))
|
||||||
{
|
{
|
||||||
currentCancellationToken.ThrowIfCancellationRequested();
|
currentCancellationToken.ThrowIfCancellationRequested();
|
||||||
@ -630,6 +634,7 @@ namespace PowerLauncher.ViewModel
|
|||||||
{
|
{
|
||||||
Application.Current.Dispatcher.BeginInvoke(new Action(() =>
|
Application.Current.Dispatcher.BeginInvoke(new Action(() =>
|
||||||
{
|
{
|
||||||
|
// Using CurrentCultureIgnoreCase since this is user facing
|
||||||
if (queryText.Equals(_currentQuery, StringComparison.CurrentCultureIgnoreCase))
|
if (queryText.Equals(_currentQuery, StringComparison.CurrentCultureIgnoreCase))
|
||||||
{
|
{
|
||||||
Results.Results.NotifyChanges();
|
Results.Results.NotifyChanges();
|
||||||
@ -818,6 +823,7 @@ namespace PowerLauncher.ViewModel
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Using CurrentCultureIgnoreCase since this is user facing
|
||||||
if (originQuery.Equals(_currentQuery, StringComparison.CurrentCultureIgnoreCase))
|
if (originQuery.Equals(_currentQuery, StringComparison.CurrentCultureIgnoreCase))
|
||||||
{
|
{
|
||||||
ct.ThrowIfCancellationRequested();
|
ct.ThrowIfCancellationRequested();
|
||||||
@ -879,6 +885,7 @@ namespace PowerLauncher.ViewModel
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
// Using Ordinal this is internal
|
||||||
return string.IsNullOrEmpty(queryText) || autoCompleteText.IndexOf(queryText, StringComparison.Ordinal) != 0;
|
return string.IsNullOrEmpty(queryText) || autoCompleteText.IndexOf(queryText, StringComparison.Ordinal) != 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -889,6 +896,7 @@ namespace PowerLauncher.ViewModel
|
|||||||
{
|
{
|
||||||
if (index == 0)
|
if (index == 0)
|
||||||
{
|
{
|
||||||
|
// Using OrdinalIgnoreCase because we want the characters to be exact in autocomplete text and the query
|
||||||
if (input.IndexOf(query, StringComparison.OrdinalIgnoreCase) == 0)
|
if (input.IndexOf(query, StringComparison.OrdinalIgnoreCase) == 0)
|
||||||
{
|
{
|
||||||
// Use the same case as the input query for the matched portion of the string
|
// Use the same case as the input query for the matched portion of the string
|
||||||
@ -906,6 +914,7 @@ namespace PowerLauncher.ViewModel
|
|||||||
{
|
{
|
||||||
if (index == 0 && !string.IsNullOrEmpty(query))
|
if (index == 0 && !string.IsNullOrEmpty(query))
|
||||||
{
|
{
|
||||||
|
// Using OrdinalIgnoreCase since this is internal
|
||||||
if (input.IndexOf(query, StringComparison.OrdinalIgnoreCase) == 0)
|
if (input.IndexOf(query, StringComparison.OrdinalIgnoreCase) == 0)
|
||||||
{
|
{
|
||||||
return query + input.Substring(query.Length);
|
return query + input.Substring(query.Length);
|
||||||
|
@ -70,6 +70,8 @@ namespace Wox.Infrastructure.Exception
|
|||||||
|
|
||||||
sb.AppendLine("## Environment");
|
sb.AppendLine("## Environment");
|
||||||
sb.AppendLine($"* Command Line: {Environment.CommandLine}");
|
sb.AppendLine($"* Command Line: {Environment.CommandLine}");
|
||||||
|
|
||||||
|
// Using InvariantCulture since this is internal
|
||||||
sb.AppendLine($"* Timestamp: {DateTime.Now.ToString(CultureInfo.InvariantCulture)}");
|
sb.AppendLine($"* Timestamp: {DateTime.Now.ToString(CultureInfo.InvariantCulture)}");
|
||||||
sb.AppendLine($"* Wox version: {Constant.Version}");
|
sb.AppendLine($"* Wox version: {Constant.Version}");
|
||||||
sb.AppendLine($"* OS Version: {Environment.OSVersion.VersionString}");
|
sb.AppendLine($"* OS Version: {Environment.OSVersion.VersionString}");
|
||||||
|
@ -131,6 +131,7 @@ namespace Wox.Infrastructure.Image
|
|||||||
return new ImageResult(ImageCache[path], ImageType.Cache);
|
return new ImageResult(ImageCache[path], ImageType.Cache);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Using OrdinalIgnoreCase since this is internal and used with paths
|
||||||
if (path.StartsWith("data:", StringComparison.OrdinalIgnoreCase))
|
if (path.StartsWith("data:", StringComparison.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
var imageSource = new BitmapImage(new Uri(path));
|
var imageSource = new BitmapImage(new Uri(path));
|
||||||
|
@ -106,8 +106,8 @@ namespace Wox.Infrastructure.Storage
|
|||||||
|
|
||||||
private void BackupOriginFile()
|
private void BackupOriginFile()
|
||||||
{
|
{
|
||||||
// Using CurrentCulture since this is user facing
|
// Using InvariantCulture since this is internal
|
||||||
var timestamp = DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss-fffffff", CultureInfo.CurrentCulture);
|
var timestamp = DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss-fffffff", CultureInfo.InvariantCulture);
|
||||||
var directory = Path.GetDirectoryName(FilePath).NonNull();
|
var directory = Path.GetDirectoryName(FilePath).NonNull();
|
||||||
var originName = Path.GetFileNameWithoutExtension(FilePath);
|
var originName = Path.GetFileNameWithoutExtension(FilePath);
|
||||||
var backupName = $"{originName}-{timestamp}{FileSuffix}";
|
var backupName = $"{originName}-{timestamp}{FileSuffix}";
|
||||||
|
@ -249,6 +249,7 @@ namespace Wox.Infrastructure
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Using CurrentCultureIgnoreCase since this relates to queries input by user
|
||||||
if (string.Equals(query, stringToCompare, StringComparison.CurrentCultureIgnoreCase))
|
if (string.Equals(query, stringToCompare, StringComparison.CurrentCultureIgnoreCase))
|
||||||
{
|
{
|
||||||
var bonusForExactMatch = 10;
|
var bonusForExactMatch = 10;
|
||||||
|
@ -380,6 +380,8 @@ namespace Wox.Test.Plugins
|
|||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
string expectedSqlQuery = "SELECT TOP 30 \"System.ItemUrl\", \"System.FileName\", \"System.FileAttributes\" FROM \"SystemIndex\" WHERE (CONTAINS(System.FileName,'\"abcd.*\"',1033)) AND scope='file:' ORDER BY System.DateModified DESC";
|
string expectedSqlQuery = "SELECT TOP 30 \"System.ItemUrl\", \"System.FileName\", \"System.FileAttributes\" FROM \"SystemIndex\" WHERE (CONTAINS(System.FileName,'\"abcd.*\"',1033)) AND scope='file:' ORDER BY System.DateModified DESC";
|
||||||
|
|
||||||
|
// Using InvariantCultureIgnoreCase since this relates to sql code in string form
|
||||||
Assert.IsFalse(simplifiedSqlQuery.Equals(sqlQuery, StringComparison.InvariantCultureIgnoreCase));
|
Assert.IsFalse(simplifiedSqlQuery.Equals(sqlQuery, StringComparison.InvariantCultureIgnoreCase));
|
||||||
Assert.IsTrue(simplifiedSqlQuery.Equals(expectedSqlQuery, StringComparison.InvariantCultureIgnoreCase));
|
Assert.IsTrue(simplifiedSqlQuery.Equals(expectedSqlQuery, StringComparison.InvariantCultureIgnoreCase));
|
||||||
}
|
}
|
||||||
@ -394,6 +396,7 @@ namespace Wox.Test.Plugins
|
|||||||
var simplifiedSqlQuery = WindowsSearchAPI.SimplifyQuery(sqlQuery);
|
var simplifiedSqlQuery = WindowsSearchAPI.SimplifyQuery(sqlQuery);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
|
// Using InvariantCultureIgnoreCase since this relates to sql code in string form
|
||||||
Assert.IsTrue(simplifiedSqlQuery.Equals(sqlQuery, StringComparison.InvariantCultureIgnoreCase));
|
Assert.IsTrue(simplifiedSqlQuery.Equals(sqlQuery, StringComparison.InvariantCultureIgnoreCase));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -408,6 +411,8 @@ namespace Wox.Test.Plugins
|
|||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
string expectedSqlQuery = "SELECT TOP 30 \"System.ItemUrl\", \"System.FileName\", \"System.FileAttributes\", \"System.FileExtension\" FROM \"SystemIndex\" WHERE (CONTAINS(System.FileName,'\"ab.*\"',1033)) AND (CONTAINS(System.FileName,'\".cd*\"',1033)) AND scope='file:' ORDER BY System.DateModified DESC";
|
string expectedSqlQuery = "SELECT TOP 30 \"System.ItemUrl\", \"System.FileName\", \"System.FileAttributes\", \"System.FileExtension\" FROM \"SystemIndex\" WHERE (CONTAINS(System.FileName,'\"ab.*\"',1033)) AND (CONTAINS(System.FileName,'\".cd*\"',1033)) AND scope='file:' ORDER BY System.DateModified DESC";
|
||||||
|
|
||||||
|
// Using InvariantCultureIgnoreCase since this relates to sql code in string form
|
||||||
Assert.IsFalse(simplifiedSqlQuery.Equals(sqlQuery, StringComparison.InvariantCultureIgnoreCase));
|
Assert.IsFalse(simplifiedSqlQuery.Equals(sqlQuery, StringComparison.InvariantCultureIgnoreCase));
|
||||||
Assert.IsTrue(simplifiedSqlQuery.Equals(expectedSqlQuery, StringComparison.InvariantCultureIgnoreCase));
|
Assert.IsTrue(simplifiedSqlQuery.Equals(expectedSqlQuery, StringComparison.InvariantCultureIgnoreCase));
|
||||||
}
|
}
|
||||||
@ -423,6 +428,8 @@ namespace Wox.Test.Plugins
|
|||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
string expectedSqlQuery = "SELECT TOP 30 \"System.ItemUrl\", \"System.FileName\", \"System.FileAttributes\" FROM \"SystemIndex\" WHERE (CONTAINS(System.FileName,'\"'ab.cd'*\"',1033)) AND scope='file:' ORDER BY System.DateModified DESC";
|
string expectedSqlQuery = "SELECT TOP 30 \"System.ItemUrl\", \"System.FileName\", \"System.FileAttributes\" FROM \"SystemIndex\" WHERE (CONTAINS(System.FileName,'\"'ab.cd'*\"',1033)) AND scope='file:' ORDER BY System.DateModified DESC";
|
||||||
|
|
||||||
|
// Using InvariantCultureIgnoreCase since this relates to sql code in string form
|
||||||
Assert.IsFalse(simplifiedSqlQuery.Equals(sqlQuery, StringComparison.InvariantCultureIgnoreCase));
|
Assert.IsFalse(simplifiedSqlQuery.Equals(sqlQuery, StringComparison.InvariantCultureIgnoreCase));
|
||||||
Assert.IsTrue(simplifiedSqlQuery.Equals(expectedSqlQuery, StringComparison.InvariantCultureIgnoreCase));
|
Assert.IsTrue(simplifiedSqlQuery.Equals(expectedSqlQuery, StringComparison.InvariantCultureIgnoreCase));
|
||||||
}
|
}
|
||||||
|
@ -47,7 +47,10 @@ namespace Microsoft.PowerToys.PreviewHandler.Svg.Utilities
|
|||||||
var elements = doc.Descendants().ToList();
|
var elements = doc.Descendants().ToList();
|
||||||
foreach (XElement element in elements)
|
foreach (XElement element in elements)
|
||||||
{
|
{
|
||||||
var elementName = element?.Name?.LocalName?.ToLower(CultureInfo.CurrentCulture);
|
// Using Invariant since we are doing an exact match for HTML tags and we want it to behave the same in every culture
|
||||||
|
#pragma warning disable CA1308 // Normalize strings to uppercase
|
||||||
|
var elementName = element?.Name?.LocalName?.ToLowerInvariant();
|
||||||
|
#pragma warning restore CA1308 // Normalize strings to uppercase
|
||||||
if (elementName != null && blockedElementsName.ContainsKey(elementName))
|
if (elementName != null && blockedElementsName.ContainsKey(elementName))
|
||||||
{
|
{
|
||||||
foundBlockedElement = true;
|
foundBlockedElement = true;
|
||||||
|
@ -166,7 +166,9 @@ namespace Microsoft.PowerToys.ThumbnailHandler.Svg
|
|||||||
{0}
|
{0}
|
||||||
</body>
|
</body>
|
||||||
</html>";
|
</html>";
|
||||||
return string.Format(CultureInfo.CurrentCulture, html, svg);
|
|
||||||
|
// Using InvariantCulture since this should be displayed as it is
|
||||||
|
return string.Format(CultureInfo.InvariantCulture, html, svg);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -54,6 +54,7 @@ namespace PreviewHandlerCommon
|
|||||||
|
|
||||||
if (name != null && name.Equals(DISPIDAMBIENTDLCONTROL, StringComparison.CurrentCulture))
|
if (name != null && name.Equals(DISPIDAMBIENTDLCONTROL, StringComparison.CurrentCulture))
|
||||||
{
|
{
|
||||||
|
// Using InvariantCulture since this is used for web browser configurations
|
||||||
result = Convert.ToInt32(
|
result = Convert.ToInt32(
|
||||||
WebBrowserDownloadControlFlags.DLIMAGES |
|
WebBrowserDownloadControlFlags.DLIMAGES |
|
||||||
WebBrowserDownloadControlFlags.PRAGMA_NO_CACHE |
|
WebBrowserDownloadControlFlags.PRAGMA_NO_CACHE |
|
||||||
@ -66,7 +67,7 @@ namespace PreviewHandlerCommon
|
|||||||
WebBrowserDownloadControlFlags.NO_DLACTIVEXCTLS |
|
WebBrowserDownloadControlFlags.NO_DLACTIVEXCTLS |
|
||||||
WebBrowserDownloadControlFlags.NO_RUNACTIVEXCTLS |
|
WebBrowserDownloadControlFlags.NO_RUNACTIVEXCTLS |
|
||||||
WebBrowserDownloadControlFlags.NO_BEHAVIORS |
|
WebBrowserDownloadControlFlags.NO_BEHAVIORS |
|
||||||
WebBrowserDownloadControlFlags.SILENT, CultureInfo.CurrentCulture);
|
WebBrowserDownloadControlFlags.SILENT, CultureInfo.InvariantCulture);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user