diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2007-11-27 12:27:10 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2007-11-27 12:27:10 +0000 |
| commit | 506bc3db13f6130aca37c1df216a3e8a7967bf99 (patch) | |
| tree | 09f6c0fcd703ad78e3d45eb38810582e8691b276 /src/ContentTypeRequestGroupCriteria.cc | |
| parent | 9d66150a8396d91d19bbee524243a5f371704929 (diff) | |
2007-11-27 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Rewritten to add content-type support.
* src/DownloadHandler.{h, cc}
* src/BtPostDownloadHandler.{h, cc}
* test/BtPostDownloadHandlerTest.cc
* src/MetalinkPostDownloadHandler.{h, cc}
* test/MetalinkPostDownloadHandlerTest.cc
* src/PostDownloadHandler.{h, cc}
* src/DownloadHandlerConstants.{h, cc}
* src/RequestGroup.cc
* src/HttpResponseCommand.cc
* src/FtpNegotiationCommand.cc
* src/SingleFileDownloadContext.{h, cc}
* src/RequestGroup.h
* src/RequestGroupCriteria.h
* src/ContentTypeRequestGroupCriteria.h
Added 'mem' option value for --follow-metalink,
--follow-torrent.
If it is give, metalink/torrent file is not written to the disk,
but
just is kept in memory. Parsing is occurred on memory.
* src/MetalinkHelper.{h, cc}
* src/MetalinkProcessor.h
* src/Xml2MetalinkProcessor.{h, cc}
* test/Xml2MetalinkProcessorTest.cc
* src/DownloadHandlerFactory.{h, cc}
* test/DownloadHandlerFactoryTest.cc
* src/PreDownloadHandler.{h, cc}
* src/OptionHandlerFactory.cc
* src/DefaultBtContext.{h, cc}
* test/DefaultBtContextTest.cc
* src/version_usage.cc
* src/Metalink2RequestGroup.{h, cc}
* src/RequestGroup.{h, cc}
* src/a2functional.h
* test/a2functionalTest.cc
* src/MemoryBufferPreDownloadHandler.{h, cc}
* src/OptionHandlerImpl.h
* src/prefs.h
* src/Util.{h, cc}
* test/UtilTest.cc
Keep DownloadResult rather than RequestGroup after downloads to
reduce
memory usage.
* src/RequestGroupMan.{h, cc}
* src/DownloadEngine.cc
* src/BtDependency.{h, cc}: Changed the type of dependee from
WeakHandle to SharedHandle because WeakHandle could be null.
* src/RequestGroup.{h, cc}
* src/DownloadEngineFactory.cc
* src/DownloadResult.h
Set totalLength after download finished
* src/UnknownLengthPieceStorage.{h, cc}
Keep torrent file specified in metalink in memory.
* src/Metalink2RequestGroup.cc
* src/BtDependency.cc
* src/TrueRequestGroupCriteria.h
Fixed the bug: seekg is used where seekp should be used.
* src/ByteArrayDiskWriter.cc
* test/ByteArraydiskWriterTest.cc
Diffstat (limited to 'src/ContentTypeRequestGroupCriteria.cc')
| -rw-r--r-- | src/ContentTypeRequestGroupCriteria.cc | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/src/ContentTypeRequestGroupCriteria.cc b/src/ContentTypeRequestGroupCriteria.cc new file mode 100644 index 00000000..54291f0f --- /dev/null +++ b/src/ContentTypeRequestGroupCriteria.cc @@ -0,0 +1,79 @@ +/* <!-- copyright */ +/* + * aria2 - The high speed download utility + * + * Copyright (C) 2006 Tatsuhiro Tsujikawa + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the + * OpenSSL library under certain conditions as described in each + * individual source file, and distribute linked combinations + * including the two. + * You must obey the GNU General Public License in all respects + * for all of the code used other than OpenSSL. If you modify + * file(s) with this exception, you may extend this exception to your + * version of the file(s), but you are not obligated to do so. If you + * do not wish to do so, delete this exception statement from your + * version. If you delete this exception statement from all source + * files in the program, then also delete it here. + */ +/* copyright --> */ +#include "ContentTypeRequestGroupCriteria.h" +#include "RequestGroup.h" +#include "SingleFileDownloadContext.h" +#include "Util.h" + +ContentTypeRequestGroupCriteria::ContentTypeRequestGroupCriteria(const Strings& contentTypes, + const Strings& extensions): + _contentTypes(contentTypes), + _extensions(extensions) {} + +ContentTypeRequestGroupCriteria::~ContentTypeRequestGroupCriteria() {} + +bool ContentTypeRequestGroupCriteria::match(const RequestGroup* requestGroup) const +{ + if(forwardMatch(requestGroup->getFilePath(), _extensions)) { + return true; + } else { + SingleFileDownloadContextHandle dctx = requestGroup->getDownloadContext(); + if(dctx.isNull()) { + return false; + } else { + return exactMatch(dctx->getContentType(), _contentTypes); + } + } +} + +bool ContentTypeRequestGroupCriteria::forwardMatch(const string& target, const Strings& candidates) const +{ + for(Strings::const_iterator itr = candidates.begin(); itr != candidates.end(); ++itr) { + if(Util::endsWith(target, *itr)) { + return true; + } + } + return false; +} + +bool ContentTypeRequestGroupCriteria::exactMatch(const string& target, const Strings& candidates) const +{ + for(Strings::const_iterator itr = candidates.begin(); itr != candidates.end(); ++itr) { + if(target == *itr) { + return true; + } + } + return false; +} |
