コード例 #1
0
ファイル: pendingupload.cpp プロジェクト: MellonQ/leechcraft
	void PendingUpload::handleUploadFinished ()
	{
		const auto reply = qobject_cast<QNetworkReply*> (sender ());
		if (reply->error () != QNetworkReply::NoError)
		{
			qWarning () << Q_FUNC_INFO
					<< reply->error ()
					<< reply->errorString ();

			emit errorAppeared (TEProtocolError,
					tr ("Unable to upload document, network error %1.")
						.arg (reply->errorString ()));
			emit stateChanged (TSFinished);
			return;
		}

		const auto& json = Util::ParseJson (reply, Q_FUNC_INFO);
		const auto& replyMap = json.toMap ();

		Acc_->GetLogger () << "got upload result:" << json;

		if (replyMap.contains ("error"))
		{
			emit errorAppeared (TEProtocolError,
					tr ("Unable to upload document, server error: %1.")
						.arg (replyMap ["error"].toString ()));
			emit stateChanged (TSFinished);
			return;
		}

		const auto& str = replyMap ["file"].toString ();
		const auto nam = Acc_->GetCoreProxy ()->GetNetworkAccessManager ();
		Conn_->QueueRequest ([this, nam, str] (const QString& key, const VkConnection::UrlParams_t& params)
			{
				QUrl url ("https://api.vk.com/method/docs.save");
				Util::UrlOperator { url }
						("access_token", key)
						("file", str);

				VkConnection::AddParams (url, params);

				auto reply = nam->get (QNetworkRequest (url));
				new Util::SlotClosure<Util::DeleteLaterPolicy>
				{
					[this, reply]
					{
						HandleSaved (reply);
						reply->deleteLater ();
					},
					reply,
					SIGNAL (finished ()),
					this
				};
				return reply;
			});
	}
コード例 #2
0
ファイル: filetransferin.cpp プロジェクト: MellonQ/leechcraft
	void FileTransferIn::Accept (const QString& dirName)
	{
		const auto& outName = dirName + '/' + Filename_;
		File_ = std::make_shared<QFile> (outName);
		if (!File_->open (QIODevice::WriteOnly))
		{
			qWarning () << Q_FUNC_INFO
					<< "unable to open"
					<< outName
					<< "for write"
					<< File_->errorString ();
			emit errorAppeared (TEFileAccessError, File_->errorString ());
			emit stateChanged (TSFinished);
			return;
		}

		Thread_->ScheduleFunction ([this] (Tox *tox)
				{ tox_file_send_control (tox, FriendNum_, 1, FileNum_, TOX_FILECONTROL_ACCEPT, nullptr, 0); });
	}
