void ShopSubmitter::BeginShopSubmission(const QString &threadId, const QString &shopData, bool bumpAfter) { if (threadId.isEmpty() || shopData.isEmpty()) { emit ShopSubmissionError(threadId, "Invalid shop submitted."); return; } if (submissions.contains(threadId)) { emit ShopSubmissionError(threadId, "This shop is already being submitted."); return; } // Setup Queue ShopSubmission* submission = new ShopSubmission; submission->threadId = threadId; submission->shopData = shopData; submission->bumpAfter = bumpAfter; submissions.insert(threadId, submission); submission->timerId = startTimer(GetTimeout()); // Submit! QNetworkRequest request(QUrl(ShopEditUrl(threadId))); request.setAttribute((QNetworkRequest::Attribute) SHOP_DATA_THREAD, threadId); QNetworkReply *fetched = network->get(request); submission->state = SHOP_SUBMISSION_STARTED; submission->currentReply = fetched; connect(fetched, SIGNAL(finished()), this, SLOT(OnSubmissionPageFinished())); }
void Shop::OnEditPageFinished() { QNetworkReply *reply = qobject_cast<QNetworkReply *>(QObject::sender()); QByteArray bytes = reply->readAll(); std::string page(bytes.constData(), bytes.size()); std::string hash = Util::GetCsrfToken(page, "forum_thread"); if (hash.empty()) { QLOG_ERROR() << "Can't update shop -- cannot extract CSRF token from the page. Check if thread ID is valid."; submitting_ = false; return; } // now submit our edit // holy shit give me some html parser library please std::string title = Util::FindTextBetween(page, "<input type=\"text\" name=\"title\" id=\"title\" value=\"", "\" class=\"textInput\">"); if (title.empty()) { QLOG_ERROR() << "Can't update shop -- title is empty. Check if thread ID is valid."; submitting_ = false; return; } QUrlQuery query; query.addQueryItem("forum_thread", hash.c_str()); query.addQueryItem("title", title.c_str()); query.addQueryItem("content", requests_completed_ < shop_data_.size() ? shop_data_[requests_completed_].c_str() : "Empty"); query.addQueryItem("submit", "Submit"); QByteArray data(query.query().toUtf8()); QNetworkRequest request((QUrl(ShopEditUrl(requests_completed_).c_str()))); request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); QNetworkReply *submitted = app_.logged_in_nm().post(request, data); new QReplyTimeout(submitted, kEditThreadTimeout); connect(submitted, SIGNAL(finished()), this, SLOT(OnShopSubmitted())); }
void Shop::SubmitSingleShop() { CurrentStatusUpdate status = CurrentStatusUpdate(); status.state = ProgramState::ShopSubmitting; status.progress = requests_completed_; status.total = threads_.size(); if (requests_completed_ == threads_.size()) { status.state = ProgramState::ShopCompleted; submitting_ = false; app_.data().Set("shop_hash", shop_hash_); } else { // first, get to the edit-thread page to grab CSRF token QNetworkReply *fetched = app_.logged_in_nm().get(QNetworkRequest(QUrl(ShopEditUrl(requests_completed_).c_str()))); new QReplyTimeout(fetched, kEditThreadTimeout); connect(fetched, SIGNAL(finished()), this, SLOT(OnEditPageFinished())); } emit StatusUpdate(status); }
void ShopSubmitter::SubmitShop(ShopSubmission* submission) { QUrlQuery query; query.addQueryItem("forum_thread", submission->data.value("forum_thread").toString()); query.addQueryItem("title", submission->data.value("forum_title").toString()); query.addQueryItem("content", submission->shopData); query.addQueryItem("submit", "Submit"); submission->timerId = startTimer(GetTimeout()); QNetworkRequest request(QUrl(ShopEditUrl(submission->threadId))); request.setAttribute((QNetworkRequest::Attribute) SHOP_DATA_THREAD, submission->threadId); request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); QNetworkReply *submitted = network->post(request, query.query().toUtf8()); submission->state = SHOP_SUBMISSION_SUBMITTING; submission->currentReply = submitted; connect(submitted, SIGNAL(finished()), this, SLOT(OnShopSubmitted())); }
void Shop::OnEditPageFinished() { QNetworkReply *reply = qobject_cast<QNetworkReply *>(QObject::sender()); QByteArray bytes = reply->readAll(); std::string page(bytes.constData(), bytes.size()); std::string hash = Util::GetCsrfToken(page, "forum_thread"); if (hash.empty()) { QLOG_ERROR() << "Can't update shop -- cannot extract CSRF token from the page. Check if thread ID is valid." << "If you're using Steam to login make sure you use the same login method (steam or login/password) in Acquisition, Path of Exile website and Path of Exile game client." << "For example, if you created a shop thread while using Steam to log into the website and then logged into Acquisition with login/password it will not work." << "In this case you should either recreate your shop thread or use a correct login method in Acquisition."; submitting_ = false; return; } // now submit our edit // holy shit give me some html parser library please std::string title = Util::FindTextBetween(page, "<input type=\"text\" name=\"title\" id=\"title\" value=\"", "\" class=\"textInput\">"); if (title.empty()) { QLOG_ERROR() << "Can't update shop -- title is empty. Check if thread ID is valid."; submitting_ = false; return; } QUrlQuery query; query.addQueryItem("forum_thread", hash.c_str()); query.addQueryItem("title", Util::Decode(title).c_str()); query.addQueryItem("content", requests_completed_ < shop_data_.size() ? shop_data_[requests_completed_].c_str() : "Empty"); query.addQueryItem("submit", "Submit"); QByteArray data(query.query().toUtf8()); QNetworkRequest request((QUrl(ShopEditUrl(requests_completed_).c_str()))); request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); QNetworkReply *submitted = app_.logged_in_nm().post(request, data); new QReplyTimeout(submitted, kEditThreadTimeout); connect(submitted, SIGNAL(finished()), this, SLOT(OnShopSubmitted())); }