Polyphase Game Engine
Loading...
Searching...
No Matches
AddonManager.h
Go to the documentation of this file.
1#pragma once
2
3#if EDITOR
4
5#include "../ProjectSelect/TemplateData.h"
6#include <string>
7#include <vector>
8
15class AddonManager
16{
17public:
18 static void Create();
19 static void Destroy();
20 static AddonManager* Get();
21
23 std::string GetAddonCacheDirectory();
24
26 std::string GetSettingsPath();
27
29 std::string GetInstalledAddonsPath();
30
31 // Repository management
32 void LoadSettings();
33 void SaveSettings();
34 void AddRepository(const std::string& url);
35 void RemoveRepository(const std::string& url);
36 const std::vector<AddonRepository>& GetRepositories() const { return mRepositories; }
37
38 // Addon discovery
39 void RefreshAllRepositories();
40 void RefreshRepository(const std::string& url);
41 const std::vector<Addon>& GetAvailableAddons() const { return mAvailableAddons; }
42
43 // Installation
44 bool DownloadAddon(const Addon& addon, std::string& outError);
45 bool InstallAddon(const std::string& addonCachePath, const std::string& addonId, std::string& outError);
46 bool UninstallAddon(const std::string& addonId);
47
48 // Fetch an addon from an arbitrary URL (GitHub repo or direct .zip), unzip it,
49 // and install into the current project's Packages/. Used by the dependency resolver.
50 bool DownloadAndInstallFromUrl(const std::string& addonId,
51 const std::string& url,
52 const std::string& ref,
53 std::string& outError);
54
55 // Auto-resolve declared dependencies on install / project load.
56 bool GetAutoResolveDependencies() const { return mAutoResolveDeps; }
57 void SetAutoResolveDependencies(bool v) { mAutoResolveDeps = v; SaveSettings(); }
58
59 // Tracking
60 void LoadInstalledAddons();
61 void SaveInstalledAddons();
62 const std::vector<InstalledAddon>& GetInstalledAddons() const { return mInstalledAddons; }
63 std::vector<InstalledAddon>& GetInstalledAddonsMutable() { return mInstalledAddons; }
64 bool IsAddonInstalled(const std::string& addonId) const;
65 bool HasUpdate(const std::string& addonId) const;
66 std::string GetInstalledVersion(const std::string& addonId) const;
67 bool SetInstalledAddonNativeMode(const std::string& addonId, NativeAddonResolveMode mode);
68 bool SyncNativeAddonBinary(const std::string& addonId, std::string& outError);
69
70 // Find addon by ID
71 const Addon* FindAddon(const std::string& addonId) const;
72
73private:
74 static AddonManager* sInstance;
75 AddonManager();
76 ~AddonManager();
77
79 void EnsureCacheDirectory();
80 bool FetchRepositoryManifest(const std::string& url, AddonRepository& outRepo, const std::string& branch);
82 bool FetchAddonMetadata(const std::string& repoUrl, const std::string& addonId, Addon& outAddon, const std::string& branch);
83
85 bool MergeAddonIntoProject(const std::string& addonPath, std::string& outError);
86
88 bool DownloadFile(const std::string& url, const std::string& destPath, std::string& outError);
89
91 bool ExtractZip(const std::string& zipPath, const std::string& destDir, std::string& outError);
92
93 std::string NormalizePath(const std::string& in);
94
96 std::string ConvertToRawUrl(const std::string& gitHubUrl, const std::string& filePath, const std::string& branch);
97
99 std::string ConvertToDownloadUrl(const std::string& gitHubUrl, const std::string& branch);
100
102 std::string GetCurrentTimestamp();
103
104 std::vector<AddonRepository> mRepositories;
105 std::vector<Addon> mAvailableAddons;
106 std::vector<InstalledAddon> mInstalledAddons;
107 bool mAutoResolveDeps = true;
108};
109
110#endif