diff --git a/repertory/librepertory/src/file_manager/open_file.cpp b/repertory/librepertory/src/file_manager/open_file.cpp index b1b68d06..25e898f6 100644 --- a/repertory/librepertory/src/file_manager/open_file.cpp +++ b/repertory/librepertory/src/file_manager/open_file.cpp @@ -459,21 +459,23 @@ auto open_file::close() -> bool { } } + err = get_api_error(); + nf_->close(); if (modified_) { - if (get_api_error() == api_error::success) { + if (err == api_error::success) { mgr_.queue_upload(*this); return true; } - if (get_api_error() == api_error::download_incomplete) { + if (err == api_error::download_incomplete) { mgr_.store_resume(*this); return true; } } - if (get_api_error() == api_error::success) { + if (err == api_error::success) { return true; } diff --git a/repertory/librepertory/src/file_manager/open_file_base.cpp b/repertory/librepertory/src/file_manager/open_file_base.cpp index ef932aac..9bc7ce3d 100644 --- a/repertory/librepertory/src/file_manager/open_file_base.cpp +++ b/repertory/librepertory/src/file_manager/open_file_base.cpp @@ -237,17 +237,27 @@ auto open_file_base::is_modified() const -> bool { void open_file_base::remove(std::uint64_t handle) { recur_mutex_lock file_lock(file_mtx_); + if (open_data_.find(handle) == open_data_.end()) { + return; + } + open_data_.erase(handle); event_system::instance().raise( fsi_.api_path, handle, fsi_.source_path, fsi_.directory, modified_); - if (open_data_.empty()) { - event_system::instance().raise( - fsi_.api_path, fsi_.source_path, fsi_.directory, modified_); + if (not open_data_.empty()) { + return; } + + event_system::instance().raise( + fsi_.api_path, fsi_.source_path, fsi_.directory, modified_); } void open_file_base::remove_all() { recur_mutex_lock file_lock(file_mtx_); + if (open_data_.empty()) { + return; + } + auto open_data = open_data_; open_data_.clear();