mirror of
https://github.com/Flow-Launcher/Flow.Launcher.git
synced 2026-03-11 08:54:32 +00:00
Refactor QuickLook toggle and update logic
- Forcibly open/close/switch content when needed - Remove unused functions
This commit is contained in:
parent
cda587fb58
commit
2ed33a232d
2 changed files with 68 additions and 66 deletions
|
|
@ -23,14 +23,13 @@ namespace Flow.Launcher.Helper
|
||||||
/// Toggle QuickLook
|
/// Toggle QuickLook
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="path">File path to preview</param>
|
/// <param name="path">File path to preview</param>
|
||||||
/// <param name="switchPreview">Is swtiching file</param>
|
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public static async Task<bool> ToggleQuickLookAsync(string path, bool switchPreview = false)
|
public static async Task<bool> ToggleQuickLookAsync(string path)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(path))
|
if (string.IsNullOrEmpty(path))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
bool success = await SendQuickLookPipeMsgAsync(switchPreview ? pipeMessageSwitch : pipeMessageToggle, path);
|
bool success = await SendQuickLookPipeMsgAsync(pipeMessageToggle, path);
|
||||||
if (!success)
|
if (!success)
|
||||||
{
|
{
|
||||||
ShowQuickLookUnavailableToast();
|
ShowQuickLookUnavailableToast();
|
||||||
|
|
@ -61,6 +60,24 @@ namespace Flow.Launcher.Helper
|
||||||
return success;
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Switch QuickLook to preview another file if it's on
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="path">File path to preview</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static async Task<bool> SwitchQuickLookAsync(string path)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(path))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
bool success = await SendQuickLookPipeMsgAsync(pipeMessageSwitch, path);
|
||||||
|
if (!success)
|
||||||
|
{
|
||||||
|
ShowQuickLookUnavailableToast();
|
||||||
|
}
|
||||||
|
return success;
|
||||||
|
}
|
||||||
|
|
||||||
private static async Task<bool> SendQuickLookPipeMsgAsync(string message, string arg = "")
|
private static async Task<bool> SendQuickLookPipeMsgAsync(string message, string arg = "")
|
||||||
{
|
{
|
||||||
await using var client = new NamedPipeClientStream(".", pipeName, PipeDirection.Out);
|
await using var client = new NamedPipeClientStream(".", pipeName, PipeDirection.Out);
|
||||||
|
|
|
||||||
|
|
@ -564,8 +564,6 @@ namespace Flow.Launcher.ViewModel
|
||||||
|
|
||||||
public bool PreviewVisible { get; set; } = false;
|
public bool PreviewVisible { get; set; } = false;
|
||||||
|
|
||||||
public bool ExternalPreviewOpen { get; set; } = false;
|
|
||||||
|
|
||||||
public int ResultAreaColumn { get; set; } = 1;
|
public int ResultAreaColumn { get; set; } = 1;
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
@ -608,14 +606,24 @@ namespace Flow.Launcher.ViewModel
|
||||||
|
|
||||||
private void ToggleExternalPreview(string path)
|
private void ToggleExternalPreview(string path)
|
||||||
{
|
{
|
||||||
if (!ExternalPreviewOpen)
|
_ = QuickLookHelper.ToggleQuickLookAsync(path).ConfigureAwait(false);
|
||||||
{
|
}
|
||||||
_ = OpenQuickLookPreviewAsync(path).ConfigureAwait(false);
|
|
||||||
}
|
private void OpenExternalPreview(string path)
|
||||||
else
|
{
|
||||||
{
|
_ = QuickLookHelper.OpenQuickLookAsync(path).ConfigureAwait(false);
|
||||||
_ = CloseQuickLookPreviewAsync().ConfigureAwait(false);
|
}
|
||||||
}
|
|
||||||
|
private void CloseExternalPreview()
|
||||||
|
{
|
||||||
|
_ = QuickLookHelper.CloseQuickLookAsync().ConfigureAwait(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SwitchExternalPreview(string path)
|
||||||
|
{
|
||||||
|
// Switches preview content
|
||||||
|
// When external is off, do nothing
|
||||||
|
_ = QuickLookHelper.SwitchQuickLookAsync(path).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ShowInternalPreview()
|
private void ShowInternalPreview()
|
||||||
|
|
@ -645,61 +653,41 @@ namespace Flow.Launcher.ViewModel
|
||||||
|
|
||||||
private void UpdatePreview()
|
private void UpdatePreview()
|
||||||
{
|
{
|
||||||
if (Settings.UseQuickLook && CanExternalPreviewSelectedResult(out var path))
|
if (Settings.UseQuickLook)
|
||||||
{
|
{
|
||||||
// TODO: When always preview (internal is open) and select another result can use external preview
|
if (CanExternalPreviewSelectedResult(out var path))
|
||||||
// then switched to external, looks bad
|
|
||||||
// Should use external preview for selected result
|
|
||||||
if (ExternalPreviewOpen)
|
|
||||||
{
|
{
|
||||||
_ = ToggleQuickLookPreviewAsync(path, true).ConfigureAwait(false);
|
// Should use external preview for selected result
|
||||||
|
if (PreviewVisible)
|
||||||
|
{
|
||||||
|
// Previewing
|
||||||
|
// When internal is open and select a result that should use external preview
|
||||||
|
// External must be off when PreviewVisible
|
||||||
|
HideInternalPreview();
|
||||||
|
OpenExternalPreview(path);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Internal is off, try to switch preview content
|
||||||
|
SwitchExternalPreview(path);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if(PreviewVisible)
|
else
|
||||||
{
|
{
|
||||||
// When internal is open and select a result that should use external preview
|
// Should use internal preview for selected result
|
||||||
_ = OpenQuickLookPreviewAsync(path).ConfigureAwait(false);
|
if (PreviewVisible)
|
||||||
HideInternalPreview();
|
{
|
||||||
|
Results.SelectedItem?.LoadPreviewImage();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
CloseExternalPreview(); // Forcibly close, ideally should only close when it's on
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else if(PreviewVisible)
|
||||||
{
|
{
|
||||||
if (PreviewVisible)
|
Results.SelectedItem?.LoadPreviewImage();
|
||||||
{
|
|
||||||
Results.SelectedItem?.LoadPreviewImage();
|
|
||||||
}
|
|
||||||
else if (ExternalPreviewOpen)
|
|
||||||
{
|
|
||||||
// When external is open and select a result that can't use external preview
|
|
||||||
_ = CloseQuickLookPreviewAsync().ConfigureAwait(false);
|
|
||||||
ShowInternalPreview();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private async Task ToggleQuickLookPreviewAsync(string path, bool switchFile = false)
|
|
||||||
{
|
|
||||||
bool success = await QuickLookHelper.ToggleQuickLookAsync(path, switchFile);
|
|
||||||
if (success)
|
|
||||||
{
|
|
||||||
ExternalPreviewOpen = switchFile || !ExternalPreviewOpen;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private async Task OpenQuickLookPreviewAsync(string path)
|
|
||||||
{
|
|
||||||
bool success = await QuickLookHelper.OpenQuickLookAsync(path);
|
|
||||||
if (success)
|
|
||||||
{
|
|
||||||
ExternalPreviewOpen = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private async Task CloseQuickLookPreviewAsync()
|
|
||||||
{
|
|
||||||
bool success = await QuickLookHelper.CloseQuickLookAsync();
|
|
||||||
if (success)
|
|
||||||
{
|
|
||||||
ExternalPreviewOpen = false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1112,10 +1100,7 @@ namespace Flow.Launcher.ViewModel
|
||||||
// Trick for no delay
|
// Trick for no delay
|
||||||
MainWindowOpacity = 0;
|
MainWindowOpacity = 0;
|
||||||
|
|
||||||
if (ExternalPreviewOpen)
|
CloseExternalPreview();
|
||||||
{
|
|
||||||
_ = CloseQuickLookPreviewAsync().ConfigureAwait(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!SelectedIsFromQueryResults())
|
if (!SelectedIsFromQueryResults())
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue