void ImageshackTalker::slotFinished(QNetworkReply* reply) { if (reply != m_reply) { return; } m_reply = 0; if (reply->error() != QNetworkReply::NoError) { if (m_state == IMGHCK_AUTHENTICATING) { checkRegistrationCodeDone(reply->error(), reply->errorString()); emit signalBusy(false); } else if (m_state == IMGHCK_GETGALLERIES) { emit signalBusy(false); emit signalGetGalleriesDone(reply->error(), reply->errorString()); } else if (m_state == IMGHCK_ADDPHOTO || m_state == IMGHCK_ADDPHOTOGALLERY) { emit signalBusy(false); emit signalAddPhotoDone(reply->error(), reply->errorString()); } m_state = IMGHCK_DONOTHING; reply->deleteLater(); return; } m_buffer.append(reply->readAll()); switch (m_state) { case IMGHCK_AUTHENTICATING: parseAccessToken(m_buffer); break; case IMGHCK_ADDPHOTOGALLERY: parseAddPhotoToGalleryDone(m_buffer); break; case IMGHCK_ADDVIDEO: case IMGHCK_ADDPHOTO: parseUploadPhotoDone(m_buffer); break; case IMGHCK_GETGALLERIES: parseGetGalleries(m_buffer); break; default: break; } reply->deleteLater(); }
void ImageshackTalker::slotResult(KJob* kjob) { KIO::Job* job = static_cast<KIO::Job*>(kjob); if (job->error()) { if (m_loginInProgress) { checkRegistrationCodeDone(job->error(), job->errorString()); m_loginInProgress = false; } else if (m_state == IMGHCK_GETGALLERIES) { emit signalBusy(false); emit signalGetGalleriesDone(job->error(), job->errorString()); } else if (m_state == IMGHCK_ADDPHOTO || m_state == IMGHCK_ADDPHOTOGALLERY) { emit signalBusy(false); emit signalAddPhotoDone(job->error(), job->errorString()); } m_state = IMGHCK_DONOTHING; m_job = 0; return; } int step; switch (m_state) { case IMGHCK_CHECKREGCODE: m_job = 0; parseCheckRegistrationCode(m_buffer); break; case IMGHCK_ADDPHOTOGALLERY: step = job->property("k_step").toInt(); if (step == STEP_UPLOADITEM) parseUploadPhotoDone(m_buffer); else parseAddPhotoToGalleryDone(m_buffer); break; case IMGHCK_ADDVIDEO: case IMGHCK_ADDPHOTO: m_job = 0; parseUploadPhotoDone(m_buffer); break; case IMGHCK_GETGALLERIES: m_job = 0; parseGetGalleries(m_buffer); break; default: break; } }
void ImageshackTalker::parseGetGalleries(const QByteArray &data) { QDomDocument document; if (!document.setContent(data)) return; QDomElement rootElem = document.documentElement(); QDomNodeList children = rootElem.childNodes(); QStringList gTexts; QStringList gNames; for (int i = 0; i < children.size(); ++i) { QDomElement e = children.at(i).toElement(); if (e.tagName() == "gallery") { QDomElement nameElem = e.firstChildElement("name"); QDomElement titleElem = e.firstChildElement("title"); QDomElement serverElem = e.firstChildElement("server"); if (!nameElem.isNull()) { QString fmt; fmt = nameElem.firstChild().toText().data(); // this is a very ugly hack QString name = "http://img" + serverElem.firstChild().toText().data() + ".imageshack.us/gallery_api.php?g=" + fmt; gNames << name; if (!titleElem.isNull()) { fmt.append(" (" + titleElem.firstChild().toText().data() + ")"); } gTexts << fmt; } } } m_state = IMGHCK_DONOTHING; emit signalUpdateGalleries(gTexts, gNames); emit signalGetGalleriesDone(0, i18n("Successfully retrieved galleries")); }
void ImageshackTalker::parseGetGalleries(const QByteArray &data) { QDomDocument document; if (!document.setContent(data)) return; QDomElement rootElem = document.documentElement(); QDomNodeList children = rootElem.childNodes(); QStringList gTexts; QStringList gNames; for (int i = 0; i < children.size(); ++i) { QDomElement e = children.at(i).toElement(); if (e.tagName() == QString::fromLatin1("gallery")) { QDomElement nameElem = e.firstChildElement(QString::fromLatin1("name")); QDomElement titleElem = e.firstChildElement(QString::fromLatin1("title")); QDomElement serverElem = e.firstChildElement(QString::fromLatin1("server")); if (!nameElem.isNull()) { QString fmt; fmt = nameElem.firstChild().toText().data(); gNames << nameElem.firstChild().toText().data(); gTexts << titleElem.firstChild().toText().data(); } } } m_state = IMGHCK_DONOTHING; emit signalUpdateGalleries(gTexts, gNames); emit signalGetGalleriesDone(0, i18n("Successfully retrieved galleries")); }