Esempio n. 1
0
	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();
}
Esempio n. 4
0
	void TransferApi::on(ConnectionManagerListener::UserUpdated, const ConnectionQueueItem* aCqi) noexcept {
		auto t = getTransfer(aCqi->getToken());
		if (!t) {
			return;
		}

		view.onItemUpdated(t, { TransferUtils::PROP_USER });
	}
Esempio n. 5
0
	void TransferApi::on(ConnectionManagerListener::Connecting, const ConnectionQueueItem* aCqi) noexcept {
		auto t = getTransfer(aCqi->getToken());
		if (!t) {
			return;
		}

		updateQueueInfo(t);
	}
Esempio n. 6
0
	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);
	}
Esempio n. 7
0
	api_return TransferApi::handleForce(ApiRequest& aRequest) {
		auto item = getTransfer(aRequest);
		if (item->isDownload()) {
			ConnectionManager::getInstance()->force(item->getStringToken());
		}

		return websocketpp::http::status_code::ok;
	}
Esempio n. 8
0
	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();
	}
}
Esempio n. 13
0
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));
	}
}
Esempio n. 14
0
void TransfersContentsWidget::redownloadTransfer()
{
	TransferInformation *transfer = getTransfer(m_ui->transfersView->selectionModel()->hasSelection() ? m_ui->transfersView->selectionModel()->currentIndex() : QModelIndex());

	if (transfer)
	{
		TransfersManager::restartTransfer(transfer);
	}
}
Esempio n. 15
0
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());
	}
}
Esempio n. 16
0
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);
	}
}
Esempio n. 17
0
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);
	}
}
Esempio n. 18
0
	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);
	}
Esempio n. 19
0
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);
	}
}
Esempio n. 21
0
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();
	}
}
Esempio n. 22
0
	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();
	}
}
Esempio n. 24
0
	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()));
	}
Esempio n. 26
0
	api_return TransferApi::handleDisconnect(ApiRequest& aRequest) {
		auto item = getTransfer(aRequest);
		ConnectionManager::getInstance()->disconnect(item->getStringToken());

		return websocketpp::http::status_code::ok;
	}