Handle fastfiles in updater
This commit is contained in:
parent
8c0a891180
commit
c0013157b2
@ -22,6 +22,7 @@ namespace database
|
|||||||
{
|
{
|
||||||
std::unique_ptr<std::ifstream> stream;
|
std::unique_ptr<std::ifstream> stream;
|
||||||
uint64_t offset{};
|
uint64_t offset{};
|
||||||
|
std::string path;
|
||||||
};
|
};
|
||||||
|
|
||||||
std::unordered_map<game::DB_IFileSysFile*, bnet_file_handle_t> bnet_file_handles{};
|
std::unordered_map<game::DB_IFileSysFile*, bnet_file_handle_t> bnet_file_handles{};
|
||||||
@ -159,6 +160,7 @@ namespace database
|
|||||||
|
|
||||||
bnet_file_handle_t bnet_handle{};
|
bnet_file_handle_t bnet_handle{};
|
||||||
bnet_handle.stream = std::move(stream);
|
bnet_handle.stream = std::move(stream);
|
||||||
|
bnet_handle.path = path;
|
||||||
bnet_file_handles[handle] = std::move(bnet_handle);
|
bnet_file_handles[handle] = std::move(bnet_handle);
|
||||||
return handle;
|
return handle;
|
||||||
}
|
}
|
||||||
@ -376,6 +378,17 @@ namespace database
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void close_fastfile_handles()
|
||||||
|
{
|
||||||
|
for (const auto& handle : bnet_file_handles)
|
||||||
|
{
|
||||||
|
if (handle.second.path.ends_with(".ff"))
|
||||||
|
{
|
||||||
|
handle.second.stream->close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class component final : public component_interface
|
class component final : public component_interface
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
6
src/client/component/database.hpp
Normal file
6
src/client/component/database.hpp
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
namespace database
|
||||||
|
{
|
||||||
|
void close_fastfile_handles();
|
||||||
|
}
|
@ -5,6 +5,8 @@
|
|||||||
#include "updater.hpp"
|
#include "updater.hpp"
|
||||||
#include "game/ui_scripting/execution.hpp"
|
#include "game/ui_scripting/execution.hpp"
|
||||||
#include "console.hpp"
|
#include "console.hpp"
|
||||||
|
#include "command.hpp"
|
||||||
|
#include "database.hpp"
|
||||||
|
|
||||||
#include "version.h"
|
#include "version.h"
|
||||||
|
|
||||||
@ -403,6 +405,15 @@ namespace updater
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string name_ = name;
|
||||||
|
if (name_.ends_with(".ff"))
|
||||||
|
{
|
||||||
|
update_data.access([](update_data_t& data_)
|
||||||
|
{
|
||||||
|
data_.restart_required = true;//
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
console::info("[Updater] need file %s\n", name);
|
console::info("[Updater] need file %s\n", name);
|
||||||
#endif
|
#endif
|
||||||
@ -444,9 +455,16 @@ namespace updater
|
|||||||
});
|
});
|
||||||
|
|
||||||
for (const auto& file : garbage_files)
|
for (const auto& file : garbage_files)
|
||||||
|
{
|
||||||
|
try
|
||||||
{
|
{
|
||||||
std::filesystem::remove_all(file);
|
std::filesystem::remove_all(file);
|
||||||
}
|
}
|
||||||
|
catch (...)
|
||||||
|
{
|
||||||
|
console::error("Failed to delete %s\n", file.data());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
scheduler::once([]()
|
scheduler::once([]()
|
||||||
{
|
{
|
||||||
@ -487,6 +505,14 @@ namespace updater
|
|||||||
|
|
||||||
for (const auto& download : downloads)
|
for (const auto& download : downloads)
|
||||||
{
|
{
|
||||||
|
update_data.access([](update_data_t& data_)
|
||||||
|
{
|
||||||
|
if (data_.restart_required)
|
||||||
|
{
|
||||||
|
database::close_fastfile_handles();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
if (!write_file(download.name, download.data))
|
if (!write_file(download.name, download.data))
|
||||||
{
|
{
|
||||||
set_update_download_status(true, false, ERR_WRITE_FAIL + download.name);
|
set_update_download_status(true, false, ERR_WRITE_FAIL + download.name);
|
||||||
|
Loading…
Reference in New Issue
Block a user