00001 /* 00002 This file is part of the Opie Project 00003 Copyright (C) The Main Author <main-author@whereever.org> 00004 =. Copyright (C) The Opie Team <opie-devel@handhelds.org> 00005 .=l. 00006 .>+-= 00007 _;:, .> :=|. This program is free software; you can 00008 .> <`_, > . <= redistribute it and/or modify it under 00009 :`=1 )Y*s>-.-- : the terms of the GNU Library General Public 00010 .="- .-=="i, .._ License as published by the Free Software 00011 - . .-<_> .<> Foundation; either version 2 of the License, 00012 ._= =} : or (at your option) any later version. 00013 .%`+i> _;_. 00014 .i_,=:_. -<s. This program is distributed in the hope that 00015 + . -:. = it will be useful, but WITHOUT ANY WARRANTY; 00016 : .. .:, . . . without even the implied warranty of 00017 =_ + =;=|` MERCHANTABILITY or FITNESS FOR A 00018 _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU 00019 ..}^=.= = ; Library General Public License for more 00020 ++= -. .` .: details. 00021 : = ...= . :.=- 00022 -. .:....=;==+<; You should have received a copy of the GNU 00023 -_. . . )=. = Library General Public License along with 00024 -- :-=` this library; see the file COPYING.LIB. 00025 If not, write to the Free Software Foundation, 00026 Inc., 59 Temple Place - Suite 330, 00027 Boston, MA 02111-1307, USA. 00028 */ 00029 00030 #include "opimresolver.h" 00031 00032 /* OPIE */ 00033 #include <opie2/ocontactaccess.h> 00034 #include <opie2/otodoaccess.h> 00035 #include <qpe/qcopenvelope_qws.h> 00036 00037 /* QT */ 00038 #include <qcopchannel_qws.h> 00039 00040 namespace Opie { 00041 00042 OPimResolver* OPimResolver::m_self = 0l; 00043 00044 OPimResolver::OPimResolver() { 00045 /* the built in channels */ 00046 m_builtIns << "Todolist" << "Addressbook" << "Datebook"; 00047 } 00048 OPimResolver* OPimResolver::self() { 00049 if (!m_self) 00050 m_self = new OPimResolver(); 00051 00052 return m_self; 00053 } 00054 00055 /* 00056 * FIXME use a cache here too 00057 */ 00058 OPimRecord* OPimResolver::record( const QString& service, int uid ) { 00059 OPimRecord* rec = 0l; 00060 OPimBase* base = backend( service ); 00061 00062 if ( base ) 00063 rec = base->record( uid ); 00064 delete base; 00065 00066 return rec; 00067 } 00068 OPimRecord* OPimResolver::record( const QString& service ) { 00069 return record( serviceId( service ) ); 00070 } 00071 OPimRecord* OPimResolver::record( int rtti ) { 00072 OPimRecord* rec = 0l; 00073 switch( rtti ) { 00074 case 1: /* todolist */ 00075 rec = new OPimTodo(); 00076 case 2: /* contact */ 00077 rec = new OPimContact(); 00078 default: 00079 break; 00080 } 00081 /* 00082 * FIXME resolve externally 00083 */ 00084 if (!rec ) { 00085 ; 00086 } 00087 return 0l; 00088 } 00089 bool OPimResolver::isBuiltIn( const QString& str) const{ 00090 return m_builtIns.contains( str ); 00091 } 00092 QCString OPimResolver::qcopChannel( enum BuiltIn& built)const { 00093 QCString str("QPE/"); 00094 switch( built ) { 00095 case TodoList: 00096 str += "Todolist"; 00097 break; 00098 case DateBook: 00099 str += "Datebook"; 00100 break; 00101 case AddressBook: 00102 str += "Addressbook"; 00103 break; 00104 default: 00105 break; 00106 } 00107 00108 return str; 00109 } 00110 QCString OPimResolver::qcopChannel( const QString& service )const { 00111 QCString str("QPE/"); 00112 str += service.latin1(); 00113 return str; 00114 } 00115 /* 00116 * Implement services!! 00117 * FIXME 00118 */ 00119 QCString OPimResolver::applicationChannel( enum BuiltIn& built)const { 00120 QCString str("QPE/Application/"); 00121 switch( built ) { 00122 case TodoList: 00123 str += "todolist"; 00124 break; 00125 case DateBook: 00126 str += "datebook"; 00127 break; 00128 case AddressBook: 00129 str += "addressbook"; 00130 break; 00131 } 00132 00133 return str; 00134 } 00135 QCString OPimResolver::applicationChannel( const QString& service )const { 00136 QCString str("QPE/Application/"); 00137 00138 if ( isBuiltIn( service ) ) { 00139 if ( service == "Todolist" ) 00140 str += "todolist"; 00141 else if ( service == "Datebook" ) 00142 str += "datebook"; 00143 else if ( service == "Addressbook" ) 00144 str += "addressbook"; 00145 }else 00146 ; // FIXME for additional stuff 00147 00148 return str; 00149 } 00150 QStringList OPimResolver::services()const { 00151 return m_builtIns; 00152 } 00153 QString OPimResolver::serviceName( int rtti ) const{ 00154 QString str; 00155 switch ( rtti ) { 00156 case TodoList: 00157 str = "Todolist"; 00158 break; 00159 case DateBook: 00160 str = "Datebook"; 00161 break; 00162 case AddressBook: 00163 str = "Addressbook"; 00164 break; 00165 default: 00166 break; 00167 } 00168 return str; 00169 // FIXME me for 3rd party 00170 } 00171 int OPimResolver::serviceId( const QString& service ) { 00172 int rtti = 0; 00173 if ( service == "Todolist" ) 00174 rtti = TodoList; 00175 else if ( service == "Datebook" ) 00176 rtti = DateBook; 00177 else if ( service == "Addressbook" ) 00178 rtti = AddressBook; 00179 00180 return rtti; 00181 } 00185 bool OPimResolver::add( const QString& service, const OPimRecord& rec) { 00186 if ( QCopChannel::isRegistered( applicationChannel( service ) ) ) { 00187 QByteArray data; 00188 QDataStream arg(data, IO_WriteOnly ); 00189 if ( rec.saveToStream( arg ) ) { 00190 QCopEnvelope env( applicationChannel( service ), "add(int,QByteArray)" ); 00191 env << rec.rtti(); 00192 env << data; 00193 }else 00194 return false; 00195 }else{ 00196 OPimBase* base = backend( service ); 00197 if (!base ) return false; 00198 00199 base->load(); 00200 base->add( rec ); 00201 base->save(); 00202 delete base; 00203 } 00204 00205 return true; 00206 } 00207 OPimBase* OPimResolver::backend( const QString& service ) { 00208 return backend( serviceId( service ) ); 00209 } 00210 OPimBase* OPimResolver::backend( int rtti ) { 00211 OPimBase* base = 0l; 00212 switch( rtti ) { 00213 case TodoList: 00214 base = new OPimTodoAccess(); 00215 break; 00216 case DateBook: 00217 break; 00218 case AddressBook: 00219 base = new OPimContactAccess("Resolver"); 00220 break; 00221 default: 00222 break; 00223 } 00224 // FIXME for 3rd party 00225 if (!base ) 00226 ; 00227 00228 return base; 00229 } 00230 00231 }
1.4.2