mirror of
https://github.com/qbittorrent/qBittorrent
synced 2025-07-16 02:03:07 -07:00
Merge pull request #2080 from sorokin/cleanup-torrent-model
Cleanup torrent model item
This commit is contained in:
commit
cfa28ec68c
2 changed files with 77 additions and 53 deletions
|
@ -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;
|
||||||
|
|
|
@ -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…
Add table
Add a link
Reference in a new issue