summaryrefslogtreecommitdiff
path: root/mainwindow.cpp
blob: 15e22f34227193741d3eddf23955da357f444a96 (plain)
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
}