diff --git a/src/core/download_list.cc b/src/core/download_list.cc index 2757b166..9f7c9fad 100644 --- a/src/core/download_list.cc +++ b/src/core/download_list.cc @@ -155,6 +155,11 @@ DownloadList::erase(iterator itr) { return base_type::erase(itr); } +// void +// DownloadList::save(Download* d) { + +// } + void DownloadList::open(Download* download) { try { @@ -204,7 +209,9 @@ DownloadList::close_throw(Download* download) { // better crash protection, save regulary in addition to this. // // Used to be in pause, but this was wrong for rehashing etc. - control->core()->download_store()->save(download); + // + // Reconsider this save. Should be done explicitly when shutting down. + //control->core()->download_store()->save(download); control->core()->hash_queue()->remove(download); download->download()->close(); @@ -311,11 +318,6 @@ DownloadList::pause(Download* download) { } } -void -DownloadList::save(Download* d) { - -} - void DownloadList::check_hash(Download* download) { check_contains(download); @@ -337,7 +339,10 @@ DownloadList::check_hash_throw(Download* download) { close_throw(download); download->download()->hash_resume_clear(); + open_throw(download); + download->download()->hash_resume_save(); + // If any more stuff is added here, make sure resume etc are still // correct. @@ -427,12 +432,12 @@ DownloadList::confirm_finished(Download* download) { download->download()->tracker_list().send_completed(); + download->download()->hash_resume_save(); + // Do this before the slots are called in case one of them closes // the download. - if (!download->is_active() && control->variable()->get_value("session_on_completion") == 1) { - download->download()->hash_resume_save(); + if (!download->is_active() && control->variable()->get_value("session_on_completion") == 1) control->core()->download_store()->save(download); - } std::for_each(m_slotMapFinished.begin(), m_slotMapFinished.end(), download_list_call(download)); } diff --git a/src/core/download_list.h b/src/core/download_list.h index 89218af5..04571f7b 100644 --- a/src/core/download_list.h +++ b/src/core/download_list.h @@ -84,6 +84,8 @@ public: void erase(Download* d); iterator erase(iterator itr); + //void save(Download* d); + void open(Download* d); void open_throw(Download* d); @@ -97,8 +99,6 @@ public: void resume(Download* d); void pause(Download* d); - void save(Download* d); - void check_hash(Download* d); void check_hash_throw(Download* d); diff --git a/src/main.cc b/src/main.cc index 8aad6e4b..2fbdbd09 100644 --- a/src/main.cc +++ b/src/main.cc @@ -244,6 +244,8 @@ main(int argc, char** argv) { control->core()->get_poll_manager()->poll(client_next_timeout()); } + control->core()->download_list()->session_save(); + control->cleanup(); } catch (std::exception& e) {