97 lines
1.8 KiB
C++
97 lines
1.8 KiB
C++
/*
|
|
* This file Copyright (C) Mnemosyne LLC
|
|
*
|
|
* It may be used under the GNU GPL versions 2 or 3
|
|
* or any future license endorsed by Mnemosyne LLC.
|
|
*
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <string>
|
|
#include <string_view>
|
|
#include <vector>
|
|
|
|
#include "transmission.h"
|
|
|
|
#include "announce-list.h"
|
|
|
|
struct tr_error;
|
|
struct tr_variant;
|
|
|
|
class tr_magnet_metainfo
|
|
{
|
|
public:
|
|
bool parseMagnet(std::string_view magnet_link, tr_error** error = nullptr);
|
|
std::string magnet() const;
|
|
virtual ~tr_magnet_metainfo() = default;
|
|
|
|
auto const& infoHash() const
|
|
{
|
|
return info_hash_;
|
|
}
|
|
auto const& name() const
|
|
{
|
|
return name_;
|
|
}
|
|
|
|
auto webseedCount() const
|
|
{
|
|
return std::size(webseed_urls_);
|
|
}
|
|
|
|
auto const& webseed(size_t i) const
|
|
{
|
|
return webseed_urls_[i];
|
|
}
|
|
|
|
auto& announceList()
|
|
{
|
|
return announce_list_;
|
|
}
|
|
|
|
auto const& announceList() const
|
|
{
|
|
return announce_list_;
|
|
}
|
|
|
|
std::string const& infoHashString() const
|
|
{
|
|
return info_hash_str_;
|
|
}
|
|
|
|
virtual void clear();
|
|
|
|
void setName(std::string_view name)
|
|
{
|
|
name_ = name;
|
|
}
|
|
|
|
void toVariant(tr_variant* top) const;
|
|
|
|
enum class BasenameFormat
|
|
{
|
|
Hash,
|
|
NameAndPartialHash
|
|
};
|
|
|
|
static std::string makeFilename(
|
|
std::string_view dirname,
|
|
std::string_view name,
|
|
std::string_view info_hash_string,
|
|
BasenameFormat format,
|
|
std::string_view suffix);
|
|
|
|
std::string makeFilename(std::string_view dirname, BasenameFormat format, std::string_view suffix) const
|
|
{
|
|
return makeFilename(dirname, name(), infoHashString(), format, suffix);
|
|
}
|
|
|
|
protected:
|
|
tr_announce_list announce_list_;
|
|
std::vector<std::string> webseed_urls_;
|
|
tr_sha1_digest_t info_hash_;
|
|
std::string info_hash_str_;
|
|
std::string name_;
|
|
};
|