23 #include "wordpressbuggy_p.h"
34 #include <QtCore/QStringList>
36 using namespace KBlog;
39 :
MovableType( server, *new WordpressBuggyPrivate, parent )
66 if ( d->mCategoriesList.isEmpty() ) {
67 kDebug() <<
"No categories in the cache yet. Have to fetch them first.";
68 d->mCreatePostCache << post;
70 this,SLOT(slotTriggerCreatePost()) );
74 kDebug() <<
"createPost()";
76 kError() <<
"WordpressBuggy::createPost: post is a null pointer";
77 emit
error (
Other, i18n(
"Post is a null pointer." ) );
80 kDebug() <<
"Creating new Post with blogId" <<
blogId();
86 if ( d->mSilentCreationList.contains( post ) ) {
87 kDebug() <<
"Post already in mSilentCreationList, this *should* never happen!";
89 d->mSilentCreationList << post;
93 QString xmlMarkup =
"<?xml version=\"1.0\"?>";
94 xmlMarkup +=
"<methodCall>";
95 xmlMarkup +=
"<methodName>metaWeblog.newPost</methodName>";
96 xmlMarkup +=
"<params><param>";
97 xmlMarkup +=
"<value><string><![CDATA["+
blogId()+
"]]></string></value>";
98 xmlMarkup +=
"</param>";
99 xmlMarkup +=
"<param>";
100 xmlMarkup +=
"<value><string><![CDATA["+
username()+
"]]></string></value>";
101 xmlMarkup +=
"</param><param>";
102 xmlMarkup +=
"<value><string><![CDATA["+
password()+
"]]></string></value>";
103 xmlMarkup +=
"</param>";
104 xmlMarkup +=
"<param><struct>";
105 xmlMarkup +=
"<member><name>description</name>";
106 xmlMarkup +=
"<value><string><![CDATA["+post->
content()+
"]]></string></value>";
107 xmlMarkup +=
"</member><member>";
108 xmlMarkup +=
"<name>title</name>";
109 xmlMarkup +=
"<value><string><![CDATA["+post->
title()+
"]]></string></value>";
110 xmlMarkup +=
"</member><member>";
112 xmlMarkup +=
"<name>dateCreated</name>";
113 xmlMarkup +=
"<value><dateTime.iso8601>" +
114 post->
creationDateTime().dateTime().toUTC().toString(
"yyyyMMddThh:mm:ss" ) +
115 "</dateTime.iso8601></value>";
116 xmlMarkup +=
"</member><member>";
117 xmlMarkup +=
"<name>mt_allow_comments</name>";
118 xmlMarkup += QString(
"<value><int>%1</int></value>" ).arg( (
int)post->
isCommentAllowed() );
119 xmlMarkup +=
"</member><member>";
120 xmlMarkup +=
"<name>mt_allow_pings</name>";
121 xmlMarkup += QString(
"<value><int>%1</int></value>" ).arg( (
int)post->
isTrackBackAllowed() );
122 xmlMarkup +=
"</member><member>";
124 xmlMarkup +=
"<name>mt_text_more</name>";
125 xmlMarkup +=
"<value><string><![CDATA[" + post->
additionalContent() +
"]]></string></value>";
126 xmlMarkup +=
"</member><member>";
128 xmlMarkup +=
"<name>wp_slug</name>";
129 xmlMarkup +=
"<value><string><![CDATA[" + post->
slug() +
"]]></string></value>";
130 xmlMarkup +=
"</member><member>";
131 xmlMarkup +=
"<name>mt_excerpt</name>";
132 xmlMarkup +=
"<value><string><![CDATA[" + post->
summary() +
"]]></string></value>";
133 xmlMarkup +=
"</member><member>";
134 xmlMarkup +=
"<name>mt_keywords</name>";
135 xmlMarkup +=
"<value><string><![CDATA[" + post->
tags().join(
",") +
"]]></string></value>";
136 xmlMarkup +=
"</member></struct></param>";
137 xmlMarkup +=
"<param><value><boolean>" +
138 QString(
"%1" ).arg( (
int)(!post->
isPrivate() ) ) +
139 "</boolean></value></param>";
140 xmlMarkup +=
"</params></methodCall>";
143 QDataStream stream( &postData, QIODevice::WriteOnly );
144 stream.writeRawData( xmlMarkup.toUtf8(), xmlMarkup.toUtf8().length() );
146 KIO::StoredTransferJob *job = KIO::storedHttpPost( postData,
url(), KIO::HideProgressInfo );
148 d->mCreatePostMap[ job ] = post;
151 kWarning() <<
"Failed to create job for: " <<
url().url();
155 "customHTTPHeader",
"X-hacker: Shame on you Wordpress, " + QString() +
156 "you took another 4 hours of my life to work around the stupid dateTime bug." );
157 job->addMetaData(
"content-type",
"Content-Type: text/xml; charset=utf-8" );
158 job->addMetaData(
"ConnectTimeout",
"50" );
159 job->addMetaData(
"UserAgent",
userAgent() );
161 connect( job, SIGNAL(result(KJob*)),
162 this, SLOT(slotCreatePost(KJob*)) );
179 if ( d->mCategoriesList.isEmpty() ) {
180 kDebug() <<
"No categories in the cache yet. Have to fetch them first.";
181 d->mModifyPostCache << post;
183 this,SLOT(slotTriggerModifyPost()) );
188 kError() <<
"WordpressBuggy::modifyPost: post is a null pointer";
189 emit
error (
Other, i18n(
"Post is a null pointer." ) );
193 kDebug() <<
"Uploading Post with postId" << post->
postId();
195 QString xmlMarkup =
"<?xml version=\"1.0\"?>";
196 xmlMarkup +=
"<methodCall>";
197 xmlMarkup +=
"<methodName>metaWeblog.editPost</methodName>";
198 xmlMarkup +=
"<params><param>";
199 xmlMarkup +=
"<value><string><![CDATA["+post->
postId()+
"]]></string></value>";
200 xmlMarkup +=
"</param>";
201 xmlMarkup +=
"<param>";
202 xmlMarkup +=
"<value><string><![CDATA["+
username()+
"]]></string></value>";
203 xmlMarkup +=
"</param><param>";
204 xmlMarkup +=
"<value><string><![CDATA["+
password()+
"]]></string></value>";
205 xmlMarkup +=
"</param>";
206 xmlMarkup +=
"<param><struct>";
207 xmlMarkup +=
"<member><name>description</name>";
208 xmlMarkup +=
"<value><string><![CDATA["+post->
content()+
"]]></string></value>";
209 xmlMarkup +=
"</member><member>";
210 xmlMarkup +=
"<name>title</name>";
211 xmlMarkup +=
"<value><string><![CDATA["+post->
title()+
"]]></string></value>";
212 xmlMarkup +=
"</member><member>";
214 xmlMarkup +=
"<name>lastModified</name>";
215 xmlMarkup +=
"<value><dateTime.iso8601>" +
217 "</dateTime.iso8601></value>";
218 xmlMarkup +=
"</member><member>";
219 xmlMarkup +=
"<name>dateCreated</name>";
220 xmlMarkup +=
"<value><dateTime.iso8601>" +
221 post->
creationDateTime().dateTime().toUTC().toString(
"yyyyMMddThh:mm:ss" ) +
222 "</dateTime.iso8601></value>";
223 xmlMarkup +=
"</member><member>";
224 xmlMarkup +=
"<name>mt_allow_comments</name>";
225 xmlMarkup += QString(
"<value><int>%1</int></value>" ).arg( (
int)post->
isCommentAllowed() );
226 xmlMarkup +=
"</member><member>";
227 xmlMarkup +=
"<name>mt_allow_pings</name>";
228 xmlMarkup += QString(
"<value><int>%1</int></value>" ).arg( (
int)post->
isTrackBackAllowed() );
229 xmlMarkup +=
"</member><member>";
231 xmlMarkup +=
"<name>mt_text_more</name>";
232 xmlMarkup +=
"<value><string><![CDATA[" + post->
additionalContent() +
"]]></string></value>";
233 xmlMarkup +=
"</member><member>";
235 xmlMarkup +=
"<name>wp_slug</name>";
236 xmlMarkup +=
"<value><string><![CDATA[" + post->
slug() +
"]]></string></value>";
237 xmlMarkup +=
"</member><member>";
238 xmlMarkup +=
"<name>mt_excerpt</name>";
239 xmlMarkup +=
"<value><string><![CDATA[" + post->
summary() +
"]]></string></value>";
240 xmlMarkup +=
"</member><member>";
241 xmlMarkup +=
"<name>mt_keywords</name>";
242 xmlMarkup +=
"<value><string><![CDATA[" + post->
tags().join(
"," ) +
"]]></string></value>";
243 xmlMarkup +=
"</member></struct></param>";
244 xmlMarkup +=
"<param><value><boolean>" +
245 QString(
"%1" ).arg( (
int)( !post->
isPrivate() ) ) +
246 "</boolean></value></param>";
247 xmlMarkup +=
"</params></methodCall>";
250 QDataStream stream( &postData, QIODevice::WriteOnly );
251 stream.writeRawData( xmlMarkup.toUtf8(), xmlMarkup.toUtf8().length() );
253 KIO::StoredTransferJob *job = KIO::storedHttpPost( postData,
url(), KIO::HideProgressInfo );
255 d->mModifyPostMap[ job ] = post;
258 kWarning() <<
"Failed to create job for: " <<
url().url();
262 "customHTTPHeader",
"X-hacker: Shame on you Wordpress, " + QString() +
263 "you took another 4 hours of my life to work around the stupid dateTime bug." );
264 job->addMetaData(
"content-type",
"Content-Type: text/xml; charset=utf-8" );
265 job->addMetaData(
"ConnectTimeout",
"50" );
266 job->addMetaData(
"UserAgent",
userAgent() );
268 connect( job, SIGNAL(result(KJob*)),
269 this, SLOT(slotModifyPost(KJob*)) );
275 return QLatin1String(
"Movable Type" );
278 WordpressBuggyPrivate::WordpressBuggyPrivate()
282 WordpressBuggyPrivate::~WordpressBuggyPrivate()
287 QList<QVariant> WordpressBuggyPrivate::defaultArgs(
const QString &
id )
290 QList<QVariant> args;
291 if ( !
id.isEmpty() ) {
292 args << QVariant(
id );
294 args << QVariant( q->username() )
295 << QVariant( q->password() );
299 void WordpressBuggyPrivate::slotCreatePost( KJob *job )
303 KIO::StoredTransferJob *stj = qobject_cast<KIO::StoredTransferJob*>( job );
304 const QString data = QString::fromUtf8( stj->data(), stj->data().size() );
309 mCreatePostMap.remove( job );
311 if ( job->error() != 0 ) {
312 kError() <<
"slotCreatePost error:" << job->errorString();
317 QRegExp rxError(
"faultString" );
318 if ( rxError.indexIn( data ) != -1 ) {
319 rxError = QRegExp(
"<string>(.+)</string>" );
320 if ( rxError.indexIn( data ) != -1 ) {
321 kDebug() <<
"RegExp of faultString failed.";
323 kDebug() << rxError.cap( 1 );
328 QRegExp rxId(
"<string>(.+)</string>" );
329 if ( rxId.indexIn( data ) == -1 ) {
330 kError() <<
"Could not regexp the id out of the result:" << data;
332 i18n(
"Could not regexp the id out of the result." ), post );
335 kDebug() <<
"QRegExp rx( \"<string>(.+)</string>\" ) matches" << rxId.cap( 1 );
338 if ( mSilentCreationList.contains( post ) )
341 setPostCategories( post, !post->
isPrivate() );
343 kDebug() <<
"emitting createdPost()"
344 <<
"for title: \"" << post->
title();
345 emit q->createdPost( post );
350 void WordpressBuggyPrivate::slotModifyPost( KJob *job )
354 KIO::StoredTransferJob *stj = qobject_cast<KIO::StoredTransferJob*>( job );
355 const QString data = QString::fromUtf8( stj->data(), stj->data().size() );
358 mModifyPostMap.remove( job );
360 if ( job->error() != 0 ) {
361 kError() <<
"slotModifyPost error:" << job->errorString();
366 QRegExp rxError(
"faultString" );
367 if ( rxError.indexIn( data ) != -1 ) {
368 rxError = QRegExp(
"<string>(.+)</string>" );
369 if ( rxError.indexIn( data ) != -1 ) {
370 kDebug() <<
"RegExp of faultString failed.";
372 kDebug() << rxError.cap( 1 );
377 QRegExp rxId(
"<boolean>(.+)</boolean>" );
378 if ( rxId.indexIn( data ) == -1 ) {
379 kError() <<
"Could not regexp the id out of the result:" << data;
381 i18n(
"Could not regexp the id out of the result." ), post );
384 kDebug() <<
"QRegExp rx( \"<boolean>(.+)</boolean>\" ) matches" << rxId.cap( 1 );
386 if ( rxId.cap( 1 ).toInt() == 1 ) {
387 kDebug() <<
"Post successfully updated.";
388 if ( mSilentCreationList.contains( post ) ) {
390 emit q->createdPost( post );
391 mSilentCreationList.removeOne( post );
393 if ( !post->categories().isEmpty() ) {
394 setPostCategories( post,
false );
400 #include "moc_wordpressbuggy.cpp"