3
3
using Files . Interacts ;
4
4
using GalaSoft . MvvmLight ;
5
5
using System ;
6
+ using System . Linq ;
7
+ using System . Threading . Tasks ;
6
8
using Windows . Foundation . Metadata ;
7
9
using Windows . Security . Cryptography . Core ;
8
10
using Windows . Storage ;
11
+ using Windows . Storage . Search ;
9
12
using Windows . UI ;
10
13
using Windows . UI . WindowManagement ;
11
14
using Windows . UI . Xaml ;
@@ -58,16 +61,19 @@ private async void Properties_Loaded(object sender, RoutedEventArgs e)
58
61
if ( selectedItem . PrimaryItemAttribute == StorageItemTypes . File )
59
62
{
60
63
selectedStorageItem = await StorageFile . GetFileFromPathAsync ( selectedItem . ItemPath ) ;
64
+ ItemProperties . ItemSize = selectedItem . FileSize ;
61
65
}
62
66
else if ( selectedItem . PrimaryItemAttribute == StorageItemTypes . Folder )
63
67
{
64
- selectedStorageItem = await StorageFolder . GetFolderFromPathAsync ( selectedItem . ItemPath ) ;
68
+ var storageFolder = await StorageFolder . GetFolderFromPathAsync ( selectedItem . ItemPath ) ;
69
+ selectedStorageItem = storageFolder ;
70
+ GetFolderSize ( storageFolder ) ;
65
71
}
66
72
67
73
ItemProperties . ItemName = selectedItem . ItemName ;
68
74
ItemProperties . ItemType = selectedItem . ItemType ;
69
75
ItemProperties . ItemPath = selectedItem . ItemPath ;
70
- ItemProperties . ItemSize = selectedItem . FileSize ;
76
+
71
77
ItemProperties . LoadFileIcon = selectedItem . LoadFileIcon ;
72
78
ItemProperties . LoadFolderGlyph = selectedItem . LoadFolderGlyph ;
73
79
ItemProperties . LoadUnknownTypeGlyph = selectedItem . LoadUnknownTypeGlyph ;
@@ -105,6 +111,7 @@ private async void Properties_Loaded(object sender, RoutedEventArgs e)
105
111
// GetFolderFromPathAsync cannot access recyclebin folder
106
112
// Currently a fake timestamp is used
107
113
ItemProperties . ItemCreatedTimestamp = ListedItem . GetFriendlyDate ( parentDirectory . ItemDateModifiedReal ) ;
114
+ ItemProperties . ItemSize = parentDirectory . FileSize ;
108
115
}
109
116
else
110
117
{
@@ -114,7 +121,6 @@ private async void Properties_Loaded(object sender, RoutedEventArgs e)
114
121
ItemProperties . ItemName = parentDirectory . ItemName ;
115
122
ItemProperties . ItemType = parentDirectory . ItemType ;
116
123
ItemProperties . ItemPath = parentDirectory . ItemPath ;
117
- ItemProperties . ItemSize = parentDirectory . FileSize ;
118
124
ItemProperties . LoadFileIcon = false ;
119
125
ItemProperties . LoadFolderGlyph = true ;
120
126
ItemProperties . LoadUnknownTypeGlyph = false ;
@@ -123,7 +129,14 @@ private async void Properties_Loaded(object sender, RoutedEventArgs e)
123
129
ItemProperties . ItemMD5HashProgressVisibility = Visibility . Collapsed ;
124
130
}
125
131
}
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
+ }
127
140
private void AppSettings_ThemeModeChanged ( object sender , EventArgs e )
128
141
{
129
142
RequestedTheme = ThemeHelper . RootTheme ;
0 commit comments