addressbookpart.cpp
00001
00002
00003 #include <kdebug.h>
00004 #include <kiconloader.h>
00005 #include <kmessagebox.h>
00006 #include <ksimpleconfig.h>
00007 #include <kurlrequester.h>
00008
00009 #include <kabc/stdaddressbook.h>
00010
00011 #include <kparts/genericfactory.h>
00012
00013
00014 #include <mainwindow.h>
00015
00016 #include <addressbooksyncee.h>
00017 #include <syncer.h>
00018
00019 #include "addressbookpart.h"
00020
00021 typedef KParts::GenericFactory< KSync::AddressBookPart> AddressBookPartFactory;
00022 K_EXPORT_COMPONENT_FACTORY( libaddressbookpart, AddressBookPartFactory )
00023
00024 using namespace KSync;
00025
00026
00027
00028 AddressBookPart::AddressBookPart( QWidget* parent, const char* name,
00029 QObject* obj, const char* ,
00030 const QStringList & )
00031 : ManipulatorPart( parent ? parent : obj , name )
00032 {
00033 setInstance( AddressBookPartFactory::instance() );
00034 m_pixmap = KGlobal::iconLoader()->loadIcon("kaddressbook", KIcon::Desktop, 48 );
00035 }
00036 AddressBookPart::~AddressBookPart(){
00037 }
00038 KAboutData *AddressBookPart::createAboutData(){
00039 return new KAboutData("KSyncAddressBookPart", I18N_NOOP("Sync AddressBook Part"), "0.0" );
00040 }
00041 QPixmap* AddressBookPart::pixmap(){
00042 return &m_pixmap;
00043 }
00044 QString AddressBookPart::type()const {
00045 return QString::fromLatin1("Addressbook");
00046 }
00047 QString AddressBookPart::name()const{
00048 return i18n("Addressbook");
00049 }
00050 QString AddressBookPart::iconName()const {
00051 return QString::fromLatin1("kaddressbook");
00052 }
00053 QString AddressBookPart::description()const {
00054 return i18n("The Addressbook Part");
00055 }
00056 bool AddressBookPart::configIsVisible()const {
00057 return false;
00058 }
00059 bool AddressBookPart::canSync()const{
00060 return true;
00061 }
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075 void AddressBookPart::sync( const SynceeList& in,
00076 SynceeList& out ){
00077 kdDebug(5228) << "processEntry in AddressBookPart aye" << endl;
00078
00079 Profile prof = core()->currentProfile();
00080 KonnectorProfile kon = core()->currentKonnectorProfile();
00081
00082
00083 QString meta = kon.uid() + "/" + prof.uid() + "addressbook.rc";
00084 bool met = kon.kapabilities().isMetaSyncingEnabled();
00085 kdDebug(5228) << "Is meta syncing enabled? " << met << endl;
00086
00087
00088 AddressBookSyncee *aBook = in.addressBookSyncee();
00089 if (!aBook) {
00090 done();
00091 return;
00092 }
00093
00094 progress( Progress(i18n("Going to load AddressBook") ) );
00095
00096 AddressBookSyncee* ourbook;
00097 ourbook = load();
00098
00099
00100 if (!ourbook) {
00101 error( Error(i18n("Could not load the AddressBook") ) );
00102 done();
00103 return;
00104 }
00105 ourbook->setSource( i18n("KDE Addressbook") );
00106
00107
00108 if (met)
00109 doMeta( ourbook, meta );
00110
00111 progress( Progress(i18n("Going to sync AddressBook") ) );
00112
00113 Syncer sync( core()->syncUi(), core()->syncAlgorithm() );
00114 sync.addSyncee( aBook );
00115 sync.addSyncee( ourbook );
00116 sync.sync();
00117
00118 if ( confirmBeforeWriting() ) {
00119 switch ( KMessageBox::questionYesNo(0, i18n("Do you want to write back addressbook?"), i18n("Save"),
00120 KStdGuiItem::save(), KStdGuiItem::dontSave() ) ) {
00121 case KMessageBox::No:{
00122 delete ourbook;
00123 done();
00124 return;
00125
00126 break;
00127 }
00128 default:
00129 break;
00130 }
00131 }
00132
00133
00134
00135
00136
00137
00138 progress( Progress(i18n("Going to save AddressBook") ) );
00139
00140 save( ourbook, met ? meta : QString::null );
00141
00142
00143 out.append( ourbook );
00144 done();
00145 }
00146 void AddressBookPart::slotConfigOk(){
00147 }
00148
00149
00150
00151
00152
00153 AddressBookSyncee* AddressBookPart::load() {
00154 KABC::AddressBook* book;
00155 AddressBookSyncee* sync;
00156 kdDebug(5228) << "use default one " << endl;
00157 book = KABC::StdAddressBook::self();
00158 if (!book->load() )
00159 return 0l;
00160 sync = book2syncee( book );
00161 return sync;
00162 }
00163 void AddressBookPart::doMeta( Syncee* syncee, const QString& path ) {
00164 kdDebug(5228) << "Do Meta" << endl;
00165 QString str = QDir::homeDirPath();
00166 str += "/.kitchensync/meta/konnector-" + path;
00167 if (!QFile::exists( str ) ) {
00168 kdDebug(5228) << "Path does not exist ->First Sync" << endl;
00169 kdDebug(5228) << "Path was " << str << " " << path << endl;
00170 syncee->setFirstSync( true );
00171 syncee->setSyncMode( Syncee::MetaMode );
00172 return;
00173 }
00174 syncee->setSyncMode( Syncee::MetaMode );
00175 KSimpleConfig conf( str );
00176
00177 SyncEntry* entry;
00178 QString timestmp;
00179 QStringList ids;
00180
00181
00182 for (entry= syncee->firstEntry(); entry; entry = syncee->nextEntry() ) {
00183 ids << entry->id();
00184 kdDebug(5228) << "Entry " << entry->name() << endl << "Entry id" << entry->id() << endl;
00185 if ( conf.hasGroup( entry->id() ) ) {
00186 conf.setGroup( entry->id() );
00187 timestmp = conf.readEntry("time");
00188 kdDebug(5228) << "Timestamp Old" << timestmp << endl;
00189 kdDebug(5228) << "Timestamp New" << entry->timestamp() << endl;
00190 if ( timestmp != entry->timestamp() )
00191 entry->setState( SyncEntry::Modified );
00192 }
00193
00194 else {
00195 kdDebug(5228) << "Entry added" << endl;
00196 entry->setState( SyncEntry::Added );
00197 }
00198 }
00199
00200 QStringList groups = conf.groupList();
00201 QStringList::Iterator it;
00202 for (it = groups.begin(); it != groups.end(); ++it ) {
00203
00204 if (!ids.contains( (*it) ) ) {
00205 kdDebug(5228) << "Entry removed from abook" << (*it) << endl;
00206 KABC::Addressee adr;
00207 adr.setUid( (*it) );
00208 AddressBookSyncEntry* entry;
00209 entry = new AddressBookSyncEntry( adr );
00210 entry->setState( SyncEntry::Removed );
00211 syncee->addEntry( entry );
00212 }
00213 }
00214 }
00215 void AddressBookPart::writeMeta( KABC::AddressBook* book, const QString& path ) {
00216
00217 if (path.isEmpty() ) return;
00218
00219 kdDebug(5228) << "WriteMeta AddressBookPart " << endl;
00220 QString str = QDir::homeDirPath();
00221 str += "/.kitchensync/meta/konnector-" + path;
00222 if (!QFile::exists( str ) ) {
00223 kdDebug(5228) << "Path does not exist " << endl;
00224 kdDebug(5228) << "Path = " << str << endl;
00225 KonnectorProfile kon = core()->currentKonnectorProfile();
00226 QDir dir;
00227 dir.mkdir( dir.homeDirPath() + "/.kitchensync");
00228 dir.mkdir( dir.homeDirPath() + "/.kitchensync/meta");
00229 dir.mkdir( dir.homeDirPath() + "/.kitchensync/meta/konnector-" + kon.uid() );
00230 kdDebug(5228) << "Kon UID " << kon.uid() << endl;
00231 }
00232 KSimpleConfig conf( str );
00233 QStringList grpList = conf.groupList();
00234 QStringList::Iterator it;
00235 for ( it = grpList.begin(); it != grpList.end(); ++it ) {
00236 conf.deleteGroup( (*it) );
00237 }
00238
00239 KABC::AddressBook::Iterator aIt;
00240 for ( aIt = book->begin(); aIt != book->end(); ++aIt ) {
00241 kdDebug(5228) << "Name " << (*aIt).realName() << endl;
00242 kdDebug(5228) << "UID " << (*aIt).uid() << endl;
00243 kdDebug(5228) << "Timestamp " << (*aIt).revision().toString() << endl;
00244
00245 conf.setGroup( (*aIt).uid() );
00246 conf.writeEntry( "time", (*aIt).revision().toString() );
00247 }
00248 }
00249 void AddressBookPart::save( AddressBookSyncee* sync, const QString& meta) {
00250 AddressBookSyncEntry* entry;
00251 KABC::AddressBook* book;
00252
00253
00254
00255 book = KABC::StdAddressBook::self();
00256
00257 book->clear();
00258
00259 for ( entry = (AddressBookSyncEntry*)sync->firstEntry();
00260 entry;
00261 entry= (AddressBookSyncEntry*) sync->nextEntry() ) {
00262 if( entry->state() != SyncEntry::Removed ) {
00263 KABC::Addressee adr = entry->addressee();
00264 adr.setResource( resource(entry->resource() ) );
00265 book->insertAddressee( adr );
00266 }
00267 }
00268 KABC::StdAddressBook::save();
00269 kdDebug(5228) << "dumped abook " << endl;
00270 writeMeta( book, meta );
00271
00272 KABC::StdAddressBook::close();
00273 }
00274
00275
00276
00277
00278
00279
00280
00281
00282 AddressBookSyncee* AddressBookPart::book2syncee( KABC::AddressBook* book) {
00283 AddressBookSyncee* syncee = new AddressBookSyncee();
00284 AddressBookSyncEntry* entry=0l;
00285 KABC::AddressBook::Iterator it = book->begin();
00286 for ( ; it != book->end(); ++it ) {
00287 entry = new AddressBookSyncEntry( (*it) );
00288 QString res = (*it).resource() ? (*it).resource()->type() : QString::null;
00289 entry->setResource( res );
00290 syncee->addEntry( entry );
00291 }
00292 return syncee;
00293 }
00294
00295
00296
00297
00298
00299
00300
00301
00302
00303
00304
00305
00306
00307 KABC::Resource* AddressBookPart::resource( const QString& type ) {
00308 QPtrListIterator<KABC::Resource> it(KABC::StdAddressBook::self()->resources() );
00309 KABC::Resource* res = 0l;
00310 while ( (res = it.current()) ) {
00311 ++it;
00312 if ( res->type() == type )
00313 return res;
00314 }
00315 return 0;
00316 }
00317
00318 #include "addressbookpart.moc"
This file is part of the documentation for kitchensync Library Version 3.3.2.