Add the Popularity metric

PR #20180.
This commit is contained in:
Aliaksei Urbanski
2024-04-01 21:23:08 +03:00
committed by GitHub
parent 8e6515be2c
commit f37d0c486c
15 changed files with 93 additions and 0 deletions

View File

@@ -220,6 +220,7 @@ void PropertiesWidget::clear()
m_ui->labelConnectionsVal->clear();
m_ui->labelReannounceInVal->clear();
m_ui->labelShareRatioVal->clear();
m_ui->labelPopularityVal->clear();
m_ui->listWebSeeds->clear();
m_ui->labelETAVal->clear();
m_ui->labelSeedsVal->clear();
@@ -407,6 +408,9 @@ void PropertiesWidget::loadDynamicData()
const qreal ratio = m_torrent->realRatio();
m_ui->labelShareRatioVal->setText(ratio > BitTorrent::Torrent::MAX_RATIO ? C_INFINITY : Utils::String::fromDouble(ratio, 2));
const qreal popularity = m_torrent->popularity();
m_ui->labelPopularityVal->setText(popularity > BitTorrent::Torrent::MAX_RATIO ? C_INFINITY : Utils::String::fromDouble(popularity, 2));
m_ui->labelSeedsVal->setText(tr("%1 (%2 total)", "%1 and %2 are numbers, e.g. 3 (10 total)")
.arg(QString::number(m_torrent->seedsCount())
, QString::number(m_torrent->totalSeedsCount())));

View File

@@ -295,6 +295,25 @@
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QLabel" name="labelPopularity">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="toolTip">
<string>Ratio / Time Active (in months), indicates how popular the torrent is</string>
</property>
<property name="text">
<string>Popularity:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="0" column="5">
<widget class="QLabel" name="labelConnectionsVal">
<property name="sizePolicy">
@@ -495,6 +514,22 @@
</property>
</widget>
</item>
<item row="5" column="1">
<widget class="QLabel" name="labelPopularityVal">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="toolTip">
<string>Ratio / Time Active (in months), indicates how popular the torrent is</string>
</property>
<property name="textFormat">
<enum>Qt::PlainText</enum>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QLabel" name="labelUploaded">
<property name="sizePolicy">

View File

@@ -167,6 +167,7 @@ QVariant TransferListModel::headerData(const int section, const Qt::Orientation
case TR_DLSPEED: return tr("Down Speed", "i.e: Download speed");
case TR_UPSPEED: return tr("Up Speed", "i.e: Upload speed");
case TR_RATIO: return tr("Ratio", "Share ratio");
case TR_POPULARITY: return tr("Popularity");
case TR_ETA: return tr("ETA", "i.e: Estimated Time of Arrival / Time left");
case TR_CATEGORY: return tr("Category");
case TR_TAGS: return tr("Tags");
@@ -195,6 +196,14 @@ QVariant TransferListModel::headerData(const int section, const Qt::Orientation
default: return {};
}
}
else if (role == Qt::ToolTipRole)
{
switch (section)
{
case TR_POPULARITY: return tr("Ratio / Time Active (in months), indicates how popular the torrent is");
default: return {};
}
}
else if (role == Qt::TextAlignmentRole)
{
switch (section)
@@ -216,6 +225,7 @@ QVariant TransferListModel::headerData(const int section, const Qt::Orientation
case TR_DLLIMIT:
case TR_RATIO_LIMIT:
case TR_RATIO:
case TR_POPULARITY:
case TR_QUEUE_POSITION:
case TR_LAST_ACTIVITY:
case TR_AVAILABILITY:
@@ -373,6 +383,8 @@ QString TransferListModel::displayValue(const BitTorrent::Torrent *torrent, cons
return ratioString(torrent->realRatio());
case TR_RATIO_LIMIT:
return ratioString(torrent->maxRatio());
case TR_POPULARITY:
return ratioString(torrent->popularity());
case TR_CATEGORY:
return torrent->category();
case TR_TAGS:
@@ -450,6 +462,8 @@ QVariant TransferListModel::internalValue(const BitTorrent::Torrent *torrent, co
return torrent->eta();
case TR_RATIO:
return torrent->realRatio();
case TR_POPULARITY:
return torrent->popularity();
case TR_CATEGORY:
return torrent->category();
case TR_TAGS:
@@ -559,6 +573,7 @@ QVariant TransferListModel::data(const QModelIndex &index, const int role) const
case TR_DLLIMIT:
case TR_RATIO_LIMIT:
case TR_RATIO:
case TR_POPULARITY:
case TR_QUEUE_POSITION:
case TR_LAST_ACTIVITY:
case TR_AVAILABILITY:

View File

@@ -62,6 +62,7 @@ public:
TR_UPSPEED,
TR_ETA,
TR_RATIO,
TR_POPULARITY,
TR_CATEGORY,
TR_TAGS,
TR_ADD_DATE,

View File

@@ -196,6 +196,7 @@ int TransferListSortModel::compare(const QModelIndex &left, const QModelIndex &r
case TransferListModel::TR_PROGRESS:
case TransferListModel::TR_RATIO:
case TransferListModel::TR_RATIO_LIMIT:
case TransferListModel::TR_POPULARITY:
return customCompare(leftValue.toReal(), rightValue.toReal());
case TransferListModel::TR_STATUS:

View File

@@ -178,6 +178,7 @@ TransferListWidget::TransferListWidget(QWidget *parent, MainWindow *mainWindow)
setColumnHidden(TransferListModel::TR_INFOHASH_V2, true);
setColumnHidden(TransferListModel::TR_COMPLETED, true);
setColumnHidden(TransferListModel::TR_RATIO_LIMIT, true);
setColumnHidden(TransferListModel::TR_POPULARITY, true);
setColumnHidden(TransferListModel::TR_SEEN_COMPLETE_DATE, true);
setColumnHidden(TransferListModel::TR_LAST_ACTIVITY, true);
setColumnHidden(TransferListModel::TR_TOTAL_SIZE, true);
@@ -696,6 +697,7 @@ void TransferListWidget::displayColumnHeaderMenu()
continue;
const auto columnName = m_listModel->headerData(i, Qt::Horizontal, Qt::DisplayRole).toString();
const QVariant columnToolTip = m_listModel->headerData(i, Qt::Horizontal, Qt::ToolTipRole);
QAction *action = menu->addAction(columnName, this, [this, i](const bool checked)
{
if (!checked && (visibleColumnsCount() <= 1))
@@ -710,6 +712,8 @@ void TransferListWidget::displayColumnHeaderMenu()
});
action->setCheckable(true);
action->setChecked(!isColumnHidden(i));
if (!columnToolTip.isNull())
action->setToolTip(columnToolTip.toString());
}
menu->addSeparator();