summaryrefslogtreecommitdiffabout
authorzautrix <zautrix>2004-09-22 22:16:15 (UTC)
committer zautrix <zautrix>2004-09-22 22:16:15 (UTC)
commite29076add5876c7dd46ff35ab0cbc2ad2c496713 (patch) (side-by-side diff)
tree8e5a8c525863f2cd6ac089fd20dee32c80ab1e94
parentd28c61ac4955016463eb2cd47f35d3742f79ffbe (diff)
downloadkdepimpi-e29076add5876c7dd46ff35ab0cbc2ad2c496713.zip
kdepimpi-e29076add5876c7dd46ff35ab0cbc2ad2c496713.tar.gz
kdepimpi-e29076add5876c7dd46ff35ab0cbc2ad2c496713.tar.bz2
better syncing
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--korganizer/koprefs.cpp3
-rw-r--r--korganizer/koprefs.h4
-rw-r--r--korganizer/mainwindow.cpp317
-rw-r--r--korganizer/mainwindow.h65
4 files changed, 385 insertions, 4 deletions
diff --git a/korganizer/koprefs.cpp b/korganizer/koprefs.cpp
index 5d7db4f..0034715 100644
--- a/korganizer/koprefs.cpp
+++ b/korganizer/koprefs.cpp
@@ -177,32 +177,35 @@ KOPrefs::KOPrefs() :
addItemFont("EditBox Font",&mEditBoxFont);
addItemFont("JournalView Font",&mJornalViewFont);
addItemFont("WhatsNextView Font",&mWhatsNextFont);
addItemFont("EventView Font",&mEventViewFont);
// KPrefs::setCurrentGroup("SyncProfiles");
// addItemString("LocalMachineName",&mLocalMachineName, "undefined");
// addItemStringList("SyncProfileNames",&mSyncProfileNames);
// addItemStringList("ExternSyncProfiles",&mExternSyncProfileNames);
KPrefs::setCurrentGroup("RemoteSyncing");
// addItemBool("UsePasswd",&mUsePassWd,false);
// addItemBool("WriteBackFile",&mWriteBackFile,true);
// addItemBool("WriteBackExistingOnly",&mWriteBackExistingOnly,false);
// addItemBool("AskForPreferences",&mAskForPreferences,true);
// addItemBool("ShowSyncSummary",&mShowSyncSummary,true);
+ addItemString("PassiveSyncPort",&mPassiveSyncPort,"9197" );
+ addItemString("ActiveSyncPort",&mActiveSyncPort,"9197" );
+ addItemString("ActiveSyncIP",&mActiveSyncIP,"192.168.0.40" );
addItemBool("ShowSyncEvents",&mShowSyncEvents,false);
addItemInt("LastSyncTime",&mLastSyncTime,0);
addItemInt("SyncAlgoPrefs",&mSyncAlgoPrefs,3);
addItemInt("RingSyncAlgoPrefs",&mRingSyncAlgoPrefs,3);
#ifdef _WIN32_
QString hdp= locateLocal("data","korganizer")+"\\\\";
#else
QString hdp= locateLocal("data","korganizer")+"/";
#endif
// addItemString("RemoteIP",&mRemoteIP, "192.168.0.65");
// addItemString("RemoteUser",&mRemoteUser, "zaurus");
// addItemString("RemotePassWd",&mRemotePassWd, "");
// addItemString("RemoteFile", &mRemoteFile, hdp+"mycalendar.ics");
// addItemString("LocalTempFile",&mLocalTempFile, "/tmp/tempsyncfile.ics" );
diff --git a/korganizer/koprefs.h b/korganizer/koprefs.h
index 33eda60..696433e 100644
--- a/korganizer/koprefs.h
+++ b/korganizer/koprefs.h
@@ -266,32 +266,36 @@ class KOPrefs : public KPimPrefs
bool mMonthViewUsesForegroundColor;
bool mHightlightDateTimeEdit;
bool mUseQuicksave;
bool mShortDateInViewer;
QStringList mLocationDefaults;
QStringList mEventSummaryUser;
QStringList mTodoSummaryUser;
bool mUseInternalAlarmNotification;
int mAlarmPlayBeeps;
int mAlarmSuspendTime;
int mAlarmSuspendCount;
int mAlarmBeepInterval;
+ QString mPassiveSyncPort;
+ QString mActiveSyncPort;
+ QString mActiveSyncIP;
+
//US I copied the following settings into KPimGlobalPrefs
// that allows us later to easily remove the settings from here.
int mPreferredDate;
QString mUserDateFormatLong;
QString mUserDateFormatShort;
int mPreferredLanguage;
int mPreferredTime;
bool mWeekStartsOnSunday;
QString mTimeZoneId;
bool mUseDaylightsaving;
int mDaylightsavingStart;
int mDaylightsavingEnd;
private:
diff --git a/korganizer/mainwindow.cpp b/korganizer/mainwindow.cpp
index 6315c64..f2e1bf8 100644
--- a/korganizer/mainwindow.cpp
+++ b/korganizer/mainwindow.cpp
@@ -1,24 +1,25 @@
#include <stdlib.h>
#include <qaction.h>
#include <qpopupmenu.h>
#include <qpainter.h>
#include <qwhatsthis.h>
#include <qmessagebox.h>
#include <qlineedit.h>
+#include <qtextcodec.h>
#include <qfile.h>
#include <qdir.h>
#include <qapp.h>
#include <qfileinfo.h>
#include <qlabel.h>
#include <qmap.h>
#include <qwmatrix.h>
#include <qtextbrowser.h>
#include <qtextstream.h>
#ifndef DESKTOP_VERSION
#include <qpe/global.h>
#include <qpe/qpemenubar.h>
#include <qpe/qpetoolbar.h>
#include <qpe/resource.h>
#include <qpe/qpeapplication.h>
#include <qtopia/alarmserver.h>
@@ -58,33 +59,35 @@
using namespace KCal;
#ifndef _WIN32_
#include <unistd.h>
#else
#include "koimportoldialog.h"
#endif
#include "mainwindow.h"
int globalFlagBlockStartup;
MainWindow::MainWindow( QWidget *parent, const char *name, QString msg) :
QMainWindow( parent, name )
{
#ifdef DESKTOP_VERSION
setFont( QFont("Arial"), 14 );
#endif
-
+ mCommandSocket = 0;
+ mSyncActionDialog = 0;
+ mServerSocket = 0;
mClosed = false;
//QString confFile = KStandardDirs::appDir() + "config/korganizerrc";
QString confFile = locateLocal("config","korganizerrc");
QFileInfo finf ( confFile );
bool showWarning = !finf.exists();
setIcon(SmallIcon( "ko24" ) );
mBlockAtStartup = true;
mFlagKeyPressed = false;
setCaption("KOrganizer/Pi");
KOPrefs *p = KOPrefs::instance();
KPimGlobalPrefs::instance()->setGlobalConfig();
// if ( QApplication::desktop()->height() > 480 ) {
// if ( p->mHourSize == 4 )
// p->mHourSize = 6;
// }
if ( p->mHourSize > 18 )
@@ -200,33 +203,33 @@ MainWindow::MainWindow( QWidget *parent, const char *name, QString msg) :
if ( showWarning ) {
KMessageBox::information( this,
"You are starting KO/Pi for the first time.\nPlease read menu: Help-What's New,\nif you did an update!\nPlease choose your timezone in the \nConfigure Dialog TAB Time Zone!\nPlease choose your language\nin the TAB Locale!\nYou get the Configure Dialog\nvia Menu: Actions - Configure....\nClick OK to show the Configure Dialog!\n", "KO/Pi information");
qApp->processEvents();
mView->dialogManager()->showSyncOptions();
}
//US listen for result adressed from Ka/Pi
#ifndef DESKTOP_VERSION
connect(qApp, SIGNAL (appMessage ( const QCString &, const QByteArray & )), ExternalAppHandler::instance(), SLOT (appMessage ( const QCString &, const QByteArray & )));
#endif
}
MainWindow::~MainWindow()
{
//qDebug("MainWindow::~MainWindow() ");
//save toolbar location
-
+ delete mServerSocket;
delete mCalendar;
delete KOPrefs::instance();
delete KIncidenceFormatter::instance();
}
void MainWindow::showMaximized ()
{
#ifndef DESKTOP_VERSION
if ( ! globalFlagBlockStartup )
if ( mClosed )
mView->goToday();
#endif
QWidget::showMaximized () ;
mClosed = false;
}
@@ -849,32 +852,41 @@ void MainWindow::initActions()
if (!p-> mShowIconStretch)
iconToolBar->setStretchableWidget ( dummy ) ;
else
configureToolBarMenu->setItemChecked( 5, true );
if (p-> mShowIconWhatsThis)
QWhatsThis::whatsThisButton ( iconToolBar );
connect( configureToolBarMenu, SIGNAL( activated( int ) ),this, SLOT(configureToolBar( int ) ) );
configureAgenda( p->mHourSize );
connect( configureAgendaMenu, SIGNAL( activated( int ) ),this, SLOT(configureAgenda( int ) ) );
}
void MainWindow::fillSyncMenu()
{
if ( syncMenu->count() )
syncMenu->clear();
syncMenu->insertItem( i18n("Configure..."), 0 );
syncMenu->insertSeparator();
+ if ( mServerSocket == 0 ) {
+ syncMenu->insertItem( i18n("Enable Easy-Pi-Sync"), 2 );
+ } else {
+ syncMenu->insertItem( i18n("Disable Easy-Pi-Sync"), 3 );
+ }
+ syncMenu->insertSeparator();
+ syncMenu->insertItem( i18n("New Easy-Pi-Sync!"), 4 );
+ syncMenu->insertItem( i18n("Quick Easy-Pi-Sync!"), 5 );
+ syncMenu->insertSeparator();
syncMenu->insertItem( i18n("Multiple sync"), 1 );
syncMenu->insertSeparator();
KConfig config ( locateLocal( "config","ksyncprofilesrc" ) );
config.setGroup("General");
QStringList prof = config.readListEntry("SyncProfileNames");
KOPrefs::instance()->mLocalMachineName = config.readEntry("LocalMachineName","undefined");
if ( prof.count() < 3 ) {
prof.clear();
prof << i18n("Sharp_DTM");
prof << i18n("Local_file");
prof << i18n("Last_file");
KSyncProfile* temp = new KSyncProfile ();
temp->setName( prof[0] );
temp->writeConfig(&config);
temp->setName( prof[1] );
temp->writeConfig(&config);
@@ -983,48 +995,67 @@ void MainWindow::multiSync( bool askforPrefs )
setCaption(i18n("Multiple sync started.") );
qApp->processEvents();
int num = ringSync() ;
if ( num > 1 )
ringSync();
mBlockSaveFlag = false;
if ( num )
save();
if ( num )
setCaption(i18n("%1 profiles synced. Multiple sync completed!").arg(num) );
else
setCaption(i18n("Nothing synced! No profiles defined for multisync!"));
return;
}
void MainWindow::slotSyncMenu( int action )
{
- //qDebug("syncaction %d ", action);
+ qDebug("syncaction %d ", action);
if ( action == 0 ) {
// seems to be a Qt2 event handling bug
// syncmenu.clear causes a segfault at first time
// when we call it after the main event loop, it is ok
// same behaviour when calling OM/Pi via QCOP for the first time
QTimer::singleShot ( 1, this, SLOT ( confSync() ) );
//confSync();
return;
}
if ( action == 1 ) {
multiSync( true );
return;
}
+ if ( action == 2 ) {
+ enableQuick();
+ QTimer::singleShot ( 1, this, SLOT ( fillSyncMenu() ) );
+ return;
+ }
+ if ( action == 3 ) {
+ delete mServerSocket;
+ mServerSocket = 0;
+ QTimer::singleShot ( 1, this, SLOT ( fillSyncMenu() ) );
+ return;
+ }
+ if ( action == 4 ) {
+ performQuick();
+ return;
+ }
+ if ( action == 5 ) {
+ performQuickQuick();
+ return;
+ }
if (mBlockSaveFlag)
return;
mBlockSaveFlag = true;
mCurrentSyncProfile = action - 1000 ;
mView->setSyncDevice(KOPrefs::instance()->mSyncProfileNames[mCurrentSyncProfile] );
mView->setSyncName( KOPrefs::instance()->mLocalMachineName );
KConfig config ( locateLocal( "config","ksyncprofilesrc" ) );
KSyncProfile* temp = new KSyncProfile ();
temp->setName(KOPrefs::instance()->mSyncProfileNames[mCurrentSyncProfile]);
temp->readConfig(&config);
KOPrefs::instance()->mAskForPreferences = temp->getAskForPreferences();
KOPrefs::instance()->mSyncAlgoPrefs = temp->getSyncPrefs();
KOPrefs::instance()->mWriteBackFile = temp->getWriteBackFile();
KOPrefs::instance()->mWriteBackExistingOnly = temp->getWriteBackExisting();
KOPrefs::instance()->mWriteBackInFuture = 0;
@@ -1847,32 +1878,312 @@ QString MainWindow::getPassword( )
lay.addWidget( &lab);
dia.setFixedSize( 230,50 );
dia.setCaption( i18n("Enter password") );
QPushButton pb ( "OK", &dia);
lay.addWidget( &pb );
connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) );
dia.show();
int res = dia.exec();
if ( res )
retfile = lab.text();
dia.hide();
qApp->processEvents();
return retfile;
}
+void MainWindow::enableQuick()
+{
+ QString retfile = "";
+ QDialog dia ( this, "input-dialog", true );
+ QLineEdit lab ( &dia );
+ QVBoxLayout lay( &dia );
+ lab.setText( KOPrefs::instance()->mPassiveSyncPort );
+ lay.setMargin(7);
+ lay.setSpacing(7);
+ QLabel label ( i18n("Port number (Default: 9197)"), &dia );
+ lay.addWidget( &label);
+ lay.addWidget( &lab);
+ dia.setFixedSize( 230,80 );
+ dia.setCaption( i18n("Enter port for Easy-Pi-Sync") );
+ QPushButton pb ( "OK", &dia);
+ lay.addWidget( &pb );
+ connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) );
+ dia.show();
+ int res = dia.exec();
+ if ( res )
+ retfile = lab.text();
+ else
+ return;
+ dia.hide();
+ qApp->processEvents();
+ KOPrefs::instance()->mPassiveSyncPort = retfile;
+ bool ok;
+ Q_UINT16 port = retfile.toUInt(&ok);
+ if ( ! ok ) {
+ qDebug("no valid port ");
+ return;
+ }
+ qDebug("port %d ", port);
+ mServerSocket = new KServerSocket ( port ,1 );
+ qDebug("connected ");
+ if ( !mServerSocket->ok() ) {
+ qWarning("Failed to bind to port %d", port);
+ delete mServerSocket;
+ mServerSocket = 0;
+ return;
+ }
+ connect( mServerSocket, SIGNAL ( sendFile(QSocket*) ), this, SLOT ( sendFile(QSocket*) ) );
+ connect( mServerSocket, SIGNAL ( getFile(QSocket*) ), this, SLOT ( getFile(QSocket*) ) );
+}
+void MainWindow::sendFile(QSocket* socket)
+{
+ setCaption( i18n("Received request for file") );
+ qDebug("MainWindow::sendFile(QSocket* s) ");
+ mSyncActionDialog = new QDialog ( this, "input-dialog", true );
+ mSyncActionDialog->setCaption(i18n("KO/Pi - WARNING"));
+ QLabel* label = new QLabel( i18n("Synchronizing...\nDo not use\nthis application!\n"), mSyncActionDialog );
+ QVBoxLayout* lay = new QVBoxLayout( mSyncActionDialog );
+ lay->addWidget( label);
+ lay->setMargin(7);
+ lay->setSpacing(7);
+ mSyncActionDialog->setFixedSize( 200,100 );
+ mSyncActionDialog->show();
+ qApp->processEvents();
+ qDebug("saving ... ");
+ save();
+ QString fileName = defaultFileName();
+ QFile file( fileName );
+ if (!file.open( IO_ReadOnly ) ) {
+ setCaption( i18n("Error open file") );
+ delete mSyncActionDialog;
+ mSyncActionDialog = 0;
+ qDebug("error open cal file ");
+ return ;
+
+ }
+ setCaption( i18n("Sending file...") );
+ QTextStream ts( &file );
+ ts.setCodec( QTextCodec::codecForName("utf8") );
+ QTextStream os( socket );
+ os.setCodec( QTextCodec::codecForName("utf8") );
+ //os.setEncoding( QTextStream::UnicodeUTF8 );
+ while ( ! ts.atEnd() ) {
+ os << ts.readLine() << "\n";
+ }
+ //os << ts.read();
+ socket->close();
+ file.close();
+ setCaption( i18n("File sent. Waiting to get back synced file") );
+ qDebug("file sent ");
+}
+void MainWindow::getFile(QSocket* socket)
+{
+ setCaption( i18n("Receiving synced file...") );
+ qDebug("MainWindow::sendFile(QSocket* s) ");
+
+ QString fileName = defaultFileName();
+ QFile file( fileName );
+ if (!file.open( IO_WriteOnly ) ) {
+ setCaption( i18n("Error open file") );
+ delete mSyncActionDialog;
+ mSyncActionDialog = 0;
+ qDebug("error open cal file ");
+ return ;
+
+ }
+
+ mView->setLoadedFileVersion(QDateTime::currentDateTime().addSecs( -1));
+ QTextStream ts( &file );
+ ts.setCodec( QTextCodec::codecForName("utf8") );
+ bool first = true;
+ while ( socket->canReadLine () || first ) {
+ first = false;
+ while ( socket->canReadLine () ) {
+ ts << socket->readLine ();
+ }
+ socket->waitForMore ( 5000 );
+ }
+ setCaption( i18n("File received - reloading calendar...") );
+ file.close();
+ socket->close();
+ mView->watchSavedFile();
+ mView->openCalendar( defaultFileName() );
+ setCaption( i18n("Easy-Pi-Sync successful!") );
+ delete mSyncActionDialog;
+ mSyncActionDialog = 0;
+
+
+}
+void MainWindow::endConnect()
+{
+ setCaption( i18n("No file received - syncing successful") );
+ delete mSyncActionDialog;
+ mSyncActionDialog = 0;
+}
+void MainWindow::performQuick()
+{
+ setCaption( i18n("Please input connection settings") );
+ QString retfile = "";
+ QDialog dia ( this, "input-dialog", true );
+ QLineEdit lab ( &dia );
+ QVBoxLayout lay( &dia );
+ QLabel label ( i18n("IP address\n(Example: 192.168.0.40)"), &dia );
+ lay.addWidget( &label);
+ lab.setText( KOPrefs::instance()->mActiveSyncIP );
+ lay.setMargin(7);
+ lay.setSpacing(7);
+ lay.addWidget( &lab);
+ QLabel label2 ( i18n("Port number (Default: 9197)"), &dia );
+ lay.addWidget( &label2);
+ QLineEdit lab2 ( &dia );
+ lab2.setText( KOPrefs::instance()->mActiveSyncPort );
+ lay.addWidget( &lab2);
+ dia.setFixedSize( 230,200 );
+ dia.setCaption( i18n("Enter port for Easy-Pi-Sync ") );
+ QPushButton pb ( "OK", &dia);
+ lay.addWidget( &pb );
+ connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) );
+ dia.show();
+ int res = dia.exec();
+ if ( !res ) {
+ setCaption( i18n("Syncing cancelled!") );
+ return;
+ }
+ dia.hide();
+ KOPrefs::instance()->mActiveSyncPort = lab2.text();
+ KOPrefs::instance()->mActiveSyncIP = lab.text();
+ qApp->processEvents();
+ performQuickQuick();
+}
+
+void MainWindow::performQuickQuick()
+{
+ // setCaption( i18n("") );
+
+ bool ok;
+ Q_UINT16 port = KOPrefs::instance()->mActiveSyncPort.toUInt(&ok);
+ if ( ! ok ) {
+ setCaption( i18n("Sorry, no valid port.Syncing cancelled.") );
+ return;
+ }
+ if ( mCommandSocket )
+ delete mCommandSocket;
+ mCommandSocket = new QSocket( this );
+ connect( mCommandSocket, SIGNAL(readyRead()), this, SLOT(readFileFromSocket()) );
+ QString host = KOPrefs::instance()->mActiveSyncIP;
+ mCommandSocket->connectToHost( host, port );
+ QTextStream os( mCommandSocket );
+ os.setEncoding( QTextStream::UnicodeUTF8 );
+ os << "GET\r\n";
+ setCaption( i18n("Sending request for remote file ...") );
+
+}
+void MainWindow::readFileFromSocket()
+{
+ setCaption( i18n("Receiving remote file ...") );
+ qDebug("MainWindow::readFileFromSocket() ");
+QString fileName;
+#ifdef _WIN32_
+ fileName = defaultFileName() +"sync";
+#else
+ fileName = "/tmp/kopitempfile.ics";
+#endif
+ QFile file( fileName );
+ if (!file.open( IO_WriteOnly ) ) {
+ setCaption( i18n("Error: Cannot open temp file for write.") );
+ qDebug("Error open calender file for writing: %s",fileName.latin1() );
+ return ;
+ }
+
+ //QTextStream os2( mCommandSocket );
+ //os2.setEncoding( QTextStream::UnicodeUTF8 );
+
+ QTextStream ts( &file );
+ ts.setCodec( QTextCodec::codecForName("utf8") );
+ bool first = true;
+ while ( mCommandSocket->canReadLine () || first) {
+ first = false;
+ while ( mCommandSocket->canReadLine () ) {
+ ts << mCommandSocket->readLine ();
+ }
+ mCommandSocket->waitForMore ( 5000 );
+ }
+ file.close();
+ mCommandSocket->close();
+ delete mCommandSocket;
+ setCaption( i18n("Remote file saved to temp file.") );
+ mCommandSocket = 0;
+ mCurrentSyncProfile = 2 ; // last file
+ mView->setSyncDevice(KOPrefs::instance()->mSyncProfileNames[mCurrentSyncProfile] );
+ mView->setSyncName( KOPrefs::instance()->mLocalMachineName );
+ KConfig config ( locateLocal( "config","ksyncprofilesrc" ) );
+ KSyncProfile* temp = new KSyncProfile ();
+ temp->setName(KOPrefs::instance()->mSyncProfileNames[mCurrentSyncProfile]);
+ temp->readConfig(&config);
+ KOPrefs::instance()->mAskForPreferences = temp->getAskForPreferences();
+ KOPrefs::instance()->mSyncAlgoPrefs = temp->getSyncPrefs();
+ KOPrefs::instance()->mWriteBackFile = temp->getWriteBackFile();
+ KOPrefs::instance()->mWriteBackExistingOnly = temp->getWriteBackExisting();
+ KOPrefs::instance()->mWriteBackInFuture = 0;
+ if ( temp->getWriteBackFuture() )
+ KOPrefs::instance()->mWriteBackInFuture = temp->getWriteBackFutureWeeks( );
+ KOPrefs::instance()->mShowSyncSummary = temp->getShowSummaryAfterSync();
+
+ setCaption( i18n("Remote file saved to temp file.") );
+ if ( ! syncWithFile( fileName , true ) ) {
+ setCaption( i18n("Syncing failed.") );
+ qDebug("Syncing failed ");
+ return;
+ }
+
+ mCommandSocket = new QSocket( this );
+ QString host = KOPrefs::instance()->mActiveSyncIP;
+ mCommandSocket->connectToHost( KOPrefs::instance()->mActiveSyncIP, KOPrefs::instance()->mActiveSyncPort.toUInt() );
+
+ QFile file2( fileName );
+ if (!file2.open( IO_ReadOnly ) ) {
+ setCaption( i18n("Error: Cannot open temp file for read.") );
+ qDebug("error open cal file ");
+ return ;
+
+ }
+ setCaption( i18n("Sending back synced file...") );
+ QTextStream ts2( &file2 );
+ ts2.setCodec( QTextCodec::codecForName("utf8") );
+ QTextStream os2( mCommandSocket );
+ os2.setCodec( QTextCodec::codecForName("utf8") );
+ //os.setEncoding( QTextStream::UnicodeUTF8 );
+ if ( KOPrefs::instance()->mWriteBackFile ) {
+ os2 << "PUT\r\n";
+ while ( ! ts2.atEnd() ) {
+ os2 << ts2.readLine() << "\n";
+ }
+ } else {
+ os2 << "STOP\r\n";
+ }
+ mCommandSocket->close();
+ file.close();
+ delete mCommandSocket;
+ mCommandSocket = 0;
+ qDebug("Syncing succesful! ");
+ setCaption( i18n("Easy-Pi-Sync succesful!") );
+
+
+}
+
void MainWindow::syncLocalFile()
{
QString fn =KOPrefs::instance()->mLastSyncedLocalFile;
fn =KFileDialog:: getOpenFileName( fn, i18n("Sync filename(*.ics/*.vcs)"), this );
if ( fn == "" )
return;
//mView->setSyncDevice("local-file" );
if ( syncWithFile( fn, false ) ) {
// Event* e = mView->getLastSyncEvent();
// e->setReadOnly( false );
// e->setLocation( i18n("Local file: ")+ KOPrefs::instance()->mLastSyncedLocalFile);
// e->setReadOnly( true );
}
diff --git a/korganizer/mainwindow.h b/korganizer/mainwindow.h
index 47a7a90..58081f6 100644
--- a/korganizer/mainwindow.h
+++ b/korganizer/mainwindow.h
@@ -1,35 +1,86 @@
#ifndef KORGE_MAINWINDOW_H
#define KORGE_MAINWINDOW_H
#include <qmainwindow.h>
#include <qtimer.h>
#include <qdict.h>
+#include <qregexp.h>
#include <libkcal/incidence.h>
#include "simplealarmclient.h"
class QAction;
class CalendarView;
class KSyncProfile;
#ifdef DESKTOP_VERSION
#define QPEToolBar QToolBar
#define QPEMenuBar QMenuBar
#endif
class QPEToolBar;
+#include <qserversocket.h>
+#include <qsocket.h>
+#include <qnetworkprotocol.h>
+
+class KServerSocket : public QServerSocket
+{
+ Q_OBJECT
+
+public:
+ KServerSocket ( Q_UINT16 port, int backlog = 0, QObject * parent=0, const char * name=0 ) :
+ QServerSocket( port, backlog, parent, name ){;};
+ void newConnection ( int socket )
+ {
+ qDebug("KServerSocket:New connection %d ", socket);
+ QSocket* s = new QSocket( this );
+ connect( s, SIGNAL(readyRead()), this, SLOT(readClient()) );
+ connect( s, SIGNAL(delayedCloseFinished()), this, SLOT(discardClient()) );
+ s->setSocket( socket );
+ }
+
+signals:
+ void sendFile(QSocket*);
+ void getFile(QSocket*);
+ void endConnect();
+private slots:
+ void discardClient()
+ {
+ QSocket* socket = (QSocket*)sender();
+ delete socket;
+ emit endConnect();
+ }
+ void readClient()
+ {
+ qDebug("readClient() ");
+ QSocket* socket = (QSocket*)sender();
+ if ( socket->canReadLine() ) {
+ QStringList tokens = QStringList::split( QRegExp("[ \r\n][ \r\n]*"), socket->readLine() );
+ if ( tokens[0] == "GET" ) {
+ emit sendFile( socket );
+ }
+ if ( tokens[0] == "PUT" ) {
+ emit getFile( socket );
+ }
+ if ( tokens[0] == "STOP" ) {
+ emit endConnect();
+ }
+ }
+ }
+};
+
namespace KCal {
class CalendarLocal;
}
using namespace KCal;
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow( QWidget *parent = 0, const char *name = 0, QString command = "");
~MainWindow();
public slots:
virtual void showMaximized ();
void configureAgenda( int );
@@ -75,49 +126,61 @@ class MainWindow : public QMainWindow
void slotSyncMenu( int );
void syncSSH();
void confSync();
void syncSharp();
void syncPhone();
void syncLocalFile();
bool syncWithFile( QString, bool );
void quickSyncLocalFile();
protected:
void displayText( QString, QString);
void displayFile( QString, QString);
void enableIncidenceActions( bool );
+ private slots:
+ void fillSyncMenu();
+ void sendFile(QSocket* s);
+ void getFile(QSocket* socket);
+ void readFileFromSocket();
+ void endConnect();
private:
+ QSocket* mCommandSocket;
+ KServerSocket * mServerSocket;
bool mClosed;
void saveOnClose();
int mCurrentSyncProfile;
+ void enableQuick();
+ void performQuick();
+ void performQuickQuick();
void syncRemote( KSyncProfile* , bool ask = true);
- void fillSyncMenu();
bool mFlagKeyPressed;
bool mBlockAtStartup;
QPEToolBar *iconToolBar;
void initActions();
void setDefaultPreferences();
void keyPressEvent ( QKeyEvent * ) ;
void keyReleaseEvent ( QKeyEvent * ) ;
QPopupMenu *configureToolBarMenu;
QPopupMenu *selectFilterMenu;
QPopupMenu *configureAgendaMenu, *syncMenu;
CalendarLocal *mCalendar;
CalendarView *mView;
QString getPassword();
QAction *mNewSubTodoAction;
QAction *mShowAction;
QAction *mEditAction;
QAction *mDeleteAction;
void closeEvent( QCloseEvent* ce );
SimpleAlarmClient mAlarmClient;
QTimer mSaveTimer;
bool mBlockSaveFlag;
bool mCalendarModifiedFlag;
QPixmap loadPixmap( QString );
+ QDialog * mSyncActionDialog;
};
+
#endif