libopie PIM API Documentation

opimresolver.cpp

Go to the documentation of this file.
00001 #include <qcopchannel_qws.h>
00002 
00003 #include <qpe/qcopenvelope_qws.h>
00004 
00005 #include "otodoaccess.h"
00006 #include "ocontactaccess.h"
00007 
00008 //#include "opimfactory.h"
00009 #include "opimresolver.h"
00010 
00011 OPimResolver* OPimResolver::m_self = 0l;
00012 
00013 OPimResolver::OPimResolver() {
00014     /* the built in channels */
00015     m_builtIns << "Todolist" << "Addressbook" << "Datebook";
00016 }
00017 OPimResolver* OPimResolver::self() {
00018     if (!m_self)
00019         m_self = new OPimResolver();
00020 
00021     return m_self;
00022 }
00023 
00024 /*
00025  * FIXME use a cache here too
00026  */
00027 OPimRecord* OPimResolver::record( const QString& service, int uid ) {
00028     OPimRecord* rec = 0l;
00029     OPimBase* base = backend( service );
00030 
00031     if ( base )
00032         rec = base->record( uid );
00033     delete base;
00034 
00035     return rec;
00036 }
00037 OPimRecord* OPimResolver::record( const QString& service ) {
00038     return record( serviceId( service ) );
00039 }
00040 OPimRecord* OPimResolver::record( int rtti ) {
00041     OPimRecord* rec = 0l;
00042     switch( rtti ) {
00043     case 1: /* todolist */
00044         rec = new OTodo();
00045     case 2: /* contact  */
00046         rec = new OContact();
00047     default:
00048         break;
00049     }
00050     /*
00051      * FIXME resolve externally
00052      */
00053     if (!rec ) {
00054         ;
00055     }
00056     return 0l;
00057 }
00058 bool OPimResolver::isBuiltIn( const QString& str) const{
00059     return m_builtIns.contains( str );
00060 }
00061 QCString OPimResolver::qcopChannel( enum BuiltIn& built)const {
00062     QCString str("QPE/");
00063     switch( built ) {
00064     case TodoList:
00065         str += "Todolist";
00066         break;
00067     case DateBook:
00068         str += "Datebook";
00069         break;
00070     case AddressBook:
00071         str += "Addressbook";
00072         break;
00073     default:
00074         break;
00075     }
00076 
00077     return str;
00078 }
00079 QCString OPimResolver::qcopChannel( const QString& service )const {
00080     QCString str("QPE/");
00081     str += service.latin1();
00082     return str;
00083 }
00084 /*
00085  * Implement services!!
00086  * FIXME
00087  */
00088 QCString OPimResolver::applicationChannel( enum BuiltIn& built)const {
00089     QCString str("QPE/Application/");
00090     switch( built ) {
00091     case TodoList:
00092         str += "todolist";
00093         break;
00094     case DateBook:
00095         str += "datebook";
00096         break;
00097     case AddressBook:
00098         str += "addressbook";
00099         break;
00100     }
00101 
00102     return str;
00103 }
00104 QCString OPimResolver::applicationChannel( const QString& service )const {
00105     QCString str("QPE/Application/");
00106 
00107     if ( isBuiltIn( service ) ) {
00108         if ( service == "Todolist" )
00109             str += "todolist";
00110         else if ( service == "Datebook" )
00111             str += "datebook";
00112         else if ( service == "Addressbook" )
00113             str += "addressbook";
00114     }else
00115         ; // FIXME for additional stuff
00116 
00117     return str;
00118 }
00119 QStringList OPimResolver::services()const {
00120     return m_builtIns;
00121 }
00122 QString OPimResolver::serviceName( int rtti ) const{
00123     QString str;
00124     switch ( rtti ) {
00125     case TodoList:
00126         str = "Todolist";
00127         break;
00128     case DateBook:
00129         str = "Datebook";
00130         break;
00131     case AddressBook:
00132         str = "Addressbook";
00133         break;
00134     default:
00135         break;
00136     }
00137     return str;
00138     // FIXME me for 3rd party
00139 }
00140 int OPimResolver::serviceId( const QString& service ) {
00141     int rtti = 0;
00142     if ( service == "Todolist" )
00143         rtti = TodoList;
00144     else if ( service == "Datebook" )
00145         rtti = DateBook;
00146     else if ( service == "Addressbook" )
00147         rtti = AddressBook;
00148 
00149     return rtti;
00150 }
00154 bool OPimResolver::add( const QString& service,  const OPimRecord& rec) {
00155     if ( QCopChannel::isRegistered( applicationChannel( service ) ) ) {
00156         QByteArray data;
00157         QDataStream arg(data, IO_WriteOnly );
00158         if ( rec.saveToStream( arg ) ) {
00159             QCopEnvelope env( applicationChannel( service ), "add(int,QByteArray)" );
00160             env << rec.rtti();
00161             env << data;
00162         }else
00163             return false;
00164     }else{
00165         OPimBase* base = backend( service );
00166         if (!base ) return false;
00167 
00168         base->load();
00169         base->add( rec );
00170         base->save();
00171         delete base;
00172     }
00173 
00174     return true;
00175 }
00176 OPimBase* OPimResolver::backend( const QString& service ) {
00177     return backend( serviceId( service ) );
00178 }
00179 OPimBase* OPimResolver::backend( int rtti ) {
00180     OPimBase* base = 0l;
00181     switch( rtti ) {
00182     case TodoList:
00183         base = new OTodoAccess();
00184         break;
00185     case DateBook:
00186         break;
00187     case AddressBook:
00188         base = new OContactAccess("Resolver");
00189         break;
00190     default:
00191         break;
00192     }
00193     // FIXME for 3rd party
00194     if (!base )
00195         ;
00196 
00197     return base;
00198 }
KDE Logo
This file is part of the documentation for OPIE Version 1.1.
Documentation copyright © 1997-2003 the KDE developers. 2003 OPIE developers
Generated on Tue Feb 10 20:25:21 2004 by doxygen 1.3.5 written by Dimitri van Heesch, © 1997-2001