summaryrefslogtreecommitdiff
path: root/src/RpcMethodImpl.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2014-06-04 21:45:12 +0900
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2014-06-04 21:45:12 +0900
commit4f3c526dcdf5fce74dd12be1c882f6c47d1829ec (patch)
tree9e67f3032b6de4be1cf915fd86b439eea6521314 /src/RpcMethodImpl.cc
parentadeead6f0396e2f8551d1182972e277728fd6c8b (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.cc33
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()));
}
}
}