void TransferApi::starting(const Download* aDownload, const string& aStatus, bool aFullUpdate) noexcept { auto t = getTransfer(aDownload->getToken()); if (!t) { return; } t->setStatusString(aStatus); if (aFullUpdate) { starting(t, aDownload); } else { // All flags weren't known when requesting OrderedStringSet flags; aDownload->appendFlags(flags); t->setFlags(flags); // Size was unknown for filelists when requesting t->setSize(aDownload->getSegmentSize()); view.onItemUpdated(t, { TransferUtils::PROP_STATUS, TransferUtils::PROP_FLAGS, TransferUtils::PROP_SIZE }); } }
void TransfersContentsWidget::showContextMenu(const QPoint &point) { TransferInformation *transfer = getTransfer(m_ui->transfersView->indexAt(point)); QMenu menu(this); if (transfer) { menu.addAction(tr("Open"), this, SLOT(openTransfer())); menu.addAction(tr("Open Folder"), this, SLOT(openTransferFolder())); menu.addSeparator(); menu.addAction(((transfer->state == ErrorTransfer) ? tr("Resume") : tr("Stop")), this, SLOT(stopResumeTransfer()))->setEnabled(transfer->state == RunningTransfer || transfer->state == ErrorTransfer); menu.addAction("Redownload", this, SLOT(redownloadTransfer())); menu.addSeparator(); menu.addAction(tr("Copy Transfer Information"), this, SLOT(copyTransferInformation())); menu.addSeparator(); menu.addAction(tr("Remove"), this, SLOT(removeTransfer())); } const QList<TransferInformation*> transfers = TransfersManager::getTransfers(); int finishedTransfers = 0; for (int i = 0; i < transfers.count(); ++i) { if (transfers.at(i)->state == FinishedTransfer) { ++finishedTransfers; } } menu.addAction(tr("Clear Finished Transfers"), this, SLOT(clearFinishedTransfers()))->setEnabled(finishedTransfers > 0); menu.exec(m_ui->transfersView->mapToGlobal(point)); }
void TransfersContentsWidget::updateActions() { TransferInformation *transfer = getTransfer(m_ui->transfersView->selectionModel()->hasSelection() ? m_ui->transfersView->selectionModel()->currentIndex() : QModelIndex()); m_ui->stopResumeButton->setEnabled(transfer && (transfer->state == RunningTransfer || transfer->state == ErrorTransfer)); m_ui->stopResumeButton->setText((transfer && transfer->state == ErrorTransfer) ? tr("Resume") : tr("Stop")); m_ui->redownloadButton->setEnabled(transfer); getAction(CopyAction)->setEnabled(transfer); getAction(DeleteAction)->setEnabled(transfer); if (transfer) { m_ui->sourceLabelWidget->setText(transfer->source.toHtmlEscaped()); m_ui->targetLabelWidget->setText(transfer->target.toHtmlEscaped()); m_ui->sizeLabelWidget->setText((transfer->bytesTotal > 0) ? tr("%1 (%n B)", "", transfer->bytesTotal).arg(Utils::formatUnit(transfer->bytesTotal)) : QString('?')); m_ui->downloadedLabelWidget->setText(tr("%1 (%n B)", "", transfer->bytesReceived).arg(Utils::formatUnit(transfer->bytesReceived))); m_ui->progressLabelWidget->setText(QString("%1%").arg(((transfer->bytesTotal > 0) ? (((qreal) transfer->bytesReceived / transfer->bytesTotal) * 100) : 0.0), 0, 'f', 1)); } else { m_ui->sourceLabelWidget->clear(); m_ui->targetLabelWidget->clear(); m_ui->sizeLabelWidget->clear(); m_ui->downloadedLabelWidget->clear(); m_ui->progressLabelWidget->clear(); } emit actionsChanged(); }
void TransferApi::on(ConnectionManagerListener::UserUpdated, const ConnectionQueueItem* aCqi) noexcept { auto t = getTransfer(aCqi->getToken()); if (!t) { return; } view.onItemUpdated(t, { TransferUtils::PROP_USER }); }
void TransferApi::on(ConnectionManagerListener::Connecting, const ConnectionQueueItem* aCqi) noexcept { auto t = getTransfer(aCqi->getToken()); if (!t) { return; } updateQueueInfo(t); }
void TransferApi::on(ConnectionManagerListener::Failed, const ConnectionQueueItem* aCqi, const string& aReason) noexcept { auto t = getTransfer(aCqi->getToken()); if (!t) { return; } onFailed(t, aCqi->getUser().user->isSet(User::OLD_CLIENT) ? STRING(SOURCE_TOO_OLD) : aReason); }
api_return TransferApi::handleForce(ApiRequest& aRequest) { auto item = getTransfer(aRequest); if (item->isDownload()) { ConnectionManager::getInstance()->force(item->getStringToken()); } return websocketpp::http::status_code::ok; }
void TransferApi::on(UploadManagerListener::Starting, const Upload* aUpload) noexcept { auto t = getTransfer(aUpload->getToken()); if (!t) { return; } starting(t, aUpload); }
void TransfersContentsWidget::openTransfer(QAction *action) { Transfer *transfer = getTransfer(m_ui->transfersViewWidget->currentIndex()); if (transfer && action && !action->data().isNull()) { Utils::runApplication(action->data().toString(), QUrl::fromLocalFile(transfer->getTarget())); } }
void TransfersContentsWidget::openTransferFolder(const QModelIndex &index) { Transfer *transfer = getTransfer(index.isValid() ? index : m_ui->transfersViewWidget->currentIndex()); if (transfer) { Utils::runApplication(QString(), QUrl::fromLocalFile(QFileInfo(transfer->getTarget()).dir().canonicalPath())); } }
void TransfersContentsWidget::redownloadTransfer() { Transfer *transfer = getTransfer(m_ui->transfersViewWidget->selectionModel()->hasSelection() ? m_ui->transfersViewWidget->selectionModel()->currentIndex() : QModelIndex()); if (transfer) { transfer->restart(); } }
void TransfersContentsWidget::openTransfer(const QModelIndex &index) { Transfer *transfer = getTransfer(index.isValid() ? index : m_ui->transfersViewWidget->currentIndex()); if (transfer) { transfer->openTarget(); } }
void TransfersContentsWidget::openTransferFolder(const QModelIndex &index) { TransferInformation *transfer = getTransfer(index.isValid() ? index : m_ui->transfersView->currentIndex()); if (transfer) { QDesktopServices::openUrl(QUrl(QFileInfo(transfer->target).dir().canonicalPath(), QUrl::TolerantMode)); } }
void TransfersContentsWidget::redownloadTransfer() { TransferInformation *transfer = getTransfer(m_ui->transfersView->selectionModel()->hasSelection() ? m_ui->transfersView->selectionModel()->currentIndex() : QModelIndex()); if (transfer) { TransfersManager::restartTransfer(transfer); } }
void TransfersContentsWidget::openTransferFolder(const QModelIndex &index) { TransferInformation *transfer = getTransfer(index.isValid() ? index : m_ui->transfersView->currentIndex()); if (transfer) { Utils::runApplication(QString(), QFileInfo(transfer->target).dir().canonicalPath()); } }
void TransfersContentsWidget::openTransfer(QAction *action) { TransferInformation *transfer = getTransfer(m_ui->transfersView->currentIndex()); if (transfer && action && !action->data().isNull()) { Utils::runApplication(action->data().toString(), transfer->target); } }
void TransfersContentsWidget::removeTransfer() { TransferInformation *transfer = getTransfer(m_ui->transfersView->currentIndex()); if (transfer) { if (transfer->state == RunningTransfer && QMessageBox::warning(this, tr("Warning"), tr("This transfer is still running.\nDo you really want to remove it?"), (QMessageBox::Yes | QMessageBox::Cancel)) == QMessageBox::Cancel) { return; } TransfersManager::removeTransfer(transfer); } }
void TransferApi::on(DownloadManagerListener::Failed, const Download* aDownload, const string& aReason) noexcept { auto t = getTransfer(aDownload->getToken()); if (!t) { return; } auto status = aReason; if (aDownload->isSet(Download::FLAG_SLOWUSER)) { status += ": " + STRING(SLOW_USER); } else if (aDownload->getOverlapped() && !aDownload->isSet(Download::FLAG_OVERLAP)) { status += ": " + STRING(OVERLAPPED_SLOW_SEGMENT); } onFailed(t, status); }
void QED2KSession::deleteTransfer(const QString& hash, bool delete_files) { const QED2KHandle t = getTransfer(hash); if (!t.is_valid()) return; QFileInfo info(t.filepath()); QString metaFilepath = QDir(misc::metadataDirectory(info.absolutePath())).absoluteFilePath(t.filename()); qDebug() << "metadata file " << metaFilepath; if (QFile::remove(metaFilepath)) { qDebug() << "fast resume data for " << hash << " erased "; } m_session->remove_transfer( t.delegate(), delete_files ? libed2k::session::delete_files : libed2k::session::none); }
void TransfersContentsWidget::removeTransfer() { Transfer *transfer = getTransfer(m_ui->transfersViewWidget->currentIndex()); if (transfer) { if (transfer->getState() == Transfer::RunningState && QMessageBox::warning(this, tr("Warning"), tr("This transfer is still running.\nDo you really want to remove it?"), (QMessageBox::Yes | QMessageBox::Cancel)) == QMessageBox::Cancel) { return; } m_speeds.remove(transfer); m_model->removeRow(m_ui->transfersViewWidget->currentIndex().row()); TransfersManager::removeTransfer(transfer); } }
void TransfersContentsWidget::stopResumeTransfer() { TransferInformation *transfer = getTransfer(m_ui->transfersView->selectionModel()->hasSelection() ? m_ui->transfersView->selectionModel()->currentIndex() : QModelIndex()); if (transfer) { if (transfer->state == RunningTransfer) { TransfersManager::stopTransfer(transfer); } else if (transfer->state == ErrorTransfer) { TransfersManager::resumeTransfer(transfer); } updateActions(); } }
void TransferApi::onTransferCompleted(const Transfer* aTransfer, bool aIsDownload) noexcept { auto t = getTransfer(aTransfer->getToken()); if (!t) { return; } t->setStatusString("Finished, idle..."); t->setSpeed(-1); t->setTimeLeft(-1); t->setBytesTransferred(aTransfer->getSegmentSize()); t->setState(TransferInfo::STATE_FINISHED); view.onItemUpdated(t, { TransferUtils::PROP_STATUS, TransferUtils::PROP_SPEED, TransferUtils::PROP_SECONDS_LEFT, TransferUtils::PROP_TIME_STARTED, TransferUtils::PROP_BYTES_TRANSFERRED }); }
void TransfersContentsWidget::stopResumeTransfer() { Transfer *transfer = getTransfer(m_ui->transfersViewWidget->selectionModel()->hasSelection() ? m_ui->transfersViewWidget->selectionModel()->currentIndex() : QModelIndex()); if (transfer) { if (transfer->getState() == Transfer::RunningState) { transfer->stop(); } else if (transfer->getState() == Transfer::ErrorState) { transfer->resume(); } updateActions(); } }
void TransferApi::onTick(const Transfer* aTransfer, bool aIsDownload) noexcept { auto t = getTransfer(aTransfer->getToken()); if (!t) { return; } t->setSpeed(aTransfer->getAverageSpeed()); t->setBytesTransferred(aTransfer->getPos()); t->setTimeLeft(aTransfer->getSecondsLeft()); uint64_t timeSinceStarted = GET_TICK() - t->getStarted(); if (timeSinceStarted < 1000) { t->setStatusString("Starting..."); } else { t->setStatusString(STRING_F(RUNNING_PCT, t->getPercentage())); } view.onItemUpdated(t, { TransferUtils::PROP_STATUS, TransferUtils::PROP_BYTES_TRANSFERRED, TransferUtils::PROP_SPEED, TransferUtils::PROP_SECONDS_LEFT }); }
void TransfersContentsWidget::showContextMenu(const QPoint &point) { Transfer *transfer = getTransfer(m_ui->transfersViewWidget->indexAt(point)); QMenu menu(this); if (transfer) { menu.addAction(tr("Open"), this, SLOT(openTransfer())); const QList<ApplicationInformation> applications = Utils::getApplicationsForMimeType(transfer->getMimeType()); if (applications.count() > 1) { QMenu *applicationsMenu = menu.addMenu(tr("Open With")); for (int i = 0; i < applications.count(); ++i) { applicationsMenu->addAction(applications.at(i).icon, ((applications.at(i).name.isEmpty()) ? tr("Unknown") : applications.at(i).name))->setData(applications.at(i).command); if (i == 0) { applicationsMenu->addSeparator(); } } connect(applicationsMenu, SIGNAL(triggered(QAction*)), this, SLOT(openTransfer(QAction*))); } menu.addAction(tr("Open Folder"), this, SLOT(openTransferFolder())); menu.addSeparator(); menu.addAction(((transfer->getState() == Transfer::ErrorState) ? tr("Resume") : tr("Stop")), this, SLOT(stopResumeTransfer()))->setEnabled(transfer->getState() == Transfer::RunningState || transfer->getState() == Transfer::ErrorState); menu.addAction(tr("Redownload"), this, SLOT(redownloadTransfer())); menu.addSeparator(); menu.addAction(tr("Copy Transfer Information"), this, SLOT(copyTransferInformation())); menu.addSeparator(); menu.addAction(tr("Remove"), this, SLOT(removeTransfer())); }
api_return TransferApi::handleDisconnect(ApiRequest& aRequest) { auto item = getTransfer(aRequest); ConnectionManager::getInstance()->disconnect(item->getStringToken()); return websocketpp::http::status_code::ok; }