Example #1
0
bool AWebservice::postChange (const AMessage2SendList& list_messages, const ARating2SendList& list_rating, const AModerate2SendList& list_moderate, ACommitInfo& commit_info)
{
	QString data;
	data += "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n";
	data += "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\r\n";
	data += "  <soap:Body>\r\n";
	data += "    <PostChange xmlns=\"http://rsdn.ru/Janus/\">\r\n";
	data += "      <postRequest>\r\n";
	data += (QString)"        <userName>" + m_rsdn_login    + "</userName>\r\n";
	data += (QString)"        <password>" + m_rsdn_password + "</password>\r\n";

	// сообщения
	if (list_messages.count() > 0)
	{
		data += "        <writedMessages>\r\n";

		for (int i = 0; i < list_messages.count(); i++)
		{
			QString message = list_messages[i].Message;

			QString subject = list_messages[i].Subject;

			subject.replace("&", "&amp;");
			subject.replace("<", "&lt;");
			subject.replace(">", "&gt;");

			data += "          <PostMessageInfo>\r\n";
			data += (QString)"            <localMessageId>" + QString::number(list_messages[i].ID)       + "</localMessageId>\r\n";
			data += (QString)"            <parentId>"       + QString::number(list_messages[i].IDParent) + "</parentId>\r\n";
			data += (QString)"            <forumId>"        + QString::number(list_messages[i].IDForum)  + "</forumId>\r\n";
			data += (QString)"            <subject>"        + subject                                    + "</subject>\r\n";
			data += (QString)"            <message>"        + message                                    + "</message>\r\n";
			data += "          </PostMessageInfo>\r\n";
		}

		data += "        </writedMessages>\r\n";
	}
	else
		data += "        <writedMessages />\r\n";

	// рейтинги
	if (list_rating.count() > 0)
	{
		data += "        <rates>\r\n";

		for (int i = 0; i < list_rating.count(); i++)
		{
			data += "          <PostRatingInfo>\r\n";
			data += (QString)"            <localRatingId>" + QString::number(list_rating[i].ID)        + "</localRatingId>\r\n";
			data += (QString)"            <messageId>"     + QString::number(list_rating[i].IDMessage) + "</messageId>\r\n";
			data += (QString)"            <rate>"          + QString::number(list_rating[i].Rate)      + "</rate>\r\n";
			data += "          </PostRatingInfo>\r\n";
		}

		data += "        </rates>\r\n";
	}
	else
		data += "        <rates />\r\n";

	// модерилки
	if (list_moderate.count() > 0)
	{
		data += "        <moderates>\r\n";

		for (int i = 0; i < list_moderate.count(); i++)
		{
			QString description = list_moderate[i].Description;

			description.replace("&", "&amp;");
			description.replace("<", "&lt;");
			description.replace(">", "&gt;");

			data += "          <PostModerateInfo>\r\n";
			data += (QString)"            <LocalModerateId>"   + QString::number(list_moderate[i].ID)          + "</LocalModerateId>\r\n";
			data += (QString)"            <MessageId>"         + QString::number(list_moderate[i].IDMessage)   + "</MessageId>\r\n";
			data += (QString)"            <ModerateAction>"    + list_moderate[i].Action                       + "</ModerateAction>\r\n";
			data += (QString)"            <ModerateToForumId>" + QString::number(list_moderate[i].IDForum)     + "</ModerateToForumId>\r\n";
			data += (QString)"            <Description>"       + description                                   + "</Description>\r\n";
			data += (QString)"            <AsModerator>"       + QString::number(list_moderate[i].AsModerator) + "</AsModerator>\r\n";
			data += "          </PostModerateInfo>\r\n";
		}

		data += "        </moderates>\r\n";
	}
	else
		data += "        <moderates />\r\n";

	data += "      </postRequest>\r\n";
	data += "    </PostChange>\r\n";
	data += "  </soap:Body>\r\n";
	data += "</soap:Envelope>\r\n";

	QNetworkRequest request;
	prepareRequest(request, m_rsdn_proto, "PostChange", data.toUtf8().size());

	if (makeRequest(request, data) == false)
		return false;

	QString cookie;
	QString result = parsePostChange(m_headers, cookie);

	if (result.length() > 0)
	{
		m_error = result;
		return false;
	}

	data  = "";
	data += "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n";
	data += "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\r\n";
	data += "  <soap:Body>\r\n";
	data += "    <PostChangeCommit xmlns=\"http://rsdn.ru/Janus/\" />\r\n";
	data += "  </soap:Body>\r\n";
	data += "</soap:Envelope>\r\n";

	prepareRequest(request, m_rsdn_proto, "PostChangeCommit", data.toUtf8().size());

	if (cookie.length() > 0)
		request.setRawHeader("Cookie", cookie.toUtf8());

	if (makeRequest(request, data) == false)
		return false;

	result = parsePostChangeCommit(m_body, commit_info);

	if (result.length() > 0)
	{
		m_error = result;
		return false;
	}

	return true;
}
Example #2
0
void AWebservice::postChange_WebserviceQuery (QString& header, QString& data, const AMessage2SendList& list_messages, const ARating2SendList& list_rating, const AModerate2SendList& list_moderate, IProgress* progress)
{
	if (progress != NULL)
		progress->onProgress(0);

	QSettings settings;

	QString rsdn_login    = settings.value("rsdn/login",    "").toString();
	QString rsdn_password = settings.value("rsdn/password", "").toString();

	data = "";
	data += "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n";
	data += "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\r\n";
	data += "  <soap:Body>\r\n";
	data += "    <PostChange xmlns=\"http://rsdn.ru/Janus/\">\r\n";
	data += "      <postRequest>\r\n";
	data += (QString)"        <userName>" + rsdn_login    + "</userName>\r\n";
	data += (QString)"        <password>" + rsdn_password + "</password>\r\n";

	// сообщения
	if (list_messages.count() > 0)
	{
		data += "        <writedMessages>\r\n";

		for (int i = 0; i < list_messages.count(); i++)
		{
			QString message = list_messages[i].Message;

			QString subject = list_messages[i].Subject;

			subject.replace("&", "&amp;");
			subject.replace("<", "&lt;");
			subject.replace(">", "&gt;");

			data += "          <PostMessageInfo>\r\n";
			data += (QString)"            <localMessageId>" + QString::number(list_messages[i].ID)       + "</localMessageId>\r\n";
			data += (QString)"            <parentId>"       + QString::number(list_messages[i].IDParent) + "</parentId>\r\n";
			data += (QString)"            <forumId>"        + QString::number(list_messages[i].IDForum)  + "</forumId>\r\n";
			data += (QString)"            <subject>"        + subject                                    + "</subject>\r\n";
			data += (QString)"            <message>"        + message                                    + "</message>\r\n";
			data += "          </PostMessageInfo>\r\n";
		}

		data += "        </writedMessages>\r\n";
	}
	else
		data += "        <writedMessages />\r\n";

	// рейтинги
	if (list_rating.count() > 0)
	{
		data += "        <rates>\r\n";

		for (int i = 0; i < list_rating.count(); i++)
		{
			data += "          <PostRatingInfo>\r\n";
			data += (QString)"            <localRatingId>" + QString::number(list_rating[i].ID)        + "</localRatingId>\r\n";
			data += (QString)"            <messageId>"     + QString::number(list_rating[i].IDMessage) + "</messageId>\r\n";
			data += (QString)"            <rate>"          + QString::number(list_rating[i].Rate)      + "</rate>\r\n";
			data += "          </PostRatingInfo>\r\n";
		}

		data += "        </rates>\r\n";
	}
	else
		data += "        <rates />\r\n";

	// модерилки
	if (list_moderate.count() > 0)
	{
		data += "        <moderates>\r\n";

		for (int i = 0; i < list_moderate.count(); i++)
		{
			QString description = list_moderate[i].Description;

			description.replace("&", "&amp;");
			description.replace("<", "&lt;");
			description.replace(">", "&gt;");

			data += "          <PostModerateInfo>\r\n";
			data += (QString)"            <LocalModerateId>"   + QString::number(list_moderate[i].ID)          + "</LocalModerateId>\r\n";
			data += (QString)"            <MessageId>"         + QString::number(list_moderate[i].IDMessage)   + "</MessageId>\r\n";
			data += (QString)"            <ModerateAction>"    + list_moderate[i].Action                       + "</ModerateAction>\r\n";
			data += (QString)"            <ModerateToForumId>" + QString::number(list_moderate[i].IDForum)     + "</ModerateToForumId>\r\n";
			data += (QString)"            <Description>"       + description                                   + "</Description>\r\n";
			data += (QString)"            <AsModerator>"       + QString::number(list_moderate[i].AsModerator) + "</AsModerator>\r\n";
			data += "          </PostModerateInfo>\r\n";
		}

		data += "        </moderates>\r\n";
	}
	else
		data += "        <moderates />\r\n";

	data += "      </postRequest>\r\n";
	data += "    </PostChange>\r\n";
	data += "  </soap:Body>\r\n";
	data += "</soap:Envelope>\r\n";

	header = "";
	header += "POST /ws/janusAT.asmx HTTP/1.1\r\n";
	header += "Host: rsdn.ru\r\n";
	header += "Connection: close\r\n";

	#ifdef AVALON_USE_ZLIB
	header += "Accept-Encoding: gzip\r\n";
	#endif

	header += "User-Agent: " + getAgentString() + "\r\n";
	header += "Content-Type: text/xml; charset=utf-8\r\n";
	header += (QString)"Content-Length: " + QString::number(data.toUtf8().size()) + "\r\n";
	header += "SOAPAction: \"http://rsdn.ru/Janus/PostChange\"\r\n";
}