@@ -13,11 +13,13 @@ namespace Files.App.ViewModels.UserControls
1313 public class InfoPaneViewModel : ObservableObject , IDisposable
1414 {
1515 private IInfoPaneSettingsService infoPaneSettingsService { get ; } = Ioc . Default . GetRequiredService < IInfoPaneSettingsService > ( ) ;
16-
17- private readonly IContentPageContext contentPageContextService ;
16+ private IContentPageContext contentPageContext { get ; } = Ioc . Default . GetRequiredService < IContentPageContext > ( ) ;
1817
1918 private CancellationTokenSource loadCancellationTokenSource ;
2019
20+ /// <summary>
21+ /// Value indicating if the info pane is on/off
22+ /// </summary>
2123 private bool isEnabled ;
2224 public bool IsEnabled
2325 {
@@ -30,13 +32,10 @@ public bool IsEnabled
3032 }
3133 }
3234
33- private bool isItemSelected ;
34- public bool IsItemSelected
35- {
36- get => isItemSelected ;
37- set => SetProperty ( ref isItemSelected , value ) ;
38- }
39-
35+ /// <summary>
36+ /// Current selected item in the file list.
37+ /// TODO see about removing this and accessing it from the page context instead
38+ /// </summary>
4039 private ListedItem selectedItem ;
4140 public ListedItem SelectedItem
4241 {
@@ -57,6 +56,9 @@ public ListedItem SelectedItem
5756 }
5857 }
5958
59+ /// <summary>
60+ /// Enum indicating whether to show the details or preview tab
61+ /// </summary>
6062 public InfoPaneTabs SelectedTab
6163 {
6264 get => infoPaneSettingsService . SelectedTab ;
@@ -69,6 +71,9 @@ public InfoPaneTabs SelectedTab
6971 }
7072 }
7173
74+ /// <summary>
75+ /// Enum indicating if details/preview are available
76+ /// </summary>
7277 private PreviewPaneStates previewPaneState ;
7378 public PreviewPaneStates PreviewPaneState
7479 {
@@ -80,6 +85,9 @@ public PreviewPaneStates PreviewPaneState
8085 }
8186 }
8287
88+ /// <summary>
89+ /// Value indicating if the download cloud files option should be displayed
90+ /// </summary>
8391 private bool showCloudItemButton ;
8492 public bool ShowCloudItemButton
8593 {
@@ -101,13 +109,31 @@ PreviewPaneState is PreviewPaneStates.NoPreviewAvailable ||
101109
102110 public ObservableCollection < TagsListItem > Items { get ; } = new ( ) ;
103111
104- public InfoPaneViewModel ( IContentPageContext contentPageContextService = null )
112+ public InfoPaneViewModel ( )
105113 {
106114 infoPaneSettingsService . PropertyChanged += PreviewSettingsService_OnPropertyChangedEvent ;
115+ contentPageContext . PropertyChanged += ContentPageContext_PropertyChanged ;
107116
108117 IsEnabled = infoPaneSettingsService . IsEnabled ;
118+ }
109119
110- this . contentPageContextService = contentPageContextService ?? Ioc . Default . GetRequiredService < IContentPageContext > ( ) ;
120+ private void ContentPageContext_PropertyChanged ( object ? sender , PropertyChangedEventArgs e )
121+ {
122+ switch ( e . PropertyName )
123+ {
124+ case nameof ( IContentPageContext . Folder ) :
125+ case nameof ( IContentPageContext . SelectedItem ) :
126+
127+ if ( contentPageContext . SelectedItems . Count == 1 )
128+ SelectedItem = contentPageContext . SelectedItems . First ( ) ;
129+ else
130+ SelectedItem = null ;
131+
132+ var shouldUpdatePreview = ( ( MainWindow . Instance . Content as Frame ) ? . Content as MainPage ) ? . ShouldPreviewPaneBeActive ;
133+ if ( shouldUpdatePreview == true )
134+ _ = UpdateSelectedItemPreviewAsync ( ) ;
135+ break ;
136+ }
111137 }
112138
113139 private async Task LoadPreviewControlAsync ( CancellationToken token , bool downloadItem )
@@ -148,7 +174,7 @@ private async Task<UserControl> GetBuiltInPreviewControlAsync(ListedItem item, b
148174 {
149175 ShowCloudItemButton = false ;
150176
151- if ( SelectedItem . IsRecycleBinItem )
177+ if ( item . IsRecycleBinItem )
152178 {
153179 if ( item . PrimaryItemAttribute == StorageItemTypes . Folder && ! item . IsArchive )
154180 {
@@ -159,7 +185,7 @@ private async Task<UserControl> GetBuiltInPreviewControlAsync(ListedItem item, b
159185 }
160186 else
161187 {
162- var model = new BasicPreviewViewModel ( SelectedItem ) ;
188+ var model = new BasicPreviewViewModel ( item ) ;
163189 await model . LoadAsync ( ) ;
164190
165191 return new BasicPreview ( model ) ;
@@ -168,7 +194,7 @@ private async Task<UserControl> GetBuiltInPreviewControlAsync(ListedItem item, b
168194
169195 if ( item . IsShortcut )
170196 {
171- var model = new ShortcutPreviewViewModel ( SelectedItem ) ;
197+ var model = new ShortcutPreviewViewModel ( item ) ;
172198 await model . LoadAsync ( ) ;
173199
174200 return new BasicPreview ( model ) ;
@@ -187,7 +213,7 @@ private async Task<UserControl> GetBuiltInPreviewControlAsync(ListedItem item, b
187213 var model = new FolderPreviewViewModel ( item ) ;
188214 await model . LoadAsync ( ) ;
189215
190- if ( ! isItemSelected )
216+ if ( contentPageContext . SelectedItems . Count == 0 )
191217 item . FileTags ??= FileTagsHelper . ReadFileTag ( item . ItemPath ) ;
192218
193219 return new FolderPreview ( model ) ;
@@ -206,7 +232,7 @@ private async Task<UserControl> GetBuiltInPreviewControlAsync(ListedItem item, b
206232 var ext = item . FileExtension . ToLowerInvariant ( ) ;
207233
208234 if ( ! item . IsFtpItem &&
209- contentPageContextService . PageType != ContentPageTypes . ZipFolder &&
235+ contentPageContext . PageType != ContentPageTypes . ZipFolder &&
210236 ( FileExtensionHelpers . IsAudioFile ( ext ) || FileExtensionHelpers . IsVideoFile ( ext ) ) )
211237 {
212238 var model = new MediaPreviewViewModel ( item ) ;
@@ -291,7 +317,7 @@ private async Task<UserControl> GetBuiltInPreviewControlAsync(ListedItem item, b
291317 public async Task UpdateSelectedItemPreviewAsync ( bool downloadItem = false )
292318 {
293319 loadCancellationTokenSource ? . Cancel ( ) ;
294- if ( SelectedItem is not null && IsItemSelected )
320+ if ( SelectedItem is not null && contentPageContext . SelectedItems . Count == 1 )
295321 {
296322 SelectedItem ? . FileDetails ? . Clear ( ) ;
297323
@@ -328,15 +354,15 @@ public async Task UpdateSelectedItemPreviewAsync(bool downloadItem = false)
328354 PreviewPaneState = PreviewPaneStates . NoPreviewOrDetailsAvailable ;
329355 }
330356 }
331- else if ( IsItemSelected )
357+ else if ( contentPageContext . SelectedItems . Count > 0 )
332358 {
333359 PreviewPaneContent = null ;
334360 PreviewPaneState = PreviewPaneStates . NoPreviewOrDetailsAvailable ;
335361 }
336362 else
337363 {
338364 SelectedItem ? . FileDetails ? . Clear ( ) ;
339- var currentFolder = contentPageContextService . Folder ;
365+ var currentFolder = contentPageContext . Folder ;
340366
341367 if ( currentFolder is null )
342368 {
@@ -388,6 +414,7 @@ private async void PreviewSettingsService_OnPropertyChangedEvent(object? sender,
388414 if ( isEnabled != newEnablingStatus )
389415 {
390416 isEnabled = newEnablingStatus ;
417+ _ = UpdateSelectedItemPreviewAsync ( ) ;
391418 OnPropertyChanged ( nameof ( IsEnabled ) ) ;
392419 }
393420 }
0 commit comments