diff include/gui/pages/torrents.h @ 114:ab191e28e69d

*: add initial torrent stuff WOAH! these checkboxes are a pain in my fucking ass
author Paper <mrpapersonic@gmail.com>
date Tue, 07 Nov 2023 08:03:42 -0500
parents 8043152ef9d4
children 39521c47c7a3
line wrap: on
line diff
--- a/include/gui/pages/torrents.h	Mon Nov 06 13:48:11 2023 -0500
+++ b/include/gui/pages/torrents.h	Tue Nov 07 08:03:42 2023 -0500
@@ -1,13 +1,77 @@
 #ifndef __gui__pages__torrents_h
 #define __gui__pages__torrents_h
 
-#include <QWidget>
+#include "core/torrent.h"
+#include <QFrame>
+#include <QAbstractListModel>
+#include <QSortFilterProxyModel>
+
+class TorrentModelItem : public Torrent {
+	public:
+		bool GetChecked() const { return _checked; };
+		void SetChecked(bool checked) { _checked = checked; };
+
+	private:
+		bool _checked = false;
+};
+
+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
 
-class TorrentsPage final : public QWidget {
+	public:
+		enum columns {
+			TL_TITLE,
+			TL_EPISODE,
+			TL_GROUP,
+			TL_SIZE,
+			TL_RESOLUTION,
+			TL_SEEDERS, 
+			TL_LEECHERS,
+			TL_DOWNLOADERS,
+			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 ParseTorrentList(const QByteArray& ba);
+		void RefreshTorrentList();
+
+	private:
+		std::vector<TorrentModelItem> list;
+};
+
+class TorrentsPage final : public QFrame {
 		Q_OBJECT
 
 	public:
 		TorrentsPage(QWidget* parent = nullptr);
+		void Refresh();
+
+	private:
+		TorrentsPageListModel* model = nullptr;
+		TorrentsPageListSortFilter* sort_model = nullptr;
 };
 
 #endif // __gui__pages__torrents_h