annotate src/gui/pages/torrents.cc @ 198:bc1ae1810855

dep/animia: switch from using classes to global functions the old idea was ok, but sort of hackish; this method doesn't use classes at all, and this way (especially important!) we can do wayland stuff AND x11 at the same time, which wasn't really possible without stupid workarounds in the other method
author Paper <mrpapersonic@gmail.com>
date Sun, 24 Dec 2023 02:59:42 -0500
parents 01d259b9c89f
children 53211cb1e7f5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
54
466ac9870df9 add stub pages (to be implemented)
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1 #include "gui/pages/torrents.h"
114
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
2 #include "core/strings.h"
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
3 #include "core/http.h"
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
4 #include "core/session.h"
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
5 #include "gui/widgets/text.h"
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
6 #include "track/media.h"
178
bc8d2ccff09c win32/dark: use existing STL classes for dwmapi
Paper <mrpapersonic@gmail.com>
parents: 154
diff changeset
7
114
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
8 #include <QVBoxLayout>
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
9 #include <QToolBar>
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
10 #include <QTreeView>
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
11 #include <QMainWindow>
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
12 #include <QByteArray>
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
13 #include <QDataStream>
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
14 #include <QThreadPool>
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
15 #include <QDebug>
178
bc8d2ccff09c win32/dark: use existing STL classes for dwmapi
Paper <mrpapersonic@gmail.com>
parents: 154
diff changeset
16
114
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
17 #include <iostream>
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
18 #include <sstream>
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
19 #include <algorithm>
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
20
178
bc8d2ccff09c win32/dark: use existing STL classes for dwmapi
Paper <mrpapersonic@gmail.com>
parents: 154
diff changeset
21 #include "pugixml.hpp"
154
d43d68408d3c dep/animia: fix XnuFdTools
Paper <mrpapersonic@gmail.com>
parents: 118
diff changeset
22 #include "anitomy/anitomy.h"
d43d68408d3c dep/animia: fix XnuFdTools
Paper <mrpapersonic@gmail.com>
parents: 118
diff changeset
23
118
39521c47c7a3 *: another huge megacommit, SORRY
Paper <mrpapersonic@gmail.com>
parents: 117
diff changeset
24 /* This file is very, very similar to the anime list page.
39521c47c7a3 *: another huge megacommit, SORRY
Paper <mrpapersonic@gmail.com>
parents: 117
diff changeset
25
39521c47c7a3 *: another huge megacommit, SORRY
Paper <mrpapersonic@gmail.com>
parents: 117
diff changeset
26 It differs from Taiga in that it uses tabs instead of
39521c47c7a3 *: another huge megacommit, SORRY
Paper <mrpapersonic@gmail.com>
parents: 117
diff changeset
27 those "groups", but those are custom painted and a pain in the ass to
39521c47c7a3 *: another huge megacommit, SORRY
Paper <mrpapersonic@gmail.com>
parents: 117
diff changeset
28 maintain over multiple platforms. */
39521c47c7a3 *: another huge megacommit, SORRY
Paper <mrpapersonic@gmail.com>
parents: 117
diff changeset
29
114
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
30 TorrentsPageListSortFilter::TorrentsPageListSortFilter(QObject* parent) : QSortFilterProxyModel(parent) {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
31 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
32
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
33 bool TorrentsPageListSortFilter::lessThan(const QModelIndex& l, const QModelIndex& r) const {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
34 QVariant left = sourceModel()->data(l, sortRole());
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
35 QVariant right = sourceModel()->data(r, sortRole());
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
36
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
37 switch (left.userType()) {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
38 case QMetaType::Int:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
39 case QMetaType::UInt:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
40 case QMetaType::LongLong:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
41 case QMetaType::ULongLong: return left.toInt() < right.toInt();
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
42 case QMetaType::QDate: return left.toDate() < right.toDate();
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
43 case QMetaType::QString:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
44 default: return QString::compare(left.toString(), right.toString(), Qt::CaseInsensitive) < 0;
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
45 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
46 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
47
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
48 /* -------------------------------------------- */
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
49
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
50 TorrentsPageListModel::TorrentsPageListModel(QObject* parent) : QAbstractListModel(parent) {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
51 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
52
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
53 QByteArray TorrentsPageListModel::DownloadTorrentList() {
116
254b1d2b7096 settings: add torrents page, make rss feed configurable
Paper <mrpapersonic@gmail.com>
parents: 114
diff changeset
54 return HTTP::Get(session.config.torrents.feed_link);
114
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
55 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
56
183
01d259b9c89f pages/torrents.cc: parse feed descriptions separately
Paper <mrpapersonic@gmail.com>
parents: 178
diff changeset
57 void TorrentsPageListModel::ParseFeedDescription(const std::string& description, Torrent& torrent) {
01d259b9c89f pages/torrents.cc: parse feed descriptions separately
Paper <mrpapersonic@gmail.com>
parents: 178
diff changeset
58 /* Parse description... */
01d259b9c89f pages/torrents.cc: parse feed descriptions separately
Paper <mrpapersonic@gmail.com>
parents: 178
diff changeset
59 enum class Keys { SIZE, AUTHORIZED, SUBMITTER, COMMENT };
01d259b9c89f pages/torrents.cc: parse feed descriptions separately
Paper <mrpapersonic@gmail.com>
parents: 178
diff changeset
60
01d259b9c89f pages/torrents.cc: parse feed descriptions separately
Paper <mrpapersonic@gmail.com>
parents: 178
diff changeset
61 const std::unordered_map<std::string, Keys> KeyMap = {
01d259b9c89f pages/torrents.cc: parse feed descriptions separately
Paper <mrpapersonic@gmail.com>
parents: 178
diff changeset
62 {"Size", Keys::SIZE},
01d259b9c89f pages/torrents.cc: parse feed descriptions separately
Paper <mrpapersonic@gmail.com>
parents: 178
diff changeset
63 {"Authorized", Keys::AUTHORIZED},
01d259b9c89f pages/torrents.cc: parse feed descriptions separately
Paper <mrpapersonic@gmail.com>
parents: 178
diff changeset
64 {"Submitter", Keys::SUBMITTER},
01d259b9c89f pages/torrents.cc: parse feed descriptions separately
Paper <mrpapersonic@gmail.com>
parents: 178
diff changeset
65 {"Comment", Keys::COMMENT}
01d259b9c89f pages/torrents.cc: parse feed descriptions separately
Paper <mrpapersonic@gmail.com>
parents: 178
diff changeset
66 };
01d259b9c89f pages/torrents.cc: parse feed descriptions separately
Paper <mrpapersonic@gmail.com>
parents: 178
diff changeset
67
01d259b9c89f pages/torrents.cc: parse feed descriptions separately
Paper <mrpapersonic@gmail.com>
parents: 178
diff changeset
68 /* Parse size from description */
01d259b9c89f pages/torrents.cc: parse feed descriptions separately
Paper <mrpapersonic@gmail.com>
parents: 178
diff changeset
69 std::istringstream descstream(description);
01d259b9c89f pages/torrents.cc: parse feed descriptions separately
Paper <mrpapersonic@gmail.com>
parents: 178
diff changeset
70
01d259b9c89f pages/torrents.cc: parse feed descriptions separately
Paper <mrpapersonic@gmail.com>
parents: 178
diff changeset
71 for (std::string line; std::getline(descstream, line);) {
01d259b9c89f pages/torrents.cc: parse feed descriptions separately
Paper <mrpapersonic@gmail.com>
parents: 178
diff changeset
72 const size_t pos = line.find_first_of(':', 0);
01d259b9c89f pages/torrents.cc: parse feed descriptions separately
Paper <mrpapersonic@gmail.com>
parents: 178
diff changeset
73 if (pos == std::string::npos)
01d259b9c89f pages/torrents.cc: parse feed descriptions separately
Paper <mrpapersonic@gmail.com>
parents: 178
diff changeset
74 continue;
01d259b9c89f pages/torrents.cc: parse feed descriptions separately
Paper <mrpapersonic@gmail.com>
parents: 178
diff changeset
75
01d259b9c89f pages/torrents.cc: parse feed descriptions separately
Paper <mrpapersonic@gmail.com>
parents: 178
diff changeset
76 const std::string key = line.substr(0, pos);
01d259b9c89f pages/torrents.cc: parse feed descriptions separately
Paper <mrpapersonic@gmail.com>
parents: 178
diff changeset
77 const std::string value = line.substr(line.find_first_not_of(": ", pos));
01d259b9c89f pages/torrents.cc: parse feed descriptions separately
Paper <mrpapersonic@gmail.com>
parents: 178
diff changeset
78
01d259b9c89f pages/torrents.cc: parse feed descriptions separately
Paper <mrpapersonic@gmail.com>
parents: 178
diff changeset
79 switch (KeyMap.at(key)) {
01d259b9c89f pages/torrents.cc: parse feed descriptions separately
Paper <mrpapersonic@gmail.com>
parents: 178
diff changeset
80 case Keys::COMMENT:
01d259b9c89f pages/torrents.cc: parse feed descriptions separately
Paper <mrpapersonic@gmail.com>
parents: 178
diff changeset
81 torrent.SetDescription(value);
01d259b9c89f pages/torrents.cc: parse feed descriptions separately
Paper <mrpapersonic@gmail.com>
parents: 178
diff changeset
82 break;
01d259b9c89f pages/torrents.cc: parse feed descriptions separately
Paper <mrpapersonic@gmail.com>
parents: 178
diff changeset
83 case Keys::SIZE:
01d259b9c89f pages/torrents.cc: parse feed descriptions separately
Paper <mrpapersonic@gmail.com>
parents: 178
diff changeset
84 torrent.SetSize(Strings::HumanReadableSizeToBytes(value));
01d259b9c89f pages/torrents.cc: parse feed descriptions separately
Paper <mrpapersonic@gmail.com>
parents: 178
diff changeset
85 break;
01d259b9c89f pages/torrents.cc: parse feed descriptions separately
Paper <mrpapersonic@gmail.com>
parents: 178
diff changeset
86 default:
01d259b9c89f pages/torrents.cc: parse feed descriptions separately
Paper <mrpapersonic@gmail.com>
parents: 178
diff changeset
87 break;
01d259b9c89f pages/torrents.cc: parse feed descriptions separately
Paper <mrpapersonic@gmail.com>
parents: 178
diff changeset
88 }
01d259b9c89f pages/torrents.cc: parse feed descriptions separately
Paper <mrpapersonic@gmail.com>
parents: 178
diff changeset
89 }
01d259b9c89f pages/torrents.cc: parse feed descriptions separately
Paper <mrpapersonic@gmail.com>
parents: 178
diff changeset
90 }
01d259b9c89f pages/torrents.cc: parse feed descriptions separately
Paper <mrpapersonic@gmail.com>
parents: 178
diff changeset
91
114
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
92 void TorrentsPageListModel::ParseTorrentList(const QByteArray& ba) {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
93 std::istringstream stdstream(Strings::ToUtf8String(ba));
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
94
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
95 pugi::xml_document doc;
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
96 if (!doc.load(stdstream))
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
97 return; // peace out
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
98
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
99 /* my extra special dumb hack. */
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
100 if (!rowCount(index(0))) {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
101 beginInsertRows(QModelIndex(), 0, 0);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
102 endInsertRows();
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
103 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
104
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
105 beginResetModel();
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
106
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
107 list.clear();
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
108 /* this is just an rss parser; it should be in a separate class... */
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
109 for (pugi::xml_node item : doc.child("rss").child("channel").children("item")) {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
110 TorrentModelItem torrent;
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
111 torrent.SetFilename(item.child_value("title")); /* "title" == filename */
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
112 {
154
d43d68408d3c dep/animia: fix XnuFdTools
Paper <mrpapersonic@gmail.com>
parents: 118
diff changeset
113 anitomy::Anitomy anitomy;
d43d68408d3c dep/animia: fix XnuFdTools
Paper <mrpapersonic@gmail.com>
parents: 118
diff changeset
114 anitomy.Parse(Strings::ToWstring(torrent.GetFilename()));
d43d68408d3c dep/animia: fix XnuFdTools
Paper <mrpapersonic@gmail.com>
parents: 118
diff changeset
115
d43d68408d3c dep/animia: fix XnuFdTools
Paper <mrpapersonic@gmail.com>
parents: 118
diff changeset
116 const auto& elements = anitomy.elements();
d43d68408d3c dep/animia: fix XnuFdTools
Paper <mrpapersonic@gmail.com>
parents: 118
diff changeset
117
d43d68408d3c dep/animia: fix XnuFdTools
Paper <mrpapersonic@gmail.com>
parents: 118
diff changeset
118 /* todo: patch Anitomy so that it doesn't use wide strings */
d43d68408d3c dep/animia: fix XnuFdTools
Paper <mrpapersonic@gmail.com>
parents: 118
diff changeset
119 torrent.SetTitle(Strings::ToUtf8String(elements.get(anitomy::kElementAnimeTitle)));
d43d68408d3c dep/animia: fix XnuFdTools
Paper <mrpapersonic@gmail.com>
parents: 118
diff changeset
120 torrent.SetEpisode(Strings::RemoveLeadingChars(Strings::ToUtf8String(elements.get(anitomy::kElementEpisodeNumber)), '0'));
d43d68408d3c dep/animia: fix XnuFdTools
Paper <mrpapersonic@gmail.com>
parents: 118
diff changeset
121 torrent.SetGroup(Strings::ToUtf8String(elements.get(anitomy::kElementReleaseGroup)));
d43d68408d3c dep/animia: fix XnuFdTools
Paper <mrpapersonic@gmail.com>
parents: 118
diff changeset
122 torrent.SetResolution(Strings::ToUtf8String(elements.get(anitomy::kElementVideoResolution)));
114
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
123 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
124
183
01d259b9c89f pages/torrents.cc: parse feed descriptions separately
Paper <mrpapersonic@gmail.com>
parents: 178
diff changeset
125 ParseFeedDescription(Strings::TextifySynopsis(item.child_value("description")), torrent);
114
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
126
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
127 torrent.SetLink(item.child_value("link"));
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
128 torrent.SetGuid(item.child_value("guid"));
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
129 {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
130 const QString date_str = Strings::ToQString(item.child_value("pubDate"));
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
131 torrent.SetDate(QDateTime::fromString(date_str, "ddd, dd MMM yyyy HH:mm:ss t"));
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
132 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
133 list.push_back(torrent);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
134 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
135
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
136 endResetModel();
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
137 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
138
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
139 void TorrentsPageListModel::RefreshTorrentList() {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
140 ParseTorrentList(DownloadTorrentList());
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
141 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
142
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
143 int TorrentsPageListModel::rowCount(const QModelIndex& parent) const {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
144 return list.size();
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
145 (void)(parent);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
146 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
147
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
148 int TorrentsPageListModel::columnCount(const QModelIndex& parent) const {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
149 return NB_COLUMNS;
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
150 (void)(parent);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
151 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
152
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
153 QVariant TorrentsPageListModel::headerData(const int section, const Qt::Orientation orientation, const int role) const {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
154 switch (role) {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
155 case Qt::DisplayRole: {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
156 switch (section) {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
157 case TL_TITLE: return tr("Anime title");
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
158 case TL_EPISODE: return tr("Episode");
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
159 case TL_GROUP: return tr("Group");
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
160 case TL_SIZE: return tr("Size");
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
161 case TL_RESOLUTION: return tr("Resolution"); /* this is named "Video" in Taiga */
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
162 case TL_SEEDERS: return tr("Seeding"); /* named "S" in Taiga */
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
163 case TL_LEECHERS: return tr("Leeching"); /* named "L" in Taiga */
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
164 case TL_DOWNLOADERS: return tr("Downloading"); /* named "D" in Taiga */
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
165 case TL_DESCRIPTION: return tr("Description");
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
166 case TL_FILENAME: return tr("Filename");
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
167 case TL_RELEASEDATE: return tr("Release date");
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
168 default: return {};
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
169 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
170 break;
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
171 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
172 case Qt::TextAlignmentRole: {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
173 switch (section) {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
174 case TL_FILENAME:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
175 case TL_GROUP:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
176 case TL_DESCRIPTION:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
177 case TL_RESOLUTION:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
178 case TL_TITLE: return QVariant(Qt::AlignLeft | Qt::AlignVCenter);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
179 case TL_SEEDERS:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
180 case TL_LEECHERS:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
181 case TL_DOWNLOADERS:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
182 case TL_SIZE:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
183 case TL_EPISODE:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
184 case TL_RELEASEDATE: return QVariant(Qt::AlignRight | Qt::AlignVCenter);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
185 default: return {};
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
186 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
187 break;
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
188 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
189 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
190 return QAbstractListModel::headerData(section, orientation, role);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
191 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
192
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
193 bool TorrentsPageListModel::setData(const QModelIndex& index, const QVariant& value, int role) {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
194 TorrentModelItem& item = list.at(index.row());
54
466ac9870df9 add stub pages (to be implemented)
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
195
114
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
196 if (index.column() == 0) {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
197 switch (role) {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
198 case Qt::EditRole:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
199 return false;
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
200 case Qt::CheckStateRole:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
201 item.SetChecked(value.toBool());
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
202 emit dataChanged(index, index);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
203 return true;
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
204 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
205 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
206
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
207 return QAbstractItemModel::setData(index, value, role);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
208 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
209
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
210 QVariant TorrentsPageListModel::data(const QModelIndex& index, int role) const {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
211 if (!index.isValid())
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
212 return QVariant();
116
254b1d2b7096 settings: add torrents page, make rss feed configurable
Paper <mrpapersonic@gmail.com>
parents: 114
diff changeset
213
254b1d2b7096 settings: add torrents page, make rss feed configurable
Paper <mrpapersonic@gmail.com>
parents: 114
diff changeset
214 const TorrentModelItem& item = list.at(index.row());
254b1d2b7096 settings: add torrents page, make rss feed configurable
Paper <mrpapersonic@gmail.com>
parents: 114
diff changeset
215
114
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
216 switch (role) {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
217 case Qt::DisplayRole:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
218 switch (index.column()) {
116
254b1d2b7096 settings: add torrents page, make rss feed configurable
Paper <mrpapersonic@gmail.com>
parents: 114
diff changeset
219 case TL_TITLE: return Strings::ToQString(item.GetTitle());
254b1d2b7096 settings: add torrents page, make rss feed configurable
Paper <mrpapersonic@gmail.com>
parents: 114
diff changeset
220 case TL_EPISODE: return Strings::ToQString(item.GetEpisode());
254b1d2b7096 settings: add torrents page, make rss feed configurable
Paper <mrpapersonic@gmail.com>
parents: 114
diff changeset
221 case TL_GROUP: return Strings::ToQString(item.GetGroup());
254b1d2b7096 settings: add torrents page, make rss feed configurable
Paper <mrpapersonic@gmail.com>
parents: 114
diff changeset
222 case TL_SIZE: return session.config.locale.GetLocale().formattedDataSize(item.GetSize());
254b1d2b7096 settings: add torrents page, make rss feed configurable
Paper <mrpapersonic@gmail.com>
parents: 114
diff changeset
223 case TL_RESOLUTION: return Strings::ToQString(item.GetResolution());
254b1d2b7096 settings: add torrents page, make rss feed configurable
Paper <mrpapersonic@gmail.com>
parents: 114
diff changeset
224 case TL_SEEDERS: return item.GetSeeders();
254b1d2b7096 settings: add torrents page, make rss feed configurable
Paper <mrpapersonic@gmail.com>
parents: 114
diff changeset
225 case TL_LEECHERS: return item.GetLeechers();
254b1d2b7096 settings: add torrents page, make rss feed configurable
Paper <mrpapersonic@gmail.com>
parents: 114
diff changeset
226 case TL_DOWNLOADERS: return item.GetDownloaders();
254b1d2b7096 settings: add torrents page, make rss feed configurable
Paper <mrpapersonic@gmail.com>
parents: 114
diff changeset
227 case TL_DESCRIPTION: return Strings::ToQString(item.GetDescription());
254b1d2b7096 settings: add torrents page, make rss feed configurable
Paper <mrpapersonic@gmail.com>
parents: 114
diff changeset
228 case TL_FILENAME: return Strings::ToQString(item.GetFilename());
254b1d2b7096 settings: add torrents page, make rss feed configurable
Paper <mrpapersonic@gmail.com>
parents: 114
diff changeset
229 case TL_RELEASEDATE: return item.GetDate();
114
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
230 default: return "";
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
231 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
232 break;
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
233 case Qt::UserRole:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
234 switch (index.column()) {
116
254b1d2b7096 settings: add torrents page, make rss feed configurable
Paper <mrpapersonic@gmail.com>
parents: 114
diff changeset
235 case TL_EPISODE: return Strings::ToInt(item.GetEpisode(), -1);
117
2c1b6782e1d0 pages/torrents: work around conversion error on Linux
Paper <mrpapersonic@gmail.com>
parents: 116
diff changeset
236 /* We have to use this to work around some stupid
2c1b6782e1d0 pages/torrents: work around conversion error on Linux
Paper <mrpapersonic@gmail.com>
parents: 116
diff changeset
237 "conversion ambiguous" error on Linux */
2c1b6782e1d0 pages/torrents: work around conversion error on Linux
Paper <mrpapersonic@gmail.com>
parents: 116
diff changeset
238 case TL_SIZE: return QVariant::fromValue(item.GetSize());
114
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
239 default: return data(index, Qt::DisplayRole);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
240 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
241 break;
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
242 case Qt::SizeHintRole: {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
243 switch (index.column()) {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
244 default: {
116
254b1d2b7096 settings: add torrents page, make rss feed configurable
Paper <mrpapersonic@gmail.com>
parents: 114
diff changeset
245 /* max horizontal size of 100, height size = size of current font */
114
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
246 const QString d = data(index, Qt::DisplayRole).toString();
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
247 const QFontMetrics metric = QFontMetrics(QFont());
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
248
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
249 return QSize(std::max(metric.horizontalAdvance(d), 100), metric.height());
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
250 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
251 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
252 break;
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
253 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
254 case Qt::TextAlignmentRole:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
255 switch (index.column()) {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
256 case TL_FILENAME:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
257 case TL_GROUP:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
258 case TL_DESCRIPTION:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
259 case TL_RESOLUTION:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
260 case TL_TITLE: return QVariant(Qt::AlignLeft | Qt::AlignVCenter);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
261 case TL_SEEDERS:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
262 case TL_LEECHERS:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
263 case TL_DOWNLOADERS:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
264 case TL_SIZE:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
265 case TL_EPISODE:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
266 case TL_RELEASEDATE: return QVariant(Qt::AlignRight | Qt::AlignVCenter);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
267 default: return {};
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
268 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
269 break;
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
270 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
271 return QVariant();
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
272 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
273
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
274 Qt::ItemFlags TorrentsPageListModel::flags(const QModelIndex& index) const {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
275 if (!index.isValid())
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
276 return Qt::NoItemFlags;
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
277
118
39521c47c7a3 *: another huge megacommit, SORRY
Paper <mrpapersonic@gmail.com>
parents: 117
diff changeset
278 return Qt::ItemIsEnabled | Qt::ItemIsSelectable;
114
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
279 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
280
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
281 TorrentsPage::TorrentsPage(QWidget* parent) : QFrame(parent) {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
282 setFrameShape(QFrame::Box);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
283 setFrameShadow(QFrame::Sunken);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
284
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
285 QVBoxLayout* layout = new QVBoxLayout(this);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
286 layout->setContentsMargins(0, 0, 0, 0);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
287 layout->setSpacing(0);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
288
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
289 {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
290 /* Toolbar */
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
291 QToolBar* toolbar = new QToolBar(this);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
292 toolbar->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
293 toolbar->setIconSize(QSize(16, 16));
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
294 toolbar->setMovable(false);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
295
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
296 {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
297 /* this needs to be stored somewhere to replicate Taiga's
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
298 "timer" feature */
116
254b1d2b7096 settings: add torrents page, make rss feed configurable
Paper <mrpapersonic@gmail.com>
parents: 114
diff changeset
299 toolbar->addAction(QIcon(":/icons/16x16/arrow-circle-315.png"), tr("&Check new torrents"), [this]{
114
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
300 QThreadPool::globalInstance()->start([this] {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
301 Refresh();
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
302 });
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
303 });
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
304 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
305
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
306 toolbar->addSeparator();
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
307
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
308 {
116
254b1d2b7096 settings: add torrents page, make rss feed configurable
Paper <mrpapersonic@gmail.com>
parents: 114
diff changeset
309 toolbar->addAction(QIcon(":/icons/16x16/navigation-270-button.png"), tr("Download &marked torrents"));
114
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
310 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
311
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
312 {
116
254b1d2b7096 settings: add torrents page, make rss feed configurable
Paper <mrpapersonic@gmail.com>
parents: 114
diff changeset
313 toolbar->addAction(QIcon(":/icons/16x16/cross-button.png"), tr("&Discard all"));
114
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
314 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
315
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
316 toolbar->addSeparator();
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
317
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
318 {
116
254b1d2b7096 settings: add torrents page, make rss feed configurable
Paper <mrpapersonic@gmail.com>
parents: 114
diff changeset
319 toolbar->addAction(QIcon(":/icons/16x16/gear.png"), tr("&Settings"));
114
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
320 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
321
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
322 layout->addWidget(toolbar);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
323 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
324
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
325 {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
326 QFrame* line = new QFrame(this);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
327 line->setFrameShape(QFrame::HLine);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
328 line->setFrameShadow(QFrame::Sunken);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
329 line->setLineWidth(1);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
330 layout->addWidget(line);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
331 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
332
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
333 {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
334 QTreeView* treeview = new QTreeView(this);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
335 treeview->setUniformRowHeights(true);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
336 treeview->setAllColumnsShowFocus(false);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
337 treeview->setAlternatingRowColors(true);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
338 treeview->setSortingEnabled(true);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
339 treeview->setSelectionMode(QAbstractItemView::ExtendedSelection);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
340 treeview->setItemsExpandable(false);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
341 treeview->setRootIsDecorated(false);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
342 treeview->setContextMenuPolicy(Qt::CustomContextMenu);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
343 treeview->setFrameShape(QFrame::NoFrame);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
344
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
345 {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
346 sort_model = new TorrentsPageListSortFilter(treeview);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
347 model = new TorrentsPageListModel(treeview);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
348 sort_model->setSourceModel(model);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
349 sort_model->setSortRole(Qt::UserRole);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
350 sort_model->setSortCaseSensitivity(Qt::CaseInsensitive);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
351 treeview->setModel(sort_model);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
352 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
353
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
354 layout->addWidget(treeview);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
355 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
356 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
357
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
358 void TorrentsPage::Refresh() {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
359 if (!model)
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
360 return;
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
361 model->RefreshTorrentList();
54
466ac9870df9 add stub pages (to be implemented)
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
362 }
466ac9870df9 add stub pages (to be implemented)
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
363
466ac9870df9 add stub pages (to be implemented)
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
364 #include "gui/pages/moc_torrents.cpp"