Browse Source

Merge pull request #2080 from sorokin/cleanup-torrent-model

Cleanup torrent model item
adaptive-webui-19844
sledgehammer999 10 years ago
parent
commit
cfa28ec68c
  1. 124
      src/qtlibtorrent/torrentmodel.cpp
  2. 6
      src/qtlibtorrent/torrentmodel.h

124
src/qtlibtorrent/torrentmodel.cpp

@ -100,76 +100,100 @@ void TorrentModelItem::refreshStatus(libtorrent::torrent_status const& status) {
TorrentModelItem::State TorrentModelItem::state() const { TorrentModelItem::State TorrentModelItem::state() const {
try { try {
// Pause or Queued // Pause or Queued
if (m_torrent.is_paused(m_lastStatus)) { if (m_torrent.is_paused(m_lastStatus))
m_icon = get_paused_icon();
m_fgColor = QColor("red");
return m_torrent.is_seed(m_lastStatus) ? STATE_PAUSED_UP : STATE_PAUSED_DL; return m_torrent.is_seed(m_lastStatus) ? STATE_PAUSED_UP : STATE_PAUSED_DL;
}
if (m_torrent.is_queued(m_lastStatus)) { if (m_torrent.is_queued(m_lastStatus)
if (m_lastStatus.state != torrent_status::queued_for_checking && m_lastStatus.state != torrent_status::queued_for_checking
&& m_lastStatus.state != torrent_status::checking_resume_data && m_lastStatus.state != torrent_status::checking_resume_data
&& m_lastStatus.state != torrent_status::checking_files) { && m_lastStatus.state != torrent_status::checking_files)
m_icon = get_queued_icon(); return m_torrent.is_seed(m_lastStatus) ? STATE_QUEUED_UP : STATE_QUEUED_DL;
m_fgColor = QColor("grey");
return m_torrent.is_seed(m_lastStatus) ? STATE_QUEUED_UP : STATE_QUEUED_DL;
}
}
// Other states // Other states
switch(m_lastStatus.state) { switch(m_lastStatus.state) {
case torrent_status::allocating: case torrent_status::allocating:
m_icon = get_stalled_downloading_icon();
m_fgColor = QColor("grey");
return STATE_ALLOCATING; return STATE_ALLOCATING;
case torrent_status::downloading_metadata: case torrent_status::downloading_metadata:
m_icon = get_downloading_icon();
m_fgColor = QColor("green");
return STATE_DOWNLOADING_META; return STATE_DOWNLOADING_META;
case torrent_status::downloading: { case torrent_status::downloading:
if (m_lastStatus.download_payload_rate > 0) { return m_lastStatus.download_payload_rate > 0 ? STATE_DOWNLOADING : STATE_STALLED_DL;
m_icon = get_downloading_icon();
m_fgColor = QColor("green");
return STATE_DOWNLOADING;
} else {
m_icon = get_stalled_downloading_icon();
m_fgColor = QColor("grey");
return STATE_STALLED_DL;
}
}
case torrent_status::finished: case torrent_status::finished:
case torrent_status::seeding: case torrent_status::seeding:
if (m_lastStatus.upload_payload_rate > 0) { return m_lastStatus.upload_payload_rate > 0 ? STATE_SEEDING : STATE_STALLED_UP;
m_icon = get_uploading_icon();
m_fgColor = QColor("orange");
return STATE_SEEDING;
} else {
m_icon = get_stalled_uploading_icon();
m_fgColor = QColor("grey");
return STATE_STALLED_UP;
}
case torrent_status::queued_for_checking: case torrent_status::queued_for_checking:
m_icon = get_checking_icon();
m_fgColor = QColor("grey");
return STATE_QUEUED_CHECK; return STATE_QUEUED_CHECK;
case torrent_status::checking_resume_data: case torrent_status::checking_resume_data:
m_icon = get_checking_icon();
m_fgColor = QColor("grey");
return STATE_QUEUED_FASTCHECK; return STATE_QUEUED_FASTCHECK;
case torrent_status::checking_files: case torrent_status::checking_files:
m_icon = get_checking_icon();
m_fgColor = QColor("grey");
return m_torrent.is_seed(m_lastStatus) ? STATE_CHECKING_UP : STATE_CHECKING_DL; return m_torrent.is_seed(m_lastStatus) ? STATE_CHECKING_UP : STATE_CHECKING_DL;
default: default:
m_icon = get_error_icon();
m_fgColor = QColor("red");
return STATE_INVALID; return STATE_INVALID;
} }
} catch(invalid_handle&) { } catch(invalid_handle&) {
m_icon = get_error_icon();
m_fgColor = QColor("red");
return STATE_INVALID; return STATE_INVALID;
} }
} }
QIcon TorrentModelItem::getIconByState(State state) {
switch (state) {
case STATE_DOWNLOADING:
case STATE_DOWNLOADING_META:
return get_downloading_icon();
case STATE_ALLOCATING:
case STATE_STALLED_DL:
return get_stalled_downloading_icon();
case STATE_STALLED_UP:
return get_stalled_uploading_icon();
case STATE_SEEDING:
return get_uploading_icon();
case STATE_PAUSED_DL:
case STATE_PAUSED_UP:
return get_paused_icon();
case STATE_QUEUED_DL:
case STATE_QUEUED_UP:
return get_queued_icon();
case STATE_CHECKING_UP:
case STATE_CHECKING_DL:
case STATE_QUEUED_CHECK:
case STATE_QUEUED_FASTCHECK:
return get_checking_icon();
case STATE_INVALID:
return get_error_icon();
default:
Q_ASSERT(false);
return get_error_icon();
}
}
QColor TorrentModelItem::getColorByState(State state) {
switch (state) {
case STATE_DOWNLOADING:
case STATE_DOWNLOADING_META:
return QColor(Qt::green);
case STATE_ALLOCATING:
case STATE_STALLED_DL:
case STATE_STALLED_UP:
return QColor(Qt::gray);
case STATE_SEEDING:
return QColor(255, 165, 0);
case STATE_PAUSED_DL:
case STATE_PAUSED_UP:
return QColor(Qt::red);
case STATE_QUEUED_DL:
case STATE_QUEUED_UP:
case STATE_CHECKING_UP:
case STATE_CHECKING_DL:
case STATE_QUEUED_CHECK:
case STATE_QUEUED_FASTCHECK:
return QColor(Qt::gray);
case STATE_INVALID:
return QColor(Qt::red);
default:
Q_ASSERT(false);
return QColor(Qt::red);
}
}
bool TorrentModelItem::setData(int column, const QVariant &value, int role) bool TorrentModelItem::setData(int column, const QVariant &value, int role)
{ {
qDebug() << Q_FUNC_INFO << column << value; qDebug() << Q_FUNC_INFO << column << value;
@ -199,10 +223,10 @@ bool TorrentModelItem::setData(int column, const QVariant &value, int role)
QVariant TorrentModelItem::data(int column, int role) const QVariant TorrentModelItem::data(int column, int role) const
{ {
if (role == Qt::DecorationRole && column == TR_NAME) { if (role == Qt::DecorationRole && column == TR_NAME) {
return m_icon; return getIconByState(state());
} }
if (role == Qt::ForegroundRole) { if (role == Qt::ForegroundRole) {
return m_fgColor; return getColorByState(state());
} }
if (role != Qt::DisplayRole && role != Qt::UserRole) return QVariant(); if (role != Qt::DisplayRole && role != Qt::UserRole) return QVariant();
switch(column) { switch(column) {
@ -480,7 +504,7 @@ TorrentStatusReport TorrentModel::getTorrentStatusReport() const
QList<TorrentModelItem*>::const_iterator it = m_torrents.constBegin(); QList<TorrentModelItem*>::const_iterator it = m_torrents.constBegin();
QList<TorrentModelItem*>::const_iterator itend = m_torrents.constEnd(); QList<TorrentModelItem*>::const_iterator itend = m_torrents.constEnd();
for ( ; it != itend; ++it) { for ( ; it != itend; ++it) {
switch((*it)->data(TorrentModelItem::TR_STATUS).toInt()) { switch((*it)->state()) {
case TorrentModelItem::STATE_DOWNLOADING: case TorrentModelItem::STATE_DOWNLOADING:
++report.nb_active; ++report.nb_active;
++report.nb_downloading; ++report.nb_downloading;

6
src/qtlibtorrent/torrentmodel.h

@ -58,12 +58,14 @@ public:
QVariant data(int column, int role = Qt::DisplayRole) const; QVariant data(int column, int role = Qt::DisplayRole) const;
bool setData(int column, const QVariant &value, int role = Qt::DisplayRole); bool setData(int column, const QVariant &value, int role = Qt::DisplayRole);
inline QString hash() const { return m_hash; } inline QString hash() const { return m_hash; }
State state() const;
signals: signals:
void labelChanged(QString previous, QString current); void labelChanged(QString previous, QString current);
private: private:
State state() const; static QIcon getIconByState(State state);
static QColor getColorByState(State state);
private: private:
QTorrentHandle m_torrent; QTorrentHandle m_torrent;
@ -71,8 +73,6 @@ private:
QDateTime m_addedTime; QDateTime m_addedTime;
QString m_label; QString m_label;
QString m_name; QString m_name;
mutable QIcon m_icon;
mutable QColor m_fgColor;
QString m_hash; // Cached for safety reasons QString m_hash; // Cached for safety reasons
}; };

Loading…
Cancel
Save