From 497cb07852cd7de70b8657cf8b4a796943853998 Mon Sep 17 00:00:00 2001 From: Christophe Dumez Date: Wed, 2 Dec 2009 20:13:10 +0000 Subject: [PATCH] - Fix several possible crashes when using Magnet URI (because they don't have metadata in the beginning) --- src/propertieswidget.cpp | 21 +++++++++++++-------- src/proplistdelegate.h | 2 +- src/trackerlist.h | 2 ++ 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/src/propertieswidget.cpp b/src/propertieswidget.cpp index 79498882f..9477592c0 100644 --- a/src/propertieswidget.cpp +++ b/src/propertieswidget.cpp @@ -204,6 +204,7 @@ Bittorrent* PropertiesWidget::getBTSession() const { } void PropertiesWidget::loadTorrentInfos(QTorrentHandle &_h) { + clear(); h = _h; if(!h.is_valid()) { clear(); @@ -330,10 +331,12 @@ void PropertiesWidget::loadDynamicData() { // Downloaded pieces downloaded_pieces->setProgress(h.pieces()); // Pieces availability - std::vector avail; - h.piece_availability(avail); - double avail_average = pieces_availability->setAvailability(avail); - avail_average_lbl->setText(QString::number(avail_average, 'f', 1)); + if(h.has_metadata()) { + std::vector avail; + h.piece_availability(avail); + double avail_average = pieces_availability->setAvailability(avail); + avail_average_lbl->setText(QString::number(avail_average, 'f', 1)); + } // Progress progress_lbl->setText(QString::number(h.progress()*100., 'f', 1)+"%"); } else { @@ -353,10 +356,12 @@ void PropertiesWidget::loadDynamicData() { } if(stackedProperties->currentIndex() == FILES_TAB) { // Files progress - std::vector fp; - h.file_progress(fp); - PropListModel->updateFilesPriorities(h.file_priorities()); - PropListModel->updateFilesProgress(fp); + if(h.has_metadata()) { + std::vector fp; + h.file_progress(fp); + PropListModel->updateFilesPriorities(h.file_priorities()); + PropListModel->updateFilesProgress(fp); + } } } catch(invalid_handle e) {} } diff --git a/src/proplistdelegate.h b/src/proplistdelegate.h index dd60caed0..d889f4ea2 100644 --- a/src/proplistdelegate.h +++ b/src/proplistdelegate.h @@ -122,7 +122,7 @@ public: if(index.column() != PRIORITY) return 0; if(properties) { QTorrentHandle h = properties->getCurrentTorrent(); - if(!h.is_valid() || h.is_seed()) return 0; + if(!h.is_valid() || h.is_seed() || !h.has_metadata()) return 0; } QComboBox* editor = new QComboBox(parent); editor->setFocusPolicy(Qt::StrongFocus); diff --git a/src/trackerlist.h b/src/trackerlist.h index 960e4546f..40c662912 100644 --- a/src/trackerlist.h +++ b/src/trackerlist.h @@ -275,6 +275,8 @@ public slots: } void showTrackerListMenu(QPoint) { + QTorrentHandle h = properties->getCurrentTorrent(); + if(!h.is_valid() || !h.has_metadata()) return; QList selected_items = getSelectedTrackerItems(); QMenu menu; // Add actions