2009-12-07 03:57:55 +00:00
|
|
|
/*
|
2014-01-19 01:09:44 +00:00
|
|
|
* This file Copyright (C) 2005-2014 Mnemosyne LLC
|
2006-07-16 19:39:23 +00:00
|
|
|
*
|
2014-01-21 03:10:30 +00:00
|
|
|
* It may be used under the GNU GPL versions 2 or 3
|
2014-01-19 01:09:44 +00:00
|
|
|
* or any future license endorsed by Mnemosyne LLC.
|
2006-07-16 19:39:23 +00:00
|
|
|
*
|
2009-12-07 03:57:55 +00:00
|
|
|
*/
|
2006-07-16 19:39:23 +00:00
|
|
|
|
2017-11-14 20:21:28 +00:00
|
|
|
#pragma once
|
|
|
|
|
2008-11-24 20:17:36 +00:00
|
|
|
#ifndef __TRANSMISSION__
|
2017-04-19 12:04:45 +00:00
|
|
|
#error only libtransmission should #include this header.
|
2008-11-24 20:17:36 +00:00
|
|
|
#endif
|
|
|
|
|
2021-12-16 22:58:58 +00:00
|
|
|
#include <algorithm>
|
2021-11-12 16:42:51 +00:00
|
|
|
#include <cstdint>
|
|
|
|
#include <optional>
|
2021-11-09 03:30:03 +00:00
|
|
|
#include <string>
|
|
|
|
#include <string_view>
|
2021-11-12 16:42:51 +00:00
|
|
|
#include <vector>
|
2021-11-09 03:30:03 +00:00
|
|
|
|
2007-01-19 04:42:31 +00:00
|
|
|
#include "transmission.h"
|
2021-11-09 03:30:03 +00:00
|
|
|
|
2021-12-26 22:04:20 +00:00
|
|
|
#include "bitfield.h"
|
2021-12-26 16:25:07 +00:00
|
|
|
#include "torrent.h"
|
2021-12-26 22:04:20 +00:00
|
|
|
#include "tr-macros.h"
|
2021-12-15 21:25:42 +00:00
|
|
|
|
2021-11-12 16:42:51 +00:00
|
|
|
struct tr_error;
|
2021-11-09 03:30:03 +00:00
|
|
|
struct tr_variant;
|
2020-08-11 18:11:55 +00:00
|
|
|
|
2017-07-26 18:20:30 +00:00
|
|
|
enum tr_metainfo_basename_format
|
|
|
|
{
|
|
|
|
TR_METAINFO_BASENAME_NAME_AND_PARTIAL_HASH,
|
|
|
|
TR_METAINFO_BASENAME_HASH
|
|
|
|
};
|
|
|
|
|
2021-11-12 16:42:51 +00:00
|
|
|
struct tr_metainfo_parsed
|
|
|
|
{
|
|
|
|
tr_info info = {};
|
|
|
|
uint64_t info_dict_length = 0;
|
|
|
|
std::vector<tr_sha1_digest_t> pieces;
|
2021-12-26 22:04:20 +00:00
|
|
|
tr_bitfield files_renamed = tr_bitfield{ 0 };
|
2021-11-12 16:42:51 +00:00
|
|
|
|
|
|
|
tr_metainfo_parsed() = default;
|
|
|
|
|
2021-11-18 00:17:09 +00:00
|
|
|
tr_metainfo_parsed(tr_metainfo_parsed&& that) noexcept
|
2021-11-12 16:42:51 +00:00
|
|
|
{
|
|
|
|
std::swap(this->info, that.info);
|
|
|
|
std::swap(this->pieces, that.pieces);
|
|
|
|
std::swap(this->info_dict_length, that.info_dict_length);
|
|
|
|
}
|
|
|
|
|
|
|
|
tr_metainfo_parsed(tr_metainfo_parsed const&) = delete;
|
|
|
|
|
|
|
|
tr_metainfo_parsed& operator=(tr_metainfo_parsed const&) = delete;
|
|
|
|
|
|
|
|
~tr_metainfo_parsed()
|
|
|
|
{
|
|
|
|
tr_metainfoFree(&info);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
std::optional<tr_metainfo_parsed> tr_metainfoParse(tr_session const* session, tr_variant const* variant, tr_error** error);
|
2008-04-05 20:12:11 +00:00
|
|
|
|
2017-04-20 16:02:19 +00:00
|
|
|
void tr_metainfoRemoveSaved(tr_session const* session, tr_info const* info);
|
2010-04-20 23:14:00 +00:00
|
|
|
|
2021-11-20 00:36:25 +00:00
|
|
|
std::string tr_buildTorrentFilename(
|
|
|
|
std::string_view dirname,
|
2021-12-16 08:49:04 +00:00
|
|
|
std::string_view name,
|
|
|
|
std::string_view info_hash_string,
|
2021-11-20 00:36:25 +00:00
|
|
|
enum tr_metainfo_basename_format format,
|
|
|
|
std::string_view suffix);
|
2017-07-26 18:20:30 +00:00
|
|
|
|
2021-08-15 09:41:48 +00:00
|
|
|
void tr_metainfoMigrateFile(
|
|
|
|
tr_session const* session,
|
|
|
|
tr_info const* info,
|
|
|
|
enum tr_metainfo_basename_format old_format,
|
2017-07-26 18:20:30 +00:00
|
|
|
enum tr_metainfo_basename_format new_format);
|
2019-06-23 13:23:22 +00:00
|
|
|
|
|
|
|
/** @brief Private function that's exposed here only for unit tests */
|
2021-12-26 22:04:20 +00:00
|
|
|
bool tr_metainfoAppendSanitizedPathComponent(std::string& out, std::string_view in);
|