1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
|
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
//ui->table_view->horizontalHeader()->
//setSectionResizeMode(QHeaderView::Stretch); // enable column resizing
QPalette palette; // palette for table
palette.setColor(QPalette::Highlight,
ui->table_view->
palette().color(QPalette::Base));
palette.setColor(QPalette::HighlightedText,
ui->table_view->palette().color(
QPalette::Text));
ui->table_view->setPalette(palette); // set table color palette
QString rssfile = "rss.txt"; // rss file to read and store to
if (getfile("http://horriblesubs.info/rss.php?res=720"
,rssfile)) // download rss file
ui->status_bar->showMessage(
"RSS feed downloaded"); // download complete
else
ui->status_bar->
showMessage("Cannot download RSS feed");// download fail
parserss(rssfile); // fail or complete, try and parse file
}
MainWindow::~MainWindow()
{
delete ui;
}
bool MainWindow::getfile(QString url, QString dest)
{
bool success; // return bool
if (QFile::exists(dest))
QFile::remove(dest); // remove rss file if already exists
QNetworkReply *reply = http.get(QNetworkRequest(
url)); // network reply
QObject::connect(reply, SIGNAL(finished()),
&loop, SLOT(quit())); // connect finish signal to quit
loop.exec(); // exec loop
QFile file(dest);
file.open(QIODevice::WriteOnly); // open file for writing
file.write(reply->readAll()); // write reply data to file
delete reply; // delete replt object
if (QFile::exists(dest) && file.size() > 0) // this is a terrible way to do this
success = true; // file downloaded successfully
else
success = false; // download failed
return success;
}
bool MainWindow::parserss(QString rssfile)
{
QDomDocument doc; // xml parser
QFile file(rssfile); // rss file
if (!file.open(QIODevice::ReadOnly) ||
!doc.setContent(&file))
return false; // file not opened
QDomNodeList title =
doc.elementsByTagName("item"); // item tag
qDebug() << title.size();
for (int i = 0; i < title.size(); i++) // iterate over every item
{
QDomNode n = title.item(i); // current title
QDomElement title =
n.firstChildElement("title"); // get title
QDomElement link =
n.firstChildElement("link"); // get link to current item
QDomElement date =
n.firstChildElement("pubDate"); // get pub date
addtolist(title.text(),
date.text(), link.text()); // add current item to list
}
return true;
}
void MainWindow::addtolist(QString title, QString date, QString link)
{
int i = ui->table_view->rowCount(); // get row count
ui->table_view->insertRow(i); // insert new row for item
ui->table_view->setItem
(i, 1, new QTableWidgetItem("title")); // add title item
ui->table_view->setItem
(i, 2, new QTableWidgetItem("date")); // add date item
ui->table_view->setItem
(i, 3, new QTableWidgetItem("link")); // add link item
ui->table_view->setItem
(i, 0, new QTableWidgetItem("grab")); // add grab item
ui->table_view->item(i,1)->setText(title); // add title text
ui->table_view->item(i,2)->setText(date); // add date test
ui->table_view->item(i,3)->setText(link); // add link text
QTableWidgetItem *checkbox =
new QTableWidgetItem(); // create checkbox item
checkbox->setCheckState(Qt::Unchecked); // set checkbox state
ui->table_view->setItem(i, 0, checkbox); // place checkbox inside row
}
void MainWindow::on_get_button_clicked()
{
int x = ui->table_view->rowCount(); // get row count
for (int i = 0; i < x; i++) // iterate over each item in the table
{
if (ui->table_view->item(i, 0)-> // check if checkbox.. checked
checkState() == 2) // checked is Qt::CheckState(Checked) (2)
{
openclient(
ui->table_view->item(i, 3)
->text()); // call open client with the magnet url
}
}
}
void MainWindow::openclient(QString magnet)
{
QProcess *process = new QProcess(); // create process
QString program = "/usr/bin/transmission-qt"; // this is built for transmission
QStringList arg; // argument list
arg.append(magnet); // append magnet to arg
process->start(program, arg); // start process
}
|