annotate src/gui/pages/torrents.cc @ 118:39521c47c7a3

*: another huge megacommit, SORRY The torrents page works a lot better now Added the edit option to the anime list right click menu Vectorized currently playing files Available player and extensions are now loaded at runtime from files in (dotpath)/players.json and (dotpath)/extensions.json These paths are not permanent and will likely be moved to (dotpath)/recognition ... ... ...
author Paper <mrpapersonic@gmail.com>
date Tue, 07 Nov 2023 23:40:54 -0500
parents 2c1b6782e1d0
children d43d68408d3c
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"
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
7 #include "pugixml.hpp"
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>
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
16 #include <iostream>
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
17 #include <sstream>
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
18 #include <algorithm>
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
19
118
39521c47c7a3 *: another huge megacommit, SORRY
Paper <mrpapersonic@gmail.com>
parents: 117
diff changeset
20 /* This file is very, very similar to the anime list page.
39521c47c7a3 *: another huge megacommit, SORRY
Paper <mrpapersonic@gmail.com>
parents: 117
diff changeset
21
39521c47c7a3 *: another huge megacommit, SORRY
Paper <mrpapersonic@gmail.com>
parents: 117
diff changeset
22 It differs from Taiga in that it uses tabs instead of
39521c47c7a3 *: another huge megacommit, SORRY
Paper <mrpapersonic@gmail.com>
parents: 117
diff changeset
23 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
24 maintain over multiple platforms. */
39521c47c7a3 *: another huge megacommit, SORRY
Paper <mrpapersonic@gmail.com>
parents: 117
diff changeset
25
114
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
26 TorrentsPageListSortFilter::TorrentsPageListSortFilter(QObject* parent) : QSortFilterProxyModel(parent) {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
27 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
28
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
29 bool TorrentsPageListSortFilter::lessThan(const QModelIndex& l, const QModelIndex& r) const {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
30 QVariant left = sourceModel()->data(l, sortRole());
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
31 QVariant right = sourceModel()->data(r, sortRole());
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 switch (left.userType()) {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
34 case QMetaType::Int:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
35 case QMetaType::UInt:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
36 case QMetaType::LongLong:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
37 case QMetaType::ULongLong: return left.toInt() < right.toInt();
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
38 case QMetaType::QDate: return left.toDate() < right.toDate();
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
39 case QMetaType::QString:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
40 default: return QString::compare(left.toString(), right.toString(), Qt::CaseInsensitive) < 0;
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
41 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
42 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
43
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
44 /* -------------------------------------------- */
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 TorrentsPageListModel::TorrentsPageListModel(QObject* parent) : QAbstractListModel(parent) {
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 QByteArray TorrentsPageListModel::DownloadTorrentList() {
116
254b1d2b7096 settings: add torrents page, make rss feed configurable
Paper <mrpapersonic@gmail.com>
parents: 114
diff changeset
50 return HTTP::Get(session.config.torrents.feed_link);
114
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 void TorrentsPageListModel::ParseTorrentList(const QByteArray& ba) {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
54 std::istringstream stdstream(Strings::ToUtf8String(ba));
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 pugi::xml_document doc;
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
57 if (!doc.load(stdstream))
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
58 return; // peace out
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
59
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
60 /* my extra special dumb hack. */
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
61 if (!rowCount(index(0))) {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
62 beginInsertRows(QModelIndex(), 0, 0);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
63 endInsertRows();
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
64 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
65
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
66 beginResetModel();
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
67
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
68 list.clear();
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
69 /* 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
70 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
71 TorrentModelItem torrent;
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
72 torrent.SetFilename(item.child_value("title")); /* "title" == filename */
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
73 {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
74 /* Use Anitomy to parse the file's elements (we should *really* not be doing this this way!) */
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
75 std::unordered_map<std::string, std::string> elements = Track::Media::GetFileElements(torrent.GetFilename());
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
76 torrent.SetTitle(elements["title"]);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
77 torrent.SetEpisode(Strings::RemoveLeadingChars(elements["episode"], '0'));
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
78 torrent.SetGroup(elements["group"]);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
79 torrent.SetResolution(elements["resolution"]);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
80 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
81 torrent.SetDescription(Strings::TextifySynopsis(item.child_value("description")));
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
82 {
118
39521c47c7a3 *: another huge megacommit, SORRY
Paper <mrpapersonic@gmail.com>
parents: 117
diff changeset
83 /* Parse description... */
39521c47c7a3 *: another huge megacommit, SORRY
Paper <mrpapersonic@gmail.com>
parents: 117
diff changeset
84 enum class Keys { SIZE, AUTHORIZED, SUBMITTER, COMMENT };
39521c47c7a3 *: another huge megacommit, SORRY
Paper <mrpapersonic@gmail.com>
parents: 117
diff changeset
85
39521c47c7a3 *: another huge megacommit, SORRY
Paper <mrpapersonic@gmail.com>
parents: 117
diff changeset
86 const std::unordered_map<std::string, Keys> KeyMap = {
39521c47c7a3 *: another huge megacommit, SORRY
Paper <mrpapersonic@gmail.com>
parents: 117
diff changeset
87 {"Size", Keys::SIZE},
39521c47c7a3 *: another huge megacommit, SORRY
Paper <mrpapersonic@gmail.com>
parents: 117
diff changeset
88 {"Authorized", Keys::AUTHORIZED},
39521c47c7a3 *: another huge megacommit, SORRY
Paper <mrpapersonic@gmail.com>
parents: 117
diff changeset
89 {"Submitter", Keys::SUBMITTER},
39521c47c7a3 *: another huge megacommit, SORRY
Paper <mrpapersonic@gmail.com>
parents: 117
diff changeset
90 {"Comment", Keys::COMMENT}
39521c47c7a3 *: another huge megacommit, SORRY
Paper <mrpapersonic@gmail.com>
parents: 117
diff changeset
91 };
39521c47c7a3 *: another huge megacommit, SORRY
Paper <mrpapersonic@gmail.com>
parents: 117
diff changeset
92
39521c47c7a3 *: another huge megacommit, SORRY
Paper <mrpapersonic@gmail.com>
parents: 117
diff changeset
93 const std::string description = Strings::TextifySynopsis(item.child_value("description"));
39521c47c7a3 *: another huge megacommit, SORRY
Paper <mrpapersonic@gmail.com>
parents: 117
diff changeset
94
114
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
95 /* Parse size from description */
118
39521c47c7a3 *: another huge megacommit, SORRY
Paper <mrpapersonic@gmail.com>
parents: 117
diff changeset
96 std::istringstream descstream(description);
114
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
97
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
98 for (std::string line; std::getline(descstream, line);) {
118
39521c47c7a3 *: another huge megacommit, SORRY
Paper <mrpapersonic@gmail.com>
parents: 117
diff changeset
99 const size_t pos = line.find_first_of(':', 0);
39521c47c7a3 *: another huge megacommit, SORRY
Paper <mrpapersonic@gmail.com>
parents: 117
diff changeset
100 if (pos == std::string::npos)
39521c47c7a3 *: another huge megacommit, SORRY
Paper <mrpapersonic@gmail.com>
parents: 117
diff changeset
101 continue;
39521c47c7a3 *: another huge megacommit, SORRY
Paper <mrpapersonic@gmail.com>
parents: 117
diff changeset
102
39521c47c7a3 *: another huge megacommit, SORRY
Paper <mrpapersonic@gmail.com>
parents: 117
diff changeset
103 const std::string key = line.substr(0, pos);
39521c47c7a3 *: another huge megacommit, SORRY
Paper <mrpapersonic@gmail.com>
parents: 117
diff changeset
104 const std::string value = line.substr(line.find_first_not_of(": ", pos));
114
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
105
118
39521c47c7a3 *: another huge megacommit, SORRY
Paper <mrpapersonic@gmail.com>
parents: 117
diff changeset
106 switch (KeyMap.at(key)) {
39521c47c7a3 *: another huge megacommit, SORRY
Paper <mrpapersonic@gmail.com>
parents: 117
diff changeset
107 case Keys::COMMENT:
39521c47c7a3 *: another huge megacommit, SORRY
Paper <mrpapersonic@gmail.com>
parents: 117
diff changeset
108 torrent.SetDescription(value);
39521c47c7a3 *: another huge megacommit, SORRY
Paper <mrpapersonic@gmail.com>
parents: 117
diff changeset
109 break;
39521c47c7a3 *: another huge megacommit, SORRY
Paper <mrpapersonic@gmail.com>
parents: 117
diff changeset
110 case Keys::SIZE:
39521c47c7a3 *: another huge megacommit, SORRY
Paper <mrpapersonic@gmail.com>
parents: 117
diff changeset
111 torrent.SetSize(Strings::HumanReadableSizeToBytes(value));
39521c47c7a3 *: another huge megacommit, SORRY
Paper <mrpapersonic@gmail.com>
parents: 117
diff changeset
112 break;
39521c47c7a3 *: another huge megacommit, SORRY
Paper <mrpapersonic@gmail.com>
parents: 117
diff changeset
113 default:
39521c47c7a3 *: another huge megacommit, SORRY
Paper <mrpapersonic@gmail.com>
parents: 117
diff changeset
114 break;
114
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
115 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
116 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
117 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
118 torrent.SetLink(item.child_value("link"));
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
119 torrent.SetGuid(item.child_value("guid"));
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
120 {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
121 const QString date_str = Strings::ToQString(item.child_value("pubDate"));
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
122 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
123 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
124 list.push_back(torrent);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
125 }
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 endResetModel();
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
128 }
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 void TorrentsPageListModel::RefreshTorrentList() {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
131 ParseTorrentList(DownloadTorrentList());
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
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
134 int TorrentsPageListModel::rowCount(const QModelIndex& parent) const {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
135 return list.size();
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
136 (void)(parent);
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 int TorrentsPageListModel::columnCount(const QModelIndex& parent) const {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
140 return NB_COLUMNS;
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
141 (void)(parent);
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
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
144 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
145 switch (role) {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
146 case Qt::DisplayRole: {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
147 switch (section) {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
148 case TL_TITLE: return tr("Anime title");
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
149 case TL_EPISODE: return tr("Episode");
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
150 case TL_GROUP: return tr("Group");
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
151 case TL_SIZE: return tr("Size");
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
152 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
153 case TL_SEEDERS: return tr("Seeding"); /* named "S" in Taiga */
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
154 case TL_LEECHERS: return tr("Leeching"); /* named "L" in Taiga */
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
155 case TL_DOWNLOADERS: return tr("Downloading"); /* named "D" in Taiga */
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
156 case TL_DESCRIPTION: return tr("Description");
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
157 case TL_FILENAME: return tr("Filename");
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
158 case TL_RELEASEDATE: return tr("Release date");
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
159 default: return {};
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
160 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
161 break;
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
162 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
163 case Qt::TextAlignmentRole: {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
164 switch (section) {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
165 case TL_FILENAME:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
166 case TL_GROUP:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
167 case TL_DESCRIPTION:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
168 case TL_RESOLUTION:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
169 case TL_TITLE: return QVariant(Qt::AlignLeft | Qt::AlignVCenter);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
170 case TL_SEEDERS:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
171 case TL_LEECHERS:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
172 case TL_DOWNLOADERS:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
173 case TL_SIZE:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
174 case TL_EPISODE:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
175 case TL_RELEASEDATE: return QVariant(Qt::AlignRight | Qt::AlignVCenter);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
176 default: return {};
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
177 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
178 break;
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
179 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
180 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
181 return QAbstractListModel::headerData(section, orientation, role);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
182 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
183
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
184 bool TorrentsPageListModel::setData(const QModelIndex& index, const QVariant& value, int role) {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
185 TorrentModelItem& item = list.at(index.row());
54
466ac9870df9 add stub pages (to be implemented)
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
186
114
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
187 if (index.column() == 0) {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
188 switch (role) {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
189 case Qt::EditRole:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
190 return false;
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
191 case Qt::CheckStateRole:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
192 item.SetChecked(value.toBool());
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
193 emit dataChanged(index, index);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
194 return true;
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
195 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
196 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
197
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
198 return QAbstractItemModel::setData(index, value, role);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
199 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
200
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
201 QVariant TorrentsPageListModel::data(const QModelIndex& index, int role) const {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
202 if (!index.isValid())
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
203 return QVariant();
116
254b1d2b7096 settings: add torrents page, make rss feed configurable
Paper <mrpapersonic@gmail.com>
parents: 114
diff changeset
204
254b1d2b7096 settings: add torrents page, make rss feed configurable
Paper <mrpapersonic@gmail.com>
parents: 114
diff changeset
205 const TorrentModelItem& item = list.at(index.row());
254b1d2b7096 settings: add torrents page, make rss feed configurable
Paper <mrpapersonic@gmail.com>
parents: 114
diff changeset
206
114
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
207 switch (role) {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
208 case Qt::DisplayRole:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
209 switch (index.column()) {
116
254b1d2b7096 settings: add torrents page, make rss feed configurable
Paper <mrpapersonic@gmail.com>
parents: 114
diff changeset
210 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
211 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
212 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
213 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
214 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
215 case TL_SEEDERS: return item.GetSeeders();
254b1d2b7096 settings: add torrents page, make rss feed configurable
Paper <mrpapersonic@gmail.com>
parents: 114
diff changeset
216 case TL_LEECHERS: return item.GetLeechers();
254b1d2b7096 settings: add torrents page, make rss feed configurable
Paper <mrpapersonic@gmail.com>
parents: 114
diff changeset
217 case TL_DOWNLOADERS: return item.GetDownloaders();
254b1d2b7096 settings: add torrents page, make rss feed configurable
Paper <mrpapersonic@gmail.com>
parents: 114
diff changeset
218 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
219 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
220 case TL_RELEASEDATE: return item.GetDate();
114
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
221 default: return "";
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
222 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
223 break;
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
224 case Qt::UserRole:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
225 switch (index.column()) {
116
254b1d2b7096 settings: add torrents page, make rss feed configurable
Paper <mrpapersonic@gmail.com>
parents: 114
diff changeset
226 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
227 /* 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
228 "conversion ambiguous" error on Linux */
2c1b6782e1d0 pages/torrents: work around conversion error on Linux
Paper <mrpapersonic@gmail.com>
parents: 116
diff changeset
229 case TL_SIZE: return QVariant::fromValue(item.GetSize());
114
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
230 default: return data(index, Qt::DisplayRole);
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::SizeHintRole: {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
234 switch (index.column()) {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
235 default: {
116
254b1d2b7096 settings: add torrents page, make rss feed configurable
Paper <mrpapersonic@gmail.com>
parents: 114
diff changeset
236 /* 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
237 const QString d = data(index, Qt::DisplayRole).toString();
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
238 const QFontMetrics metric = QFontMetrics(QFont());
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
239
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
240 return QSize(std::max(metric.horizontalAdvance(d), 100), metric.height());
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
241 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
242 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
243 break;
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
244 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
245 case Qt::TextAlignmentRole:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
246 switch (index.column()) {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
247 case TL_FILENAME:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
248 case TL_GROUP:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
249 case TL_DESCRIPTION:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
250 case TL_RESOLUTION:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
251 case TL_TITLE: return QVariant(Qt::AlignLeft | Qt::AlignVCenter);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
252 case TL_SEEDERS:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
253 case TL_LEECHERS:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
254 case TL_DOWNLOADERS:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
255 case TL_SIZE:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
256 case TL_EPISODE:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
257 case TL_RELEASEDATE: return QVariant(Qt::AlignRight | Qt::AlignVCenter);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
258 default: return {};
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
259 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
260 break;
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
261 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
262 return QVariant();
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
263 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
264
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
265 Qt::ItemFlags TorrentsPageListModel::flags(const QModelIndex& index) const {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
266 if (!index.isValid())
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
267 return Qt::NoItemFlags;
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
268
118
39521c47c7a3 *: another huge megacommit, SORRY
Paper <mrpapersonic@gmail.com>
parents: 117
diff changeset
269 return Qt::ItemIsEnabled | Qt::ItemIsSelectable;
114
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
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
272 TorrentsPage::TorrentsPage(QWidget* parent) : QFrame(parent) {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
273 setFrameShape(QFrame::Box);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
274 setFrameShadow(QFrame::Sunken);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
275
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
276 QVBoxLayout* layout = new QVBoxLayout(this);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
277 layout->setContentsMargins(0, 0, 0, 0);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
278 layout->setSpacing(0);
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 /* Toolbar */
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
282 QToolBar* toolbar = new QToolBar(this);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
283 toolbar->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
284 toolbar->setIconSize(QSize(16, 16));
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
285 toolbar->setMovable(false);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
286
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
287 {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
288 /* this needs to be stored somewhere to replicate Taiga's
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
289 "timer" feature */
116
254b1d2b7096 settings: add torrents page, make rss feed configurable
Paper <mrpapersonic@gmail.com>
parents: 114
diff changeset
290 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
291 QThreadPool::globalInstance()->start([this] {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
292 Refresh();
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
293 });
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
294 });
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 toolbar->addSeparator();
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
298
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
299 {
116
254b1d2b7096 settings: add torrents page, make rss feed configurable
Paper <mrpapersonic@gmail.com>
parents: 114
diff changeset
300 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
301 }
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 {
116
254b1d2b7096 settings: add torrents page, make rss feed configurable
Paper <mrpapersonic@gmail.com>
parents: 114
diff changeset
304 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
305 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
306
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
307 toolbar->addSeparator();
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
308
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
309 {
116
254b1d2b7096 settings: add torrents page, make rss feed configurable
Paper <mrpapersonic@gmail.com>
parents: 114
diff changeset
310 toolbar->addAction(QIcon(":/icons/16x16/gear.png"), tr("&Settings"));
114
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
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
313 layout->addWidget(toolbar);
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 {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
317 QFrame* line = new QFrame(this);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
318 line->setFrameShape(QFrame::HLine);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
319 line->setFrameShadow(QFrame::Sunken);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
320 line->setLineWidth(1);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
321 layout->addWidget(line);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
322 }
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 QTreeView* treeview = new QTreeView(this);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
326 treeview->setUniformRowHeights(true);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
327 treeview->setAllColumnsShowFocus(false);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
328 treeview->setAlternatingRowColors(true);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
329 treeview->setSortingEnabled(true);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
330 treeview->setSelectionMode(QAbstractItemView::ExtendedSelection);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
331 treeview->setItemsExpandable(false);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
332 treeview->setRootIsDecorated(false);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
333 treeview->setContextMenuPolicy(Qt::CustomContextMenu);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
334 treeview->setFrameShape(QFrame::NoFrame);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
335
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
336 {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
337 sort_model = new TorrentsPageListSortFilter(treeview);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
338 model = new TorrentsPageListModel(treeview);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
339 sort_model->setSourceModel(model);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
340 sort_model->setSortRole(Qt::UserRole);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
341 sort_model->setSortCaseSensitivity(Qt::CaseInsensitive);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
342 treeview->setModel(sort_model);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
343 }
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 layout->addWidget(treeview);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
346 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
347 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
348
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
349 void TorrentsPage::Refresh() {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
350 if (!model)
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
351 return;
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
352 model->RefreshTorrentList();
54
466ac9870df9 add stub pages (to be implemented)
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
353 }
466ac9870df9 add stub pages (to be implemented)
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
354
466ac9870df9 add stub pages (to be implemented)
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
355 #include "gui/pages/moc_torrents.cpp"