• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdepim API Reference
  • KDE Home
  • Contact Us
 

blogilo

  • sources
  • kde-4.14
  • kdepim
  • blogilo
  • src
backend.cpp
Go to the documentation of this file.
1 /*
2  This file is part of Blogilo, A KDE Blogging Client
3 
4  Copyright (C) 2008-2010 Mehrdad Momeny <mehrdad.momeny@gmail.com>
5  Copyright (C) 2008-2010 Golnaz Nilieh <g382nilieh@gmail.com>
6 
7  This program is free software; you can redistribute it and/or
8  modify it under the terms of the GNU General Public License as
9  published by the Free Software Foundation; either version 2 of
10  the License or (at your option) version 3 or any later version
11  accepted by the membership of KDE e.V. (or its successor approved
12  by the membership of KDE e.V.), which shall act as a proxy
13  defined in Section 14 of version 3 of the license.
14 
15 
16  This program is distributed in the hope that it will be useful,
17  but WITHOUT ANY WARRANTY; without even the implied warranty of
18  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19  GNU General Public License for more details.
20 
21  You should have received a copy of the GNU General Public License
22  along with this program; if not, see http://www.gnu.org/licenses/
23 */
24 
25 #include "backend.h"
26 #include "bilboblog.h"
27 #include "bilbopost.h"
28 #include "bilbomedia.h"
29 #include "dbman.h"
30 #include "settings.h"
31 
32 #include <kurl.h>
33 #include <kblog/blogger1.h>
34 #include <kblog/metaweblog.h>
35 #include <kblog/movabletype.h>
36 #include <kblog/wordpressbuggy.h>
37 #include <kblog/blogmedia.h>
38 #include "blogger.h"
39 #include <kdebug.h>
40 #include <KDE/KLocale>
41 
42 #include <kio/netaccess.h>
43 #include <kio/job.h>
44 
45 const QRegExp splitRX(QLatin1String("((<hr/?>)?<!--split-->)"));
46 
47 class Backend::Private
48 {
49 public:
50  Private()
51  :kBlog(0), bBlog(0), categoryListNotSet(false)
52  {}
53  KBlog::Blog *kBlog;
54  BilboBlog *bBlog;
55  QList<Category> mCreatePostCategories;
56  QMap<QString, KBlog::BlogPost *> mSetPostCategoriesMap;
57  QMap<KBlog::BlogPost *, BilboPost::Status> mSubmitPostStatusMap;
58  QMap<KBlog::BlogMedia *, BilboMedia *> mPublishMediaMap;
59  bool categoryListNotSet;
60 };
61 
62 Backend::Backend( int blog_id, QObject* parent )
63  : QObject( parent ), d(new Private)
64 {
65  kDebug() << "with blog id: " << blog_id;
66  d->bBlog = DBMan::self()->blog( blog_id );
67  d->kBlog = d->bBlog->blogBackend();
68  if ( d->bBlog->api() == BilboBlog::BLOGGER_API ) {
69  KBlog::Blogger *blogger = qobject_cast<KBlog::Blogger*>( d->kBlog );
70  connect( blogger, SIGNAL(authenticated(QMap<QString,QString>)),
71  this, SLOT(bloggerAuthenticated(QMap<QString,QString>)) );
72  blogger->authenticate( DBMan::self()->getAuthData( blog_id ) );
73  }
74 
75  connect( d->kBlog, SIGNAL(error(KBlog::Blog::ErrorType,QString)),
76  this, SLOT(error(KBlog::Blog::ErrorType,QString)) );
77  connect( d->kBlog, SIGNAL(errorPost(KBlog::Blog::ErrorType,QString,KBlog::BlogPost*)),
78  this, SLOT(error(KBlog::Blog::ErrorType,QString)) );
79  connect( d->kBlog, SIGNAL( errorComment( KBlog::Blog::ErrorType, const QString &, KBlog::BlogPost*,
80  KBlog::BlogComment* ) ),
81  this, SLOT(error(KBlog::Blog::ErrorType,QString)) );
82  connect( d->kBlog, SIGNAL(errorMedia(KBlog::Blog::ErrorType,QString,KBlog::BlogMedia*)),
83  this, SLOT(error(KBlog::Blog::ErrorType,QString)) );
84 }
85 
86 Backend::~Backend()
87 {
88  kDebug();
89  delete d;
90 }
91 
92 void Backend::getCategoryListFromServer()
93 {
94  kDebug() << "Blog Id: " << d->bBlog->id();
95  if ( d->bBlog->api() == BilboBlog::METAWEBLOG_API ||
96  d->bBlog->api() == BilboBlog::MOVABLETYPE_API ||
97  d->bBlog->api() == BilboBlog::WORDPRESSBUGGY_API ) {
98  KBlog::MetaWeblog *tmp = static_cast<KBlog::MetaWeblog*>( d->kBlog );
99  connect( tmp, SIGNAL(listedCategories(QList<QMap<QString,QString> >)),
100  this, SLOT(categoriesListed(QList<QMap<QString,QString> >)) );
101  tmp->listCategories();
102  } else {
103  error( KBlog::Blog::NotSupported, i18n( "Blog API doesn't support getting Category list." ) );
104  }
105 }
106 
107 void Backend::categoriesListed( const QList< QMap < QString , QString > > & categories )
108 {
109  kDebug() << "Blog Id: " << d->bBlog->id();
110  DBMan::self()->clearCategories( d->bBlog->id() );
111 
112  const int categoriesCount(categories.count());
113  for ( int i = 0; i < categoriesCount; ++i ) {
114  const QMap<QString, QString> &category = categories.at( i );
115 
116  const QString name = category.value( QLatin1String("name"), QString() );
117  const QString description = category.value( QLatin1String("description"), QString() );
118  const QString htmlUrl = category.value( QLatin1String("htmlUrl"), QString() );
119  const QString rssUrl = category.value( QLatin1String("rssUrl"), QString() );
120  QString categoryId = category.value( QLatin1String("categoryId"), QString() );
121  const QString parentId = category.value( QLatin1String("parentId"), QString() );
122 
123  if(categoryId.isEmpty()) {
124  categoryId = QString::number(i);
125  }
126 
127  DBMan::self()->addCategory( name, description, htmlUrl, rssUrl, categoryId, parentId, d->bBlog->id() );
128  }
129  kDebug() << "Emitting sigCategoryListFetched...";
130  Q_EMIT sigCategoryListFetched( d->bBlog->id() );
131 }
132 
133 void Backend::getEntriesListFromServer( int count )
134 {
135  kDebug() << "Blog Id: " << d->bBlog->id();
136  connect( d->kBlog, SIGNAL(listedRecentPosts(QList<KBlog::BlogPost>)),
137  this, SLOT(entriesListed(QList<KBlog::BlogPost>)) );
138  d->kBlog->listRecentPosts( count );
139 }
140 
141 void Backend::entriesListed( const QList< KBlog::BlogPost > & posts )
142 {
143  kDebug() << "Blog Id: " << d->bBlog->id();
144 // DBMan::self()->clearPosts( d->bBlog->id() );
145 
146  const int postCount(posts.count());
147  for ( int i = 0; i < postCount; ++i ) {
148  BilboPost tempPost( posts.at(i) );
149  if(Settings::changeNToBreak()) {
150  tempPost.setContent( tempPost.content().replace( QLatin1Char('\n'), QLatin1String("<br/>") ) );
151  tempPost.setAdditionalContent( tempPost.additionalContent().replace( QLatin1Char('\n'), QLatin1String("<br/>") ) );
152  }
153  DBMan::self()->addPost( tempPost, d->bBlog->id() );
154  }
155  kDebug() << "Emitting sigEntriesListFetched ...";
156  Q_EMIT sigEntriesListFetched( d->bBlog->id() );
157 }
158 
159 void Backend::publishPost( BilboPost* post )
160 {
161  kDebug() << "Blog Id: " << d->bBlog->id();
162 // BilboPost tmpPost = post;
163  if( Settings::addPoweredBy() ) {
164  QString poweredStr = QLatin1String("<p>=-=-=-=-=<br/>"
165  "<i>Powered by <b><a href='http://blogilo.gnufolks.org/'>Blogilo</a></b></i></p>");
166  post->setContent(post->content() + poweredStr);
167  }
168  preparePost( post );
169  connect( d->kBlog, SIGNAL(createdPost(KBlog::BlogPost*)),
170  this, SLOT(postPublished(KBlog::BlogPost*)) );
171  d->kBlog->createPost( post );
172 }
173 
174 void Backend::postPublished( KBlog::BlogPost *post )
175 {
176  kDebug() << "Blog Id: " << d->bBlog->id();
177  if ( post->status() == KBlog::BlogPost::Error ) {
178  kDebug() << "Publishing/Modifying Failed";
179  const QString tmp( i18n( "Publishing/Modifying post failed: %1", post->error() ) );
180  kDebug() << "Emitting sigError...";
181  Q_EMIT sigError( tmp );
182  return;
183  }
184  kDebug()<<"isPrivate: "<<post->isPrivate();
185  d->mSubmitPostStatusMap[ post ] = post->status();
186  connect( d->kBlog, SIGNAL(fetchedPost(KBlog::BlogPost*)),
187  this, SLOT(savePostInDbAndEmitResult(KBlog::BlogPost*)) );
188  d->kBlog->fetchPost( post );
189 }
190 
191 void Backend::uploadMedia( BilboMedia * media )
192 {
193  kDebug() << "Blog Id: " << d->bBlog->id();
194  QString tmp;
195  switch ( d->bBlog->api() ) {
196  case BilboBlog::BLOGGER1_API:
197  case BilboBlog::BLOGGER_API:
198  kDebug() << "The Blogger1 and Blogspot API type doesn't support uploading Media files.";
199  tmp = i18n( "Uploading media failed: Your Blog API does not support uploading media objects.");
200  kDebug() << "Emitting sigError...";
201  Q_EMIT sigMediaError( tmp, media );
202  return;
203  case BilboBlog::METAWEBLOG_API:
204  case BilboBlog::MOVABLETYPE_API:
205  case BilboBlog::WORDPRESSBUGGY_API:
206  KBlog::BlogMedia *m = new KBlog::BlogMedia() ;
207  KBlog::MetaWeblog *MWBlog = qobject_cast<KBlog::MetaWeblog*>( d->kBlog );
208 
209  m->setMimetype( media->mimeType() );
210 
211  QByteArray data;
212  KIO::TransferJob *job = KIO::get( media->localUrl(), KIO::Reload, KIO::HideProgressInfo);
213  if( !KIO::NetAccess::synchronousRun(job, 0, &data) ){
214  kError()<<"Job error: " << job->errorString();
215  tmp = i18n( "Uploading media failed: Cannot read the media file, please check if it exists. Path: %1", media->localUrl().pathOrUrl() );
216  kDebug() << "Emitting sigError...";
217  Q_EMIT sigMediaError( tmp, media );
218  }
219 
220  if ( data.count() == 0 ) {
221  kError() << "Cannot read the media file, please check if it exists.";
222  tmp = i18n( "Uploading media failed: Cannot read the media file, please check if it exists. Path: %1", media->localUrl().pathOrUrl() );
223  kDebug() << "Emitting sigError...";
224  Q_EMIT sigMediaError( tmp, media );
225  delete m;
226  return;
227  }
228 
229  m->setData( data );
230  m->setName( media->name() );
231 
232  media->setCheckSum( qChecksum( data.data(), data.count() ) );
233 
234  if ( media->checksum() == 0 ) {
235  kError() << "Media file checksum is zero";
236  tmp = i18n( "Uploading media failed: Media file checksum is zero, please check file path. Path: %1",
237  media->localUrl().pathOrUrl() );
238  kDebug() << "Emitting sigError...";
239  Q_EMIT sigMediaError( tmp, media );
240  delete m;
241  return;
242  }
243 
244  if ( !MWBlog ) {
245  kError() << "MWBlog is NULL: casting has not worked, this should NEVER happen, has the gui allowed using GDATA?";
246  tmp = i18n( "INTERNAL ERROR: MWBlog is NULL: casting has not worked, this should NEVER happen." );
247  kDebug() << "Emitting sigError...";
248  Q_EMIT sigError( tmp );
249  delete m;
250  return;
251  }
252  d->mPublishMediaMap[ m ] = media;
253  connect( MWBlog, SIGNAL(createdMedia(KBlog::BlogMedia*)), this, SLOT(mediaUploaded(KBlog::BlogMedia*)) );
254  connect( MWBlog, SIGNAL(errorMedia(KBlog::Blog::ErrorType,QString,KBlog::BlogMedia*)),
255  this, SLOT(slotMediaError(KBlog::Blog::ErrorType,QString,KBlog::BlogMedia*)) );
256  MWBlog->createMedia( m );
257  return;
258  }
259  kError() << "Api type isn't set correctly!";
260  tmp = i18n( "API type is not set correctly." );
261  Q_EMIT sigError( tmp );
262 }
263 
264 void Backend::mediaUploaded( KBlog::BlogMedia * media )
265 {
266  kDebug() << "Blog Id: " << d->bBlog->id() << "Media: "<<media->url();
267  if(!media){
268  kError()<<"ERROR! Media returned from KBlog is NULL!";
269  return;
270  }
271  BilboMedia * m = d->mPublishMediaMap.value( media );
272  if(!m){
273  kError()<<"ERROR! Media returned from KBlog doesn't exist on the Map! Url is:"
274  << media->url();
275  return;
276  }
277  d->mPublishMediaMap.remove( media );
278  if ( media->status() == KBlog::BlogMedia::Error ) {
279  kError() << "Upload error! with this message: " << media->error();
280  const QString tmp( i18n( "Uploading media failed: %1", media->error() ) );
281  kDebug() << "Emitting sigMediaError ...";
282  Q_EMIT sigMediaError( tmp, m );
283  return;
284  }
285  quint16 newChecksum = qChecksum( media->data().data(), media->data().count() );
286  if ( newChecksum != m->checksum() ) {
287  kError() << "Check sum error: checksum of sent file: " << m->checksum() <<
288  " Checksum of received file: " << newChecksum << "Error: " << media->error() << endl;
289  const QString tmp( i18n( "Uploading media failed: Checksum error. Returned error: %1",
290  media->error() ) );
291  kDebug() << "Emitting sigMediaError ...";
292  Q_EMIT sigMediaError( tmp, m );
293  return;
294  }
295  m->setRemoteUrl( QUrl( media->url().url() ).toString() );
296  m->setUploaded( true );
297  kDebug() << "Emitting sigMediaUploaded...";
298  Q_EMIT sigMediaUploaded( m );
299 }
300 
301 void Backend::modifyPost( BilboPost* post )
302 {
303  kDebug() << "Blog Id: " << d->bBlog->id();
304 // BilboPost tmpPost = post;
305  preparePost( post );
306  connect( d->kBlog, SIGNAL(modifiedPost(KBlog::BlogPost*)),
307  this, SLOT(postPublished(KBlog::BlogPost*)) );
308  d->kBlog->modifyPost( post );
309 }
310 
311 void Backend::removePost( BilboPost* post )
312 {
313  kDebug() << "Blog Id: " << d->bBlog->id();
314 
315 // KBlog::BlogPost *bp = post.toKBlogPost();
316  connect( d->kBlog, SIGNAL(removedPost(KBlog::BlogPost*)),
317  this, SLOT(slotPostRemoved(KBlog::BlogPost*)) );
318  d->kBlog->removePost( post );
319 }
320 
321 void Backend::slotPostRemoved( KBlog::BlogPost *post )
322 {
323  if(!post) {
324  kDebug()<<"post returned from server is NULL";
325  return;
326  }
327  if( !DBMan::self()->removePost(d->bBlog->id(), post->postId()) ) {
328  kDebug()<<"cannot remove post from database, error: "<<DBMan::self()->lastErrorText();
329  }
330  emit sigPostRemoved(d->bBlog->id(), BilboPost(*post));
331 }
332 
333 void Backend::fetchPost( BilboPost* post )
334 {
335 // KBlog::BlogPost *bp = post.toKBlogPost();
336  connect( d->kBlog, SIGNAL(fetchedPost(KBlog::BlogPost*)),
337  this, SLOT(slotPostFetched(KBlog::BlogPost*)) );
338  d->kBlog->fetchPost( post );
339 }
340 
341 void Backend::slotPostFetched( KBlog::BlogPost *post )
342 {
343  emit sigPostFetched( new BilboPost(*post) );
344 // delete post;
345 }
346 
347 void Backend::error( KBlog::Blog::ErrorType type, const QString & errorMessage )
348 {
349  kDebug() << "Blog Id: " << d->bBlog->id();
350  QString errType = errorTypeToString( type );
351  errType += errorMessage;
352  kDebug() << errType;
353  kDebug() << "Emitting sigError";
354  Q_EMIT sigError( errType );
355 }
356 
357 void Backend::slotMediaError( KBlog::Blog::ErrorType type, const QString & errorMessage,
358  KBlog::BlogMedia * media )
359 {
360  kDebug();
361  QString errType = errorTypeToString( type );
362  errType += errorMessage;
363  kDebug() << errType;
364  kDebug() << "Emitting sigMediaError ...";
365  emit sigMediaError( errorMessage, d->mPublishMediaMap[ media ] );
366  d->mPublishMediaMap.remove( media );
367 }
368 
369 QString Backend::errorTypeToString( KBlog::Blog::ErrorType type )
370 {
371  QString errType;
372  switch ( type ) {
373  case KBlog::Blog::XmlRpc:
374  errType = i18n( "Server (XMLRPC) error: " );
375  break;
376  case KBlog::Blog::Atom:
377  errType = i18n( "Server (Atom) error: " );
378  break;
379  case KBlog::Blog::ParsingError:
380  errType = i18n( "Parsing error: " );
381  break;
382  case KBlog::Blog::AuthenticationError:
383  errType = i18n( "Authentication error: " );
384  break;
385  case KBlog::Blog::NotSupported:
386  errType = i18n( "Not supported error: " );
387  break;
388  default:
389  errType = i18n( "Unknown error: " );
390  };
391  return errType;
392 }
393 
394 void Backend::savePostInDbAndEmitResult( KBlog::BlogPost *post )
395 {
396  if(!post) {
397  kError()<<"ERROR: post is NULL ";
398  Q_EMIT sigError( i18n("post is NULL") );
399  return;
400  }
401  kDebug()<<"isPrivate: "<<post->isPrivate();
402  BilboPost *pp = new BilboPost( *post );
403  int post_id;
404  if( d->mSubmitPostStatusMap[ post ] == KBlog::BlogPost::Modified) {
405  post_id = DBMan::self()->editPost( *pp, d->bBlog->id() );
406  } else {
407  post_id = DBMan::self()->addPost( *pp, d->bBlog->id() );
408  }
409  d->mSubmitPostStatusMap.remove(post);
410  if ( post_id != -1 ) {
411  pp->setPrivate( post->isPrivate() );
412  pp->setId( post_id );
413  kDebug() << "Emitting sigPostPublished ...";
414  Q_EMIT sigPostPublished( d->bBlog->id(), pp );
415  }
416  // TODO crashes stylegetter on GData. Somehow the post gets deleted before
417  // slotFetchedPost as it seems. Don't get all the pointer copies done here.
418  //delete post;
419 }
420 
421 KBlog::BlogPost* Backend::preparePost( KBlog::BlogPost* post )
422 {
423  QString content = post->content();
424  QString html1;
425  int i = 0;
426  int found = content.indexOf(QLatin1String("<pre>"), i, Qt::CaseInsensitive);
427  while ( found != -1 )
428  {
429  html1 += content.mid( i, found-i).remove(QLatin1Char('\n'));
430  i = found;
431  found = content.indexOf(QLatin1String("</pre>"), i, Qt::CaseInsensitive);
432  if ( found != -1 ) {
433  html1 += content.mid( i, found+5-i);
434  i = found + 5;
435  found = content.indexOf(QLatin1String("<pre>"), i, Qt::CaseInsensitive);
436  } else {
437  html1 += content.mid( i, content.length()-i );
438  i = -1;
439  }
440  }
441  if ( i != -1 )
442  html1 += content.mid( i, content.length()-i).remove(QLatin1Char('\n'));
443  post->setContent( html1 );
444 
445  content = post->additionalContent();
446  QString html2 = QString();
447  i= 0;
448  found = content.indexOf(QLatin1String("<pre>"), i, Qt::CaseInsensitive);
449  while ( found != -1 )
450  {
451  html2 += content.mid( i, found-i).remove(QLatin1Char('\n'));
452  i = found;
453  found = content.indexOf(QLatin1String("</pre>"), i, Qt::CaseInsensitive);
454  if ( found != -1 ) {
455  html2 += content.mid( i, found+5-i);
456  i = found + 5;
457  found = content.indexOf(QLatin1String("<pre>"), i, Qt::CaseInsensitive);
458  } else {
459  html2 += content.mid( i, content.length()-i );
460  i = -1;
461  }
462  }
463  if ( i != -1 )
464  html2 += content.mid( i, content.length()-i).remove(QLatin1Char('\n'));
465  post->setAdditionalContent( html2 );
466 
467  //the following two lines are replaced by the above code, because '\n' characters shouldn't
468  //be omitted inside <pre> blocks.
469 
470  //post.setContent( post.content().remove('\n') );
471  //post.setAdditionalContent( post.additionalContent().remove( '\n' ) );
472  if ( d->bBlog->api() == BilboBlog::MOVABLETYPE_API || d->bBlog->api() == BilboBlog::WORDPRESSBUGGY_API ) {
473  QStringList content = post->content().split(splitRX);
474  if( content.count() == 2 ) {
475  post->setContent(content.at(0));
476  post->setAdditionalContent( content.at(1) );
477  }
478  }
479  // if( d->bBlog->api() == BilboBlog::MOVABLETYPE_API && post.categoryList().count() > 0 ) {
480  // mCreatePostCategories = post.categoryList();
481  // categoryListNotSet = true;
482  // }
483  return post;//.toKBlogPost();
484 }
485 
486 void Backend::bloggerAuthenticated(const QMap< QString, QString > &authData)
487 {
488  d->bBlog->setAuthData( authData );
489  DBMan::self()->saveAuthData( authData, d->bBlog->id() );
490 }
splitRX
const QRegExp splitRX(QLatin1String("((<hr/?>)?<!--split-->)"))
QString::indexOf
int indexOf(QChar ch, int from, Qt::CaseSensitivity cs) const
DBMan::clearCategories
bool clearCategories(int blog_id)
Definition: dbman.cpp:659
BilboBlog::METAWEBLOG_API
Definition: bilboblog.h:45
Backend::postPublished
void postPublished(KBlog::BlogPost *post)
Definition: backend.cpp:174
QByteArray
BilboBlog::BLOGGER_API
Definition: bilboblog.h:45
Backend::slotPostFetched
void slotPostFetched(KBlog::BlogPost *post)
Definition: backend.cpp:341
BilboMedia::setCheckSum
void setCheckSum(quint16 sum)
Definition: bilbomedia.cpp:160
QString::split
QStringList split(const QString &sep, SplitBehavior behavior, Qt::CaseSensitivity cs) const
DBMan::lastErrorText
QString lastErrorText() const
Definition: dbman.cpp:110
QList::at
const T & at(int i) const
QMap< QString, KBlog::BlogPost * >
Backend::publishPost
void publishPost(BilboPost *post)
Use this to publish a post to server.
Definition: backend.cpp:159
Backend::sigCategoryListFetched
void sigCategoryListFetched(int blog_id)
emit when a categoriesListed() Done and Categories added to DB
DBMan::saveAuthData
bool saveAuthData(const QMap< QString, QString > &authData, int blog_id)
Definition: dbman.cpp:972
DBMan::self
static DBMan * self()
Retrieve the instance of DataBase Manager.
Definition: dbman.cpp:117
QString::remove
QString & remove(int position, int n)
BilboMedia::name
QString name() const
Definition: bilbomedia.cpp:125
BilboPost
Definition of a blog post! it's implemented to decrease dependency to KBlog :)
Definition: bilbopost.h:41
Backend::sigError
void sigError(const QString &errorMessage)
this signal emitted when an error occurred on current transaction.
Backend::sigMediaError
void sigMediaError(const QString &errorMessage, BilboMedia *media)
DBMan::blog
BilboBlog * blog(int blog_id)
QString as Title, and int as blog_id.
Definition: dbman.cpp:1011
BilboBlog::WORDPRESSBUGGY_API
Definition: bilboblog.h:45
bilbopost.h
BilboMedia::setRemoteUrl
void setRemoteUrl(const KUrl &url)
Definition: bilbomedia.cpp:110
Backend::error
void error(KBlog::Blog::ErrorType type, const QString &errorMessage)
Definition: backend.cpp:347
Backend::bloggerAuthenticated
void bloggerAuthenticated(const QMap< QString, QString > &authData)
Definition: backend.cpp:486
Backend::fetchPost
void fetchPost(BilboPost *post)
Fetch a blog post from the server with a specific ID.
Definition: backend.cpp:333
QRegExp
QObject::name
const char * name() const
BilboBlog
Blog definition class!
Definition: bilboblog.h:40
QString::number
QString number(int n, int base)
QList::count
int count(const T &value) const
Backend::slotPostRemoved
void slotPostRemoved(KBlog::BlogPost *post)
Definition: backend.cpp:321
Backend::sigEntriesListFetched
void sigEntriesListFetched(int blog_id)
emit when a entriesListed() Done and Entries added to DB
blogger.h
This file is part of the for accessing Blog Servers from the Google's Blogger and BlogPost service an...
DBMan::addCategory
int addCategory(const QString &name, const QString &description, const QString &htmlUrl, const QString &rssUrl, const QString &categoryId, const QString &parentId, int blog_id)
Category:
Definition: dbman.cpp:637
Backend::removePost
void removePost(BilboPost *post)
Remove an existing post from server.
Definition: backend.cpp:311
QObject
QString::isEmpty
bool isEmpty() const
Backend::sigPostFetched
void sigPostFetched(BilboPost *post)
bilbomedia.h
QByteArray::count
int count(char ch) const
QString
QList< Category >
BilboPost::setId
void setId(const int)
Definition: bilbopost.cpp:82
QStringList
BilboMedia::setUploaded
void setUploaded(bool uploaded)
Definition: bilbomedia.cpp:90
bilboblog.h
Backend::mediaUploaded
void mediaUploaded(KBlog::BlogMedia *media)
Definition: backend.cpp:264
Backend::modifyPost
void modifyPost(BilboPost *post)
Modify an existing post.
Definition: backend.cpp:301
Backend::getEntriesListFromServer
void getEntriesListFromServer(int count)
retrieve latest posts from server
Definition: backend.cpp:133
DBMan::editPost
bool editPost(const BilboPost &post, int blog_id)
Definition: dbman.cpp:531
QUrl
QLatin1Char
Backend::uploadMedia
void uploadMedia(BilboMedia *media)
Upload a new Media object e.g.
Definition: backend.cpp:191
BilboMedia::localUrl
KUrl localUrl() const
Definition: bilbomedia.cpp:95
BilboMedia
Definition: bilbomedia.h:38
dbman.h
DBMan::addPost
int addPost(const BilboPost &post, int blog_id)
Post:
Definition: dbman.cpp:464
BilboMedia::checksum
quint16 checksum() const
Definition: bilbomedia.cpp:155
BilboMedia::mimeType
QString mimeType() const
Definition: bilbomedia.cpp:115
QString::mid
QString mid(int position, int n) const
KBlog::Blogger::authenticate
void authenticate(const QMap< QString, QString > &authData=QMap< QString, QString >())
Authenticate this instance of Blogger against Google account.
Definition: blogger.cpp:266
Backend::slotMediaError
void slotMediaError(KBlog::Blog::ErrorType type, const QString &errorMessage, KBlog::BlogMedia *media)
Definition: backend.cpp:357
QLatin1String
KBlog::Blogger
A class that can be used for access to Google blogs.
Definition: blogger.h:65
QString::length
int length() const
QByteArray::data
char * data()
description
static const char description[]
Definition: main.cpp:33
Backend::getCategoryListFromServer
void getCategoryListFromServer()
Request to Fetch categories list from server.
Definition: backend.cpp:92
Backend::savePostInDbAndEmitResult
void savePostInDbAndEmitResult(KBlog::BlogPost *post)
This function is called after a post published fine, to insert it to DB and emit sigPostPublished.
Definition: backend.cpp:394
Backend::sigMediaUploaded
void sigMediaUploaded(BilboMedia *media)
This signal is emitted when a media has been uploaded to the server.
Backend::sigPostRemoved
void sigPostRemoved(int blog_id, const BilboPost &post)
this signal is emitted when a post removed successfully.
BilboBlog::BLOGGER1_API
Definition: bilboblog.h:45
backend.h
QObject::connect
bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
Backend::entriesListed
void entriesListed(const QList< KBlog::BlogPost > &posts)
Definition: backend.cpp:141
Backend::Backend
Backend(int blog_id, QObject *parent=0)
Definition: backend.cpp:62
BilboBlog::MOVABLETYPE_API
Definition: bilboblog.h:45
Backend::~Backend
~Backend()
Definition: backend.cpp:86
Backend::sigPostPublished
void sigPostPublished(int blog_id, BilboPost *post)
This signal is emitted when a post published/modified and added/edited to Database.
Backend::categoriesListed
void categoriesListed(const QList< QMap< QString, QString > > &categories)
Definition: backend.cpp:107
QMap::value
const T value(const Key &key) const
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:32:16 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

blogilo

Skip menu "blogilo"
  • Main Page
  • Namespace List
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members

kdepim API Reference

Skip menu "kdepim API Reference"
  • akonadi_next
  • akregator
  • blogilo
  • calendarsupport
  • console
  •   kabcclient
  •   konsolekalendar
  • kaddressbook
  • kalarm
  •   lib
  • kdgantt2
  • kjots
  • kleopatra
  • kmail
  • knode
  • knotes
  • kontact
  • korgac
  • korganizer
  • ktimetracker
  • libkdepim
  • libkleo
  • libkpgp
  • mailcommon
  • messagelist
  • messageviewer
  • pimprint

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal