33using Files . Interacts ;
44using GalaSoft . MvvmLight ;
55using System ;
6+ using System . Linq ;
7+ using System . Threading . Tasks ;
68using Windows . Foundation . Metadata ;
79using Windows . Security . Cryptography . Core ;
810using Windows . Storage ;
11+ using Windows . Storage . Search ;
912using Windows . UI ;
1013using Windows . UI . WindowManagement ;
1114using Windows . UI . Xaml ;
@@ -58,16 +61,19 @@ private async void Properties_Loaded(object sender, RoutedEventArgs e)
5861 if ( selectedItem . PrimaryItemAttribute == StorageItemTypes . File )
5962 {
6063 selectedStorageItem = await StorageFile . GetFileFromPathAsync ( selectedItem . ItemPath ) ;
64+ ItemProperties . ItemSize = selectedItem . FileSize ;
6165 }
6266 else if ( selectedItem . PrimaryItemAttribute == StorageItemTypes . Folder )
6367 {
64- selectedStorageItem = await StorageFolder . GetFolderFromPathAsync ( selectedItem . ItemPath ) ;
68+ var storageFolder = await StorageFolder . GetFolderFromPathAsync ( selectedItem . ItemPath ) ;
69+ selectedStorageItem = storageFolder ;
70+ GetFolderSize ( storageFolder ) ;
6571 }
6672
6773 ItemProperties . ItemName = selectedItem . ItemName ;
6874 ItemProperties . ItemType = selectedItem . ItemType ;
6975 ItemProperties . ItemPath = selectedItem . ItemPath ;
70- ItemProperties . ItemSize = selectedItem . FileSize ;
76+
7177 ItemProperties . LoadFileIcon = selectedItem . LoadFileIcon ;
7278 ItemProperties . LoadFolderGlyph = selectedItem . LoadFolderGlyph ;
7379 ItemProperties . LoadUnknownTypeGlyph = selectedItem . LoadUnknownTypeGlyph ;
@@ -105,6 +111,7 @@ private async void Properties_Loaded(object sender, RoutedEventArgs e)
105111 // GetFolderFromPathAsync cannot access recyclebin folder
106112 // Currently a fake timestamp is used
107113 ItemProperties . ItemCreatedTimestamp = ListedItem . GetFriendlyDate ( parentDirectory . ItemDateModifiedReal ) ;
114+ ItemProperties . ItemSize = parentDirectory . FileSize ;
108115 }
109116 else
110117 {
@@ -114,7 +121,6 @@ private async void Properties_Loaded(object sender, RoutedEventArgs e)
114121 ItemProperties . ItemName = parentDirectory . ItemName ;
115122 ItemProperties . ItemType = parentDirectory . ItemType ;
116123 ItemProperties . ItemPath = parentDirectory . ItemPath ;
117- ItemProperties . ItemSize = parentDirectory . FileSize ;
118124 ItemProperties . LoadFileIcon = false ;
119125 ItemProperties . LoadFolderGlyph = true ;
120126 ItemProperties . LoadUnknownTypeGlyph = false ;
@@ -123,7 +129,14 @@ private async void Properties_Loaded(object sender, RoutedEventArgs e)
123129 ItemProperties . ItemMD5HashProgressVisibility = Visibility . Collapsed ;
124130 }
125131 }
126-
132+ private async void GetFolderSize ( StorageFolder storageFolder )
133+ {
134+ var folders = storageFolder . CreateFileQuery ( CommonFileQuery . OrderByName ) ;
135+ var fileSizeTasks = ( await folders . GetFilesAsync ( ) ) . Select ( async file => ( await file . GetBasicPropertiesAsync ( ) ) . Size ) ;
136+ var sizes = await Task . WhenAll ( fileSizeTasks ) ;
137+ var folderSize = sizes . Sum ( singleSize => ( long ) singleSize ) ;
138+ ItemProperties . ItemSize = ByteSizeLib . ByteSize . FromBytes ( folderSize ) . ToString ( ) ;
139+ }
127140 private void AppSettings_ThemeModeChanged ( object sender , EventArgs e )
128141 {
129142 RequestedTheme = ThemeHelper . RootTheme ;
0 commit comments