ES-DE/es-app/src/guis/GuiApplicationUpdater.h
2024-07-10 18:04:40 +02:00

87 lines
2.4 KiB
C++

// SPDX-License-Identifier: MIT
//
// ES-DE Frontend
// GuiApplicationUpdater.h
//
// Installs application updates.
// Used in conjunction with ApplicationUpdater.
//
#ifndef ES_APP_GUIS_GUI_APPLICATION_UPDATER_H
#define ES_APP_GUIS_GUI_APPLICATION_UPDATER_H
#include "ApplicationUpdater.h"
#include "AsyncHandle.h"
#include "GuiComponent.h"
#include "HttpReq.h"
#include "components/BusyComponent.h"
#include "guis/GuiSettings.h"
#include "views/ViewController.h"
#include <atomic>
#include <mutex>
#include <thread>
class GuiApplicationUpdater : public GuiComponent
{
public:
GuiApplicationUpdater();
~GuiApplicationUpdater();
void setDownloadPath();
bool downloadPackage();
bool installAppImage();
void update(int deltaTime) override;
void render(const glm::mat4& parentTrans) override;
private:
void onSizeChanged() override;
std::vector<HelpPrompt> getHelpPrompts() override;
HelpStyle getHelpStyle() override
{
if (ViewController::getInstance()->getState().viewing == ViewController::ViewMode::NOTHING)
return HelpStyle();
else
return ViewController::getInstance()->getViewHelpStyle();
}
Renderer* mRenderer;
BusyComponent mBusyAnim;
NinePatchComponent mBackground;
ComponentGrid mGrid;
std::shared_ptr<ComponentGrid> mButtons;
std::shared_ptr<ButtonComponent> mButton1;
std::shared_ptr<ButtonComponent> mButton2;
std::shared_ptr<ButtonComponent> mButton3;
std::shared_ptr<TextComponent> mTitle;
std::shared_ptr<TextComponent> mStatusHeader;
std::shared_ptr<TextComponent> mProcessStep1;
std::shared_ptr<TextComponent> mProcessStep2;
std::shared_ptr<TextComponent> mProcessStep3;
std::shared_ptr<TextComponent> mStatusMessageHeader;
std::shared_ptr<TextComponent> mStatusMessage;
std::shared_ptr<TextComponent> mChangelogMessage;
std::unique_ptr<std::thread> mThread;
std::unique_ptr<HttpReq> mRequest;
AsyncHandleStatus mStatus;
std::mutex mMutex;
std::string mMessage;
ApplicationUpdater::Package mPackage;
std::string mDownloadPackageFilename;
std::atomic<int> mDownloadPercentage;
std::atomic<bool> mLinuxAppImage;
std::atomic<bool> mAbortDownload;
std::atomic<bool> mDownloading;
std::atomic<bool> mReadyToInstall;
bool mHasDownloaded;
bool mInstalling;
bool mHasInstalled;
};
#endif // ES_APP_GUIS_GUI_APPLICATION_UPDATER_H