Maybe sort race condition.

This commit is contained in:
Ottermandias 2023-05-01 22:50:34 +02:00
parent a38a989fe7
commit ee50994b39
5 changed files with 11 additions and 6 deletions

View file

@ -42,6 +42,8 @@ public class CollectionCacheManager : IDisposable
_active = active;
_storage = storage;
if (!_active.Individuals.IsLoaded)
_active.Individuals.Loaded += CreateNecessaryCaches;
_communicator.CollectionChange.Subscribe(OnCollectionChange, -100);
_communicator.ModPathChanged.Subscribe(OnModChangeAddition, -100);
_communicator.ModPathChanged.Subscribe(OnModChangeRemoval, 100);
@ -49,11 +51,11 @@ public class CollectionCacheManager : IDisposable
_communicator.ModOptionChanged.Subscribe(OnModOptionChange, -100);
_communicator.ModSettingChanged.Subscribe(OnModSettingChange);
_communicator.CollectionInheritanceChanged.Subscribe(OnCollectionInheritanceChange);
CreateNecessaryCaches();
_active.Individuals.Loaded += CreateNecessaryCaches;
if (!MetaFileManager.CharacterUtility.Ready)
MetaFileManager.CharacterUtility.LoadingFinished += IncrementCounters;
CreateNecessaryCaches();
}
public void Dispose()
@ -303,6 +305,7 @@ public class CollectionCacheManager : IDisposable
.Select(c => Task.Run(() => CalculateEffectiveFileListInternal(c)))
.ToArray();
Penumbra.Log.Debug($"Creating {tasks.Length} necessary caches.");
Task.WaitAll(tasks);
}
}

View file

@ -43,7 +43,7 @@ public class ActiveCollections : ISavable, IDisposable
Current = storage.DefaultNamed;
Default = storage.DefaultNamed;
Interface = storage.DefaultNamed;
Individuals = new IndividualCollections(actors, config);
Individuals = new IndividualCollections(actors, config, false);
_communicator.CollectionChange.Subscribe(OnCollectionChange, -100);
LoadCollections();
UpdateCurrentCollectionInUse();

View file

@ -1,7 +1,6 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Dalamud.Game;
using Dalamud.Game.ClientState.Objects.Enums;
using Dalamud.Interface.Internal.Notifications;
using Newtonsoft.Json.Linq;
@ -37,6 +36,7 @@ public partial class IndividualCollections
{
if (ReadJObjectInternal(obj, storage))
saver.ImmediateSave(parent);
IsLoaded = true;
Loaded.Invoke();
_actorService.FinishedCreation -= Func;
});

View file

@ -18,14 +18,16 @@ public sealed partial class IndividualCollections
private readonly Dictionary<ActorIdentifier, ModCollection> _individuals = new();
public event Action Loaded;
public bool IsLoaded { get; private set; }
public IReadOnlyList<(string DisplayName, IReadOnlyList<ActorIdentifier> Identifiers, ModCollection Collection)> Assignments
=> _assignments;
public IndividualCollections(ActorService actorService, Configuration config)
public IndividualCollections(ActorService actorService, Configuration config, bool temporary)
{
_config = config;
_actorService = actorService;
IsLoaded = temporary;
Loaded += () => Penumbra.Log.Information($"{_assignments.Count} Individual Assignments loaded after delay.");
}

View file

@ -25,7 +25,7 @@ public class TempCollectionManager : IDisposable
_communicator = communicator;
_actors = actors;
_storage = storage;
Collections = new IndividualCollections(actors, config);
Collections = new IndividualCollections(actors, config, true);
_communicator.TemporaryGlobalModChange.Subscribe(OnGlobalModChange);
}