summaryrefslogtreecommitdiff
path: root/src/SessionSerializer.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2013-02-04 21:50:09 +0900
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2013-02-04 21:50:09 +0900
commit3fc45edaa7eeb944c42b099f66d5eec6a9382bc2 (patch)
tree1f221fa721e4679b69bc53d2351fbcb5657ccdfc /src/SessionSerializer.cc
parentd1c88fbabf8ecf82111fb03495c0246958661903 (diff)
Fix bug that active downloads are not saved with --save-session-interval
Diffstat (limited to 'src/SessionSerializer.cc')
-rw-r--r--src/SessionSerializer.cc17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/SessionSerializer.cc b/src/SessionSerializer.cc
index 4cd0e170..519cf338 100644
--- a/src/SessionSerializer.cc
+++ b/src/SessionSerializer.cc
@@ -212,6 +212,23 @@ bool SessionSerializer::save(BufferedFile& fp) const
}
}
}
+ {
+ // Save active downloads.
+ const RequestGroupList& groups = rgman_->getRequestGroups();
+ for(RequestGroupList::SeqType::const_iterator itr = groups.begin(),
+ eoi = groups.end(); itr != eoi; ++itr) {
+ const SharedHandle<RequestGroup>& rg = (*itr).second;
+ SharedHandle<DownloadResult> dr = rg->createDownloadResult();
+ bool stopped = dr->result == error_code::FINISHED ||
+ dr->result == error_code::REMOVED;
+ if((!stopped && saveInProgress_) ||
+ (stopped && dr->option->getAsBool(PREF_FORCE_SAVE))) {
+ if(!writeDownloadResult(fp, metainfoCache, dr)) {
+ return false;
+ }
+ }
+ }
+ }
if(saveWaiting_) {
const RequestGroupList& groups = rgman_->getReservedGroups();
for(RequestGroupList::SeqType::const_iterator itr = groups.begin(),