Add DownloadHandle::getBtMetaInfo() API

pull/89/head
Tatsuhiro Tsujikawa 2013-05-14 23:00:21 +09:00
parent b0b5e0df38
commit 5dcc2b7842
2 changed files with 80 additions and 0 deletions

View File

@ -590,6 +590,26 @@ struct RequestGroupDH : public DownloadHandle {
} }
return createFileData(dctx->getFileEntries()[index-1], index, &bf); return createFileData(dctx->getFileEntries()[index-1], index, &bf);
} }
virtual BtMetaInfoData getBtMetaInfo()
{
BtMetaInfoData res;
#ifdef ENABLE_BITTORRENT
if(group->getDownloadContext()->hasAttribute(CTX_ATTR_BT)) {
SharedHandle<TorrentAttribute> torrentAttrs =
bittorrent::getTorrentAttrs(group->getDownloadContext());
res.announceList = torrentAttrs->announceList;
res.comment = torrentAttrs->comment;
res.creationDate = torrentAttrs->creationDate;
// TODO Use BtFileMode for torrentAttrs->mode
res.mode = torrentAttrs->mode == "single" ?
BT_FILE_MODE_SINGLE : BT_FILE_MODE_MULTI;
if(!torrentAttrs->metadata.empty()) {
res.name = torrentAttrs->name;
}
}
#endif // ENABLE_BITTORRENT
return res;
}
SharedHandle<RequestGroup> group; SharedHandle<RequestGroup> group;
TransferStat ts; TransferStat ts;
}; };
@ -687,6 +707,10 @@ struct DownloadResultDH : public DownloadHandle {
dr->bitfield.size()); dr->bitfield.size());
return createFileData(dr->fileEntries[index-1], index, &bf); return createFileData(dr->fileEntries[index-1], index, &bf);
} }
virtual BtMetaInfoData getBtMetaInfo()
{
return BtMetaInfoData();
}
SharedHandle<DownloadResult> dr; SharedHandle<DownloadResult> dr;
}; };
} // namespace } // namespace

View File

@ -447,6 +447,55 @@ struct FileData {
std::vector<UriData> uris; std::vector<UriData> uris;
}; };
/**
* @enum
*
* BitTorrent file mode
*/
enum BtFileMode {
/**
* Indicating single file torrent
*/
BT_FILE_MODE_SINGLE,
/**
* Indicating multi file torrent
*/
BT_FILE_MODE_MULTI
};
/**
* @struct
*
* BitTorrent metainfo data retrieved from ".torrent" file.
*/
struct BtMetaInfoData {
/**
* List of lists of announce URI. If ".torrent" file contains
* ``announce`` and no ``announce-list``, ``announce`` is converted
* to ``announce-list`` format.
*/
std::vector<std::vector<std::string> > announceList;
/**
* ``comment`` for the torrent. ``comment.utf-8`` is used if
* available.
*/
std::string comment;
/**
* The creation time of the torrent. The value is an integer since
* the Epoch, measured in seconds.
*/
time_t creationDate;
/**
* File mode of the torrent.
*/
BtFileMode mode;
/**
* ``name`` in ``info`` dictionary. ``name.utf-8`` is used if
* available.
*/
std::string name;
};
/** /**
* @enum * @enum
* *
@ -579,6 +628,13 @@ public:
* is out-of-bound. * is out-of-bound.
*/ */
virtual FileData getFile(int index) = 0; virtual FileData getFile(int index) = 0;
/**
* Returns the information retrieved from ".torrent" file. This
* function is only meaningful only when BitTorrent transfer is
* involved in the download and the download is not
* stopped/completed.
*/
virtual BtMetaInfoData getBtMetaInfo() = 0;
}; };
/** /**