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 // Tracking
49 void LoadInstalledAddons();
50 void SaveInstalledAddons();
51 const std::vector<InstalledAddon>& GetInstalledAddons() const { return mInstalledAddons; }
52 std::vector<InstalledAddon>& GetInstalledAddonsMutable() { return mInstalledAddons; }
53 bool IsAddonInstalled(const std::string& addonId) const;
54 bool HasUpdate(const std::string& addonId) const;
55 std::string GetInstalledVersion(const std::string& addonId) const;
56 bool SetInstalledAddonNativeMode(const std::string& addonId, NativeAddonResolveMode mode);
57 bool SyncNativeAddonBinary(const std::string& addonId, std::string& outError);
58
59 // Find addon by ID
60 const Addon* FindAddon(const std::string& addonId) const;
61
62private:
63 static AddonManager* sInstance;
64 AddonManager();
65 ~AddonManager();
66
68 void EnsureCacheDirectory();
69 bool FetchRepositoryManifest(const std::string& url, AddonRepository& outRepo, const std::string& branch);
71 bool FetchAddonMetadata(const std::string& repoUrl, const std::string& addonId, Addon& outAddon, const std::string& branch);
72
74 bool MergeAddonIntoProject(const std::string& addonPath, std::string& outError);
75
77 bool DownloadFile(const std::string& url, const std::string& destPath, std::string& outError);
78
80 bool ExtractZip(const std::string& zipPath, const std::string& destDir, std::string& outError);
81
82 std::string NormalizePath(const std::string& in);
83
85 std::string ConvertToRawUrl(const std::string& gitHubUrl, const std::string& filePath, const std::string& branch);
86
88 std::string ConvertToDownloadUrl(const std::string& gitHubUrl, const std::string& branch);
89
91 std::string GetCurrentTimestamp();
92
93 std::vector<AddonRepository> mRepositories;
94 std::vector<Addon> mAvailableAddons;
95 std::vector<InstalledAddon> mInstalledAddons;
96};
97
98#endif