Skip to content

Commit a9a556e

Browse files
committed
Add CheckCurrentChangedItemFunc,
1 parent 0af9667 commit a9a556e

File tree

4 files changed

+24
-4
lines changed

4 files changed

+24
-4
lines changed

Penumbra/Api/Api/CollectionApi.cs

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using Penumbra.Api.Enums;
33
using Penumbra.Collections;
44
using Penumbra.Collections.Manager;
5+
using Penumbra.Mods;
56

67
namespace Penumbra.Api.Api;
78

@@ -23,11 +24,27 @@ public Dictionary<Guid, string> GetCollections()
2324
.Select(c => (c.Identity.Id, c.Identity.Name)));
2425

2526
list.AddRange(collections.Storage
26-
.Where(c => string.Equals(c.Identity.Name, identifier, StringComparison.OrdinalIgnoreCase) && !list.Contains((c.Identity.Id, c.Identity.Name)))
27+
.Where(c => string.Equals(c.Identity.Name, identifier, StringComparison.OrdinalIgnoreCase)
28+
&& !list.Contains((c.Identity.Id, c.Identity.Name)))
2729
.Select(c => (c.Identity.Id, c.Identity.Name)));
2830
return list;
2931
}
3032

33+
public Func<string, (string ModDirectory, string ModName)[]> CheckCurrentChangedItemFunc()
34+
{
35+
var weakRef = new WeakReference<CollectionManager>(collections);
36+
return s =>
37+
{
38+
if (!weakRef.TryGetTarget(out var c))
39+
throw new ObjectDisposedException("The underlying collection storage of this IPC container was disposed.");
40+
41+
if (!c.Active.Current.ChangedItems.TryGetValue(s, out var d))
42+
return [];
43+
44+
return d.Item1.Select(m => (m is Mod mod ? mod.Identifier : string.Empty, m.Name.Text)).ToArray();
45+
};
46+
}
47+
3148
public Dictionary<string, object?> GetChangedItemsForCollection(Guid collectionId)
3249
{
3350
try
@@ -74,7 +91,8 @@ public Dictionary<Guid, string> GetCollections()
7491
}
7592

7693
public Guid[] GetCollectionByName(string name)
77-
=> collections.Storage.Where(c => string.Equals(name, c.Identity.Name, StringComparison.OrdinalIgnoreCase)).Select(c => c.Identity.Id).ToArray();
94+
=> collections.Storage.Where(c => string.Equals(name, c.Identity.Name, StringComparison.OrdinalIgnoreCase)).Select(c => c.Identity.Id)
95+
.ToArray();
7896

7997
public (PenumbraApiEc, (Guid Id, string Name)? OldCollection) SetCollection(ApiCollectionType type, Guid? collectionId,
8098
bool allowCreateNew, bool allowDelete)

Penumbra/Api/IpcProviders.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ public IpcProviders(IDalamudPluginInterface pi, IPenumbraApi api, CharacterUtili
2929
IpcSubscribers.GetCollectionForObject.Provider(pi, api.Collection),
3030
IpcSubscribers.SetCollection.Provider(pi, api.Collection),
3131
IpcSubscribers.SetCollectionForObject.Provider(pi, api.Collection),
32+
IpcSubscribers.CheckCurrentChangedItemFunc.Provider(pi, api.Collection),
3233

3334
IpcSubscribers.ConvertTextureFile.Provider(pi, api.Editing),
3435
IpcSubscribers.ConvertTextureData.Provider(pi, api.Editing),

Penumbra/Mods/Manager/ModChangedItemAdapter.cs renamed to Penumbra/Api/ModChangedItemAdapter.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using Penumbra.GameData.Data;
2+
using Penumbra.Mods.Manager;
23

3-
namespace Penumbra.Mods.Manager;
4+
namespace Penumbra.Api;
45

56
public sealed class ModChangedItemAdapter(WeakReference<ModStorage> storage)
67
: IReadOnlyDictionary<string, IReadOnlyDictionary<string, object?>>,

0 commit comments

Comments
 (0)