-
Notifications
You must be signed in to change notification settings - Fork 22
/
HelperBootstrap.cpp
64 lines (55 loc) · 2.82 KB
/
HelperBootstrap.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include "HelperBootstrap.h"
#include "PersistenceContainer.h"
#include "api/ApiConfigurationMenuItem.h"
#include "api/ApiHelper.h"
#include "api/LocateApiSettings.h"
#include "euroscope/CallbackFunction.h"
#include "plugin/FunctionCallEventHandler.h"
#include "radarscreen/ConfigurableDisplayCollection.h"
#include "setting/SettingRepository.h"
#include "setting/SettingRepositoryFactory.h"
#include "task/TaskRunner.h"
using UKControllerPlugin::Api::ApiConfigurationMenuItem;
using UKControllerPlugin::Api::ApiHelper;
using UKControllerPlugin::Api::ApiRequestBuilder;
using UKControllerPlugin::Bootstrap::PersistenceContainer;
using UKControllerPlugin::Euroscope::CallbackFunction;
using UKControllerPlugin::RadarScreen::ConfigurableDisplayCollection;
using UKControllerPlugin::Setting::SettingRepository;
using UKControllerPlugin::Setting::SettingRepositoryFactory;
using UKControllerPlugin::TaskManager::TaskRunner;
namespace UKControllerPlugin::Bootstrap {
/*
Create the various helpers we use and put them in the persistence structure.
*/
void HelperBootstrap::Bootstrap(PersistenceContainer& persistence)
{
persistence.settingsRepository = SettingRepositoryFactory::Create(*persistence.windows);
// Prompt for a settings file, if one isn't there.
Api::LocateApiSettings(*persistence.windows, *persistence.settingsRepository);
ApiRequestBuilder requestBuilder(
persistence.settingsRepository->GetSetting("api-url", "https://ukcp.vatsim.uk"),
persistence.settingsRepository->GetSetting("api-key"));
persistence.api = std::make_unique<ApiHelper>(*persistence.curl, requestBuilder);
persistence.taskRunner = std::make_shared<TaskRunner>(3);
SetTaskRunner(persistence.taskRunner);
}
/*
Create the ApiConfigurationMenuItem and bootstrap it in.
*/
void HelperBootstrap::BootstrapApiConfigurationItem(
const PersistenceContainer& persistence, ConfigurableDisplayCollection& configurableDisplays)
{
unsigned int callbackId = persistence.pluginFunctionHandlers->ReserveNextDynamicFunctionId();
std::shared_ptr<ApiConfigurationMenuItem> menuItem =
std::make_shared<ApiConfigurationMenuItem>(*persistence.windows, callbackId);
CallbackFunction menuItemSelectedCallback(
callbackId, // NOLINT
"API Configuration Menu Item Selected",
[menuItem](int functionId, std::string subject, RECT screenObjectArea) {
menuItem->Configure(functionId, std::move(subject), screenObjectArea);
});
persistence.pluginFunctionHandlers->RegisterFunctionCall(menuItemSelectedCallback);
configurableDisplays.RegisterDisplay(menuItem);
}
} // namespace UKControllerPlugin::Bootstrap