satdump/plugins/firstparty_support/main_loader.cpp

95 lines
3.2 KiB
C++
Raw Permalink Normal View History

#include "core/plugin.h"
#include "logger.h"
2025-03-14 11:12:18 +01:00
#include "core/config.h"
#include "loader/archive_loader.h"
2025-06-22 17:18:53 +02:00
#include "explorer/explorer.h"
#include "imgui/imgui_stdlib.h"
2025-03-25 21:33:06 +01:00
namespace
{
bool _loader_open = false;
2024-10-01 11:52:26 -04:00
std::unique_ptr<satdump::ArchiveLoader> _loader = nullptr;
} // namespace
2025-07-24 21:55:57 +02:00
void provideExplorerFileLoader(const satdump::explorer::ExplorerRequestFileLoad &evt);
2025-08-12 13:42:31 +02:00
class FirstPartyLoaderSupport : public satdump::Plugin
{
public:
2025-08-12 13:42:31 +02:00
std::string getID() { return "first_party_loader_support"; }
void init()
{
satdump::eventBus->register_handler<satdump::config::RegisterPluginConfigHandlersEvent>(registerConfigHandler);
2025-07-24 21:55:57 +02:00
satdump::eventBus->register_handler<satdump::explorer::RenderLoadMenuElementsEvent>(renderExplorerLoaderButton);
satdump::eventBus->register_handler<satdump::explorer::ExplorerRequestFileLoad>(provideExplorerFileLoader);
}
static void registerConfigHandler(const satdump::config::RegisterPluginConfigHandlersEvent &evt)
{
2025-08-12 13:42:31 +02:00
evt.plugin_config_handlers.push_back({"First-Party Support", FirstPartyLoaderSupport::renderConfig, FirstPartyLoaderSupport::saveConfig});
}
public:
static void initLoader()
{
if (!_loader)
{
_loader = std::make_unique<satdump::ArchiveLoader>();
2025-08-12 13:42:31 +02:00
if (satdump::satdump_cfg.main_cfg.contains("plugin_settings") && satdump::satdump_cfg.main_cfg["plugin_settings"].contains("firstparty_products"))
{
2025-08-12 13:42:31 +02:00
auto &cfg = satdump::satdump_cfg.main_cfg["plugin_settings"]["firstparty_products"];
if (cfg.contains("eumetsat_credentials_key"))
_loader->eumetsat_user_consumer_credential = cfg["eumetsat_credentials_key"];
if (cfg.contains("eumetsat_credentials_secret"))
_loader->eumetsat_user_consumer_secret = cfg["eumetsat_credentials_secret"];
}
}
}
static void renderConfig()
{
initLoader();
2025-07-14 11:23:51 +02:00
ImGui::Text("EUMETSAT User «Consumer Key»");
ImGui::SameLine();
ImGui::InputText("##eumetsattokenloader_key", &_loader->eumetsat_user_consumer_credential);
2025-07-14 11:23:51 +02:00
ImGui::Text("EUMETSAT User «Consumer Secret»");
ImGui::SameLine();
ImGui::InputText("##eumetsattokenloader_secret", &_loader->eumetsat_user_consumer_secret);
}
static void saveConfig()
{
2025-03-14 11:12:18 +01:00
if (_loader == nullptr)
2024-10-01 11:52:26 -04:00
return;
2025-08-12 13:42:31 +02:00
satdump::satdump_cfg.main_cfg["plugin_settings"]["firstparty_products"] = {};
auto &cfg = satdump::satdump_cfg.main_cfg["plugin_settings"]["firstparty_products"];
cfg["eumetsat_credentials_key"] = _loader->eumetsat_user_consumer_credential;
cfg["eumetsat_credentials_secret"] = _loader->eumetsat_user_consumer_secret;
}
2025-07-24 21:55:57 +02:00
static void renderExplorerLoaderButton(const satdump::explorer::RenderLoadMenuElementsEvent &evt)
2025-03-25 21:33:06 +01:00
{
if (ImGui::BeginMenu("File"))
{
2025-08-12 13:42:31 +02:00
if (ImGui::MenuItem("Load First-Party"))
2025-03-25 21:33:06 +01:00
_loader_open = true;
ImGui::EndMenu();
}
2025-03-25 21:33:06 +01:00
if (_loader_open)
{
initLoader();
_loader->drawUI(&_loader_open);
}
2025-05-24 20:17:10 +02:00
}
};
2025-08-12 13:42:31 +02:00
PLUGIN_LOADER(FirstPartyLoaderSupport)