summaryrefslogtreecommitdiffabout
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--kabc/addressbook.cpp70
-rw-r--r--kabc/addressbook.h5
-rw-r--r--kaddressbook/kabcore.cpp20
-rw-r--r--kaddressbook/kabcore.h2
-rw-r--r--kaddressbook/xxport/vcard_xxport.cpp1
-rw-r--r--libkdepim/ksyncmanager.cpp5
-rw-r--r--libkdepim/ksyncmanager.h5
7 files changed, 90 insertions, 18 deletions
diff --git a/kabc/addressbook.cpp b/kabc/addressbook.cpp
index 5fb49eb..295cf03 100644
--- a/kabc/addressbook.cpp
+++ b/kabc/addressbook.cpp
@@ -37,15 +37,20 @@ $Id$
#include "errorhandler.h"
*/
#include <qptrlist.h>
+#include <qtextstream.h>
+#include <qfile.h>
#include <kglobal.h>
-#include <klocale.h>
+#include <klocale.h>>
+#include <kmessagebox.h>
#include <kdebug.h>
#include <libkcal/syncdefines.h>
#include "addressbook.h"
#include "resource.h"
+#include "vcardconverter.h"
+#include "vcardparser/vcardtool.h"
//US #include "addressbook.moc"
using namespace KABC;
@@ -369,8 +374,56 @@ bool AddressBook::save( Ticket *ticket )
}
return false;
}
+void AddressBook::export2File( QString fileName )
+{
+
+ QFile outFile( fileName );
+ if ( !outFile.open( IO_WriteOnly ) ) {
+ QString text = i18n( "<qt>Unable to open file <b>%1</b> for export.</qt>" );
+ KMessageBox::error( 0, text.arg( fileName ) );
+ return ;
+ }
+ QTextStream t( &outFile );
+ t.setEncoding( QTextStream::UnicodeUTF8 );
+ Iterator it;
+ KABC::VCardConverter::Version version;
+ version = KABC::VCardConverter::v3_0;
+ for ( it = begin(); it != end(); ++it ) {
+ if ( !(*it).IDStr().isEmpty() ) {
+ (*it).insertCustom( "KADDRESSBOOK", "X-ExternalID", (*it).IDStr() );
+ }
+ KABC::VCardConverter converter;
+ QString vcard;
+ //Resource *resource() const;
+ converter.addresseeToVCard( *it, vcard, version );
+ t << vcard << "\r\n";
+ }
+ outFile.close();
+}
+void AddressBook::importFromFile( QString fileName )
+{
+
+ KABC::Addressee::List list;
+ QFile file( fileName );
+
+ file.open( IO_ReadOnly );
+ QByteArray rawData = file.readAll();
+ file.close();
+
+ QString data = QString::fromUtf8( rawData.data(), rawData.size() + 1 );
+ KABC::VCardTool tool;
+ list = tool.parseVCards( data );
+
+ KABC::Addressee::List::Iterator it;
+ for ( it = list.begin(); it != list.end(); ++it ) {
+ (*it).setResource( 0 );
+ insertAddressee( (*it), false, true );
+ }
+
+}
+
bool AddressBook::saveAB()
{
bool ok = true;
@@ -460,9 +513,9 @@ Ticket *AddressBook::requestSaveTicket( Resource *resource )
return 0;
}
-void AddressBook::insertAddressee( const Addressee &a, bool setRev )
+void AddressBook::insertAddressee( const Addressee &a, bool setRev, bool takeResource )
{
if ( blockLSEchange && setRev && a.uid().left( 19 ) == QString("last-syncAddressee-") ) {
//qDebug("block insert ");
return;
@@ -477,12 +530,17 @@ void AddressBook::insertAddressee( const Addressee &a, bool setRev )
Addressee addr = a;
if ( addr != (*it) )
changed = true;
- (*it) = a;
- if ( (*it).resource() == 0 )
- (*it).setResource( standardResource() );
-
+ if ( takeResource ) {
+ Resource * res = (*it).resource();
+ (*it) = a;
+ (*it).setResource( res );
+ } else {
+ (*it) = a;
+ if ( (*it).resource() == 0 )
+ (*it).setResource( standardResource() );
+ }
if ( changed ) {
if ( setRev ) {
// get rid of micro seconds
diff --git a/kabc/addressbook.h b/kabc/addressbook.h
index 8f62f0d..3603ec1 100644
--- a/kabc/addressbook.h
+++ b/kabc/addressbook.h
@@ -141,9 +141,10 @@ class AddressBook : public QObject
@param ticket a ticket object returned by @ref requestSaveTicket()
*/
bool save( Ticket *ticket );
bool saveAB( );
-
+ void export2File( QString fileName );
+ void importFromFile( QString fileName );
/**
Returns a iterator for first entry of address book.
*/
Iterator begin();
@@ -172,9 +173,9 @@ class AddressBook : public QObject
Insert an Addressee object into address book. If an object with the same
unique id already exists in the address book it it replaced by the new
one. If not the new object is appended to the address book.
*/
- void insertAddressee( const Addressee &, bool setRev = true );
+ void insertAddressee( const Addressee &, bool setRev = true, bool takeResource = false);
/**
Removes entry from the address book.
*/
diff --git a/kaddressbook/kabcore.cpp b/kaddressbook/kabcore.cpp
index 83fede4..6404410 100644
--- a/kaddressbook/kabcore.cpp
+++ b/kaddressbook/kabcore.cpp
@@ -1682,11 +1682,11 @@ void KABCore::initGUI()
syncManager = new KSyncManager((QWidget*)this, (KSyncInterface*)this, KSyncManager::KAPI, KABPrefs::instance(), syncMenu);
syncManager->setBlockSave(false);
- connect(syncManager , SIGNAL( save() ), this, SLOT( save() ) );
+ connect(syncManager , SIGNAL( request_file() ), this, SLOT( syncFileRequest() ) );
connect(syncManager , SIGNAL( getFile( bool )), this, SLOT(getFile( bool ) ) );
- syncManager->setDefaultFileName(locateLocal( "apps","kabc/std.vcf") );
+ syncManager->setDefaultFileName( sentSyncFile());
//connect(syncManager , SIGNAL( ), this, SLOT( ) );
#endif //KAB_EMBEDDED
initActions();
@@ -2861,11 +2861,21 @@ void KABCore::getFile( bool success )
if ( ! success ) {
setCaption( i18n("Error receiving file. Nothing changed!") );
return;
}
- //mView->watchSavedFile();
- //mView->openCalendar( defaultFileName() );
- // pending: reload received file!
+ mAddressBook->importFromFile( sentSyncFile() );
setCaption( i18n("Pi-Sync successful!") );
}
+void KABCore::syncFileRequest()
+{
+ mAddressBook->export2File( sentSyncFile() );
+}
+QString KABCore::sentSyncFile()
+{
+#ifdef _WIN32_
+ return locateLocal( "tmp", "syncab.ics" );
+#else
+ return QString( "/tmp/kapitempfile.vcf" );
+#endif
+}
diff --git a/kaddressbook/kabcore.h b/kaddressbook/kabcore.h
index 355e828..987369d 100644
--- a/kaddressbook/kabcore.h
+++ b/kaddressbook/kabcore.h
@@ -342,8 +342,9 @@ class KABCore : public QWidget, public KSyncInterface
void contactSelected( const QString &name );
void contactSelected( const QPixmap &pixmap );
public slots:
void getFile( bool success );
+ void syncFileRequest();
void setDetailsVisible( bool visible );
void setDetailsToState();
// void slotSyncMenu( int );
private slots:
@@ -464,8 +465,9 @@ class KABCore : public QWidget, public KSyncInterface
// LR *******************************
// sync stuff!
+ QString sentSyncFile();
QPopupMenu *syncMenu;
KSyncManager* syncManager;
int mGlobalSyncMode;
bool synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBook* remote,int mode);
diff --git a/kaddressbook/xxport/vcard_xxport.cpp b/kaddressbook/xxport/vcard_xxport.cpp
index acf6419..3079d42 100644
--- a/kaddressbook/xxport/vcard_xxport.cpp
+++ b/kaddressbook/xxport/vcard_xxport.cpp
@@ -120,8 +120,9 @@ bool VCardXXPort::exportContacts( const KABC::AddresseeList &list, const QString
version = KABC::VCardConverter::v2_1;
else
version = KABC::VCardConverter::v3_0;
+ version = KABC::VCardConverter::v2_1;
converter.addresseeToVCard( *it, vcard, version );
t << vcard << "\r\n\r\n";
}
diff --git a/libkdepim/ksyncmanager.cpp b/libkdepim/ksyncmanager.cpp
index 5d48884..ea543dd 100644
--- a/libkdepim/ksyncmanager.cpp
+++ b/libkdepim/ksyncmanager.cpp
@@ -274,9 +274,10 @@ void KSyncManager::enableQuick()
delete mServerSocket;
mServerSocket = 0;
return;
}
- connect( mServerSocket, SIGNAL ( saveFile() ),this, SIGNAL ( save() ) );
+ //connect( mServerSocket, SIGNAL ( saveFile() ),this, SIGNAL ( save() ) );
+ connect( mServerSocket, SIGNAL ( request_file() ),this, SIGNAL ( request_file() ) );
connect( mServerSocket, SIGNAL ( file_received( bool ) ), this, SIGNAL ( getFile( bool ) ) );
}
void KSyncManager::syncLocalFile()
@@ -927,9 +928,9 @@ void KServerSocket::send_file()
lay->setSpacing(7);
mSyncActionDialog->setFixedSize( 230, 120);
mSyncActionDialog->show();
qDebug("KSS::saving ... ");
- emit saveFile();
+ emit request_file();
qApp->processEvents();
QString fileName = mFileName;
QFile file( fileName );
if (!file.open( IO_ReadOnly ) ) {
diff --git a/libkdepim/ksyncmanager.h b/libkdepim/ksyncmanager.h
index 52e2772..0eb3323 100644
--- a/libkdepim/ksyncmanager.h
+++ b/libkdepim/ksyncmanager.h
@@ -49,12 +49,10 @@ public:
void newConnection ( int socket ) ;
void setFileName( QString fn ) {mFileName = fn;};
signals:
- //void sendFile(QSocket*);
- //void getFile(QSocket*);
void file_received( bool );
- //void file_sent();
+ void request_file();
void saveFile();
void endConnect();
private slots:
void discardClient();
@@ -155,8 +153,9 @@ class KSyncManager : public QObject
QString mActiveSyncIP ;
signals:
void save();
+ void request_file();
void getFile( bool );
public slots:
void slotSyncMenu( int );