1
0
Fork 0
mirror of https://github.com/transmission/transmission synced 2025-03-13 07:33:02 +00:00
transmission/libtransmission/torrent-queue.h
Yat Ho 47eb4ee2bc
refactor: dedicated class for torrent queue (#7332)
* Revert "feat: save queue order between sessions (#6753)"

This reverts commit 4db50dae10.

* refactor: new torrent queue class

* refactor: replace queue code with new class

* test: new tests for new class

* feat: store and load queue order across sessions

* build: xcode

* refactor: use set_difference instead of unordered_set

* code review: use `tr_torrent_id_t` as key

* fix: don't overflow when moving up/down

---------

Co-authored-by: Dzmitry Neviadomski <nevack.d@gmail.com>
2025-03-09 19:08:50 -05:00

56 lines
1.5 KiB
C++

// This file Copyright © Mnemosyne LLC.
// It may be used under GPLv2 (SPDX: GPL-2.0-only), GPLv3 (SPDX: GPL-3.0-only),
// or any future license endorsed by Mnemosyne LLC.
// License text can be found in the licenses/ folder.
#pragma once
#ifndef __TRANSMISSION__
#error only libtransmission should #include this header.
#endif
#include <cstddef>
#include <string>
#include <string_view>
#include <vector>
#include "libtransmission/transmission.h"
class tr_torrent_queue
{
public:
struct Mediator
{
virtual ~Mediator() = default;
[[nodiscard]] virtual std::string config_dir() const = 0;
[[nodiscard]] virtual std::string store_filename(tr_torrent_id_t id) const = 0;
};
explicit tr_torrent_queue(Mediator const& mediator)
: mediator_{ mediator }
{
}
tr_torrent_queue(tr_torrent_queue const&) = delete;
tr_torrent_queue(tr_torrent_queue&&) = delete;
tr_torrent_queue& operator=(tr_torrent_queue const&) = delete;
tr_torrent_queue& operator=(tr_torrent_queue&&) = delete;
size_t add(tr_torrent_id_t id);
void remove(tr_torrent_id_t id);
[[nodiscard]] size_t get_pos(tr_torrent_id_t id);
void set_pos(tr_torrent_id_t id, size_t new_pos);
bool to_file() const;
[[nodiscard]] std::vector<std::string> from_file();
static auto constexpr MinQueuePosition = size_t{};
static auto constexpr MaxQueuePosition = ~size_t{};
private:
std::vector<tr_torrent_id_t> queue_;
std::vector<size_t> pos_cache_;
Mediator const& mediator_;
};