akonadi/contact
contactsearchjob.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include "contactsearchjob.h"
00023
00024 #include <akonadi/itemfetchscope.h>
00025
00026 using namespace Akonadi;
00027
00028 class ContactSearchJob::Private
00029 {
00030 public:
00031 int mLimit;
00032 };
00033
00034 ContactSearchJob::ContactSearchJob( QObject * parent )
00035 : ItemSearchJob( QString(), parent ), d( new Private() )
00036 {
00037 fetchScope().fetchFullPayload();
00038 d->mLimit = -1;
00039
00040
00041 ItemSearchJob::setQuery( QLatin1String( ""
00042 "prefix nco:<http://www.semanticdesktop.org/ontologies/2007/03/22/nco#>"
00043 "SELECT ?r WHERE { ?r a nco:PersonContact }" ) );
00044 }
00045
00046 ContactSearchJob::~ContactSearchJob()
00047 {
00048 delete d;
00049 }
00050
00051 void ContactSearchJob::setQuery( Criterion criterion, const QString &value )
00052 {
00053 QString query = QString::fromLatin1(
00054 "prefix nco:<http://www.semanticdesktop.org/ontologies/2007/03/22/nco#>" );
00055
00056 if ( criterion == Name ) {
00057 query += QString::fromLatin1( "SELECT DISTINCT ?r WHERE {"
00058 " graph ?g { ?r a nco:PersonContact ."
00059 " ?r <" + akonadiItemIdUri().toEncoded() + "> ?itemId . "
00060 " ?r nco:fullname \"%1\"^^<http://www.w3.org/2001/XMLSchema#string>."
00061 "} } " );
00062 } else if ( criterion == Email ) {
00063 query += QString::fromLatin1( "SELECT DISTINCT ?person WHERE {"
00064 " graph ?g { ?person a nco:PersonContact ;"
00065 " ?person <" + akonadiItemIdUri().toEncoded() + "> ?itemId . "
00066 " nco:hasEmailAddress ?email ."
00067 " ?email nco:emailAddress \"%1\"^^<http://www.w3.org/2001/XMLSchema#string> ."
00068 " } }" );
00069 } else if ( criterion == NickName ) {
00070 query += QString::fromLatin1( "SELECT DISTINCT ?r WHERE {"
00071 " graph ?g { ?r a nco:PersonContact ."
00072 " ?r <" + akonadiItemIdUri().toEncoded() + "> ?itemId . "
00073 " ?r nco:nickname ?v . ?v bif:contains \"'%1'\" ."
00074 " } }" );
00075 }
00076
00077 if ( d->mLimit != -1 ) {
00078 query += QString::fromLatin1( " LIMIT %1" ).arg( d->mLimit );
00079 }
00080 query = query.arg( value );
00081
00082 ItemSearchJob::setQuery( query );
00083 }
00084
00085 void ContactSearchJob::setLimit( int limit )
00086 {
00087 d->mLimit = limit;
00088 }
00089
00090 KABC::Addressee::List ContactSearchJob::contacts() const
00091 {
00092 KABC::Addressee::List contacts;
00093
00094 foreach ( const Item &item, items() ) {
00095 if ( item.hasPayload<KABC::Addressee>() )
00096 contacts.append( item.payload<KABC::Addressee>() );
00097 }
00098
00099 return contacts;
00100 }
00101
00102 #include "contactsearchjob.moc"