@@ -399,18 +399,6 @@ public async Task<bool> ToggleModUnsafe(bool enable, Mod mod, bool includeIntern
399
399
if ( cachedIndex != null )
400
400
{
401
401
cachedIndex . SetDataOffset ( mod . fullPath , 0 ) ;
402
-
403
- // This is a metadata entry being deleted, we'll need to restore the metadata entries back to default.
404
- if ( mod . fullPath . EndsWith ( ".meta" ) )
405
- {
406
- var root = await XivCache . GetFirstRoot ( mod . fullPath ) ;
407
- await ItemMetadata . RestoreDefaultMetadata ( root , cachedIndex , cachedModlist ) ;
408
- }
409
-
410
- if ( mod . fullPath . EndsWith ( ".rgsp" ) )
411
- {
412
- await CMP . RestoreDefaultScaling ( mod . fullPath , cachedIndex , cachedModlist ) ;
413
- }
414
402
}
415
403
else
416
404
{
@@ -450,7 +438,7 @@ public async Task ToggleAllMods(bool enable, IProgress<(int current, int total,
450
438
451
439
public async Task ToggleMods ( bool enable , IEnumerable < string > filePaths , IProgress < ( int current , int total , string message ) > progress = null )
452
440
{
453
- var index = new Index ( _gameDirectory ) ;
441
+ var _index = new Index ( _gameDirectory ) ;
454
442
455
443
var modList = await GetModListAsync ( ) ;
456
444
@@ -487,7 +475,7 @@ public async Task ToggleMods(bool enable, IEnumerable<string> filePaths, IProgre
487
475
var df = IOUtil . GetDataFileFromPath ( modEntry . fullPath ) ;
488
476
if ( ! indexFiles . ContainsKey ( df ) )
489
477
{
490
- indexFiles . Add ( df , await index . GetIndexFile ( df ) ) ;
478
+ indexFiles . Add ( df , await _index . GetIndexFile ( df ) ) ;
491
479
}
492
480
493
481
@@ -506,7 +494,7 @@ public async Task ToggleMods(bool enable, IEnumerable<string> filePaths, IProgre
506
494
modList . Mods . Remove ( modEntry ) ;
507
495
}
508
496
}
509
- else
497
+ else if ( enable )
510
498
{
511
499
progress ? . Report ( ( 0 , 0 , "Expanding Metadata Entries..." ) ) ;
512
500
@@ -541,11 +529,42 @@ public async Task ToggleMods(bool enable, IEnumerable<string> filePaths, IProgre
541
529
{
542
530
await CMP . ApplyRgspFile ( mod . fullPath , indexFiles [ XivDataFile . _04_Chara ] , modList ) ;
543
531
}
532
+ } else
533
+ {
534
+ progress ? . Report ( ( 0 , 0 , "Restoring Metadata Entries..." ) ) ;
535
+ var metadataEntries = mods . Where ( x => x . fullPath . EndsWith ( ".meta" ) ) . ToList ( ) ;
536
+ var _dat = new Dat ( XivCache . GameInfo . GameDirectory ) ;
537
+
538
+ Dictionary < XivDataFile , List < ItemMetadata > > metadata = new Dictionary < XivDataFile , List < ItemMetadata > > ( ) ;
539
+ foreach ( var mod in metadataEntries )
540
+ {
541
+ var root = await XivCache . GetFirstRoot ( mod . fullPath ) ;
542
+ var df = IOUtil . GetDataFileFromPath ( mod . fullPath ) ;
543
+ var meta = await ItemMetadata . GetMetadata ( root , true ) ;
544
+ if ( ! metadata . ContainsKey ( df ) )
545
+ {
546
+ metadata . Add ( df , new List < ItemMetadata > ( ) ) ;
547
+ }
548
+ metadata [ df ] . Add ( meta ) ;
549
+ }
550
+
551
+ foreach ( var dkv in metadata )
552
+ {
553
+ var df = dkv . Key ;
554
+ await ItemMetadata . ApplyMetadataBatched ( dkv . Value , indexFiles [ df ] , modList ) ;
555
+ }
556
+
557
+ var rgspEntries = mods . Where ( x => x . fullPath . EndsWith ( ".rgsp" ) ) . ToList ( ) ;
558
+ foreach ( var mod in rgspEntries )
559
+ {
560
+ await CMP . RestoreDefaultScaling ( mod . fullPath , indexFiles [ XivDataFile . _04_Chara ] , modList ) ;
561
+ }
562
+
544
563
}
545
564
546
565
foreach ( var kv in indexFiles )
547
566
{
548
- await index . SaveIndexFile ( kv . Value ) ;
567
+ await _index . SaveIndexFile ( kv . Value ) ;
549
568
}
550
569
551
570
SaveModList ( modList ) ;
@@ -614,6 +633,20 @@ where mod.fullPath.Equals(modItemPath)
614
633
}
615
634
616
635
await ToggleModUnsafe ( false , modToRemove , allowInternal , true , index , modList ) ;
636
+
637
+
638
+ // This is a metadata entry being deleted, we'll need to restore the metadata entries back to default.
639
+ if ( modToRemove . fullPath . EndsWith ( ".meta" ) )
640
+ {
641
+ var root = await XivCache . GetFirstRoot ( modToRemove . fullPath ) ;
642
+ await ItemMetadata . RestoreDefaultMetadata ( root , index , modList ) ;
643
+ }
644
+
645
+ if ( modToRemove . fullPath . EndsWith ( ".rgsp" ) )
646
+ {
647
+ await CMP . RestoreDefaultScaling ( modToRemove . fullPath , index , modList ) ;
648
+ }
649
+
617
650
modList . Mods . Remove ( modToRemove ) ;
618
651
619
652
if ( doSave )
@@ -706,6 +739,11 @@ public async Task CleanUpModlist(IProgress<(int Current, int Total, string Messa
706
739
mod . name = cmpName ;
707
740
mod . category = "Racial Scaling" ;
708
741
}
742
+ else if ( mod . fullPath . StartsWith ( "ui/" ) )
743
+ {
744
+ mod . name = Path . GetFileName ( mod . fullPath ) ;
745
+ mod . category = "UI" ;
746
+ }
709
747
else
710
748
{
711
749
mod . name = Path . GetFileName ( mod . fullPath ) ;
0 commit comments