mirror of
https://github.com/wiiu-env/AromaUpdater.git
synced 2024-11-27 07:04:17 +01:00
Support updating when not running in aroma environment
This commit is contained in:
parent
afcaeb32f6
commit
2784ec4c7f
@ -1,3 +1,5 @@
|
|||||||
FROM wiiuenv/devkitppc:20221228
|
FROM wiiuenv/devkitppc:20221228
|
||||||
|
|
||||||
|
COPY --from=wiiuenv/libmocha:20220919 /artifacts $DEVKITPRO
|
||||||
|
|
||||||
WORKDIR /project
|
WORKDIR /project
|
||||||
|
6
Makefile
6
Makefile
@ -19,6 +19,8 @@ APP_AUTHOR := Maschell
|
|||||||
|
|
||||||
include $(DEVKITPRO)/wut/share/wut_rules
|
include $(DEVKITPRO)/wut/share/wut_rules
|
||||||
|
|
||||||
|
WUMS_ROOT := $(DEVKITPRO)/wums
|
||||||
|
|
||||||
#-------------------------------------------------------------------------------
|
#-------------------------------------------------------------------------------
|
||||||
# TARGET is the name of the output
|
# TARGET is the name of the output
|
||||||
# BUILD is the directory where object files & intermediate files will be placed
|
# BUILD is the directory where object files & intermediate files will be placed
|
||||||
@ -61,13 +63,13 @@ CXXFLAGS += -DDEBUG -DVERBOSE_DEBUG -g
|
|||||||
CFLAGS += -DDEBUG -DVERBOSE_DEBUG -g
|
CFLAGS += -DDEBUG -DVERBOSE_DEBUG -g
|
||||||
endif
|
endif
|
||||||
|
|
||||||
LIBS :=-lcurl -lmbedtls -lmbedx509 -lmbedcrypto -lz -lwut
|
LIBS :=-lcurl -lmbedtls -lmbedx509 -lmbedcrypto -lz -lmocha -lwut
|
||||||
|
|
||||||
#-------------------------------------------------------------------------------
|
#-------------------------------------------------------------------------------
|
||||||
# list of directories containing libraries, this must be the top level
|
# list of directories containing libraries, this must be the top level
|
||||||
# containing include and lib
|
# containing include and lib
|
||||||
#-------------------------------------------------------------------------------
|
#-------------------------------------------------------------------------------
|
||||||
LIBDIRS := $(PORTLIBS) $(WUT_ROOT)
|
LIBDIRS := $(PORTLIBS) $(WUT_ROOT) $(WUT_ROOT)/usr $(WUMS_ROOT)
|
||||||
|
|
||||||
#-------------------------------------------------------------------------------
|
#-------------------------------------------------------------------------------
|
||||||
# no real need to edit anything past this point unless you need to add additional
|
# no real need to edit anything past this point unless you need to add additional
|
||||||
|
70
source/UpdaterCheckEnvironment.cpp
Normal file
70
source/UpdaterCheckEnvironment.cpp
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
#include "UpdaterState.h"
|
||||||
|
#include "utils/logger.h"
|
||||||
|
#include <mocha/mocha.h>
|
||||||
|
|
||||||
|
ApplicationState::eSubState UpdaterState::UpdateGetEnvironmentDirectory(Input *input) {
|
||||||
|
char environmentPathBuffer[0x100];
|
||||||
|
MochaUtilsStatus status;
|
||||||
|
if ((status = Mocha_GetEnvironmentPath(environmentPathBuffer, sizeof(environmentPathBuffer))) == MOCHA_RESULT_SUCCESS) {
|
||||||
|
this->mCurEnvironmentPath = environmentPathBuffer;
|
||||||
|
DEBUG_FUNCTION_LINE("The environment path is %s", this->mCurEnvironmentPath.c_str());
|
||||||
|
} else {
|
||||||
|
DEBUG_FUNCTION_LINE_ERR("Failed to get the environment path. %s", Mocha_GetStatusStr(status));
|
||||||
|
this->mCurEnvironmentPath = {};
|
||||||
|
}
|
||||||
|
this->mState = STATE_CHECK_ENVIRONMENT_DIRECTORY;
|
||||||
|
return SUBSTATE_RUNNING;
|
||||||
|
}
|
||||||
|
|
||||||
|
ApplicationState::eSubState UpdaterState::UpdateCheckEnvironmentDirectory(Input *input) {
|
||||||
|
if (this->mCurEnvironmentPath == DEFAULT_AROMA_ENVIRONMENT_SD_PATH) {
|
||||||
|
this->mState = STATE_CHECK_VERSIONS;
|
||||||
|
}
|
||||||
|
if (buttonPressed(input, Input::BUTTON_A)) {
|
||||||
|
std::string sNeedle = DEFAULT_AROMA_ENVIRONMENT_PATH;
|
||||||
|
std::string sReplace = this->mCurEnvironmentPath;
|
||||||
|
if (sReplace.starts_with(SD_PATH)) {
|
||||||
|
sReplace = sReplace.substr(strlen(SD_PATH));
|
||||||
|
}
|
||||||
|
|
||||||
|
for (auto &base : mVersionInfo) {
|
||||||
|
for (auto &cat : base.getMutableCategory()) {
|
||||||
|
for (auto &package : cat.getMutablePackages()) {
|
||||||
|
for (auto &repo : package.getMutableRepositories()) {
|
||||||
|
for (auto &file : repo.getMutableFiles()) {
|
||||||
|
if (file.getPath().find(sNeedle) != std::string::npos) {
|
||||||
|
try {
|
||||||
|
file.getMutablePath().replace(file.getMutablePath().find(sNeedle), sNeedle.size(), sReplace);
|
||||||
|
} catch (std::exception &e) {
|
||||||
|
DEBUG_FUNCTION_LINE_WARN("%s", e.what());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this->mState = STATE_CHECK_VERSIONS;
|
||||||
|
} else if (buttonPressed(input, Input::BUTTON_X) || buttonPressed(input, Input::BUTTON_1)) {
|
||||||
|
this->mState = STATE_CHECK_VERSIONS;
|
||||||
|
}
|
||||||
|
|
||||||
|
return SUBSTATE_RUNNING;
|
||||||
|
}
|
||||||
|
|
||||||
|
void UpdaterState::RenderCheckEnvironmentDirectory() {
|
||||||
|
if (this->mCurEnvironmentPath != DEFAULT_AROMA_ENVIRONMENT_PATH) {
|
||||||
|
DrawUtils::setFontColor(COLOR_RED);
|
||||||
|
DrawUtils::setFontSize(30);
|
||||||
|
DrawUtils::print(16, 90, "Warning");
|
||||||
|
|
||||||
|
DrawUtils::setFontColor(COLOR_WHITE);
|
||||||
|
DrawUtils::setFontSize(20);
|
||||||
|
std::string curEnvironmentDir = std::filesystem::path(this->mCurEnvironmentPath).filename();
|
||||||
|
DrawUtils::print(16, 140, "By default the \"aroma\" environment will be updated, but the updater was launched");
|
||||||
|
DrawUtils::printf(16, 160, false, "in the \"%s\" environment.", curEnvironmentDir.c_str());
|
||||||
|
|
||||||
|
DrawUtils::printf(16, 220, false, "Press \ue042 to update the \"%s\" environment", curEnvironmentDir.c_str());
|
||||||
|
DrawUtils::printf(16, 240, false, "Press \ue04e/\ue047 to update the \"aroma\" environment");
|
||||||
|
}
|
||||||
|
}
|
@ -46,6 +46,12 @@ ApplicationState::eSubState UpdaterState::update(Input *input) {
|
|||||||
case STATE_PARSE_VERSIONS: {
|
case STATE_PARSE_VERSIONS: {
|
||||||
return UpdaterState::UpdateParseVersions(input);
|
return UpdaterState::UpdateParseVersions(input);
|
||||||
}
|
}
|
||||||
|
case STATE_GET_ENVIRONMENT_DIRECTORY: {
|
||||||
|
return UpdaterState::UpdateGetEnvironmentDirectory(input);
|
||||||
|
}
|
||||||
|
case STATE_CHECK_ENVIRONMENT_DIRECTORY: {
|
||||||
|
return UpdaterState::UpdateCheckEnvironmentDirectory(input);
|
||||||
|
}
|
||||||
case STATE_CHECK_VERSIONS: {
|
case STATE_CHECK_VERSIONS: {
|
||||||
return UpdaterState::UpdateCheckVersions(input);
|
return UpdaterState::UpdateCheckVersions(input);
|
||||||
}
|
}
|
||||||
@ -181,6 +187,13 @@ void UpdaterState::render() {
|
|||||||
DrawUtils::print(16, 80, "Parsing the latest versions...");
|
DrawUtils::print(16, 80, "Parsing the latest versions...");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case STATE_GET_ENVIRONMENT_DIRECTORY: {
|
||||||
|
break;
|
||||||
|
};
|
||||||
|
case STATE_CHECK_ENVIRONMENT_DIRECTORY: {
|
||||||
|
UpdaterState::RenderCheckEnvironmentDirectory();
|
||||||
|
break;
|
||||||
|
};
|
||||||
case STATE_CHECK_VERSIONS: {
|
case STATE_CHECK_VERSIONS: {
|
||||||
DrawUtils::setFontColor(COLOR_WHITE);
|
DrawUtils::setFontColor(COLOR_WHITE);
|
||||||
DrawUtils::setFontSize(20);
|
DrawUtils::setFontSize(20);
|
||||||
@ -322,4 +335,4 @@ const char *UpdaterState::ErrorDescription() const {
|
|||||||
return "ERROR_FAILED_TO_CREATE_DIR";
|
return "ERROR_FAILED_TO_CREATE_DIR";
|
||||||
}
|
}
|
||||||
return "UNKNOWN_ERROR";
|
return "UNKNOWN_ERROR";
|
||||||
}
|
}
|
@ -61,6 +61,8 @@ public:
|
|||||||
STATE_ERROR,
|
STATE_ERROR,
|
||||||
STATE_DOWNLOAD_VERSIONS,
|
STATE_DOWNLOAD_VERSIONS,
|
||||||
STATE_PARSE_VERSIONS,
|
STATE_PARSE_VERSIONS,
|
||||||
|
STATE_GET_ENVIRONMENT_DIRECTORY,
|
||||||
|
STATE_CHECK_ENVIRONMENT_DIRECTORY,
|
||||||
STATE_CHECK_VERSIONS,
|
STATE_CHECK_VERSIONS,
|
||||||
STATE_SHOW_VERSIONS,
|
STATE_SHOW_VERSIONS,
|
||||||
STATE_SELECTED_PACKAGES_EMPTY,
|
STATE_SELECTED_PACKAGES_EMPTY,
|
||||||
@ -106,6 +108,7 @@ public:
|
|||||||
|
|
||||||
void RenderError();
|
void RenderError();
|
||||||
void RenderDownloadVersions();
|
void RenderDownloadVersions();
|
||||||
|
void RenderCheckEnvironmentDirectory();
|
||||||
void RenderShowVersions();
|
void RenderShowVersions();
|
||||||
void RenderConfirmPackages();
|
void RenderConfirmPackages();
|
||||||
void RenderCheckIndividualFile();
|
void RenderCheckIndividualFile();
|
||||||
@ -113,6 +116,8 @@ public:
|
|||||||
|
|
||||||
ApplicationState::eSubState UpdateProcessDownloadFiles(Input *input);
|
ApplicationState::eSubState UpdateProcessDownloadFiles(Input *input);
|
||||||
ApplicationState::eSubState UpdateDownloadVersions(Input *input);
|
ApplicationState::eSubState UpdateDownloadVersions(Input *input);
|
||||||
|
ApplicationState::eSubState UpdateGetEnvironmentDirectory(Input *input);
|
||||||
|
ApplicationState::eSubState UpdateCheckEnvironmentDirectory(Input *input);
|
||||||
ApplicationState::eSubState UpdateParseVersions(Input *input);
|
ApplicationState::eSubState UpdateParseVersions(Input *input);
|
||||||
ApplicationState::eSubState UpdateCheckVersions(Input *input);
|
ApplicationState::eSubState UpdateCheckVersions(Input *input);
|
||||||
ApplicationState::eSubState UpdateShowVersionsMenu(Input *input);
|
ApplicationState::eSubState UpdateShowVersionsMenu(Input *input);
|
||||||
@ -150,6 +155,8 @@ public:
|
|||||||
|
|
||||||
std::optional<VersionCheck::RepositoryFile> mCurFile = {};
|
std::optional<VersionCheck::RepositoryFile> mCurFile = {};
|
||||||
|
|
||||||
|
std::string mCurEnvironmentPath = {};
|
||||||
|
|
||||||
std::mutex mVersionInfoLock;
|
std::mutex mVersionInfoLock;
|
||||||
std::thread *mCheckFilesThread = nullptr;
|
std::thread *mCheckFilesThread = nullptr;
|
||||||
std::thread *mDownloadInfoThread = nullptr;
|
std::thread *mDownloadInfoThread = nullptr;
|
||||||
|
@ -77,7 +77,7 @@ ApplicationState::eSubState UpdaterState::UpdateParseVersions(Input *input) {
|
|||||||
this->setError(ERROR_FAILED_TO_PARSE_VERSIONS);
|
this->setError(ERROR_FAILED_TO_PARSE_VERSIONS);
|
||||||
return SUBSTATE_RUNNING;
|
return SUBSTATE_RUNNING;
|
||||||
}
|
}
|
||||||
this->mState = STATE_CHECK_VERSIONS;
|
this->mState = STATE_GET_ENVIRONMENT_DIRECTORY;
|
||||||
return SUBSTATE_RUNNING;
|
return SUBSTATE_RUNNING;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,13 +1,15 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#define BACKGROUND_COLOR COLOR_BLACK
|
#define BACKGROUND_COLOR COLOR_BLACK
|
||||||
|
|
||||||
#define AROMA_DOWNLOAD_URL "https://aroma.foryour.cafe/"
|
#define AROMA_DOWNLOAD_URL "https://aroma.foryour.cafe/"
|
||||||
#define UPDATE_SERVER_URL "https://aroma.foryour.cafe"
|
#define UPDATE_SERVER_URL "https://aroma.foryour.cafe"
|
||||||
#define CERT_FILE_LOCATION "fs:/vol/content/cacert.pem"
|
#define CERT_FILE_LOCATION "fs:/vol/content/cacert.pem"
|
||||||
#define SD_PATH "fs:/vol/external01/"
|
#define SD_PATH "fs:/vol/external01/"
|
||||||
#define UPDATE_OLD_SUFFIX ".update.old"
|
#define DEFAULT_AROMA_ENVIRONMENT_PATH "wiiu/environments/aroma"
|
||||||
#define UPDATE_TEMP_SUFFIX ".update.temp"
|
#define DEFAULT_AROMA_ENVIRONMENT_SD_PATH SD_PATH DEFAULT_AROMA_ENVIRONMENT_PATH
|
||||||
|
#define UPDATE_OLD_SUFFIX ".update.old"
|
||||||
|
#define UPDATE_TEMP_SUFFIX ".update.temp"
|
||||||
|
|
||||||
#define UPDATER_VERSION "v0.1"
|
#define UPDATER_VERSION "v0.1"
|
||||||
#define UPDATER_VERSION_FULL UPDATER_VERSION UPDATER_VERSION_EXTRA
|
#define UPDATER_VERSION_FULL UPDATER_VERSION UPDATER_VERSION_EXTRA
|
@ -7,6 +7,7 @@
|
|||||||
#include "utils/logger.h"
|
#include "utils/logger.h"
|
||||||
#include <coreinit/energysaver.h>
|
#include <coreinit/energysaver.h>
|
||||||
#include <filesystem>
|
#include <filesystem>
|
||||||
|
#include <mocha/mocha.h>
|
||||||
#include <sndcore2/core.h>
|
#include <sndcore2/core.h>
|
||||||
#include <whb/proc.h>
|
#include <whb/proc.h>
|
||||||
|
|
||||||
@ -53,6 +54,11 @@ int main() {
|
|||||||
OSFatal("Failed to init DownloadUtils");
|
OSFatal("Failed to init DownloadUtils");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int mochaInitResult;
|
||||||
|
if ((mochaInitResult = Mocha_InitLibrary()) != MOCHA_RESULT_SUCCESS) {
|
||||||
|
DEBUG_FUNCTION_LINE_ERR("Mocha_InitLibrary() failed %d", mochaInitResult);
|
||||||
|
}
|
||||||
|
|
||||||
uint32_t isAPDEnabled;
|
uint32_t isAPDEnabled;
|
||||||
IMIsAPDEnabled(&isAPDEnabled);
|
IMIsAPDEnabled(&isAPDEnabled);
|
||||||
|
|
||||||
@ -68,6 +74,10 @@ int main() {
|
|||||||
IMEnableAPD();
|
IMEnableAPD();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (mochaInitResult == MOCHA_RESULT_SUCCESS) {
|
||||||
|
Mocha_DeInitLibrary();
|
||||||
|
}
|
||||||
|
|
||||||
DownloadUtils::Deinit();
|
DownloadUtils::Deinit();
|
||||||
|
|
||||||
WPADInput::close();
|
WPADInput::close();
|
||||||
|
Loading…
Reference in New Issue
Block a user