diff options
author | Arno <arno@disconnect.de> | 2016-08-20 08:31:29 +0200 |
---|---|---|
committer | Arno <arno@disconnect.de> | 2016-08-20 08:31:29 +0200 |
commit | d47427a2d51fcc7f8e1f8926a706e04ff01603ed (patch) | |
tree | 22002ee669fbce025aad1782f75733843e3581be /torrentdisplay.cpp | |
parent | 8ab990b7c6fb5348b09f451878a80e2c70695876 (diff) | |
download | ShemovCleaner-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.cpp | 66 |
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); +} |