44using System . Text ;
55using System . Windows ;
66using System . Windows . Data ;
7+ using CUE4Parse . FileProvider . Objects ;
78using CUE4Parse . UE4 . Versions ;
89using CUE4Parse . UE4 . VirtualFileSystem ;
910using FModel . Framework ;
@@ -60,12 +61,15 @@ public FPackageFileVersion Version
6061 public RangeObservableCollection < TreeItem > Folders { get ; }
6162 public ICollectionView FoldersView { get ; }
6263
63- public TreeItem ( string header , string archive , string mountPoint , FPackageFileVersion version , string pathHere )
64+ public TreeItem ( string header , GameFile entry , string pathHere )
6465 {
6566 Header = header ;
66- Archive = archive ;
67- MountPoint = mountPoint ;
68- Version = version ;
67+ if ( entry is VfsEntry vfsEntry )
68+ {
69+ Archive = vfsEntry . Vfs . Name ;
70+ MountPoint = vfsEntry . Vfs . MountPoint ;
71+ Version = vfsEntry . Vfs . Ver ;
72+ }
6973 PathAtThisPoint = pathHere ;
7074 AssetsList = new AssetsListViewModel ( ) ;
7175 Folders = new RangeObservableCollection < TreeItem > ( ) ;
@@ -86,7 +90,7 @@ public AssetsFolderViewModel()
8690 FoldersView = new ListCollectionView ( Folders ) { SortDescriptions = { new SortDescription ( "Header" , ListSortDirection . Ascending ) } } ;
8791 }
8892
89- public void BulkPopulate ( IReadOnlyCollection < VfsEntry > entries )
93+ public void BulkPopulate ( IReadOnlyCollection < GameFile > entries )
9094 {
9195 if ( entries == null || entries . Count == 0 )
9296 return ;
@@ -95,54 +99,48 @@ public void BulkPopulate(IReadOnlyCollection<VfsEntry> entries)
9599 {
96100 var treeItems = new RangeObservableCollection < TreeItem > ( ) ;
97101 treeItems . SetSuppressionState ( true ) ;
98- var items = new List < AssetItem > ( entries . Count ) ;
99102
100103 foreach ( var entry in entries )
101104 {
102- var item = new AssetItem ( entry . Path , entry . IsEncrypted , entry . Offset , entry . Size , entry . Vfs . Name , entry . CompressionMethod ) ;
103- items . Add ( item ) ;
105+ TreeItem lastNode = null ;
106+ var folders = entry . Path . Split ( '/' , StringSplitOptions . RemoveEmptyEntries ) ;
107+ var builder = new StringBuilder ( 64 ) ;
108+ var parentNode = treeItems ;
104109
110+ for ( var i = 0 ; i < folders . Length - 1 ; i ++ )
105111 {
106- TreeItem lastNode = null ;
107- var folders = item . FullPath . Split ( '/' , StringSplitOptions . RemoveEmptyEntries ) ;
108- var builder = new StringBuilder ( 64 ) ;
109- var parentNode = treeItems ;
112+ var folder = folders [ i ] ;
113+ builder . Append ( folder ) . Append ( '/' ) ;
114+ lastNode = FindByHeaderOrNull ( parentNode , folder ) ;
110115
111- for ( var i = 0 ; i < folders . Length - 1 ; i ++ )
116+ static TreeItem FindByHeaderOrNull ( IReadOnlyList < TreeItem > list , string header )
112117 {
113- var folder = folders [ i ] ;
114- builder . Append ( folder ) . Append ( '/' ) ;
115- lastNode = FindByHeaderOrNull ( parentNode , folder ) ;
116-
117- static TreeItem FindByHeaderOrNull ( IReadOnlyList < TreeItem > list , string header )
118+ for ( var i = 0 ; i < list . Count ; i ++ )
118119 {
119- for ( var i = 0 ; i < list . Count ; i ++ )
120- {
121- if ( list [ i ] . Header == header )
122- return list [ i ] ;
123- }
124-
125- return null ;
120+ if ( list [ i ] . Header == header )
121+ return list [ i ] ;
126122 }
127123
128- if ( lastNode == null )
129- {
130- var nodePath = builder . ToString ( ) ;
131- lastNode = new TreeItem ( folder , item . Archive , entry . Vfs . MountPoint , entry . Vfs . Ver , nodePath [ ..^ 1 ] ) ;
132- lastNode . Folders . SetSuppressionState ( true ) ;
133- lastNode . AssetsList . Assets . SetSuppressionState ( true ) ;
134- parentNode . Add ( lastNode ) ;
135- }
124+ return null ;
125+ }
136126
137- parentNode = lastNode . Folders ;
127+ if ( lastNode == null )
128+ {
129+ var nodePath = builder . ToString ( ) ;
130+ lastNode = new TreeItem ( folder , entry , nodePath [ ..^ 1 ] ) ;
131+ lastNode . Folders . SetSuppressionState ( true ) ;
132+ lastNode . AssetsList . Assets . SetSuppressionState ( true ) ;
133+ parentNode . Add ( lastNode ) ;
138134 }
139135
140- lastNode ? . AssetsList . Assets . Add ( item ) ;
136+ parentNode = lastNode . Folders ;
141137 }
138+
139+ lastNode ? . AssetsList . Assets . Add ( entry ) ;
142140 }
143141
144142 Folders . AddRange ( treeItems ) ;
145- ApplicationService . ApplicationView . CUE4Parse . SearchVm . SearchResults . AddRange ( items ) ;
143+ ApplicationService . ApplicationView . CUE4Parse . SearchVm . SearchResults . AddRange ( entries ) ;
146144
147145 foreach ( var folder in Folders )
148146 InvokeOnCollectionChanged ( folder ) ;
0 commit comments