mirror of
https://github.com/microsoft/PowerToys.git
synced 2026-04-06 03:07:04 +02:00
Just standardizing built-in extensions to use a `internal sealed class Icons` for all their non-dynamic icons. Looks like a LOT of changes, but it's icons all the way down.
91 lines
2.6 KiB
C#
91 lines
2.6 KiB
C#
// Copyright (c) Microsoft Corporation
|
|
// The Microsoft Corporation licenses this file to you under the MIT license.
|
|
// See the LICENSE file in the project root for more information.
|
|
using System.Runtime.CompilerServices;
|
|
using Microsoft.CommandPalette.Extensions.Toolkit;
|
|
|
|
namespace Microsoft.CmdPal.Ext.TimeDate.Helpers;
|
|
|
|
internal sealed class AvailableResult
|
|
{
|
|
/// <summary>
|
|
/// Gets or sets the time/date value
|
|
/// </summary>
|
|
internal string Value { get; set; }
|
|
|
|
/// <summary>
|
|
/// Gets or sets the text used for the subtitle and as search term
|
|
/// </summary>
|
|
internal string Label { get; set; }
|
|
|
|
/// <summary>
|
|
/// Gets or sets an alternative search tag that will be evaluated if label doesn't match. For example we like to show the era on searches for 'year' too.
|
|
/// </summary>
|
|
internal string AlternativeSearchTag { get; set; }
|
|
|
|
/// <summary>
|
|
/// Gets or sets a value indicating the type of result
|
|
/// </summary>
|
|
internal ResultIconType IconType { get; set; }
|
|
|
|
/// <summary>
|
|
/// Gets or sets a value to show additional error details
|
|
/// </summary>
|
|
internal string ErrorDetails { get; set; } = string.Empty;
|
|
|
|
/// <summary>
|
|
/// Returns the path to the icon
|
|
/// </summary>
|
|
/// <param name="theme">Theme</param>
|
|
/// <returns>Path</returns>
|
|
public IconInfo GetIconInfo()
|
|
{
|
|
return IconType switch
|
|
{
|
|
ResultIconType.Time => Icons.TimeIcon,
|
|
ResultIconType.Date => Icons.CalendarIcon,
|
|
ResultIconType.DateTime => Icons.TimeDateIcon,
|
|
ResultIconType.Error => Icons.ErrorIcon,
|
|
_ => null,
|
|
};
|
|
}
|
|
|
|
public ListItem ToListItem()
|
|
{
|
|
return new ListItem(new CopyTextCommand(this.Value))
|
|
{
|
|
Title = this.Value,
|
|
Subtitle = this.Label,
|
|
Icon = this.GetIconInfo(),
|
|
Details = string.IsNullOrEmpty(this.ErrorDetails) ? null : new Details() { Body = this.ErrorDetails },
|
|
};
|
|
}
|
|
|
|
public int Score(string query, string label, string tags)
|
|
{
|
|
// Get match for label (or for tags if label score is <1)
|
|
var score = StringMatcher.FuzzySearch(query, label).Score;
|
|
if (score < 1)
|
|
{
|
|
foreach (var t in tags.Split(";"))
|
|
{
|
|
var tagScore = StringMatcher.FuzzySearch(query, t.Trim()).Score / 2;
|
|
if (tagScore > score)
|
|
{
|
|
score = tagScore / 2;
|
|
}
|
|
}
|
|
}
|
|
|
|
return score;
|
|
}
|
|
}
|
|
|
|
public enum ResultIconType
|
|
{
|
|
Time,
|
|
Date,
|
|
DateTime,
|
|
Error,
|
|
}
|