impr: Force update all installed content store items after an update
This commit is contained in:
parent
99b90f90ac
commit
9c1a673047
@ -71,6 +71,7 @@ namespace hex::plugin::builtin {
|
|||||||
|
|
||||||
bool download(const paths::impl::DefaultPath *pathType, const std::string &fileName, const std::string &url);
|
bool download(const paths::impl::DefaultPath *pathType, const std::string &fileName, const std::string &url);
|
||||||
bool remove(const paths::impl::DefaultPath *pathType, const std::string &fileName);
|
bool remove(const paths::impl::DefaultPath *pathType, const std::string &fileName);
|
||||||
|
void updateAll();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
HttpRequest m_httpRequest = HttpRequest("GET", "");
|
HttpRequest m_httpRequest = HttpRequest("GET", "");
|
||||||
|
@ -52,6 +52,16 @@ namespace hex::plugin::builtin {
|
|||||||
ThemeManager::addTheme(themeFile.readString());
|
ThemeManager::addTheme(themeFile.readString());
|
||||||
});
|
});
|
||||||
addCategory("hex.builtin.view.store.tab.yara", "yara", &paths::Yara);
|
addCategory("hex.builtin.view.store.tab.yara", "yara", &paths::Yara);
|
||||||
|
|
||||||
|
TaskManager::doLater([this] {
|
||||||
|
// Force update all installed items after an update so that there's no old and incompatible versions around anymore
|
||||||
|
{
|
||||||
|
const auto prevUpdateVersion = ContentRegistry::Settings::read<std::string>("hex.builtin.setting.general", "hex.builtin.setting.general.prev_launch_version", "");
|
||||||
|
if (prevUpdateVersion != ImHexApi::System::getImHexVersion()) {
|
||||||
|
updateAll();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -197,28 +207,7 @@ namespace hex::plugin::builtin {
|
|||||||
ImGui::SameLine(ImGui::GetWindowWidth() - ImGui::GetCursorPosX() - 25_scaled);
|
ImGui::SameLine(ImGui::GetWindowWidth() - ImGui::GetCursorPosX() - 25_scaled);
|
||||||
ImGui::BeginDisabled(m_updateAllTask.isRunning() || m_updateCount == 0);
|
ImGui::BeginDisabled(m_updateAllTask.isRunning() || m_updateCount == 0);
|
||||||
if (ImGuiExt::IconButton(ICON_VS_CLOUD_DOWNLOAD, ImGui::GetStyleColorVec4(ImGuiCol_Text))) {
|
if (ImGuiExt::IconButton(ICON_VS_CLOUD_DOWNLOAD, ImGui::GetStyleColorVec4(ImGuiCol_Text))) {
|
||||||
m_updateAllTask = TaskManager::createTask("hex.builtin.task.updating_store"_lang, m_updateCount, [this](auto &task) {
|
this->updateAll();
|
||||||
for (auto &category : m_categories) {
|
|
||||||
for (auto &entry : category.entries) {
|
|
||||||
if (entry.hasUpdate) {
|
|
||||||
entry.downloading = this->download(category.path, entry.fileName, entry.link);
|
|
||||||
if (!m_download.valid())
|
|
||||||
continue;
|
|
||||||
|
|
||||||
m_download.wait();
|
|
||||||
|
|
||||||
while (m_download.valid() && m_download.wait_for(100ms) != std::future_status::ready) {
|
|
||||||
task.update();
|
|
||||||
}
|
|
||||||
|
|
||||||
entry.hasUpdate = false;
|
|
||||||
entry.downloading = false;
|
|
||||||
|
|
||||||
task.increment();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
ImGuiExt::InfoTooltip(hex::format("hex.builtin.view.store.update_count"_lang, m_updateCount.load()).c_str());
|
ImGuiExt::InfoTooltip(hex::format("hex.builtin.view.store.update_count"_lang, m_updateCount.load()).c_str());
|
||||||
|
|
||||||
@ -346,6 +335,36 @@ namespace hex::plugin::builtin {
|
|||||||
return removed;
|
return removed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ViewStore::updateAll() {
|
||||||
|
m_updateAllTask = TaskManager::createTask("hex.builtin.task.updating_store"_lang, m_updateCount, [this](auto &task) {
|
||||||
|
for (auto &category : m_categories) {
|
||||||
|
for (auto &entry : category.entries) {
|
||||||
|
if (entry.hasUpdate) {
|
||||||
|
entry.downloading = this->download(category.path, entry.fileName, entry.link);
|
||||||
|
if (!m_download.valid())
|
||||||
|
continue;
|
||||||
|
|
||||||
|
m_download.wait();
|
||||||
|
|
||||||
|
while (m_download.valid() && m_download.wait_for(100ms) != std::future_status::ready) {
|
||||||
|
task.update();
|
||||||
|
}
|
||||||
|
|
||||||
|
entry.hasUpdate = false;
|
||||||
|
entry.downloading = false;
|
||||||
|
|
||||||
|
task.increment();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
TaskManager::doLater([] {
|
||||||
|
ContentRegistry::Settings::write<std::string>("hex.builtin.setting.general", "hex.builtin.setting.general.prev_launch_version", ImHexApi::System::getImHexVersion());
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void ViewStore::addCategory(const UnlocalizedString &unlocalizedName, const std::string &requestName, const paths::impl::DefaultPath *path, std::function<void()> downloadCallback) {
|
void ViewStore::addCategory(const UnlocalizedString &unlocalizedName, const std::string &requestName, const paths::impl::DefaultPath *path, std::function<void()> downloadCallback) {
|
||||||
m_categories.push_back({ unlocalizedName, requestName, path, { }, std::move(downloadCallback) });
|
m_categories.push_back({ unlocalizedName, requestName, path, { }, std::move(downloadCallback) });
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user