author | zautrix <zautrix> | 2004-10-04 10:05:42 (UTC) |
---|---|---|
committer | zautrix <zautrix> | 2004-10-04 10:05:42 (UTC) |
commit | 743f44c45534a6e1df17ddc7b5f3c62b73921455 (patch) (side-by-side diff) | |
tree | 83795806d28b2614639082e944558a470f039daf | |
parent | aaea91151fe9a747e9eddfb8ba7d5896744faf30 (diff) | |
download | kdepimpi-743f44c45534a6e1df17ddc7b5f3c62b73921455.zip kdepimpi-743f44c45534a6e1df17ddc7b5f3c62b73921455.tar.gz kdepimpi-743f44c45534a6e1df17ddc7b5f3c62b73921455.tar.bz2 |
sync fixes
-rw-r--r-- | korganizer/mainwindow.cpp | 163 | ||||
-rw-r--r-- | korganizer/mainwindow.h | 14 |
2 files changed, 115 insertions, 62 deletions
diff --git a/korganizer/mainwindow.cpp b/korganizer/mainwindow.cpp index 7bf33d3..8e2f956 100644 --- a/korganizer/mainwindow.cpp +++ b/korganizer/mainwindow.cpp @@ -69,9 +69,11 @@ using namespace KCal; int globalFlagBlockStartup; MainWindow::MainWindow( QWidget *parent, const char *name, QString msg) : QMainWindow( parent, name ) { - + mPassWordPiSync = "abc"; + mTimerCommandSocket = new QTimer ( this ); + connect( mTimerCommandSocket, SIGNAL ( timeout () ), this, SLOT ( deleteCommandSocket() ) ); #ifdef DESKTOP_VERSION setFont( QFont("Arial"), 14 ); #endif mCommandSocket = 0; @@ -1888,8 +1890,9 @@ QString MainWindow::getPassword( ) } void MainWindow::enableQuick() { + QString passWordPiSync = "bhdrvmk"; QString retfile = ""; QDialog dia ( this, "input-dialog", true ); QLineEdit lab ( &dia ); QVBoxLayout lay( &dia ); @@ -1898,10 +1901,16 @@ void MainWindow::enableQuick() lay.setSpacing(7); QLabel label ( i18n("Port number (Default: 9197)"), &dia ); lay.addWidget( &label); lay.addWidget( &lab); + + QLineEdit lepw ( &dia ); + lepw.setText( "abc" ); + QLabel label2 ( i18n("Password to enable\naccess from remote:"), &dia ); + lay.addWidget( &label2); + lay.addWidget( &lepw); dia.setFixedSize( 230,80 ); - dia.setCaption( i18n("Enter port for Easy-Pi-Sync") ); + dia.setCaption( i18n("Enter port for Pi-Sync") ); QPushButton pb ( "OK", &dia); lay.addWidget( &pb ); connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) ); dia.show(); @@ -1910,18 +1919,19 @@ void MainWindow::enableQuick() retfile = lab.text(); else return; dia.hide(); + passWordPiSync = lepw.text(); qApp->processEvents(); KOPrefs::instance()->mPassiveSyncPort = retfile; bool ok; Q_UINT16 port = retfile.toUInt(&ok); if ( ! ok ) { - qDebug("no valid port "); + KMessageBox::information( this, i18n("No valid port")); return; } qDebug("port %d ", port); - mServerSocket = new KServerSocket ( port ,1 ); + mServerSocket = new KServerSocket ( passWordPiSync, port ,1 ); qDebug("connected "); if ( !mServerSocket->ok() ) { qWarning("Failed to bind to port %d", port); delete mServerSocket; @@ -1945,11 +1955,11 @@ void MainWindow::sendFile(QSocket* socket) lay->setMargin(7); lay->setSpacing(7); mSyncActionDialog->setFixedSize( 200,100 ); mSyncActionDialog->show(); - qApp->processEvents(); qDebug("saving ... "); save(); + qApp->processEvents(); QString fileName = defaultFileName(); QFile file( fileName ); if (!file.open( IO_ReadOnly ) ) { setCaption( i18n("Error open file") ); @@ -1977,73 +1987,59 @@ void MainWindow::sendFile(QSocket* socket) void MainWindow::getFile(QSocket* socket) { setCaption( i18n("Receiving synced file...") ); + piTime.start(); + piSocket = socket; + piFileString = ""; + QTimer::singleShot( 1, this , SLOT (readBackFileFromSocket( ) )); + + +} +void MainWindow::readBackFileFromSocket() +{ + qDebug("readBackFileFromSocket() %d ", piTime.elapsed ()); + while ( piSocket->canReadLine () ) { + piTime.restart(); + QString line = piSocket->readLine (); + piFileString += line; + qDebug("readline: %s ", line.latin1()); + setCaption( i18n("Received %1 bytes").arg( piFileString.length() ) ); + + } + if ( piTime.elapsed () < 3000 ) { + // wait for more + qDebug("waitformore "); + QTimer::singleShot( 100, this , SLOT (readBackFileFromSocket( ) )); + return; + } QString fileName = defaultFileName(); QFile file( fileName ); if (!file.open( IO_WriteOnly ) ) { - setCaption( i18n("Error open file") ); + setCaption( i18n("Error open file for writing!") ); delete mSyncActionDialog; mSyncActionDialog = 0; qDebug("error open cal file "); + piFileString = ""; 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 () ) { - qDebug("avail %d ", socket->bytesAvailable () ); - ts << socket->readLine (); - } - QTime ti; - ti.start(); - while ( ti.elapsed () < 5000 && !socket->canReadLine () ) { - qDebug("waiting1a %d %d ",ti.elapsed (), socket->bytesAvailable () ); - //qApp->processEvents(); - qDebug("waiting1b %d ",ti.elapsed () ); - if ( !socket->canReadLine () ) { - qDebug("waiting1c %d ",ti.elapsed () ); -#ifndef _WIN32_ - usleep( 100000); -#endif - } - //socket->waitForMore ( 100 ); - } - ts << socket->readLine (); -#if 0 -#ifdef DESKTOP_VERSION - socket->waitForMore ( 5000 ); -#else - // socket->waitForMore ( 5000 ); - // seems to be broken in qt2 - bool stop = false; - QTime ti; - ti.start(); - while ( ti.elapsed < 5000 && !stop ) { - qApp->processEvents(); - if ( socket->canReadLine () ) - stop = true ; - else { - usleep( 100000 ); - - } - } -#endif -#endif - } + qDebug("finish "); + setCaption( i18n("Writing file to disk...") ); + ts << piFileString; setCaption( i18n("File received - reloading calendar...") ); - socket->close(); + piSocket->close(); file.close(); mView->watchSavedFile(); mView->openCalendar( defaultFileName() ); - setCaption( i18n("Easy-Pi-Sync successful!") ); + setCaption( i18n("Pi-Sync successful!") ); delete mSyncActionDialog; mSyncActionDialog = 0; + piFileString = ""; } void MainWindow::endConnect() @@ -2053,8 +2049,9 @@ void MainWindow::endConnect() mSyncActionDialog = 0; } void MainWindow::performQuick() { + setCaption( i18n("Please input connection settings") ); QString retfile = ""; QDialog dia ( this, "input-dialog", true ); QLineEdit lab ( &dia ); @@ -2069,10 +2066,17 @@ void MainWindow::performQuick() lay.addWidget( &label2); QLineEdit lab2 ( &dia ); lab2.setText( KOPrefs::instance()->mActiveSyncPort ); lay.addWidget( &lab2); + + QLineEdit lepw ( &dia ); + lepw.setText( mPassWordPiSync ); + QLabel label3 ( i18n("Password to enable\naccess to remote:"), &dia ); + lay.addWidget( &label3); + lay.addWidget( &lepw); + dia.setFixedSize( 230,200 ); - dia.setCaption( i18n("Enter port for Easy-Pi-Sync ") ); + dia.setCaption( i18n("Enter port for Pi-Sync ") ); QPushButton pb ( "OK", &dia); lay.addWidget( &pb ); connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) ); dia.show(); @@ -2080,8 +2084,9 @@ void MainWindow::performQuick() if ( !res ) { setCaption( i18n("Syncing cancelled!") ); return; } + mPassWordPiSync = lepw.text(); dia.hide(); KOPrefs::instance()->mActiveSyncPort = lab2.text(); KOPrefs::instance()->mActiveSyncIP = lab.text(); qApp->processEvents(); @@ -2102,19 +2107,43 @@ void MainWindow::performQuickQuick() mCommandSocket = new QSocket( this ); // delete mCommandSocket; //mCommandSocket = new QSocket( this ); connect( mCommandSocket, SIGNAL(readyRead()), this, SLOT(readFileFromSocket()) ); + connect( mCommandSocket, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteCommandSocket()) ); } QString host = KOPrefs::instance()->mActiveSyncIP; mCommandSocket->connectToHost( host, port ); QTextStream os( mCommandSocket ); os.setEncoding( QTextStream::UnicodeUTF8 ); - os << "GET\r\n"; + os << "GET " << mPassWordPiSync << "\r\n"; setCaption( i18n("Sending request for remote file ...") ); + mTimerCommandSocket->start( 15000 ); } +void MainWindow::deleteCommandSocket() +{ + if ( !mCommandSocket) + return; + if ( mTimerCommandSocket->isActive () ) { + KMessageBox::information( 0, i18n("ERROR:\nConnection to remote host timed out ")); + mTimerCommandSocket->stop(); + } + qDebug("MainWindow::deletemCommandSocket() "); + delete mCommandSocket; + mCommandSocket = 0; +} +void MainWindow::deleteCommandSocketFinish() +{ + if ( ! mCommandSocketFinish) + return; + //KMessageBox::information( 0, i18n("MainWindow::deleteCommandSocketFinish() ")); + qDebug("MainWindow::deletemCommandSocketFinish() "); + delete mCommandSocketFinish; + mCommandSocketFinish = 0; +} void MainWindow::readFileFromSocket() { + mTimerCommandSocket->stop(); setCaption( i18n("Receiving remote file ...") ); qDebug("MainWindow::readFileFromSocket() "); QString fileName; #ifdef _WIN32_ @@ -2151,8 +2180,10 @@ void MainWindow::readFileFromSocket() //mCommandSocket->waitForMore ( 5000 ); } file.close(); mCommandSocket->close(); + if ( mCommandSocket->state() == QSocket::Idle ) + deleteCommandSocket(); // pending: deleting after signal SIGNAL(delayedCloseFinished()) //delete mCommandSocket; setCaption( i18n("Remote file saved to temp file.") ); //mCommandSocket = 0; @@ -2170,9 +2201,9 @@ void MainWindow::readFileFromSocket() KOPrefs::instance()->mWriteBackInFuture = 0; if ( temp->getWriteBackFuture() ) KOPrefs::instance()->mWriteBackInFuture = temp->getWriteBackFutureWeeks( ); KOPrefs::instance()->mShowSyncSummary = temp->getShowSummaryAfterSync(); - + delete temp; setCaption( i18n("Remote file saved to temp file.") ); if ( ! syncWithFile( fileName , true ) ) { setCaption( i18n("Syncing failed.") ); qDebug("Syncing failed "); @@ -2180,8 +2211,9 @@ void MainWindow::readFileFromSocket() } if ( !mCommandSocketFinish ) { mCommandSocketFinish = new QSocket( this ); + connect( mCommandSocketFinish, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteCommandSocketFinish()) ); } mCommandSocketFinish->connectToHost( KOPrefs::instance()->mActiveSyncIP, KOPrefs::instance()->mActiveSyncPort.toUInt() ); // pending connect signals connected () and error to new slots @@ -2199,22 +2231,21 @@ void MainWindow::readFileFromSocket() QTextStream os2( mCommandSocketFinish ); os2.setCodec( QTextCodec::codecForName("utf8") ); //os.setEncoding( QTextStream::UnicodeUTF8 ); if ( KOPrefs::instance()->mWriteBackFile ) { - os2 << "PUT\r\n"; + os2 << "PUT " << mPassWordPiSync << "\r\n";; while ( ! ts2.atEnd() ) { os2 << ts2.readLine() << "\n"; } } else { os2 << "STOP\r\n"; } mCommandSocketFinish->close(); + if ( mCommandSocketFinish->state() == QSocket::Idle ) + deleteCommandSocketFinish(); file.close(); - // pending: deleting after signal SIGNAL(delayedCloseFinished()) - //delete ( mCommandSocket); - //mCommandSocket = 0; qDebug("Syncing succesful! "); - setCaption( i18n("Easy-Pi-Sync succesful!") ); + setCaption( i18n("Pi-Sync succesful!") ); } @@ -2495,11 +2526,11 @@ void MainWindow::printCal() } -KServerSocket:: KServerSocket ( Q_UINT16 port, int backlog, QObject * parent, const char * name ) : QServerSocket( port, backlog, parent, name ) +KServerSocket:: KServerSocket ( QString pw, Q_UINT16 port, int backlog, QObject * parent, const char * name ) : QServerSocket( port, backlog, parent, name ) { - + mPassWord = pw; mSocket = 0; }; void KServerSocket::newConnection ( int socket ) @@ -2536,12 +2567,22 @@ void KServerSocket::readClient() if ( mSocket->canReadLine() ) { QStringList tokens = QStringList::split( QRegExp("[ \r\n][ \r\n]*"), mSocket->readLine() ); qDebug("KServerSocket socket->canReadLine()"); if ( tokens[0] == "GET" ) { + if ( tokens[1] == mPassWord ) emit sendFile( mSocket ); + else { + KMessageBox::information( 0, i18n("ERROR:\nGot send file request\nwith invalid password")); + qDebug("password %s, invalid password %s ",mPassWord.latin1(), tokens[1].latin1() ); + } } if ( tokens[0] == "PUT" ) { + if ( tokens[1] == mPassWord ) emit getFile( mSocket ); + else { + KMessageBox::information( 0, i18n("ERROR:\nGot receive file request\nwith invalid password")); + qDebug("password %s, invalid password %s ",mPassWord.latin1(), tokens[1].latin1() ); + } } if ( tokens[0] == "STOP" ) { emit endConnect(); } diff --git a/korganizer/mainwindow.h b/korganizer/mainwindow.h index cc656a3..d217578 100644 --- a/korganizer/mainwindow.h +++ b/korganizer/mainwindow.h @@ -3,8 +3,11 @@ #include <qmainwindow.h> #include <qtimer.h> #include <qdict.h> +#include <qfile.h> +#include <qsocket.h> +#include <qtextstream.h> #include <qregexp.h> #include <libkcal/incidence.h> #include "simplealarmclient.h" @@ -26,9 +29,9 @@ class KServerSocket : public QServerSocket { Q_OBJECT public: - KServerSocket ( Q_UINT16 port, int backlog = 0, QObject * parent=0, const char * name=0 ); + KServerSocket ( QString password, Q_UINT16 port, int backlog = 0, QObject * parent=0, const char * name=0 ); void newConnection ( int socket ) ; signals: @@ -39,8 +42,9 @@ private slots: void discardClient(); void readClient(); private : QSocket* mSocket; + QString mPassWord; }; namespace KCal { @@ -113,14 +117,22 @@ class MainWindow : public QMainWindow void enableIncidenceActions( bool ); private slots: + QSocket* piSocket; + QString piFileString; + QTime piTime; + void deleteCommandSocket(); + void deleteCommandSocketFinish(); void fillSyncMenu(); void sendFile(QSocket* s); void getFile(QSocket* socket); void readFileFromSocket(); + void readBackFileFromSocket(); void endConnect(); private: + QTimer* mTimerCommandSocket; + QString mPassWordPiSync; QSocket* mCommandSocket; QSocket* mCommandSocketFinish; KServerSocket * mServerSocket; bool mClosed; |