@@ -572,39 +572,86 @@ public string PreviewHotkey
572
572
public string Image => Constant . QueryTextBoxIconImagePath ;
573
573
574
574
public bool StartWithEnglishMode => Settings . AlwaysStartEn ;
575
-
576
- public bool PreviewVisible { get ; set ; } = false ;
577
-
578
- public int ResultAreaColumn { get ; set ; } = 1 ;
579
-
575
+
580
576
#endregion
581
577
582
578
#region Preview
583
579
584
- // Not accurate
585
- public bool ExternalPreviewOpen { get ; set ; } = false ;
586
-
587
- [ RelayCommand ]
588
- private void TogglePreview ( )
580
+ public bool InternalPreviewVisible
589
581
{
590
- if ( PreviewVisible )
582
+ get
591
583
{
592
- // To deal with always preview
593
- HideInternalPreview ( ) ;
584
+ if ( ResultAreaColumn == ResultAreaColumnPreviewShown )
585
+ return true ;
586
+
587
+ if ( ResultAreaColumn == ResultAreaColumnPreviewHidden )
588
+ return false ;
589
+ #if DEBUG
590
+ throw new NotImplementedException ( "ResultAreaColumn should match ResultAreaColumnPreviewShown/ResultAreaColumnPreviewHidden value" ) ;
591
+ #else
592
+ Log . Error ( "MainViewModel" , "ResultAreaColumnPreviewHidden/ResultAreaColumnPreviewShown int value not implemented" , "InternalPreviewVisible" ) ;
593
+ #endif
594
+ return false ;
594
595
}
595
- else if ( Settings . UseExternalPreview && CanExternalPreviewSelectedResult ( out var path ) )
596
+ }
597
+
598
+ private static readonly int ResultAreaColumnPreviewShown = 1 ;
599
+
600
+ private static readonly int ResultAreaColumnPreviewHidden = 3 ;
601
+
602
+ public int ResultAreaColumn { get ; set ; } = ResultAreaColumnPreviewShown ;
603
+
604
+ // This is not a reliable indicator of whether external preview is visible due to the
605
+ // ability of manually closing/exiting the external preview program, and this does not inform flow that
606
+ // preview is no longer available.
607
+ public bool ExternalPreviewVisible { get ; set ; } = false ;
608
+
609
+ private void ShowPreview ( )
610
+ {
611
+ var useExternalPreview = PluginManager . UseExternalPreview ( ) ;
612
+
613
+ if ( ! useExternalPreview )
614
+ ShowInternalPreview ( ) ;
615
+
616
+ if ( useExternalPreview )
596
617
{
597
- _ = ToggleExternalPreviewAsync ( path ) ;
618
+ // Internal preview may still be on when user switches to external
619
+ if ( InternalPreviewVisible )
620
+ HideInternalPreview ( ) ;
621
+
622
+ if ( CanExternalPreviewSelectedResult ( out var path ) )
623
+ OpenExternalPreview ( path ) ;
598
624
}
599
- else
625
+
626
+ }
627
+
628
+ private void HidePreview ( )
629
+ {
630
+ if ( PluginManager . UseExternalPreview ( ) )
631
+ CloseExternalPreview ( ) ;
632
+
633
+ if ( InternalPreviewVisible )
634
+ HideInternalPreview ( ) ;
635
+ }
636
+
637
+ [ RelayCommand ]
638
+ private void TogglePreview ( )
639
+ {
640
+ switch ( InternalPreviewVisible || ExternalPreviewVisible )
600
641
{
601
- ShowInternalPreview ( ) ;
642
+ case true :
643
+ HidePreview ( ) ;
644
+ break ;
645
+
646
+ case false :
647
+ ShowPreview ( ) ;
648
+ break ;
602
649
}
603
650
}
604
651
605
652
private void ToggleInternalPreview ( )
606
653
{
607
- if ( ! PreviewVisible )
654
+ if ( ! InternalPreviewVisible )
608
655
{
609
656
ShowInternalPreview ( ) ;
610
657
}
@@ -614,81 +661,72 @@ private void ToggleInternalPreview()
614
661
}
615
662
}
616
663
617
- private async Task ToggleExternalPreviewAsync ( string path )
618
- {
619
- bool success = await QuickLookHelper . ToggleQuickLookAsync ( path ) . ConfigureAwait ( false ) ;
620
- if ( success )
621
- {
622
- ExternalPreviewOpen = ! ExternalPreviewOpen ;
623
- }
624
- }
625
-
626
- private async Task OpenExternalPreviewAsync ( string path , bool sendFailToast = true )
664
+ private void OpenExternalPreview ( string path , bool sendFailToast = true )
627
665
{
628
- bool success = await QuickLookHelper . OpenQuickLookAsync ( path , sendFailToast ) . ConfigureAwait ( false ) ;
629
- if ( success )
630
- {
631
- ExternalPreviewOpen = false ;
632
- }
666
+ _ = PluginManager . OpenExternalPreviewAsync ( path , sendFailToast ) . ConfigureAwait ( false ) ;
667
+ ExternalPreviewVisible = true ;
633
668
}
634
669
635
- private async Task CloseExternalPreviewAsync ( )
670
+ private void CloseExternalPreview ( )
636
671
{
637
- bool success = await QuickLookHelper . CloseQuickLookAsync ( ) . ConfigureAwait ( false ) ;
638
- if ( success )
639
- {
640
- ExternalPreviewOpen = false ;
641
- }
672
+ _ = PluginManager . CloseExternalPreviewAsync ( ) . ConfigureAwait ( false ) ;
673
+ ExternalPreviewVisible = false ;
642
674
}
643
675
644
- private async Task SwitchExternalPreviewAsync ( string path , bool sendFailToast = true )
676
+ private void SwitchExternalPreview ( string path , bool sendFailToast = true )
645
677
{
646
- // Switches preview content
647
- // When external is off, do nothing
648
- _ = QuickLookHelper . SwitchQuickLookAsync ( path , sendFailToast ) . ConfigureAwait ( false ) ;
678
+ _ = PluginManager . SwitchExternalPreviewAsync ( path , sendFailToast ) . ConfigureAwait ( false ) ;
649
679
}
650
680
651
681
private void ShowInternalPreview ( )
652
682
{
653
- ResultAreaColumn = 1 ;
654
- PreviewVisible = true ;
683
+ ResultAreaColumn = ResultAreaColumnPreviewShown ;
655
684
Results . SelectedItem ? . LoadPreviewImage ( ) ;
656
685
}
657
686
658
687
private void HideInternalPreview ( )
659
688
{
660
- ResultAreaColumn = 3 ;
661
- PreviewVisible = false ;
689
+ ResultAreaColumn = ResultAreaColumnPreviewHidden ;
662
690
}
663
691
664
692
public void ResetPreview ( )
665
693
{
666
- if ( Settings . AlwaysPreview == true && ! PreviewVisible )
667
- {
668
- ShowInternalPreview ( ) ;
669
- }
670
- else
694
+ switch ( Settings . AlwaysPreview )
671
695
{
672
- HideInternalPreview ( ) ;
696
+ case true :
697
+ ShowPreview ( ) ;
698
+ break ;
699
+
700
+ case false :
701
+ HidePreview ( ) ;
702
+ break ;
673
703
}
674
704
}
675
705
676
706
private void UpdatePreview ( )
677
707
{
678
- if ( PreviewVisible )
708
+ if ( InternalPreviewVisible )
679
709
{
680
710
Results . SelectedItem ? . LoadPreviewImage ( ) ;
711
+ return ;
681
712
}
682
- else if ( Settings . UseExternalPreview )
713
+
714
+ switch ( PluginManager . UseExternalPreview ( ) )
683
715
{
684
- if ( CanExternalPreviewSelectedResult ( out var path ) )
685
- {
686
- _ = SwitchExternalPreviewAsync ( path , false ) ;
687
- }
688
- else
689
- {
690
- _ = CloseExternalPreviewAsync ( ) ;
691
- }
716
+ case true
717
+ when ExternalPreviewVisible && CanExternalPreviewSelectedResult ( out var path ) :
718
+ SwitchExternalPreview ( path , false ) ;
719
+ break ;
720
+
721
+ case true
722
+ when ! ExternalPreviewVisible && Settings . AlwaysPreview && CanExternalPreviewSelectedResult ( out var path ) :
723
+ ShowPreview ( ) ;
724
+ break ;
725
+
726
+ case true
727
+ when ! CanExternalPreviewSelectedResult ( out var _ ) :
728
+ HidePreview ( ) ;
729
+ break ;
692
730
}
693
731
}
694
732
@@ -1104,8 +1142,8 @@ public async void Hide()
1104
1142
// Trick for no delay
1105
1143
MainWindowOpacity = 0 ;
1106
1144
1107
- if ( Settings . UseExternalPreview )
1108
- _ = CloseExternalPreviewAsync ( ) ;
1145
+ if ( ExternalPreviewVisible )
1146
+ CloseExternalPreview ( ) ;
1109
1147
1110
1148
if ( ! SelectedIsFromQueryResults ( ) )
1111
1149
{
0 commit comments