瀏覽代碼

Refresh founders pack badge

Krzysztof Krysiński 3 月之前
父節點
當前提交
433e925fb2

+ 5 - 0
src/PixiEditor.Extensions.Runtime/ExtensionLoader.cs

@@ -16,10 +16,13 @@ public class ExtensionLoader
     public string UnpackedExtensionsPath { get; }
     public string UnpackedExtensionsPath { get; }
 
 
     public ExtensionServices Services { get; set; }
     public ExtensionServices Services { get; set; }
+    public event Action<string> ExtensionLoaded;
 
 
     private WasmRuntime.WasmRuntime _wasmRuntime = new WasmRuntime.WasmRuntime();
     private WasmRuntime.WasmRuntime _wasmRuntime = new WasmRuntime.WasmRuntime();
     private HashSet<string> loadedExtensions = new HashSet<string>();
     private HashSet<string> loadedExtensions = new HashSet<string>();
 
 
+
+
     public ExtensionLoader(string[] packagesPaths, string unpackedExtensionsPath)
     public ExtensionLoader(string[] packagesPaths, string unpackedExtensionsPath)
     {
     {
         PackagesPath = packagesPaths;
         PackagesPath = packagesPaths;
@@ -254,6 +257,7 @@ public class ExtensionLoader
         extension.Load();
         extension.Load();
         LoadedExtensions.Add(extension);
         LoadedExtensions.Add(extension);
         loadedExtensions.Add(metadata.UniqueName);
         loadedExtensions.Add(metadata.UniqueName);
+        ExtensionLoaded?.Invoke(metadata.UniqueName);
         return extension;
         return extension;
     }
     }
 
 
@@ -405,4 +409,5 @@ public class ExtensionLoader
 
 
         return null;
         return null;
     }
     }
+
 }
 }

+ 22 - 5
src/PixiEditor/ViewModels/SubViewModels/AdditionalContent/AdditionalContentViewModel.cs

@@ -1,16 +1,33 @@
-using PixiEditor.Platform;
+using PixiEditor.IdentityProvider;
+using PixiEditor.Platform;
 
 
 namespace PixiEditor.ViewModels.SubViewModels.AdditionalContent;
 namespace PixiEditor.ViewModels.SubViewModels.AdditionalContent;
 
 
-internal class AdditionalContentViewModel : ViewModelBase
+internal class AdditionalContentViewModel : SubViewModel<ViewModelMain>
 {
 {
     public IAdditionalContentProvider AdditionalContentProvider { get; }
     public IAdditionalContentProvider AdditionalContentProvider { get; }
-    public AdditionalContentViewModel(IAdditionalContentProvider additionalContentProvider)
+    public AdditionalContentViewModel(ViewModelMain owner, IAdditionalContentProvider additionalContentProvider) : base(owner)
     {
     {
         AdditionalContentProvider = additionalContentProvider;
         AdditionalContentProvider = additionalContentProvider;
+        Owner.ExtensionsSubViewModel.ExtensionLoader.ExtensionLoaded += OnExtensionLoaded;
+        IPlatform.Current.IdentityProvider.OwnedProductsUpdated += ProviderOnOwnedProductsUpdated;
     }
     }
 
 
+
     public bool IsFoundersPackAvailable => AdditionalContentProvider != null
     public bool IsFoundersPackAvailable => AdditionalContentProvider != null
-                                            && AdditionalContentProvider.IsContentOwned("PixiEditor.FoundersPack")
-                                            && ViewModelMain.Current.ExtensionsSubViewModel.ExtensionLoader.LoadedExtensions.Any(x => x.Metadata.UniqueName == "PixiEditor.FoundersPack");
+                                           && AdditionalContentProvider.IsContentOwned("PixiEditor.FoundersPack")
+                                           && ViewModelMain.Current.ExtensionsSubViewModel.ExtensionLoader.LoadedExtensions.Any(x => x.Metadata.UniqueName == "PixiEditor.FoundersPack");
+
+    private void ProviderOnOwnedProductsUpdated(List<ProductData> obj)
+    {
+        OnPropertyChanged(nameof(IsFoundersPackAvailable));
+    }
+
+    private void OnExtensionLoaded(string uniqueId)
+    {
+        if (uniqueId == "PixiEditor.FoundersPack")
+        {
+            OnPropertyChanged(nameof(IsFoundersPackAvailable));
+        }
+    }
 }
 }