diff options
author | daniel-Jones <daniel@danieljon.es> | 2018-01-19 17:28:36 +1030 |
---|---|---|
committer | daniel-Jones <daniel@danieljon.es> | 2018-01-19 17:28:36 +1030 |
commit | fe066f144c54c67207e0edfd5303d0b68288e066 (patch) | |
tree | 3743abd094f1a1121a1ecbedefed1f80ccaff2ac | |
download | horriblesubs-rss-fe066f144c54c67207e0edfd5303d0b68288e066.tar.gz horriblesubs-rss-fe066f144c54c67207e0edfd5303d0b68288e066.zip |
-rw-r--r-- | horriblesubs-rss.pro | 34 | ||||
-rw-r--r-- | main.cpp | 11 | ||||
-rw-r--r-- | mainwindow.cpp | 125 | ||||
-rw-r--r-- | mainwindow.h | 39 | ||||
-rw-r--r-- | mainwindow.ui | 111 | ||||
-rw-r--r-- | uiexample.png | bin | 0 -> 135895 bytes |
6 files changed, 320 insertions, 0 deletions
diff --git a/horriblesubs-rss.pro b/horriblesubs-rss.pro new file mode 100644 index 0000000..628e64f --- /dev/null +++ b/horriblesubs-rss.pro @@ -0,0 +1,34 @@ +#------------------------------------------------- +# +# Project created by QtCreator 2018-01-19T08:12:43 +# +#------------------------------------------------- + +QT += core gui network xml + +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets + +TARGET = horriblesubs-rss +TEMPLATE = app + +# The following define makes your compiler emit warnings if you use +# any feature of Qt which has been marked as deprecated (the exact warnings +# depend on your compiler). Please consult the documentation of the +# deprecated API in order to know how to port your code away from it. +DEFINES += QT_DEPRECATED_WARNINGS + +# You can also make your code fail to compile if you use deprecated APIs. +# In order to do so, uncomment the following line. +# You can also select to disable deprecated APIs only up to a certain version of Qt. +#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 + + +SOURCES += \ + main.cpp \ + mainwindow.cpp + +HEADERS += \ + mainwindow.h + +FORMS += \ + mainwindow.ui diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..b48f94e --- /dev/null +++ b/main.cpp @@ -0,0 +1,11 @@ +#include "mainwindow.h" +#include <QApplication> + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + MainWindow w; + w.show(); + + return a.exec(); +} diff --git a/mainwindow.cpp b/mainwindow.cpp new file mode 100644 index 0000000..15e22f3 --- /dev/null +++ b/mainwindow.cpp @@ -0,0 +1,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 +} diff --git a/mainwindow.h b/mainwindow.h new file mode 100644 index 0000000..5392033 --- /dev/null +++ b/mainwindow.h @@ -0,0 +1,39 @@ +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include <QMainWindow> +#include <QEventLoop> +#include <QNetworkAccessManager> +#include <QNetworkReply> +#include <QFile> +#include <QDomDocument> +#include <QCheckBox> +#include <QProcess> + +namespace Ui { + class MainWindow; +} + +class MainWindow : public QMainWindow +{ + Q_OBJECT + + public: + explicit MainWindow(QWidget *parent = 0); + ~MainWindow(); + +private slots: + void on_get_button_clicked(); + +private: + Ui::MainWindow *ui; + bool getfile(QString url, QString dest); + QNetworkAccessManager http; + QEventLoop loop; + bool parserss(QString rssfile); + void addtolist(QString title, QString date, QString link); + void openclient(QString magnet); + +}; + +#endif // MAINWINDOW_H diff --git a/mainwindow.ui b/mainwindow.ui new file mode 100644 index 0000000..3c3ea11 --- /dev/null +++ b/mainwindow.ui @@ -0,0 +1,111 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>MainWindow</class> + <widget class="QMainWindow" name="MainWindow"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>400</width> + <height>300</height> + </rect> + </property> + <property name="windowTitle"> + <string>HorribleSubs RSS</string> + </property> + <widget class="QWidget" name="main_widget"> + <layout class="QGridLayout" name="gridLayout"> + <item row="1" column="0"> + <layout class="QFormLayout" name="button_form"> + <item row="0" column="0"> + <widget class="QPushButton" name="get_button"> + <property name="text"> + <string>get</string> + </property> + </widget> + </item> + </layout> + </item> + <item row="0" column="0"> + <widget class="QTableWidget" name="table_view"> + <property name="showGrid"> + <bool>true</bool> + </property> + <attribute name="horizontalHeaderHighlightSections"> + <bool>false</bool> + </attribute> + <attribute name="verticalHeaderVisible"> + <bool>false</bool> + </attribute> + <attribute name="verticalHeaderHighlightSections"> + <bool>false</bool> + </attribute> + <column> + <property name="text"> + <string>grab</string> + </property> + </column> + <column> + <property name="text"> + <string>title</string> + </property> + </column> + <column> + <property name="text"> + <string>date</string> + </property> + </column> + <column> + <property name="text"> + <string>link</string> + </property> + </column> + </widget> + </item> + </layout> + </widget> + <widget class="QMenuBar" name="menuBar"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>400</width> + <height>20</height> + </rect> + </property> + <widget class="QMenu" name="menumenu"> + <property name="title"> + <string>&menu</string> + </property> + <addaction name="actionexit"/> + </widget> + <addaction name="menumenu"/> + </widget> + <widget class="QStatusBar" name="status_bar"/> + <action name="actionexit"> + <property name="text"> + <string>&exit</string> + </property> + </action> + </widget> + <layoutdefault spacing="6" margin="11"/> + <resources/> + <connections> + <connection> + <sender>menuBar</sender> + <signal>triggered(QAction*)</signal> + <receiver>MainWindow</receiver> + <slot>close()</slot> + <hints> + <hint type="sourcelabel"> + <x>33</x> + <y>6</y> + </hint> + <hint type="destinationlabel"> + <x>95</x> + <y>64</y> + </hint> + </hints> + </connection> + </connections> +</ui> diff --git a/uiexample.png b/uiexample.png Binary files differnew file mode 100644 index 0000000..202eea3 --- /dev/null +++ b/uiexample.png |