annotate src/gui/pages/torrents.cc @ 327:b5d6c27c308f

anime: refactor Anime::SeriesSeason to Season class ToLocalString has also been altered to take in both season and year because lots of locales actually treat formatting seasons differently! most notably is Russian which adds a suffix at the end to notate seasons(??)
author Paper <paper@paper.us.eu.org>
date Thu, 13 Jun 2024 01:49:18 -0400
parents 9a88e1725fd2
children a0aa8c8c4307
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"
258
862d0d8619f6 *: HUUUGE changes
Paper <paper@paper.us.eu.org>
parents: 250
diff changeset
2 #include "core/filesystem.h"
114
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"
258
862d0d8619f6 *: HUUUGE changes
Paper <paper@paper.us.eu.org>
parents: 250
diff changeset
5 #include "core/strings.h"
114
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
6 #include "gui/widgets/text.h"
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
7 #include "track/media.h"
178
bc8d2ccff09c win32/dark: use existing STL classes for dwmapi
Paper <mrpapersonic@gmail.com>
parents: 154
diff changeset
8
114
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
9 #include <QByteArray>
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
10 #include <QDataStream>
258
862d0d8619f6 *: HUUUGE changes
Paper <paper@paper.us.eu.org>
parents: 250
diff changeset
11 #include <QDebug>
862d0d8619f6 *: HUUUGE changes
Paper <paper@paper.us.eu.org>
parents: 250
diff changeset
12 #include <QHeaderView>
230
2f5a9247e501 torrents: implement download button
Paper <paper@paper.us.eu.org>
parents: 221
diff changeset
13 #include <QThread>
258
862d0d8619f6 *: HUUUGE changes
Paper <paper@paper.us.eu.org>
parents: 250
diff changeset
14 #include <QToolBar>
862d0d8619f6 *: HUUUGE changes
Paper <paper@paper.us.eu.org>
parents: 250
diff changeset
15 #include <QTreeView>
862d0d8619f6 *: HUUUGE changes
Paper <paper@paper.us.eu.org>
parents: 250
diff changeset
16 #include <QVBoxLayout>
273
f31305b9f60a *: various code safety changes
Paper <paper@paper.us.eu.org>
parents: 264
diff changeset
17 #include <QtGlobal>
178
bc8d2ccff09c win32/dark: use existing STL classes for dwmapi
Paper <mrpapersonic@gmail.com>
parents: 154
diff changeset
18
258
862d0d8619f6 *: HUUUGE changes
Paper <paper@paper.us.eu.org>
parents: 250
diff changeset
19 #include <algorithm>
862d0d8619f6 *: HUUUGE changes
Paper <paper@paper.us.eu.org>
parents: 250
diff changeset
20 #include <fstream>
114
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
21 #include <iostream>
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
22 #include <sstream>
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
23
258
862d0d8619f6 *: HUUUGE changes
Paper <paper@paper.us.eu.org>
parents: 250
diff changeset
24 #include "anitomy/anitomy.h"
178
bc8d2ccff09c win32/dark: use existing STL classes for dwmapi
Paper <mrpapersonic@gmail.com>
parents: 154
diff changeset
25 #include "pugixml.hpp"
154
d43d68408d3c dep/animia: fix XnuFdTools
Paper <mrpapersonic@gmail.com>
parents: 118
diff changeset
26
118
39521c47c7a3 *: another huge megacommit, SORRY
Paper <mrpapersonic@gmail.com>
parents: 117
diff changeset
27 /* This file is very, very similar to the anime list page.
250
c130f47f6f48 *: many many changes
Paper <paper@paper.us.eu.org>
parents: 236
diff changeset
28 *
c130f47f6f48 *: many many changes
Paper <paper@paper.us.eu.org>
parents: 236
diff changeset
29 * It differs from Taiga in that it uses tabs instead of
c130f47f6f48 *: many many changes
Paper <paper@paper.us.eu.org>
parents: 236
diff changeset
30 * those "groups", but those are custom painted and a pain in the ass to
c130f47f6f48 *: many many changes
Paper <paper@paper.us.eu.org>
parents: 236
diff changeset
31 * maintain over multiple platforms.
258
862d0d8619f6 *: HUUUGE changes
Paper <paper@paper.us.eu.org>
parents: 250
diff changeset
32 */
118
39521c47c7a3 *: another huge megacommit, SORRY
Paper <mrpapersonic@gmail.com>
parents: 117
diff changeset
33
114
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
34 TorrentsPageListSortFilter::TorrentsPageListSortFilter(QObject* parent) : QSortFilterProxyModel(parent) {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
35 }
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 bool TorrentsPageListSortFilter::lessThan(const QModelIndex& l, const QModelIndex& r) const {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
38 QVariant left = sourceModel()->data(l, sortRole());
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
39 QVariant right = sourceModel()->data(r, sortRole());
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
40
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
41 switch (left.userType()) {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
42 case QMetaType::Int:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
43 case QMetaType::UInt:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
44 case QMetaType::LongLong:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
45 case QMetaType::ULongLong: return left.toInt() < right.toInt();
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
46 case QMetaType::QDate: return left.toDate() < right.toDate();
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
47 case QMetaType::QString:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
48 default: return QString::compare(left.toString(), right.toString(), Qt::CaseInsensitive) < 0;
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 }
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
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
54 TorrentsPageListModel::TorrentsPageListModel(QObject* parent) : QAbstractListModel(parent) {
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
230
2f5a9247e501 torrents: implement download button
Paper <paper@paper.us.eu.org>
parents: 221
diff changeset
57 void TorrentsPageListModel::DownloadTorrents(QItemSelection selection) {
2f5a9247e501 torrents: implement download button
Paper <paper@paper.us.eu.org>
parents: 221
diff changeset
58 const auto indexes = selection.indexes();
2f5a9247e501 torrents: implement download button
Paper <paper@paper.us.eu.org>
parents: 221
diff changeset
59
2f5a9247e501 torrents: implement download button
Paper <paper@paper.us.eu.org>
parents: 221
diff changeset
60 for (const auto& index : indexes) {
2f5a9247e501 torrents: implement download button
Paper <paper@paper.us.eu.org>
parents: 221
diff changeset
61 /* a torrent file IS literally text... */
2f5a9247e501 torrents: implement download button
Paper <paper@paper.us.eu.org>
parents: 221
diff changeset
62 const std::string link = list.at(index.row()).GetLink();
2f5a9247e501 torrents: implement download button
Paper <paper@paper.us.eu.org>
parents: 221
diff changeset
63 const std::string filename = list.at(index.row()).GetFilename() + ".torrent";
2f5a9247e501 torrents: implement download button
Paper <paper@paper.us.eu.org>
parents: 221
diff changeset
64
2f5a9247e501 torrents: implement download button
Paper <paper@paper.us.eu.org>
parents: 221
diff changeset
65 const std::filesystem::path torrents_dir = Filesystem::GetTorrentsPath();
2f5a9247e501 torrents: implement download button
Paper <paper@paper.us.eu.org>
parents: 221
diff changeset
66 std::filesystem::create_directories(torrents_dir);
2f5a9247e501 torrents: implement download button
Paper <paper@paper.us.eu.org>
parents: 221
diff changeset
67
291
9a88e1725fd2 *: refactor lots of stuff
Paper <paper@paper.us.eu.org>
parents: 273
diff changeset
68 /* this sucks */
9a88e1725fd2 *: refactor lots of stuff
Paper <paper@paper.us.eu.org>
parents: 273
diff changeset
69 HTTP::RequestThread* thread = new HTTP::RequestThread(link, {}, "", HTTP::Type::Get, this);
236
4d461ef7d424 HUGE UPDATE: convert build system to autotools
Paper <mrpapersonic@gmail.com>
parents: 230
diff changeset
70
291
9a88e1725fd2 *: refactor lots of stuff
Paper <paper@paper.us.eu.org>
parents: 273
diff changeset
71 connect(thread, &HTTP::RequestThread::ReceivedData, this, [this, torrents_dir, filename](const QByteArray& data) {
236
4d461ef7d424 HUGE UPDATE: convert build system to autotools
Paper <mrpapersonic@gmail.com>
parents: 230
diff changeset
72 std::ofstream file(torrents_dir / filename, std::ofstream::out | std::ofstream::trunc);
4d461ef7d424 HUGE UPDATE: convert build system to autotools
Paper <mrpapersonic@gmail.com>
parents: 230
diff changeset
73 if (!file)
4d461ef7d424 HUGE UPDATE: convert build system to autotools
Paper <mrpapersonic@gmail.com>
parents: 230
diff changeset
74 return; // wat
230
2f5a9247e501 torrents: implement download button
Paper <paper@paper.us.eu.org>
parents: 221
diff changeset
75
236
4d461ef7d424 HUGE UPDATE: convert build system to autotools
Paper <mrpapersonic@gmail.com>
parents: 230
diff changeset
76 file.write(data.data(), data.size());
4d461ef7d424 HUGE UPDATE: convert build system to autotools
Paper <mrpapersonic@gmail.com>
parents: 230
diff changeset
77 file.close();
4d461ef7d424 HUGE UPDATE: convert build system to autotools
Paper <mrpapersonic@gmail.com>
parents: 230
diff changeset
78 });
291
9a88e1725fd2 *: refactor lots of stuff
Paper <paper@paper.us.eu.org>
parents: 273
diff changeset
79 connect(thread, &HTTP::RequestThread::finished, thread, &HTTP::RequestThread::deleteLater);
230
2f5a9247e501 torrents: implement download button
Paper <paper@paper.us.eu.org>
parents: 221
diff changeset
80
236
4d461ef7d424 HUGE UPDATE: convert build system to autotools
Paper <mrpapersonic@gmail.com>
parents: 230
diff changeset
81 thread->start();
230
2f5a9247e501 torrents: implement download button
Paper <paper@paper.us.eu.org>
parents: 221
diff changeset
82 }
2f5a9247e501 torrents: implement download button
Paper <paper@paper.us.eu.org>
parents: 221
diff changeset
83 }
2f5a9247e501 torrents: implement download button
Paper <paper@paper.us.eu.org>
parents: 221
diff changeset
84
114
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
85 QByteArray TorrentsPageListModel::DownloadTorrentList() {
291
9a88e1725fd2 *: refactor lots of stuff
Paper <paper@paper.us.eu.org>
parents: 273
diff changeset
86 return HTTP::Request(session.config.torrents.feed_link);
114
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
87 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
88
183
01d259b9c89f pages/torrents.cc: parse feed descriptions separately
Paper <mrpapersonic@gmail.com>
parents: 178
diff changeset
89 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
90 /* Parse description... */
258
862d0d8619f6 *: HUUUGE changes
Paper <paper@paper.us.eu.org>
parents: 250
diff changeset
91 enum class Keys {
862d0d8619f6 *: HUUUGE changes
Paper <paper@paper.us.eu.org>
parents: 250
diff changeset
92 SIZE,
862d0d8619f6 *: HUUUGE changes
Paper <paper@paper.us.eu.org>
parents: 250
diff changeset
93 AUTHORIZED,
862d0d8619f6 *: HUUUGE changes
Paper <paper@paper.us.eu.org>
parents: 250
diff changeset
94 SUBMITTER,
862d0d8619f6 *: HUUUGE changes
Paper <paper@paper.us.eu.org>
parents: 250
diff changeset
95 COMMENT
862d0d8619f6 *: HUUUGE changes
Paper <paper@paper.us.eu.org>
parents: 250
diff changeset
96 };
183
01d259b9c89f pages/torrents.cc: parse feed descriptions separately
Paper <mrpapersonic@gmail.com>
parents: 178
diff changeset
97
01d259b9c89f pages/torrents.cc: parse feed descriptions separately
Paper <mrpapersonic@gmail.com>
parents: 178
diff changeset
98 const std::unordered_map<std::string, Keys> KeyMap = {
258
862d0d8619f6 *: HUUUGE changes
Paper <paper@paper.us.eu.org>
parents: 250
diff changeset
99 {"Size", Keys::SIZE },
862d0d8619f6 *: HUUUGE changes
Paper <paper@paper.us.eu.org>
parents: 250
diff changeset
100 {"Authorized", Keys::AUTHORIZED},
862d0d8619f6 *: HUUUGE changes
Paper <paper@paper.us.eu.org>
parents: 250
diff changeset
101 {"Submitter", Keys::SUBMITTER },
862d0d8619f6 *: HUUUGE changes
Paper <paper@paper.us.eu.org>
parents: 250
diff changeset
102 {"Comment", Keys::COMMENT }
862d0d8619f6 *: HUUUGE changes
Paper <paper@paper.us.eu.org>
parents: 250
diff changeset
103 };
183
01d259b9c89f pages/torrents.cc: parse feed descriptions separately
Paper <mrpapersonic@gmail.com>
parents: 178
diff changeset
104
01d259b9c89f pages/torrents.cc: parse feed descriptions separately
Paper <mrpapersonic@gmail.com>
parents: 178
diff changeset
105 /* Parse size from description */
01d259b9c89f pages/torrents.cc: parse feed descriptions separately
Paper <mrpapersonic@gmail.com>
parents: 178
diff changeset
106 std::istringstream descstream(description);
01d259b9c89f pages/torrents.cc: parse feed descriptions separately
Paper <mrpapersonic@gmail.com>
parents: 178
diff changeset
107
01d259b9c89f pages/torrents.cc: parse feed descriptions separately
Paper <mrpapersonic@gmail.com>
parents: 178
diff changeset
108 for (std::string line; std::getline(descstream, line);) {
01d259b9c89f pages/torrents.cc: parse feed descriptions separately
Paper <mrpapersonic@gmail.com>
parents: 178
diff changeset
109 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
110 if (pos == std::string::npos)
01d259b9c89f pages/torrents.cc: parse feed descriptions separately
Paper <mrpapersonic@gmail.com>
parents: 178
diff changeset
111 continue;
01d259b9c89f pages/torrents.cc: parse feed descriptions separately
Paper <mrpapersonic@gmail.com>
parents: 178
diff changeset
112
01d259b9c89f pages/torrents.cc: parse feed descriptions separately
Paper <mrpapersonic@gmail.com>
parents: 178
diff changeset
113 const std::string key = line.substr(0, pos);
01d259b9c89f pages/torrents.cc: parse feed descriptions separately
Paper <mrpapersonic@gmail.com>
parents: 178
diff changeset
114 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
115
01d259b9c89f pages/torrents.cc: parse feed descriptions separately
Paper <mrpapersonic@gmail.com>
parents: 178
diff changeset
116 switch (KeyMap.at(key)) {
258
862d0d8619f6 *: HUUUGE changes
Paper <paper@paper.us.eu.org>
parents: 250
diff changeset
117 case Keys::COMMENT: torrent.SetDescription(value); break;
862d0d8619f6 *: HUUUGE changes
Paper <paper@paper.us.eu.org>
parents: 250
diff changeset
118 case Keys::SIZE: torrent.SetSize(Strings::HumanReadableSizeToBytes(value)); break;
221
53211cb1e7f5 library: add initial library stuff
Paper <paper@paper.us.eu.org>
parents: 183
diff changeset
119 case Keys::AUTHORIZED:
53211cb1e7f5 library: add initial library stuff
Paper <paper@paper.us.eu.org>
parents: 183
diff changeset
120 if (torrent.GetGroup().empty() && value != "N/A")
53211cb1e7f5 library: add initial library stuff
Paper <paper@paper.us.eu.org>
parents: 183
diff changeset
121 torrent.SetGroup(value);
53211cb1e7f5 library: add initial library stuff
Paper <paper@paper.us.eu.org>
parents: 183
diff changeset
122 break;
258
862d0d8619f6 *: HUUUGE changes
Paper <paper@paper.us.eu.org>
parents: 250
diff changeset
123 default: break;
183
01d259b9c89f pages/torrents.cc: parse feed descriptions separately
Paper <mrpapersonic@gmail.com>
parents: 178
diff changeset
124 }
01d259b9c89f pages/torrents.cc: parse feed descriptions separately
Paper <mrpapersonic@gmail.com>
parents: 178
diff changeset
125 }
01d259b9c89f pages/torrents.cc: parse feed descriptions separately
Paper <mrpapersonic@gmail.com>
parents: 178
diff changeset
126 }
01d259b9c89f pages/torrents.cc: parse feed descriptions separately
Paper <mrpapersonic@gmail.com>
parents: 178
diff changeset
127
114
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
128 void TorrentsPageListModel::ParseTorrentList(const QByteArray& ba) {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
129 std::istringstream stdstream(Strings::ToUtf8String(ba));
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
130
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
131 pugi::xml_document doc;
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
132 if (!doc.load(stdstream))
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
133 return; // peace out
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 /* my extra special dumb hack. */
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
136 if (!rowCount(index(0))) {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
137 beginInsertRows(QModelIndex(), 0, 0);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
138 endInsertRows();
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
139 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
140
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
141 beginResetModel();
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 list.clear();
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
144 /* 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
145 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
146 TorrentModelItem torrent;
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
147 torrent.SetFilename(item.child_value("title")); /* "title" == filename */
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
148 {
154
d43d68408d3c dep/animia: fix XnuFdTools
Paper <mrpapersonic@gmail.com>
parents: 118
diff changeset
149 anitomy::Anitomy anitomy;
d43d68408d3c dep/animia: fix XnuFdTools
Paper <mrpapersonic@gmail.com>
parents: 118
diff changeset
150 anitomy.Parse(Strings::ToWstring(torrent.GetFilename()));
d43d68408d3c dep/animia: fix XnuFdTools
Paper <mrpapersonic@gmail.com>
parents: 118
diff changeset
151
d43d68408d3c dep/animia: fix XnuFdTools
Paper <mrpapersonic@gmail.com>
parents: 118
diff changeset
152 const auto& elements = anitomy.elements();
d43d68408d3c dep/animia: fix XnuFdTools
Paper <mrpapersonic@gmail.com>
parents: 118
diff changeset
153
d43d68408d3c dep/animia: fix XnuFdTools
Paper <mrpapersonic@gmail.com>
parents: 118
diff changeset
154 /* todo: patch Anitomy so that it doesn't use wide strings */
d43d68408d3c dep/animia: fix XnuFdTools
Paper <mrpapersonic@gmail.com>
parents: 118
diff changeset
155 torrent.SetTitle(Strings::ToUtf8String(elements.get(anitomy::kElementAnimeTitle)));
264
9a04802848c0 *: improve multiple things
Paper <paper@paper.us.eu.org>
parents: 260
diff changeset
156 std::string episode = Strings::ToUtf8String(elements.get(anitomy::kElementEpisodeNumber));
9a04802848c0 *: improve multiple things
Paper <paper@paper.us.eu.org>
parents: 260
diff changeset
157 Strings::RemoveLeadingChars(episode, '0');
9a04802848c0 *: improve multiple things
Paper <paper@paper.us.eu.org>
parents: 260
diff changeset
158 torrent.SetEpisode(episode);
154
d43d68408d3c dep/animia: fix XnuFdTools
Paper <mrpapersonic@gmail.com>
parents: 118
diff changeset
159 torrent.SetGroup(Strings::ToUtf8String(elements.get(anitomy::kElementReleaseGroup)));
d43d68408d3c dep/animia: fix XnuFdTools
Paper <mrpapersonic@gmail.com>
parents: 118
diff changeset
160 torrent.SetResolution(Strings::ToUtf8String(elements.get(anitomy::kElementVideoResolution)));
114
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
161 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
162
260
dd211ff68b36 pages/seasons: add initial functionality
Paper <paper@paper.us.eu.org>
parents: 258
diff changeset
163 std::string description = item.child_value("description");
dd211ff68b36 pages/seasons: add initial functionality
Paper <paper@paper.us.eu.org>
parents: 258
diff changeset
164 Strings::TextifySynopsis(description);
dd211ff68b36 pages/seasons: add initial functionality
Paper <paper@paper.us.eu.org>
parents: 258
diff changeset
165 ParseFeedDescription(description, torrent);
114
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
166
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
167 torrent.SetLink(item.child_value("link"));
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
168 torrent.SetGuid(item.child_value("guid"));
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 const QString date_str = Strings::ToQString(item.child_value("pubDate"));
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
171 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
172 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
173 list.push_back(torrent);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
174 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
175
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
176 endResetModel();
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
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
179 void TorrentsPageListModel::RefreshTorrentList() {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
180 ParseTorrentList(DownloadTorrentList());
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
181 }
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 int TorrentsPageListModel::rowCount(const QModelIndex& parent) const {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
184 return list.size();
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
185 (void)(parent);
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
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
188 int TorrentsPageListModel::columnCount(const QModelIndex& parent) const {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
189 return NB_COLUMNS;
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
190 (void)(parent);
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 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
194 switch (role) {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
195 case Qt::DisplayRole: {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
196 switch (section) {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
197 case TL_TITLE: return tr("Anime title");
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
198 case TL_EPISODE: return tr("Episode");
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
199 case TL_GROUP: return tr("Group");
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
200 case TL_SIZE: return tr("Size");
236
4d461ef7d424 HUGE UPDATE: convert build system to autotools
Paper <mrpapersonic@gmail.com>
parents: 230
diff changeset
201 case TL_RESOLUTION: return tr("Resolution"); /* "Video" in Taiga */
4d461ef7d424 HUGE UPDATE: convert build system to autotools
Paper <mrpapersonic@gmail.com>
parents: 230
diff changeset
202 case TL_SEEDERS: return tr("S");
4d461ef7d424 HUGE UPDATE: convert build system to autotools
Paper <mrpapersonic@gmail.com>
parents: 230
diff changeset
203 case TL_LEECHERS: return tr("L");
4d461ef7d424 HUGE UPDATE: convert build system to autotools
Paper <mrpapersonic@gmail.com>
parents: 230
diff changeset
204 case TL_DOWNLOADS: return tr("D");
114
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
205 case TL_DESCRIPTION: return tr("Description");
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
206 case TL_FILENAME: return tr("Filename");
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
207 case TL_RELEASEDATE: return tr("Release date");
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
208 default: return {};
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 break;
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
211 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
212 case Qt::TextAlignmentRole: {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
213 switch (section) {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
214 case TL_FILENAME:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
215 case TL_GROUP:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
216 case TL_DESCRIPTION:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
217 case TL_RESOLUTION:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
218 case TL_TITLE: return QVariant(Qt::AlignLeft | Qt::AlignVCenter);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
219 case TL_SEEDERS:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
220 case TL_LEECHERS:
236
4d461ef7d424 HUGE UPDATE: convert build system to autotools
Paper <mrpapersonic@gmail.com>
parents: 230
diff changeset
221 case TL_DOWNLOADS:
114
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
222 case TL_SIZE:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
223 case TL_EPISODE:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
224 case TL_RELEASEDATE: return QVariant(Qt::AlignRight | Qt::AlignVCenter);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
225 default: return {};
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
226 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
227 break;
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
228 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
229 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
230 return QAbstractListModel::headerData(section, orientation, role);
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
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
233 bool TorrentsPageListModel::setData(const QModelIndex& index, const QVariant& value, int role) {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
234 TorrentModelItem& item = list.at(index.row());
54
466ac9870df9 add stub pages (to be implemented)
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
235
114
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
236 if (index.column() == 0) {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
237 switch (role) {
258
862d0d8619f6 *: HUUUGE changes
Paper <paper@paper.us.eu.org>
parents: 250
diff changeset
238 case Qt::EditRole: return false;
114
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
239 case Qt::CheckStateRole:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
240 item.SetChecked(value.toBool());
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
241 emit dataChanged(index, index);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
242 return true;
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
243 }
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
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
246 return QAbstractItemModel::setData(index, value, role);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
247 }
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 QVariant TorrentsPageListModel::data(const QModelIndex& index, int role) const {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
250 if (!index.isValid())
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
251 return QVariant();
116
254b1d2b7096 settings: add torrents page, make rss feed configurable
Paper <mrpapersonic@gmail.com>
parents: 114
diff changeset
252
254b1d2b7096 settings: add torrents page, make rss feed configurable
Paper <mrpapersonic@gmail.com>
parents: 114
diff changeset
253 const TorrentModelItem& item = list.at(index.row());
254b1d2b7096 settings: add torrents page, make rss feed configurable
Paper <mrpapersonic@gmail.com>
parents: 114
diff changeset
254
114
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
255 switch (role) {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
256 case Qt::DisplayRole:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
257 switch (index.column()) {
116
254b1d2b7096 settings: add torrents page, make rss feed configurable
Paper <mrpapersonic@gmail.com>
parents: 114
diff changeset
258 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
259 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
260 case TL_GROUP: return Strings::ToQString(item.GetGroup());
273
f31305b9f60a *: various code safety changes
Paper <paper@paper.us.eu.org>
parents: 264
diff changeset
261 case TL_SIZE: return Strings::ToQString(Strings::BytesToHumanReadableSize(item.GetSize()));
116
254b1d2b7096 settings: add torrents page, make rss feed configurable
Paper <mrpapersonic@gmail.com>
parents: 114
diff changeset
262 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
263 case TL_SEEDERS: return item.GetSeeders();
254b1d2b7096 settings: add torrents page, make rss feed configurable
Paper <mrpapersonic@gmail.com>
parents: 114
diff changeset
264 case TL_LEECHERS: return item.GetLeechers();
236
4d461ef7d424 HUGE UPDATE: convert build system to autotools
Paper <mrpapersonic@gmail.com>
parents: 230
diff changeset
265 case TL_DOWNLOADS: return item.GetDownloads();
116
254b1d2b7096 settings: add torrents page, make rss feed configurable
Paper <mrpapersonic@gmail.com>
parents: 114
diff changeset
266 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
267 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
268 case TL_RELEASEDATE: return item.GetDate();
230
2f5a9247e501 torrents: implement download button
Paper <paper@paper.us.eu.org>
parents: 221
diff changeset
269 default: return {};
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 break;
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
272 case Qt::UserRole:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
273 switch (index.column()) {
116
254b1d2b7096 settings: add torrents page, make rss feed configurable
Paper <mrpapersonic@gmail.com>
parents: 114
diff changeset
274 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
275 /* We have to use this to work around some stupid
230
2f5a9247e501 torrents: implement download button
Paper <paper@paper.us.eu.org>
parents: 221
diff changeset
276 * "conversion ambiguous" error on Linux
258
862d0d8619f6 *: HUUUGE changes
Paper <paper@paper.us.eu.org>
parents: 250
diff changeset
277 */
117
2c1b6782e1d0 pages/torrents: work around conversion error on Linux
Paper <mrpapersonic@gmail.com>
parents: 116
diff changeset
278 case TL_SIZE: return QVariant::fromValue(item.GetSize());
114
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
279 default: return data(index, Qt::DisplayRole);
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 break;
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
282 case Qt::SizeHintRole: {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
283 switch (index.column()) {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
284 default: {
116
254b1d2b7096 settings: add torrents page, make rss feed configurable
Paper <mrpapersonic@gmail.com>
parents: 114
diff changeset
285 /* 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
286 const QString d = data(index, Qt::DisplayRole).toString();
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
287 const QFontMetrics metric = QFontMetrics(QFont());
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
288
273
f31305b9f60a *: various code safety changes
Paper <paper@paper.us.eu.org>
parents: 264
diff changeset
289 return QSize(std::max(metric.boundingRect(d).width(), 100), metric.height());
114
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
290 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
291 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
292 break;
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 case Qt::TextAlignmentRole:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
295 switch (index.column()) {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
296 case TL_FILENAME:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
297 case TL_GROUP:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
298 case TL_DESCRIPTION:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
299 case TL_RESOLUTION:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
300 case TL_TITLE: return QVariant(Qt::AlignLeft | Qt::AlignVCenter);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
301 case TL_SEEDERS:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
302 case TL_LEECHERS:
236
4d461ef7d424 HUGE UPDATE: convert build system to autotools
Paper <mrpapersonic@gmail.com>
parents: 230
diff changeset
303 case TL_DOWNLOADS:
114
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
304 case TL_SIZE:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
305 case TL_EPISODE:
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
306 case TL_RELEASEDATE: return QVariant(Qt::AlignRight | Qt::AlignVCenter);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
307 default: return {};
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 break;
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 return QVariant();
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
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
314 Qt::ItemFlags TorrentsPageListModel::flags(const QModelIndex& index) const {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
315 if (!index.isValid())
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
316 return Qt::NoItemFlags;
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
317
118
39521c47c7a3 *: another huge megacommit, SORRY
Paper <mrpapersonic@gmail.com>
parents: 117
diff changeset
318 return Qt::ItemIsEnabled | Qt::ItemIsSelectable;
114
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
319 }
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 TorrentsPage::TorrentsPage(QWidget* parent) : QFrame(parent) {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
322 setFrameShape(QFrame::Box);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
323 setFrameShadow(QFrame::Sunken);
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 QVBoxLayout* layout = new QVBoxLayout(this);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
326 layout->setContentsMargins(0, 0, 0, 0);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
327 layout->setSpacing(0);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
328
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
329 {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
330 /* Toolbar */
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
331 QToolBar* toolbar = new QToolBar(this);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
332 toolbar->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
333 toolbar->setIconSize(QSize(16, 16));
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
334 toolbar->setMovable(false);
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 /* this needs to be stored somewhere to replicate Taiga's
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
338 "timer" feature */
258
862d0d8619f6 *: HUUUGE changes
Paper <paper@paper.us.eu.org>
parents: 250
diff changeset
339 toolbar->addAction(QIcon(":/icons/16x16/arrow-circle-315.png"), tr("&Check new torrents"),
862d0d8619f6 *: HUUUGE changes
Paper <paper@paper.us.eu.org>
parents: 250
diff changeset
340 [this] { Refresh(); });
114
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
341 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
342
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
343 toolbar->addSeparator();
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 {
258
862d0d8619f6 *: HUUUGE changes
Paper <paper@paper.us.eu.org>
parents: 250
diff changeset
346 toolbar->addAction(QIcon(":/icons/16x16/navigation-270-button.png"), tr("Download &marked torrents"),
862d0d8619f6 *: HUUUGE changes
Paper <paper@paper.us.eu.org>
parents: 250
diff changeset
347 [this] { DownloadSelection(); });
114
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
258
862d0d8619f6 *: HUUUGE changes
Paper <paper@paper.us.eu.org>
parents: 250
diff changeset
350 { 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
351
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
352 toolbar->addSeparator();
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
353
258
862d0d8619f6 *: HUUUGE changes
Paper <paper@paper.us.eu.org>
parents: 250
diff changeset
354 { toolbar->addAction(QIcon(":/icons/16x16/gear.png"), tr("&Settings")); }
114
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 layout->addWidget(toolbar);
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
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
359 {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
360 QFrame* line = new QFrame(this);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
361 line->setFrameShape(QFrame::HLine);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
362 line->setFrameShadow(QFrame::Sunken);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
363 line->setLineWidth(1);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
364 layout->addWidget(line);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
365 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
366
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
367 {
230
2f5a9247e501 torrents: implement download button
Paper <paper@paper.us.eu.org>
parents: 221
diff changeset
368 treeview = new QTreeView(this);
114
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
369 treeview->setUniformRowHeights(true);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
370 treeview->setAllColumnsShowFocus(false);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
371 treeview->setAlternatingRowColors(true);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
372 treeview->setSortingEnabled(true);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
373 treeview->setSelectionMode(QAbstractItemView::ExtendedSelection);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
374 treeview->setItemsExpandable(false);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
375 treeview->setRootIsDecorated(false);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
376 treeview->setContextMenuPolicy(Qt::CustomContextMenu);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
377 treeview->setFrameShape(QFrame::NoFrame);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
378
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
379 {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
380 sort_model = new TorrentsPageListSortFilter(treeview);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
381 model = new TorrentsPageListModel(treeview);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
382 sort_model->setSourceModel(model);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
383 sort_model->setSortRole(Qt::UserRole);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
384 sort_model->setSortCaseSensitivity(Qt::CaseInsensitive);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
385 treeview->setModel(sort_model);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
386 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
387
236
4d461ef7d424 HUGE UPDATE: convert build system to autotools
Paper <mrpapersonic@gmail.com>
parents: 230
diff changeset
388 // set column sizes
258
862d0d8619f6 *: HUUUGE changes
Paper <paper@paper.us.eu.org>
parents: 250
diff changeset
389 treeview->setColumnWidth(TorrentsPageListModel::TL_TITLE, 240);
862d0d8619f6 *: HUUUGE changes
Paper <paper@paper.us.eu.org>
parents: 250
diff changeset
390 treeview->setColumnWidth(TorrentsPageListModel::TL_EPISODE, 60);
862d0d8619f6 *: HUUUGE changes
Paper <paper@paper.us.eu.org>
parents: 250
diff changeset
391 treeview->setColumnWidth(TorrentsPageListModel::TL_GROUP, 100);
862d0d8619f6 *: HUUUGE changes
Paper <paper@paper.us.eu.org>
parents: 250
diff changeset
392 treeview->setColumnWidth(TorrentsPageListModel::TL_SIZE, 70);
862d0d8619f6 *: HUUUGE changes
Paper <paper@paper.us.eu.org>
parents: 250
diff changeset
393 treeview->setColumnWidth(TorrentsPageListModel::TL_RESOLUTION, 100);
862d0d8619f6 *: HUUUGE changes
Paper <paper@paper.us.eu.org>
parents: 250
diff changeset
394 treeview->setColumnWidth(TorrentsPageListModel::TL_SEEDERS, 20);
862d0d8619f6 *: HUUUGE changes
Paper <paper@paper.us.eu.org>
parents: 250
diff changeset
395 treeview->setColumnWidth(TorrentsPageListModel::TL_LEECHERS, 20);
862d0d8619f6 *: HUUUGE changes
Paper <paper@paper.us.eu.org>
parents: 250
diff changeset
396 treeview->setColumnWidth(TorrentsPageListModel::TL_DOWNLOADS, 20);
236
4d461ef7d424 HUGE UPDATE: convert build system to autotools
Paper <mrpapersonic@gmail.com>
parents: 230
diff changeset
397 treeview->setColumnWidth(TorrentsPageListModel::TL_DESCRIPTION, 200);
258
862d0d8619f6 *: HUUUGE changes
Paper <paper@paper.us.eu.org>
parents: 250
diff changeset
398 treeview->setColumnWidth(TorrentsPageListModel::TL_FILENAME, 200);
236
4d461ef7d424 HUGE UPDATE: convert build system to autotools
Paper <mrpapersonic@gmail.com>
parents: 230
diff changeset
399 treeview->setColumnWidth(TorrentsPageListModel::TL_RELEASEDATE, 190);
4d461ef7d424 HUGE UPDATE: convert build system to autotools
Paper <mrpapersonic@gmail.com>
parents: 230
diff changeset
400
250
c130f47f6f48 *: many many changes
Paper <paper@paper.us.eu.org>
parents: 236
diff changeset
401 treeview->header()->setStretchLastSection(false);
c130f47f6f48 *: many many changes
Paper <paper@paper.us.eu.org>
parents: 236
diff changeset
402
114
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
403 layout->addWidget(treeview);
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
404 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
405 }
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
406
230
2f5a9247e501 torrents: implement download button
Paper <paper@paper.us.eu.org>
parents: 221
diff changeset
407 void TorrentsPage::DownloadSelection() {
236
4d461ef7d424 HUGE UPDATE: convert build system to autotools
Paper <mrpapersonic@gmail.com>
parents: 230
diff changeset
408 if (!model)
230
2f5a9247e501 torrents: implement download button
Paper <paper@paper.us.eu.org>
parents: 221
diff changeset
409 return;
2f5a9247e501 torrents: implement download button
Paper <paper@paper.us.eu.org>
parents: 221
diff changeset
410
2f5a9247e501 torrents: implement download button
Paper <paper@paper.us.eu.org>
parents: 221
diff changeset
411 const QItemSelection selection = sort_model->mapSelectionToSource(treeview->selectionModel()->selection());
2f5a9247e501 torrents: implement download button
Paper <paper@paper.us.eu.org>
parents: 221
diff changeset
412
236
4d461ef7d424 HUGE UPDATE: convert build system to autotools
Paper <mrpapersonic@gmail.com>
parents: 230
diff changeset
413 model->DownloadTorrents(selection);
230
2f5a9247e501 torrents: implement download button
Paper <paper@paper.us.eu.org>
parents: 221
diff changeset
414 }
2f5a9247e501 torrents: implement download button
Paper <paper@paper.us.eu.org>
parents: 221
diff changeset
415
114
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
416 void TorrentsPage::Refresh() {
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
417 if (!model)
ab191e28e69d *: add initial torrent stuff
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
418 return;
230
2f5a9247e501 torrents: implement download button
Paper <paper@paper.us.eu.org>
parents: 221
diff changeset
419
291
9a88e1725fd2 *: refactor lots of stuff
Paper <paper@paper.us.eu.org>
parents: 273
diff changeset
420 HTTP::RequestThread* thread = new HTTP::RequestThread(session.config.torrents.feed_link);
230
2f5a9247e501 torrents: implement download button
Paper <paper@paper.us.eu.org>
parents: 221
diff changeset
421
291
9a88e1725fd2 *: refactor lots of stuff
Paper <paper@paper.us.eu.org>
parents: 273
diff changeset
422 connect(thread, &HTTP::RequestThread::ReceivedData, this, [&](const QByteArray& ba) {
230
2f5a9247e501 torrents: implement download button
Paper <paper@paper.us.eu.org>
parents: 221
diff changeset
423 /* This is to make sure we aren't in a different thread
2f5a9247e501 torrents: implement download button
Paper <paper@paper.us.eu.org>
parents: 221
diff changeset
424 * messing around with GUI stuff
258
862d0d8619f6 *: HUUUGE changes
Paper <paper@paper.us.eu.org>
parents: 250
diff changeset
425 */
230
2f5a9247e501 torrents: implement download button
Paper <paper@paper.us.eu.org>
parents: 221
diff changeset
426 treeview->setUpdatesEnabled(false);
2f5a9247e501 torrents: implement download button
Paper <paper@paper.us.eu.org>
parents: 221
diff changeset
427 model->ParseTorrentList(ba);
2f5a9247e501 torrents: implement download button
Paper <paper@paper.us.eu.org>
parents: 221
diff changeset
428 treeview->setUpdatesEnabled(true);
2f5a9247e501 torrents: implement download button
Paper <paper@paper.us.eu.org>
parents: 221
diff changeset
429 });
291
9a88e1725fd2 *: refactor lots of stuff
Paper <paper@paper.us.eu.org>
parents: 273
diff changeset
430 connect(thread, &HTTP::RequestThread::finished, thread, &HTTP::RequestThread::deleteLater);
230
2f5a9247e501 torrents: implement download button
Paper <paper@paper.us.eu.org>
parents: 221
diff changeset
431
2f5a9247e501 torrents: implement download button
Paper <paper@paper.us.eu.org>
parents: 221
diff changeset
432 thread->start();
54
466ac9870df9 add stub pages (to be implemented)
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
433 }