Implement preview switching logic

- Internal and external preview can't open at the same time
- Always preview option doesn't control external
This commit is contained in:
Vic 2023-04-22 15:53:43 +08:00
parent afa8a34891
commit a1600fabcc
2 changed files with 32 additions and 28 deletions

View file

@ -230,6 +230,9 @@ namespace Flow.Launcher.Plugin
/// <default>#26a0da (blue)</default> /// <default>#26a0da (blue)</default>
public string ProgressBarColor { get; set; } = "#26a0da"; public string ProgressBarColor { get; set; } = "#26a0da";
/// <summary>
/// Preview info of the result to show on preview panel.
/// </summary>
public PreviewInfo Preview { get; set; } = PreviewInfo.Default; public PreviewInfo Preview { get; set; } = PreviewInfo.Default;
/// <summary> /// <summary>

View file

@ -575,11 +575,15 @@ namespace Flow.Launcher.ViewModel
[RelayCommand] [RelayCommand]
private void TogglePreview() private void TogglePreview()
{ {
if (Settings.UseQuickLook) if (Settings.UseQuickLook && CanExternalPreviewSelectedResult(out var path))
{ {
if (!ExternalPreviewOpen) if (Settings.AlwaysPreview == true && PreviewVisible)
{ {
_ = OpenQuickLookPreviewAsync(); HidePreview(); // When Always preview, toggle off rather than open external
}
else if (!ExternalPreviewOpen)
{
_ = OpenQuickLookPreviewAsync(path);
} }
else else
{ {
@ -623,47 +627,38 @@ namespace Flow.Launcher.ViewModel
private void UpdatePreview() private void UpdatePreview()
{ {
if (Settings.UseQuickLook) if (Settings.UseQuickLook && CanExternalPreviewSelectedResult(out var path))
{ {
if (ExternalPreviewOpen) _ = ToggleQuickLookPreviewAsync(path, ExternalPreviewOpen);
if (PreviewVisible)
{ {
_ = ToggleQuickLookPreviewAsync(true); HidePreview();
} }
} }
else if (PreviewVisible) else if (PreviewVisible)
{ {
Results.SelectedItem?.LoadPreviewImage(); Results.SelectedItem?.LoadPreviewImage();
} }
else
{
// When external is open and select a result that can't be previewed by external program
_ = CloseQuickLookPreviewAsync();
ShowPreview();
}
} }
private async Task ToggleQuickLookPreviewAsync(bool switchFile = false) private async Task ToggleQuickLookPreviewAsync(string path, bool switchFile = false)
{ {
if (!SelectedIsFromQueryResults()) bool success = await QuickLookHelper.ToggleQuickLookAsync(path, switchFile);
return;
var result = Results.SelectedItem?.Result;
if (result is null || string.IsNullOrEmpty(result.Preview.FilePath))
return;
bool success = await QuickLookHelper.ToggleQuickLookAsync(result.Preview.FilePath, switchFile);
if (success) if (success)
{ {
ExternalPreviewOpen = switchFile || !ExternalPreviewOpen; ExternalPreviewOpen = switchFile || !ExternalPreviewOpen;
} }
} }
private async Task OpenQuickLookPreviewAsync() private async Task OpenQuickLookPreviewAsync(string path)
{ {
if (!SelectedIsFromQueryResults()) bool success = await QuickLookHelper.OpenQuickLookAsync(path);
return;
var result = Results.SelectedItem?.Result;
if (result is null || string.IsNullOrEmpty(result.Preview.FilePath))
return;
bool success = await QuickLookHelper.OpenQuickLookAsync(result.Preview.FilePath);
if (success) if (success)
{ {
ExternalPreviewOpen = true; ExternalPreviewOpen = true;
@ -679,6 +674,12 @@ namespace Flow.Launcher.ViewModel
} }
} }
private bool CanExternalPreviewSelectedResult(out string path)
{
path = Results.SelectedItem?.Result?.Preview.FilePath;
return string.IsNullOrEmpty(path);
}
#endregion #endregion
#region Query #region Query