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; }); }
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); }); }
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)
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 }); }
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); }
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; } }
void TransferJob::handleErrorAppeared (QXmppTransferJob::Error error) { qWarning () << Q_FUNC_INFO << error; emit errorAppeared (static_cast<TransferError> (error), QString ()); }
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); }