summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/aria2api.cc24
-rw-r--r--src/includes/aria2/aria2.h56
2 files changed, 80 insertions, 0 deletions
diff --git a/src/aria2api.cc b/src/aria2api.cc
index 356b7515..93028ca9 100644
--- a/src/aria2api.cc
+++ b/src/aria2api.cc
@@ -590,6 +590,26 @@ struct RequestGroupDH : public DownloadHandle {
}
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;
TransferStat ts;
};
@@ -687,6 +707,10 @@ struct DownloadResultDH : public DownloadHandle {
dr->bitfield.size());
return createFileData(dr->fileEntries[index-1], index, &bf);
}
+ virtual BtMetaInfoData getBtMetaInfo()
+ {
+ return BtMetaInfoData();
+ }
SharedHandle<DownloadResult> dr;
};
} // namespace
diff --git a/src/includes/aria2/aria2.h b/src/includes/aria2/aria2.h
index 86ef420d..4929576b 100644
--- a/src/includes/aria2/aria2.h
+++ b/src/includes/aria2/aria2.h
@@ -450,6 +450,55 @@ struct FileData {
/**
* @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
+ *
* The status of download item.
*/
enum DownloadStatus {
@@ -579,6 +628,13 @@ public:
* is out-of-bound.
*/
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;
};
/**