File indexing completed on 2024-05-05 17:33:23
0001 /* 0002 * SPDX-FileCopyrightText: 2012 Jonathan Thomas <echidnaman@kubuntu.org 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0005 */ 0006 0007 #include "Transaction.h" 0008 0009 #include "TransactionModel.h" 0010 #include "libdiscover_debug.h" 0011 #include <KFormat> 0012 #include <KLocalizedString> 0013 #include <resources/AbstractResource.h> 0014 0015 Transaction::Transaction(QObject *parent, AbstractResource *resource, Role role, const AddonList &addons) 0016 : QObject(parent) 0017 , m_resource(resource) 0018 , m_role(role) 0019 , m_status(CommittingStatus) 0020 , m_addons(addons) 0021 , m_isCancellable(true) 0022 , m_progress(0) 0023 { 0024 } 0025 0026 Transaction::~Transaction() 0027 { 0028 if (status() < DoneStatus || TransactionModel::global()->contains(this)) { 0029 qCWarning(LIBDISCOVER_LOG) << "destroying Transaction before it's over" << this; 0030 TransactionModel::global()->removeTransaction(this); 0031 } 0032 } 0033 0034 AbstractResource *Transaction::resource() const 0035 { 0036 return m_resource; 0037 } 0038 0039 Transaction::Role Transaction::role() const 0040 { 0041 return m_role; 0042 } 0043 0044 Transaction::Status Transaction::status() const 0045 { 0046 return m_status; 0047 } 0048 0049 AddonList Transaction::addons() const 0050 { 0051 return m_addons; 0052 } 0053 0054 bool Transaction::isCancellable() const 0055 { 0056 return m_isCancellable; 0057 } 0058 0059 int Transaction::progress() const 0060 { 0061 return m_progress; 0062 } 0063 0064 void Transaction::setStatus(Status status) 0065 { 0066 if (m_status != status) { 0067 m_status = status; 0068 Q_EMIT statusChanged(m_status); 0069 0070 if (m_status == DoneStatus || m_status == CancelledStatus || m_status == DoneWithErrorStatus) { 0071 setCancellable(false); 0072 0073 TransactionModel::global()->removeTransaction(this); 0074 } 0075 } 0076 } 0077 0078 void Transaction::setCancellable(bool isCancellable) 0079 { 0080 if (m_isCancellable != isCancellable) { 0081 m_isCancellable = isCancellable; 0082 Q_EMIT cancellableChanged(m_isCancellable); 0083 } 0084 } 0085 0086 void Transaction::setProgress(int progress) 0087 { 0088 if (m_progress != progress) { 0089 Q_ASSERT(qBound(0, progress, 100) == progress); 0090 m_progress = qBound(0, progress, 100); 0091 Q_EMIT progressChanged(m_progress); 0092 } 0093 } 0094 0095 bool Transaction::isActive() const 0096 { 0097 return m_status == DownloadingStatus || m_status == CommittingStatus; 0098 } 0099 0100 QString Transaction::name() const 0101 { 0102 return m_resource->name(); 0103 } 0104 0105 QVariant Transaction::icon() const 0106 { 0107 return m_resource->icon(); 0108 } 0109 0110 bool Transaction::isVisible() const 0111 { 0112 return m_visible; 0113 } 0114 0115 void Transaction::setVisible(bool visible) 0116 { 0117 if (m_visible != visible) { 0118 m_visible = visible; 0119 Q_EMIT visibleChanged(visible); 0120 } 0121 } 0122 0123 void Transaction::setDownloadSpeed(quint64 downloadSpeed) 0124 { 0125 if (downloadSpeed != m_downloadSpeed) { 0126 m_downloadSpeed = downloadSpeed; 0127 Q_EMIT downloadSpeedChanged(downloadSpeed); 0128 } 0129 } 0130 0131 QString Transaction::downloadSpeedString() const 0132 { 0133 return i18nc("@label Download rate", "%1/s", KFormat().formatByteSize(downloadSpeed())); 0134 } 0135 0136 void Transaction::setRemainingTime(uint remainingTime) 0137 { 0138 if (remainingTime != m_remainingTime) { 0139 m_remainingTime = remainingTime; 0140 Q_EMIT remainingTimeChanged(remainingTime); 0141 } 0142 } 0143 0144 QString Transaction::remainingTimeString() const 0145 { 0146 return KFormat().formatSpelloutDuration(m_remainingTime * 1000); 0147 } 0148 0149 #include "moc_Transaction.cpp"