diff --git a/.cm/gitstream.cm b/.cm/gitstream.cm new file mode 100644 index 000000000..fcf01c0fe --- /dev/null +++ b/.cm/gitstream.cm @@ -0,0 +1,75 @@ +# -*- mode: yaml -*- +# This example configuration for provides basic automations to get started with gitStream. +# View the gitStream quickstart for more examples: https://docs.gitstream.cm/examples/ +manifest: + version: 1.0 + + +automations: + # Add a label that indicates how many minutes it will take to review the PR. + estimated_time_to_review: + if: + - true + run: + - action: add-label@v1 + args: + label: "{{ calc.etr }} min review" + color: {{ colors.red if (calc.etr >= 20) else ( colors.yellow if (calc.etr >= 5) else colors.green ) }} + # Post a comment that lists the best experts for the files that were modified. + explain_code_experts: + if: + - true + run: + - action: explain-code-experts@v1 + args: + gt: 10 + # Post a comment that indicates what percentage of the PR is new code. + percent_new_code: + if: + - true + run: + - action: add-comment@v1 + args: + comment: | + This PR is {{ changes.ratio }}% new code. + # Post a comment that request changes for a PR that contains a TODO statement. + review_todo_comments: + if: + - {{ source.diff.files | matchDiffLines(regex=r/^[+].*(TODO)|(todo)/) | some }} + run: + - action: request-changes@v1 + args: + comment: | + This PR contains a TODO statement. Please check to see if they should be removed. + # Post a comment that request a before and after screenshot + request_screenshot: + # Triggered for PRs that lack an image file or link to an image in the PR description + if: + - {{ not (has.screenshot_link or has.image_uploaded) }} + run: + - action: add-comment@v1 + args: + comment: | + Be a legend :trophy: by adding a before and after screenshot of the changes you made, especially if they are around UI/UX. + + +# +----------------------------------------------------------------------------+ +# | Custom Expressions | +# | https://docs.gitstream.cm/how-it-works/#custom-expressions | +# +----------------------------------------------------------------------------+ + +calc: + etr: {{ branch | estimatedReviewTime }} + +colors: + red: 'b60205' + yellow: 'fbca04' + green: '0e8a16' + +changes: + # Sum all the lines added/edited in the PR + additions: {{ branch.diff.files_metadata | map(attr='additions') | sum }} + # Sum all the line removed in the PR + deletions: {{ branch.diff.files_metadata | map(attr='deletions') | sum }} + # Calculate the ratio of new code + ratio: {{ (changes.additions / (changes.additions + changes.deletions)) * 100 | round(2) }} \ No newline at end of file diff --git a/.github/workflows/gitstream.yml b/.github/workflows/gitstream.yml new file mode 100644 index 000000000..0916572df --- /dev/null +++ b/.github/workflows/gitstream.yml @@ -0,0 +1,49 @@ +# Code generated by gitStream GitHub app - DO NOT EDIT + +name: gitStream workflow automation +run-name: | + /:\ gitStream: PR #${{ fromJSON(fromJSON(github.event.inputs.client_payload)).pullRequestNumber }} from ${{ github.event.inputs.full_repository }} + +on: + workflow_dispatch: + inputs: + client_payload: + description: The Client payload + required: true + full_repository: + description: the repository name include the owner in `owner/repo_name` format + required: true + head_ref: + description: the head sha + required: true + base_ref: + description: the base ref + required: true + installation_id: + description: the installation id + required: false + resolver_url: + description: the resolver url to pass results to + required: true + resolver_token: + description: Optional resolver token for resolver service + required: false + default: '' + +jobs: + gitStream: + timeout-minutes: 5 + runs-on: ubuntu-latest + name: gitStream workflow automation + steps: + - name: Evaluate Rules + uses: linear-b/gitstream-github-action@v2 + id: rules-engine + with: + full_repository: ${{ github.event.inputs.full_repository }} + head_ref: ${{ github.event.inputs.head_ref }} + base_ref: ${{ github.event.inputs.base_ref }} + client_payload: ${{ github.event.inputs.client_payload }} + installation_id: ${{ github.event.inputs.installation_id }} + resolver_url: ${{ github.event.inputs.resolver_url }} + resolver_token: ${{ github.event.inputs.resolver_token }} diff --git a/Flow.Launcher/SettingPages/ViewModels/SettingsPaneThemeViewModel.cs b/Flow.Launcher/SettingPages/ViewModels/SettingsPaneThemeViewModel.cs index 8b9f069ce..b9e821913 100644 --- a/Flow.Launcher/SettingPages/ViewModels/SettingsPaneThemeViewModel.cs +++ b/Flow.Launcher/SettingPages/ViewModels/SettingsPaneThemeViewModel.cs @@ -22,6 +22,7 @@ namespace Flow.Launcher.SettingPages.ViewModels; public partial class SettingsPaneThemeViewModel : BaseModel { + private const string DefaultFont = "Segoe UI"; public Settings Settings { get; } public static string LinkHowToCreateTheme => @"https://flowlauncher.com/docs/#/how-to-create-a-theme"; @@ -82,6 +83,7 @@ public partial class SettingsPaneThemeViewModel : BaseModel get => Settings.QueryBoxFontSize; set => Settings.QueryBoxFontSize = value; } + public double ResultItemFontSize { get => Settings.ResultItemFontSize; @@ -97,30 +99,9 @@ public partial class SettingsPaneThemeViewModel : BaseModel private List _themes; public List Themes => _themes ??= ThemeManager.Instance.LoadAvailableThemes(); + public class ColorSchemeData : DropdownDataGeneric { } - public class ColorScheme - { - public string Display { get; set; } - public ColorSchemes Value { get; set; } - } - - public List ColorSchemes - { - get - { - List modes = new List(); - var enums = (ColorSchemes[])Enum.GetValues(typeof(ColorSchemes)); - foreach (var e in enums) - { - var key = $"ColorScheme{e}"; - var display = InternationalizationManager.Instance.GetTranslation(key); - var m = new ColorScheme { Display = display, Value = e, }; - modes.Add(m); - } - - return modes; - } - } + public List ColorSchemes { get; } = DropdownDataGeneric.GetValues("ColorScheme"); public List TimeFormatList { get; } = new() { @@ -167,11 +148,13 @@ public partial class SettingsPaneThemeViewModel : BaseModel } public IEnumerable MaxResultsRange => Enumerable.Range(2, 16); + public bool KeepMaxResults { get => Settings.KeepMaxResults; set => Settings.KeepMaxResults = value; } + public string ClockText => DateTime.Now.ToString(TimeFormat, CultureInfo.CurrentCulture); public string DateText => DateTime.Now.ToString(DateFormat, CultureInfo.CurrentCulture); @@ -188,29 +171,9 @@ public partial class SettingsPaneThemeViewModel : BaseModel set => Settings.UseAnimation = value; } - public class AnimationSpeed - { - public string Display { get; set; } - public AnimationSpeeds Value { get; set; } - } + public class AnimationSpeedData : DropdownDataGeneric { } + public List AnimationSpeeds { get; } = DropdownDataGeneric.GetValues("AnimationSpeed"); - public List AnimationSpeeds - { - get - { - List speeds = new List(); - var enums = (AnimationSpeeds[])Enum.GetValues(typeof(AnimationSpeeds)); - foreach (var e in enums) - { - var key = $"AnimationSpeed{e}"; - var display = InternationalizationManager.Instance.GetTranslation(key); - var m = new AnimationSpeed { Display = display, Value = e, }; - speeds.Add(m); - } - - return speeds; - } - } public bool UseSound { get => Settings.UseSound; @@ -329,7 +292,7 @@ public partial class SettingsPaneThemeViewModel : BaseModel return fontExists switch { true => new FontFamily(Settings.QueryBoxFont), - _ => new FontFamily("Segoe UI") + _ => new FontFamily(DefaultFont) }; } set @@ -373,7 +336,7 @@ public partial class SettingsPaneThemeViewModel : BaseModel return fontExists switch { true => new FontFamily(Settings.ResultFont), - _ => new FontFamily("Segoe UI") + _ => new FontFamily(DefaultFont) }; } set @@ -418,7 +381,7 @@ public partial class SettingsPaneThemeViewModel : BaseModel } else { - var font = new FontFamily("Segoe UI"); + var font = new FontFamily(DefaultFont); return font; } } @@ -449,6 +412,7 @@ public partial class SettingsPaneThemeViewModel : BaseModel ThemeManager.Instance.ChangeTheme(Settings.Theme); } } + public string ThemeImage => Constant.QueryTextBoxIconImagePath; [RelayCommand] @@ -473,4 +437,22 @@ public partial class SettingsPaneThemeViewModel : BaseModel Settings = settings; } + [RelayCommand] + public void Reset() + { + SelectedQueryBoxFont = new FontFamily(DefaultFont); + SelectedQueryBoxFontFaces = new FamilyTypeface { Stretch = FontStretches.Normal, Weight = FontWeights.Normal, Style = FontStyles.Normal }; + QueryBoxFontSize = 20; + + SelectedResultFont = new FontFamily(DefaultFont); + SelectedResultFontFaces = new FamilyTypeface { Stretch = FontStretches.Normal, Weight = FontWeights.Normal, Style = FontStyles.Normal }; + ResultItemFontSize = 16; + + SelectedResultSubFont = new FontFamily(DefaultFont); + SelectedResultSubFontFaces = new FamilyTypeface { Stretch = FontStretches.Normal, Weight = FontWeights.Normal, Style = FontStyles.Normal }; + ResultSubItemFontSize = 13; + + WindowHeightSize = 42; + ItemHeightSize = 58; + } } diff --git a/Flow.Launcher/SettingPages/Views/SettingsPaneGeneral.xaml b/Flow.Launcher/SettingPages/Views/SettingsPaneGeneral.xaml index a2b1a58a4..30e065b16 100644 --- a/Flow.Launcher/SettingPages/Views/SettingsPaneGeneral.xaml +++ b/Flow.Launcher/SettingPages/Views/SettingsPaneGeneral.xaml @@ -137,7 +137,7 @@ Title="{DynamicResource AlwaysPreview}" Margin="0 14 0 0" Icon="" - Sub="{DynamicResource AlwaysPreviewToolTip}"> + Sub="{Binding AlwaysPreviewToolTip}"> - diff --git a/Flow.Launcher/SettingPages/Views/SettingsPaneTheme.xaml.cs b/Flow.Launcher/SettingPages/Views/SettingsPaneTheme.xaml.cs index 7d412296f..7f32728c2 100644 --- a/Flow.Launcher/SettingPages/Views/SettingsPaneTheme.xaml.cs +++ b/Flow.Launcher/SettingPages/Views/SettingsPaneTheme.xaml.cs @@ -30,52 +30,4 @@ public partial class SettingsPaneTheme : Page { _viewModel.UpdateColorScheme(); } - - private void Reset_Click(object sender, RoutedEventArgs e) - { - /*The FamilyTypeface should initialize all of its various properties.*/ - FamilyTypeface targetTypeface = new FamilyTypeface { Stretch = FontStretches.Normal, Weight = FontWeights.Normal, Style = FontStyles.Normal }; - - QueryBoxFontSize.Value = 20; - QueryBoxFontComboBox.SelectedIndex = SearchFontIndex("Segoe UI", QueryBoxFontComboBox); - QueryBoxFontStyleComboBox.SelectedIndex = SearchFontStyleIndex(targetTypeface, QueryBoxFontStyleComboBox); - - ResultItemFontComboBox.SelectedIndex = SearchFontIndex("Segoe UI", ResultItemFontComboBox); - ResultItemFontStyleComboBox.SelectedIndex = SearchFontStyleIndex(targetTypeface, ResultItemFontStyleComboBox); - ResultItemFontSize.Value = 16; - - ResultSubItemFontComboBox.SelectedIndex = SearchFontIndex("Segoe UI", ResultSubItemFontComboBox); - ResultSubItemFontStyleComboBox.SelectedIndex = SearchFontStyleIndex(targetTypeface, ResultSubItemFontStyleComboBox); - ResultSubItemFontSize.Value = 13; - - WindowHeightValue.Value = 42; - ItemHeightValue.Value = 58; - } - - private int SearchFontIndex(string targetFont, ComboBox combo) - { - for (int i = 0; i < combo.Items.Count; i++) - { - if (combo.Items[i]?.ToString() == targetFont) - { - return i; - } - } - return 0; - } - - private int SearchFontStyleIndex(FamilyTypeface targetTypeface, ComboBox combo) - { - for (int i = 0; i < combo.Items.Count; i++) - { - if (combo.Items[i] is FamilyTypeface typefaceItem && - typefaceItem.Stretch == targetTypeface.Stretch && - typefaceItem.Weight == targetTypeface.Weight && - typefaceItem.Style == targetTypeface.Style) - { - return i; - } - } - return 0; - } } diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Views/PluginsManagerSettings.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Views/PluginsManagerSettings.xaml index 18be0d2ca..f93f7799a 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Views/PluginsManagerSettings.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Views/PluginsManagerSettings.xaml @@ -7,26 +7,21 @@ d:DesignHeight="450" d:DesignWidth="800" mc:Ignorable="d"> - - - - - + + diff --git a/appveyor.yml b/appveyor.yml index e0f3fc104..2503abce3 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -51,7 +51,7 @@ deploy: - provider: NuGet artifact: Plugin nupkg api_key: - secure: Uho7u3gk4RHzyWGgqgXZuOeI55NbqHLQ9tXahL7xmE4av2oiSldrNiyGgy/0AQYw + secure: sCSd5JWgdzJWDa9kpqECut5ACPKZqcoxKU8ERKC00k7VIjig3/+nFV5zzTcGb0w3 on: APPVEYOR_REPO_TAG: true