diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2014-06-04 21:45:12 +0900 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2014-06-04 21:45:12 +0900 |
| commit | 4f3c526dcdf5fce74dd12be1c882f6c47d1829ec (patch) | |
| tree | 9e67f3032b6de4be1cf915fd86b439eea6521314 /src/RpcMethodImpl.cc | |
| parent | adeead6f0396e2f8551d1182972e277728fd6c8b (diff) | |
Support PREF_DIR change for Metalink files
Reworked previous commit adeead6f0396e2f8551d1182972e277728fd6c8b, and
now support changing PREF_DIR for Metalink downloads.
Diffstat (limited to 'src/RpcMethodImpl.cc')
| -rw-r--r-- | src/RpcMethodImpl.cc | 33 |
1 files changed, 23 insertions, 10 deletions
diff --git a/src/RpcMethodImpl.cc b/src/RpcMethodImpl.cc index e7ef98c0..375f4e3d 100644 --- a/src/RpcMethodImpl.cc +++ b/src/RpcMethodImpl.cc @@ -1473,22 +1473,35 @@ void changeOption } } if(option.defined(PREF_DIR) || option.defined(PREF_OUT)) { - if(dctx->getFileEntries().size() == 1 -#ifdef ENABLE_BITTORRENT - && !dctx->hasAttribute(CTX_ATTR_BT) -#endif // ENABLE_BITTORRENT - ) { + if(!group->getMetadataInfo()) { + + assert(dctx->getFileEntries().size() == 1); auto& fileEntry = dctx->getFirstFileEntry(); - if(grOption->blank(PREF_OUT)) { - // We need to reset length to 0, so that we pretend that file - // name is unknown and it should be determined at next run. - fileEntry->setLength(0); + if(!grOption->blank(PREF_OUT)) { + fileEntry->setPath + (util::applyDir(grOption->get(PREF_DIR), grOption->get(PREF_OUT))); + fileEntry->setSuffixPath(A2STR::NIL); + } else if(fileEntry->getSuffixPath().empty()) { fileEntry->setPath(A2STR::NIL); } else { fileEntry->setPath - (util::applyDir(grOption->get(PREF_DIR), grOption->get(PREF_OUT))); + (util::applyDir(grOption->get(PREF_DIR), + fileEntry->getSuffixPath())); + } + } else if(group->getMetadataInfo() +#ifdef ENABLE_BITTORRENT + && !dctx->hasAttribute(CTX_ATTR_BT) +#endif // ENABLE_BITTORRENT + ) { + // In case of Metalink + for(auto& fileEntry : dctx->getFileEntries()) { + // PREF_OUT is not applicable to Metalink. We have always + // suffixPath set. + fileEntry->setPath + (util::applyDir(grOption->get(PREF_DIR), + fileEntry->getSuffixPath())); } } } |
