view include/gui/pages/torrents.h @ 337:a7d4e5107531

dep/animone: REFACTOR ALL THE THINGS 1: animone now has its own syntax divergent from anisthesia, making different platforms actually have their own sections 2: process names in animone are now called `comm' (this will probably break things). this is what its called in bsd/linux so I'm just going to use it everywhere 3: the X11 code now checks for the existence of a UTF-8 window title and passes it if available 4: ANYTHING THATS NOT LINUX IS 100% UNTESTED AND CAN AND WILL BREAK! I still actually need to test the bsd code. to be honest I'm probably going to move all of the bsds into separate files because they're all essentially different operating systems at this point
author Paper <paper@paper.us.eu.org>
date Wed, 19 Jun 2024 12:51:15 -0400
parents 3ec7804abf17
children
line wrap: on
line source

#ifndef MINORI_GUI_PAGES_TORRENTS_H_
#define MINORI_GUI_PAGES_TORRENTS_H_

#include "core/torrent.h"
#include <QAbstractListModel>
#include <QFrame>
#include <QItemSelection>
#include <QSortFilterProxyModel>

class QTreeView;

class TorrentsPageListSortFilter final : public QSortFilterProxyModel {
	Q_OBJECT

public:
	TorrentsPageListSortFilter(QObject* parent = nullptr);

protected:
	bool lessThan(const QModelIndex& l, const QModelIndex& r) const override;
};

class TorrentsPageListModel final : public QAbstractListModel {
	Q_OBJECT

public:
	enum columns {
		TL_TITLE,
		TL_EPISODE,
		TL_GROUP,
		TL_SIZE,
		TL_RESOLUTION,
		TL_SEEDERS,
		TL_LEECHERS,
		TL_DOWNLOADS,
		TL_DESCRIPTION,
		TL_FILENAME,
		TL_RELEASEDATE,

		NB_COLUMNS
	};

	TorrentsPageListModel(QObject* parent);
	~TorrentsPageListModel() override = default;
	int rowCount(const QModelIndex& parent = QModelIndex()) const override;
	int columnCount(const QModelIndex& parent = QModelIndex()) const override;
	bool setData(const QModelIndex& index, const QVariant& value, int role) override;
	QVariant data(const QModelIndex& index, int role) const override;
	QVariant headerData(const int section, const Qt::Orientation orientation, const int role) const override;
	Qt::ItemFlags flags(const QModelIndex& index) const override;

	QByteArray DownloadTorrentList();
	void DownloadTorrents(QItemSelection selection);
	void ParseFeedDescription(const std::string& description, Torrent& torrent);
	void ParseTorrentList(const QByteArray& ba);
	void RefreshTorrentList();

private:
	class TorrentModelItem : public Torrent {
	public:
		bool GetChecked() const { return _checked; };
		void SetChecked(bool checked) { _checked = checked; };

	private:
		bool _checked = false;
	};

	std::vector<TorrentModelItem> list;
};

class TorrentsPage final : public QFrame {
	Q_OBJECT

public:
	TorrentsPage(QWidget* parent = nullptr);
	void DownloadSelection();
	void Refresh();

private:
	TorrentsPageListModel* model = nullptr;
	TorrentsPageListSortFilter* sort_model = nullptr;
	QTreeView* treeview = nullptr;
};

#endif // MINORI_GUI_PAGES_TORRENTS_H_