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"