void TransferListView::update(const NTransfer& transfer) { TransferListItem* file = findTransfer(transfer.user, transfer.filename); if (!file ) { file = new TransferListItem(findParent(transfer.user), transfer.user, transfer.filename); museeq->flush(); // Needed to avoid transfers being added times when update() is called twice. } file->update(transfer); }
void TransfersContentsWidget::removeTransfer(Transfer *transfer) { const int row = findTransfer(transfer); if (row >= 0) { m_model->removeRow(row); } m_speeds.remove(transfer); }
void DownloadManager::authenticationRequired(QNetworkReply *reply, QAuthenticator *auth) { qDebug() << "authenticationRequired" << reply; TransferItem *transfer = findTransfer(reply); //provide the credentials exactly once, so that it fails if credentials are incorrect. if ((transfer && !transfer->user.isEmpty()) || !transfer->password.isEmpty()) { auth->setUser(transfer->user); auth->setPassword(transfer->password); transfer->user.clear(); transfer->password.clear(); } }
void TransferListView::remove(const QString& _u, const QString& _p) { TransferListItem* item = findTransfer(_u, _p); if (! item ) return; if(item->user() == _u && (mGroupMode != None || item->path() == _p)) { if(mGroupMode == None) { museeq->output("delete item"); delete item; } else { delete item; TransferListItem* parent = findParent(_u); if(parent->childCount() == 0) delete parent; else parent->updateStats(); } return; } }
void TransfersContentsWidget::updateTransfer(Transfer *transfer) { const int row = findTransfer(transfer); if (row < 0) { return; } QString remainingTime; if (transfer->getState() == Transfer::RunningState) { if (!m_speeds.contains(transfer)) { m_speeds[transfer] = QQueue<qint64>(); } m_speeds[transfer].enqueue(transfer->getSpeed()); if (m_speeds[transfer].count() > 10) { m_speeds[transfer].dequeue(); } if (transfer->getBytesTotal() > 0) { qint64 speedSum = 0; const QList<qint64> speeds = m_speeds[transfer]; for (int i = 0; i < speeds.count(); ++i) { speedSum += speeds.at(i); } speedSum /= (speeds.count()); remainingTime = Utils::formatTime(qreal(transfer->getBytesTotal() - transfer->getBytesReceived()) / speedSum); } } else { m_speeds.remove(transfer); } QIcon icon; switch (transfer->getState()) { case Transfer::RunningState: icon = Utils::getIcon(QLatin1String("task-ongoing")); break; case Transfer::FinishedState: icon = Utils::getIcon(QLatin1String("task-complete")); break; default: icon = Utils::getIcon(QLatin1String("task-reject")); break; } m_model->item(row, 0)->setIcon(icon); m_model->item(row, 1)->setText(QFileInfo(transfer->getTarget()).fileName()); m_model->item(row, 2)->setText(Utils::formatUnit(transfer->getBytesTotal(), false, 1)); m_model->item(row, 3)->setText((transfer->getBytesTotal() > 0) ? QString::number(qFloor((static_cast<qreal>(transfer->getBytesReceived()) / transfer->getBytesTotal()) * 100), 'f', 0) : QString()); m_model->item(row, 4)->setText(remainingTime); m_model->item(row, 5)->setText((transfer->getState() == Transfer::RunningState) ? Utils::formatUnit(transfer->getSpeed(), true, 1) : QString()); m_model->item(row, 6)->setText(transfer->getTimeStarted().toString(QLatin1String("yyyy-MM-dd HH:mm:ss"))); m_model->item(row, 7)->setText(transfer->getTimeFinished().toString(QLatin1String("yyyy-MM-dd HH:mm:ss"))); const QString tooltip = tr("<div style=\"white-space:pre;\">Source: %1\nTarget: %2\nSize: %3\nDownloaded: %4\nProgress: %5</div>").arg(transfer->getSource().toString().toHtmlEscaped()).arg(transfer->getTarget().toHtmlEscaped()).arg(Utils::formatUnit(transfer->getBytesTotal(), false, 1, true)).arg(Utils::formatUnit(transfer->getBytesReceived(), false, 1, true)).arg(QStringLiteral("%1%").arg(((transfer->getBytesTotal() > 0) ? ((static_cast<qreal>(transfer->getBytesReceived()) / transfer->getBytesTotal()) * 100) : 0.0), 0, 'f', 1)); for (int i = 0; i < m_model->columnCount(); ++i) { m_model->item(row, i)->setToolTip(tooltip); } if (m_ui->transfersViewWidget->selectionModel()->hasSelection()) { updateActions(); } const bool isRunning = (transfer && transfer->getState() == Transfer::RunningState); if (isRunning != m_isLoading) { if (isRunning) { m_isLoading = true; emit loadingChanged(true); } else { const QList<Transfer*> transfers = TransfersManager::getTransfers(); bool hasRunning = false; for (int i = 0; i < transfers.count(); ++i) { if (transfers.at(i) && transfers.at(i)->getState() == Transfer::RunningState) { hasRunning = true; break; } } if (!hasRunning) { m_isLoading = false; emit loadingChanged(false); } } } }
void TransfersContentsWidget::updateTransfer(TransferInformation *transfer) { const int row = findTransfer(transfer); if (row < 0) { return; } QString remainingTime; if (transfer->state == RunningTransfer) { if (!m_speeds.contains(transfer)) { m_speeds[transfer] = QQueue<qint64>(); } m_speeds[transfer].enqueue(transfer->speed); if (m_speeds[transfer].count() > 10) { m_speeds[transfer].dequeue(); } if (transfer->bytesTotal > 0) { qint64 speedSum = 0; const QList<qint64> speeds = m_speeds[transfer]; for (int i = 0; i < speeds.count(); ++i) { speedSum += speeds.at(i); } speedSum /= (speeds.count()); remainingTime = Utils::formatTime(qreal(transfer->bytesTotal - transfer->bytesReceived) / speedSum); } } else { m_speeds.remove(transfer); } QIcon icon; switch (transfer->state) { case RunningTransfer: icon = Utils::getIcon(QLatin1String("task-ongoing")); break; case FinishedTransfer: icon = Utils::getIcon(QLatin1String("task-complete")); break; case ErrorTransfer: icon = Utils::getIcon(QLatin1String("task-reject")); break; default: break; } m_model->item(row, 0)->setIcon(icon); m_model->item(row, 2)->setText(Utils::formatUnit(transfer->bytesTotal, false, 1)); m_model->item(row, 3)->setText((transfer->bytesTotal > 0) ? QString::number(qFloor(((qreal) transfer->bytesReceived / transfer->bytesTotal) * 100), 'f', 0) : QString()); m_model->item(row, 4)->setText(remainingTime); m_model->item(row, 5)->setText((transfer->state == RunningTransfer) ? Utils::formatUnit(transfer->speed, true, 1) : QString()); m_model->item(row, 6)->setText(transfer->started.toString(QLatin1String("yyyy-MM-dd HH:mm:ss"))); m_model->item(row, 7)->setText(transfer->finished.toString(QLatin1String("yyyy-MM-dd HH:mm:ss"))); const QString tooltip = tr("<pre style='font-family:auto;'>Source: %1\nTarget: %2\nSize: %3\nDownloaded: %4\nProgress: %5</pre>").arg(transfer->source.toHtmlEscaped()).arg(transfer->target.toHtmlEscaped()).arg((transfer->bytesTotal > 0) ? tr("%1 (%n B)", "", transfer->bytesTotal).arg(Utils::formatUnit(transfer->bytesTotal)) : QString('?')).arg(tr("%1 (%n B)", "", transfer->bytesReceived).arg(Utils::formatUnit(transfer->bytesReceived))).arg(QString("%1%").arg(((transfer->bytesTotal > 0) ? (((qreal) transfer->bytesReceived / transfer->bytesTotal) * 100) : 0.0), 0, 'f', 1)); for (int i = 0; i < m_model->columnCount(); ++i) { m_model->item(row, i)->setToolTip(tooltip); } if (m_ui->transfersView->selectionModel()->hasSelection()) { updateActions(); } const bool isRunning = (transfer && transfer->state == RunningTransfer); if (isRunning != m_isLoading) { if (isRunning) { m_isLoading = true; emit loadingChanged(true); } else { const QList<TransferInformation*> transfers = TransfersManager::getTransfers(); bool hasRunning = false; for (int i = 0; i < transfers.count(); ++i) { if (transfers.at(i) && transfers.at(i)->state == RunningTransfer) { hasRunning = true; break; } } if (!hasRunning) { m_isLoading = false; emit loadingChanged(false); } } } }