This commit is contained in:
parent
7973e523c3
commit
49f0425e56
@ -440,6 +440,39 @@ void base_provider::remove_deleted_files() {
|
|||||||
static_cast<const char *>(__FUNCTION__),
|
static_cast<const char *>(__FUNCTION__),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
auto source_list =
|
||||||
|
utils::file::directory{config_.get_cache_directory()}.get_files();
|
||||||
|
for (auto &&source_file : source_list) {
|
||||||
|
filesystem_item fsi{};
|
||||||
|
auto sp_res =
|
||||||
|
get_filesystem_item_from_source_path(source_file->get_path(), fsi);
|
||||||
|
if (sp_res != api_error::item_not_found) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto reference_time =
|
||||||
|
source_file->get_time(config_.get_eviction_uses_accessed_time()
|
||||||
|
? utils::file::time_type::accessed
|
||||||
|
: utils::file::time_type::modified);
|
||||||
|
if (not reference_time.has_value()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto delay = (config_.get_eviction_delay_mins() * 60UL) *
|
||||||
|
utils::time::NANOS_PER_SECOND;
|
||||||
|
if ((reference_time.value() + static_cast<std::uint64_t>(delay)) >=
|
||||||
|
utils::time::get_time_now()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
event_system::instance().raise<orphaned_source_file_detected>(
|
||||||
|
source_file->get_path());
|
||||||
|
if (source_file->remove()) {
|
||||||
|
event_system::instance().raise<orphaned_source_file_removed>(
|
||||||
|
source_file->get_path());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
struct removed_item {
|
struct removed_item {
|
||||||
std::string api_path{};
|
std::string api_path{};
|
||||||
bool directory{};
|
bool directory{};
|
||||||
@ -500,7 +533,7 @@ void base_provider::remove_deleted_files() {
|
|||||||
utils::error::raise_error(
|
utils::error::raise_error(
|
||||||
function_name, std::to_string(utils::get_last_error_code()),
|
function_name, std::to_string(utils::get_last_error_code()),
|
||||||
"failed to create orphaned directory|sp|" + orphaned_directory);
|
"failed to create orphaned directory|sp|" + orphaned_directory);
|
||||||
break;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
const auto parts = utils::string::split(item.api_path, '/', false);
|
const auto parts = utils::string::split(item.api_path, '/', false);
|
||||||
@ -545,38 +578,6 @@ void base_provider::remove_deleted_files() {
|
|||||||
event_system::instance().raise<directory_removed_externally>(
|
event_system::instance().raise<directory_removed_externally>(
|
||||||
item.api_path, item.source_path);
|
item.api_path, item.source_path);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto source_list =
|
|
||||||
utils::file::directory{config_.get_cache_directory()}.get_files();
|
|
||||||
for (auto &&source_file : source_list) {
|
|
||||||
filesystem_item fsi{};
|
|
||||||
if (get_filesystem_item_from_source_path(source_file->get_path(), fsi) !=
|
|
||||||
api_error::item_not_found) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto reference_time =
|
|
||||||
source_file->get_time(config_.get_eviction_uses_accessed_time()
|
|
||||||
? utils::file::time_type::accessed
|
|
||||||
: utils::file::time_type::modified);
|
|
||||||
if (not reference_time.has_value()) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto delay = (config_.get_eviction_delay_mins() * 60UL) *
|
|
||||||
utils::time::NANOS_PER_SECOND;
|
|
||||||
if ((reference_time.value() + static_cast<std::uint64_t>(delay)) <=
|
|
||||||
utils::time::get_time_now()) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
event_system::instance().raise<orphaned_source_file_detected>(
|
|
||||||
source_file->get_path());
|
|
||||||
if (source_file->remove()) {
|
|
||||||
event_system::instance().raise<orphaned_source_file_removed>(
|
|
||||||
source_file->get_path());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
auto base_provider::remove_file(const std::string &api_path) -> api_error {
|
auto base_provider::remove_file(const std::string &api_path) -> api_error {
|
||||||
@ -705,6 +706,8 @@ auto base_provider::start(api_item_added_callback api_item_added,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (online && not unmount_requested) {
|
if (online && not unmount_requested) {
|
||||||
|
remove_deleted_files();
|
||||||
|
|
||||||
polling::instance().set_callback({"check_deleted", polling::frequency::low,
|
polling::instance().set_callback({"check_deleted", polling::frequency::low,
|
||||||
[this]() { remove_deleted_files(); }});
|
[this]() { remove_deleted_files(); }});
|
||||||
return true;
|
return true;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user