コード例 #3
0
ファイル: PluginManager.cpp プロジェクト: MrKID/RetroShare
void      
PluginManager::defaultLoad(  )
{   
   qDebug() << "  " << "Default load started" ;

    QDir workDir(baseFolder);

    if ( !workDir.exists() )
    {
        QString em= tr("base folder %1 doesn't exist, default load failed")
	              .arg( baseFolder );
        emit errorAppeared( em ); 
	return ;
    }

  //=== get current available plugins =====
    QStringList currAvailable = workDir.entryList(QDir::Files);
#if defined(Q_OS_WIN)
    QRegExp trx("*.dll") ;
#elif defined(__MACH__)
    QRegExp trx("*.dylib");
#else
    QRegExp trx("*.so");
#endif
    trx.setPatternSyntax(QRegExp::Wildcard );

    currAvailable.filter( trx );

    qDebug() << "  " << "can load this plugins: " << currAvailable ;

  //=== 
    foreach(QString pluginFileName, currAvailable)
    {
       QString fullfn( workDir.absoluteFilePath( pluginFileName ) );
       QString newName;
       int ti = readPluginInformation( fullfn, newName);
       if (! ti )
       {
           acceptPlugin(fullfn, newName);
       }
    }//    foreach(QString pluginFileName, currAvailable)
コード例 #4
0
ファイル: pendingupload.cpp プロジェクト: MellonQ/leechcraft
	void PendingUpload::HandleSaved (QNetworkReply *reply)
	{
		if (!Entry_)
			return;

		if (!Conn_->CheckFinishedReply (reply))
			return;

		const auto& json = Util::ParseJson (reply, Q_FUNC_INFO);
		try
		{
			Conn_->CheckReplyData (json, reply);
		}
		catch (const VkConnection::RecoverableException&)
		{
			return;
		}
		catch (const VkConnection::UnrecoverableException& ex)
		{
			emit errorAppeared (TEProtocolError,
					tr ("Unable to save document, error %1: %2.")
						.arg (ex.GetCode ())
						.arg (ex.GetMessage ()));
			emit stateChanged (TSFinished);
			return;
		}

		Acc_->GetLogger () << "got document save result server:" << json;

		const auto& docMap = json.toMap () ["response"].toList ().value (0).toMap ();

		const auto& ownerId = docMap ["owner_id"].toString ();
		const auto& docId = docMap ["id"].toString ();
		const auto& attId = "doc" + ownerId + "_" + docId;

		Conn_->SendMessage (Entry_->GetInfo ().ID_,
				Comment_,
				[this] (qulonglong) { emit stateChanged (TSFinished); },
				VkConnection::Type::Dialog,
				{ attId });
	}
コード例 #5
0
ファイル: transferjob.cpp プロジェクト: Apkawa/leechcraft
	void TransferJob::Accept (const QString& out)
	{
		const QString& filename = QFileInfo (out).isDir () ?
				QDir (out).filePath (GetName ()) :
				out;

		QFile *file = new QFile (filename);
		if (!file->open (QIODevice::WriteOnly))
		{
			qWarning () << Q_FUNC_INFO
					<< "could not open file"
					<< filename
					<< file->errorString ();

			const QString& msg = tr ("could not open incoming file %1: %2")
					.arg (filename)
					.arg (file->errorString ());
			emit errorAppeared (TEFileAccessError, msg);
			return;
		}

		Job_->accept (file);
	}
コード例 #6
0
ファイル: filetransferin.cpp プロジェクト: MellonQ/leechcraft
	void FileTransferIn::handleFileControl (qint32 friendNum,
			qint8 fileNum, qint8 type, const QByteArray&)
	{
		if (friendNum != FriendNum_ || fileNum != FileNum_)
			return;

		switch (type)
		{
		case TOX_FILECONTROL_FINISHED:
			Thread_->ScheduleFunction ([this] (Tox *tox)
					{ tox_file_send_control (tox, FriendNum_, 1, FileNum_, TOX_FILECONTROL_FINISHED, nullptr, 0); });
			emit stateChanged (TSFinished);
			break;
		case TOX_FILECONTROL_KILL:
			emit errorAppeared (TEAborted, tr ("Remote party aborted the transfer."));
			emit stateChanged (TSFinished);
			break;
		default:
			qWarning () << Q_FUNC_INFO
					<< "unknown filecontrol type"
					<< type;
			break;
		}
	}
コード例 #7
0
ファイル: transferjob.cpp プロジェクト: Apkawa/leechcraft
	void TransferJob::handleErrorAppeared (QXmppTransferJob::Error error)
	{
		qWarning () << Q_FUNC_INFO
				<< error;
		emit errorAppeared (static_cast<TransferError> (error), QString ());
	}
コード例 #8
0
ファイル: pendingupload.cpp プロジェクト: MellonQ/leechcraft
	void PendingUpload::HandleGotServer (QNetworkReply *reply)
	{
		if (!Conn_->CheckFinishedReply (reply))
			return;

		const auto& json = Util::ParseJson (reply, Q_FUNC_INFO);
		try
		{
			Conn_->CheckReplyData (json, reply);
		}
		catch (const VkConnection::RecoverableException&)
		{
			return;
		}
		catch (const VkConnection::UnrecoverableException& ex)
		{
			emit errorAppeared (TEProtocolError,
					tr ("Unable to get upload server from VKontakte, protocol error %1: %2.")
						.arg (ex.GetCode ())
						.arg (ex.GetMessage ()));
			emit stateChanged (TSFinished);
			return;
		}

		Acc_->GetLogger () << "got upload server:" << json;

		const QUrl uploadUrl { json.toMap () ["response"].toMap () ["upload_url"].toByteArray () };
		if (!uploadUrl.isValid ())
		{
			emit errorAppeared (TEProtocolError,
					tr ("Unable to get upload server from VKontakte"));
			emit stateChanged (TSFinished);
			return;
		}

		emit stateChanged (TSTransfer);

		const auto multipart = new QHttpMultiPart { QHttpMultiPart::FormDataType };
		QHttpPart filePart;
		filePart.setHeader (QNetworkRequest::ContentDispositionHeader,
				QString ("form-data; name=\"file\"; filename=\"%1\"")
					.arg (QFileInfo { Path_ }.fileName ()));
		const auto file = new QFile { Path_ };
		file->open (QIODevice::ReadOnly);
		filePart.setBodyDevice (file);
		file->setParent (multipart);
		multipart->append (filePart);

		const auto nam = Acc_->GetCoreProxy ()->GetNetworkAccessManager ();
		const auto upReply = nam->post (QNetworkRequest { uploadUrl }, multipart);
		connect (upReply,
				SIGNAL (uploadProgress (qint64, qint64)),
				this,
				SIGNAL (transferProgress (qint64, qint64)));
		connect (upReply,
				SIGNAL (finished ()),
				this,
				SLOT (handleUploadFinished ()));

		multipart->setParent (upReply);
	}