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 nco:fullname \"%1\"^^<http://www.w3.org/2001/XMLSchema#string>."
00060 "} } " );
00061 } else if ( criterion == Email ) {
00062 query += QString::fromLatin1( "SELECT DISTINCT ?person WHERE {"
00063 " graph ?g { ?person a nco:PersonContact ;"
00064 " nco:hasEmailAddress ?email ."
00065 " ?email nco:emailAddress \"%1\"^^<http://www.w3.org/2001/XMLSchema#string> ."
00066 " } }" );
00067 } else if ( criterion == NickName ) {
00068 query += QString::fromLatin1( "SELECT DISTINCT ?r WHERE {"
00069 " graph ?g { ?r a nco:PersonContact ."
00070 " ?r nco:nickname ?v . ?v bif:contains \"'%1'\" ."
00071 " } }" );
00072 }
00073
00074 if ( d->mLimit != -1 ) {
00075 query += QString::fromLatin1( " LIMIT %1" ).arg( d->mLimit );
00076 }
00077 query = query.arg( value );
00078
00079 ItemSearchJob::setQuery( query );
00080 }
00081
00082 void ContactSearchJob::setLimit( int limit )
00083 {
00084 d->mLimit = limit;
00085 }
00086
00087 KABC::Addressee::List ContactSearchJob::contacts() const
00088 {
00089 KABC::Addressee::List contacts;
00090
00091 foreach ( const Item &item, items() ) {
00092 if ( item.hasPayload<KABC::Addressee>() )
00093 contacts.append( item.payload<KABC::Addressee>() );
00094 }
00095
00096 return contacts;
00097 }
00098
00099 #include "contactsearchjob.moc"