summaryrefslogtreecommitdiffstats
path: root/torrentdisplay.cpp
diff options
context:
space:
mode:
authorArno <arno@disconnect.de>2016-08-20 08:31:29 +0200
committerArno <arno@disconnect.de>2016-08-20 08:31:29 +0200
commitd47427a2d51fcc7f8e1f8926a706e04ff01603ed (patch)
tree22002ee669fbce025aad1782f75733843e3581be /torrentdisplay.cpp
parent8ab990b7c6fb5348b09f451878a80e2c70695876 (diff)
downloadShemovCleaner-d47427a2d51fcc7f8e1f8926a706e04ff01603ed.tar.gz
ShemovCleaner-d47427a2d51fcc7f8e1f8926a706e04ff01603ed.tar.bz2
ShemovCleaner-d47427a2d51fcc7f8e1f8926a706e04ff01603ed.zip
Present torrent files as a tree
A torrent info dictionary has two modes: single and multi files. When in multi-mode, the name-entry is the directory containing the files. Represent it as a tree. During testing I discovered a fatal bug in the torrent parser: If we encounter an invalid string, we have to move mPos forward, else we will loop indefinitely until we're OOM. I also added some icons for folders, files and trackers.
Diffstat (limited to 'torrentdisplay.cpp')
-rw-r--r--torrentdisplay.cpp66
1 files changed, 47 insertions, 19 deletions
diff --git a/torrentdisplay.cpp b/torrentdisplay.cpp
index e56343c..11b98b5 100644
--- a/torrentdisplay.cpp
+++ b/torrentdisplay.cpp
@@ -79,7 +79,9 @@ TorrentDisplay::TorrentDisplay(QWidget *parent, Qt::WindowFlags f) : QDialog(par
setWindowTitle(tr("Torrent Info"));
}
-void TorrentDisplay::setData(const QList<QVariant> data) {
+#include <QDebug>
+
+void TorrentDisplay::setData(const QList<QVariant> data, const QString &filename) {
if(data.isEmpty()){
return;
}
@@ -97,26 +99,12 @@ void TorrentDisplay::setData(const QList<QVariant> data) {
QVariantHash infoD = it.value().toHash();
int piece_length = infoD.value("piece length").toInt();
mPieceLength->setText(QString::number(piece_length));
- if(infoD.contains("name")){
- QString fn = infoD.value("name").toString();
- qint64 length = infoD.value("length").toLongLong();
- QStandardItem *i1 = new QStandardItem(fn);
- QStandardItem *i2 = new QStandardItem(QString::number(length));
- i2->setData(length);
- mFileModel->invisibleRootItem()->appendRow(QList<QStandardItem*>() << i1 << i2);
- }
if(infoD.contains("files")){
- QVariantList fList = infoD.value("files").toList();
- foreach(QVariant fn, fList){
- QVariantHash curH = fn.toHash();
- QVariantList path = curH.value("path").toList();
- QStandardItem *i1 = new QStandardItem(path.last().toString());
- qint64 length = curH.value("length").toLongLong();
- QStandardItem *i2 = new QStandardItem(QString::number(length));
- i2->setData(length);
- mFileModel->invisibleRootItem()->appendRow(QList<QStandardItem*>() << i1 << i2);
- }
+ setMulti(infoD, filename);
+ }else{
+ setSingle(infoD, filename);
}
+ mFileView->expandAll();
mFileView->resizeColumnToContents(0);
mFileView->resizeColumnToContents(1);
}
@@ -138,6 +126,7 @@ void TorrentDisplay::setData(const QList<QVariant> data) {
QVariantList l3 = l2.toList();
foreach(QVariant ann, l3){
QStandardItem *i1 = new QStandardItem(ann.toString());
+ i1->setIcon(QIcon(":/butt_plug.png"));
mAnnounceModel->invisibleRootItem()->appendRow(QList<QStandardItem*>() << i1);
}
}
@@ -147,3 +136,42 @@ void TorrentDisplay::setData(const QList<QVariant> data) {
}
}
}
+
+void TorrentDisplay::setMulti(const QVariantHash &data, const QString &filename){
+ QStandardItem *root = mFileModel->invisibleRootItem();
+ QStandardItem *torrentItem = new QStandardItem(filename);
+ torrentItem->setIcon(QIcon(":/huge_bra.png"));
+ root->appendRow(QList<QStandardItem*>() << torrentItem << new QStandardItem());
+ QString folderName = data.value("name").toString();
+ if(folderName.isEmpty()){
+ folderName = "<no folder>";
+ }
+ QStandardItem *folderItem = new QStandardItem(folderName);
+ folderItem->setIcon(QIcon(":/gaping_ass.png"));
+ torrentItem->appendRow(QList<QStandardItem*>() << folderItem << new QStandardItem);
+ QVariantList fileList = data.value("files").toList();
+ foreach(QVariant entry, fileList){
+ QVariantHash e = entry.toHash();
+ QVariantList path = e.value("path").toList();
+ QStandardItem *i1 = new QStandardItem(path.last().toString());
+ i1->setIcon(QIcon(":/huge_bra.png"));
+ qint64 len = e.value("length").toLongLong();
+ QStandardItem *i2 = new QStandardItem(QString::number(len));
+ i2->setData(len);
+ folderItem->appendRow(QList<QStandardItem*>() << i1 << i2);
+ }
+}
+
+void TorrentDisplay::setSingle(const QVariantHash &data, const QString &filename){
+ QStandardItem *root = mFileModel->invisibleRootItem();
+ QStandardItem *torrentItem = new QStandardItem(filename);
+ torrentItem->setIcon(QIcon(":/huge_bra.png"));
+ root->appendRow(QList<QStandardItem*>() << torrentItem << new QStandardItem);
+ QString fn = data.value("name").toString();
+ QStandardItem *i1 = new QStandardItem(fn);
+ i1->setIcon(QIcon(":/huge_bra.png"));
+ qint64 len = data.value("length").toLongLong();
+ QStandardItem *i2 = new QStandardItem(QString::number(len));
+ i2->setData(len);
+ torrentItem->appendRow(QList<QStandardItem*>() << i1 << i2);
+}