-rw-r--r-- | korganizer/mainwindow.cpp | 230 | ||||
-rw-r--r-- | korganizer/mainwindow.h | 13 |
2 files changed, 75 insertions, 168 deletions
diff --git a/korganizer/mainwindow.cpp b/korganizer/mainwindow.cpp index da73caf..bce2a54 100644 --- a/korganizer/mainwindow.cpp +++ b/korganizer/mainwindow.cpp @@ -69,18 +69,16 @@ using namespace KCal; int globalFlagBlockStartup; MainWindow::MainWindow( QWidget *parent, const char *name, QString msg) : QMainWindow( parent, name ) { mPassWordPiSync = "abc"; #ifdef DESKTOP_VERSION setFont( QFont("Arial"), 14 ); #endif - mCommandSocket = 0; - mCommandSocketFinish = 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" ) ); @@ -1937,134 +1935,31 @@ void MainWindow::enableQuick() mServerSocket = 0; return; } connect( mServerSocket, SIGNAL ( saveFile() ), this, SLOT ( save() ) ); connect( mServerSocket, SIGNAL ( file_received( bool ) ), this, SLOT ( getFile( bool ) ) ); // 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) "); - if ( mSyncActionDialog ) - delete mSyncActionDialog; - 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(); - qDebug("saving ... "); - save(); - qApp->processEvents(); - 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( bool success ) { if ( ! success ) { setCaption( i18n("Error receiving file. Nothing changed!") ); return; } // pending adjust time for watchSavedFile() //mView->watchSavedFile(); mView->openCalendar( defaultFileName() ); setCaption( i18n("Pi-Sync successful!") ); - -#if 0 - setCaption( i18n("Receiving synced file...") ); - - piTime.start(); - piSocket = socket; - piFileString = ""; - QTimer::singleShot( 1, this , SLOT (readBackFileFromSocket( ) )); -#endif - } -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 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") ); - qDebug("finish "); - setCaption( i18n("Writing file to disk...") ); - ts << piFileString; - setCaption( i18n("File received - reloading calendar...") ); - piSocket->close(); - file.close(); - mView->watchSavedFile(); - mView->openCalendar( defaultFileName() ); - setCaption( i18n("Pi-Sync successful!") ); - delete mSyncActionDialog; - mSyncActionDialog = 0; - piFileString = ""; - - -} -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 ); @@ -2110,46 +2005,50 @@ 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; } - mCommandSocket = new KCommandSocket( mPassWordPiSync, port, KOPrefs::instance()->mActiveSyncIP, this ); - connect( mCommandSocket, SIGNAL(commandFinished( bool )), this, SLOT(deleteCommandSocket(bool)) ); + KCommandSocket* commandSocket = new KCommandSocket( mPassWordPiSync, port, KOPrefs::instance()->mActiveSyncIP, this ); + connect( commandSocket, SIGNAL(commandFinished( KCommandSocket*, bool )), this, SLOT(deleteCommandSocket(KCommandSocket*,bool)) ); setCaption( i18n("Sending request for remote file ...") ); QString fileName; #ifdef _WIN32_ fileName = defaultFileName() +"sync"; #else fileName = "/tmp/kopitempfile.ics"; #endif - mCommandSocket->readFile( fileName ); + commandSocket->readFile( fileName ); } -void MainWindow::deleteCommandSocket( bool success) +void MainWindow::deleteCommandSocket(KCommandSocket*s, bool success) { if ( ! success ) { setCaption( i18n("ERROR:Receiving remote file failed.") ); + delete s; // pending : send stop return; } QTimer::singleShot( 1, this , SLOT ( readFileFromSocket())); - delete mCommandSocket; + qDebug("MainWindow::deleteCommandSocket "); + delete s; } -void MainWindow::deleteCommandSocketFinish() +void MainWindow::deleteCommandSocketFinish(KCommandSocket* s, bool success ) { - if ( ! mCommandSocketFinish) - return; - // KMessageBox::information( 0, i18n("MainWindow::deleteCommandSocketFinish() ")); - qDebug("MainWindow::deletemCommandSocketFinish() "); - delete mCommandSocketFinish; - mCommandSocketFinish = 0; + if ( ! success ) { + setCaption( i18n("ERROR:Writing back file failed.") ); + } else { + qDebug("Syncing succesful! "); + setCaption( i18n("Pi-Sync succesful!") ); + } + qDebug("MainWindow::deleteCommandSocketFinish "); + delete s; } void MainWindow::readFileFromSocket() { // mTimerCommandSocket->stop(); setCaption( i18n("Receiving remote file ...") ); qDebug("MainWindow::readFileFromSocket() "); QString fileName; #ifdef _WIN32_ @@ -2178,53 +2077,22 @@ void MainWindow::readFileFromSocket() delete temp; setCaption( i18n("Remote file saved to temp file.") ); if ( ! syncWithFile( fileName , true ) ) { setCaption( i18n("Syncing failed.") ); qDebug("Syncing failed "); return; } - if ( !mCommandSocketFinish ) { - mCommandSocketFinish = new QSocket( this ); - connect( mCommandSocketFinish, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteCommandSocketFinish()) ); - } - mCommandSocketFinish->connectToHost( KOPrefs::instance()->mActiveSyncIP, KOPrefs::instance()->mActiveSyncPort.toUInt() ); - - QString host = KOPrefs::instance()->mActiveSyncIP; - QFile file2( fileName ); - if (!file2.open( IO_ReadOnly ) ) { - setCaption( i18n("Error: Cannot open temp file for read.") ); - qDebug("error open cal file "); - return ; - - } - QTextStream ts2( &file2 ); - ts2.setCodec( QTextCodec::codecForName("utf8") ); - QTextStream os2( mCommandSocketFinish ); - os2.setCodec( QTextCodec::codecForName("utf8") ); - //os.setEncoding( QTextStream::UnicodeUTF8 ); - if ( KOPrefs::instance()->mWriteBackFile ) { - setCaption( i18n("Sending back synced file...") ); - os2 << "PUT " << mPassWordPiSync << "\r\n";; - while ( ! ts2.atEnd() ) { - os2 << ts2.readLine() << "\n"; - } - } else { - os2 << "STOP\r\n"; - } - mCommandSocketFinish->close(); - if ( mCommandSocketFinish->state() == QSocket::Idle ) - QTimer::singleShot( 10, this , SLOT ( deleteCommandSocketFinish())); - file2.close(); - qDebug("Syncing succesful! "); - setCaption( i18n("Pi-Sync succesful!") ); - - // KMessageBox::information( 0, i18n(" Pi-Sync succesful! ")); - + KCommandSocket* commandSocket = new KCommandSocket( mPassWordPiSync, KOPrefs::instance()->mActiveSyncPort.toUInt(), KOPrefs::instance()->mActiveSyncIP, this ); + connect( commandSocket, SIGNAL(commandFinished( KCommandSocket*, bool )), this, SLOT(deleteCommandSocketFinish(KCommandSocket*,bool)) ); + if ( KOPrefs::instance()->mWriteBackFile ) + commandSocket->writeFile( fileName ); + else + commandSocket->sendStop(); } void MainWindow::syncLocalFile() { QString fn =KOPrefs::instance()->mLastSyncedLocalFile; fn =KFileDialog:: getOpenFileName( fn, i18n("Sync filename(*.ics/*.vcs)"), this ); @@ -2555,21 +2423,26 @@ void KServerSocket::readClient() //emit getFile( mSocket ); get_file(); 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(); + //emit endConnect(); + end_connect(); } } } - +void KServerSocket::end_connect() +{ + delete mSyncActionDialog; + mSyncActionDialog = 0; +} void KServerSocket::send_file() { qDebug("MainWindow::sendFile(QSocket* s) "); if ( mSyncActionDialog ) delete mSyncActionDialog; mSyncActionDialog = new QDialog ( 0, "input-dialog", true ); mSyncActionDialog->setCaption(i18n("Received sync request")); QLabel* label = new QLabel( i18n("Synchronizing...\nDo not use this application!\n\nIf syncing fails you can close this dialog."), mSyncActionDialog ); @@ -2690,20 +2563,58 @@ void KCommandSocket::readFile( QString fn ) mFirst = true; mSocket->connectToHost( mHost, mPort ); QTextStream os( mSocket ); os.setEncoding( QTextStream::UnicodeUTF8 ); os << "GET " << mPassWord << "\r\n"; mTimerSocket->start( 10000 ); } -void KCommandSocket::writeFile( QString ) +void KCommandSocket::writeFile( QString fileName ) { + QFile file2( fileName ); + if (!file2.open( IO_ReadOnly ) ) { + mRetVal= false; + deleteSocket(); + return ; + + } + if ( !mSocket ) { + mSocket = new QSocket( this ); + connect( mSocket, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteSocket()) ); + } + QTextStream ts2( &file2 ); + ts2.setCodec( QTextCodec::codecForName("utf8") ); + QTextStream os2( mSocket ); + os2.setCodec( QTextCodec::codecForName("utf8") ); + os2 << "PUT " << mPassWord << "\r\n";; + while ( ! ts2.atEnd() ) { + os2 << ts2.readLine() << "\n"; + } + mSocket->close(); + if ( mSocket->state() == QSocket::Idle ) + QTimer::singleShot( 10, this , SLOT ( deleteSocket())); + file2.close(); +} +void KCommandSocket::sendStop() +{ + if ( !mSocket ) { + mSocket = new QSocket( this ); + connect( mSocket, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteSocket()) ); } + QTextStream os2( mSocket ); + os2.setCodec( QTextCodec::codecForName("utf8") ); + os2 << "STOP\r\n"; + mRetVal= true; + mSocket->close(); + if ( mSocket->state() == QSocket::Idle ) + QTimer::singleShot( 10, this , SLOT ( deleteSocket())); +} + void KCommandSocket::startReadFileFromSocket() { if ( ! mFirst ) return; mFirst = false; mTimerSocket->stop(); mFileString = ""; mTime.start(); @@ -2747,21 +2658,20 @@ void KCommandSocket::readFileFromSocket() // if state is not idle, deleteSocket(); is called via // connect( mSocket, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteSocket()) ); if ( mSocket->state() == QSocket::Idle ) deleteSocket(); } void KCommandSocket::deleteSocket() { - if ( !mSocket) - return; if ( mTimerSocket->isActive () ) { mTimerSocket->stop(); KMessageBox::information( 0, i18n("ERROR:\nConnection to remote host timed out!\nDid you forgot to enable\nsyncing on remote host? ")); mRetVal = false; } qDebug("KCommandSocket::deleteSocket() %d", mRetVal); + if ( mSocket) delete mSocket; mSocket = 0; - emit commandFinished( mRetVal ); + emit commandFinished( this, mRetVal ); } diff --git a/korganizer/mainwindow.h b/korganizer/mainwindow.h index 8b76067..5a67765 100644 --- a/korganizer/mainwindow.h +++ b/korganizer/mainwindow.h @@ -44,36 +44,38 @@ signals: void endConnect(); private slots: void discardClient(); void readClient(); void readBackFileFromSocket(); private : void send_file(); void get_file(); + void end_connect(); QDialog* mSyncActionDialog; QSocket* mSocket; QString mPassWord; QString mFileName; QTime piTime; QString piFileString; }; class KCommandSocket : public QObject { Q_OBJECT public: KCommandSocket ( QString password, Q_UINT16 port, QString host, QObject * parent=0, const char * name=0 ); void readFile( QString ); void writeFile( QString ); + void sendStop(); signals: - void commandFinished( bool ); + void commandFinished( KCommandSocket*, bool ); private slots: void startReadFileFromSocket(); void readFileFromSocket(); void deleteSocket(); private : QSocket* mSocket; QString mPassWord; Q_UINT16 mPort; @@ -155,29 +157,24 @@ class MainWindow : public QMainWindow void displayFile( QString, QString); void enableIncidenceActions( bool ); private slots: QSocket* piSocket; QString piFileString; QTime piTime; - void deleteCommandSocket(bool); - void deleteCommandSocketFinish(); + void deleteCommandSocket(KCommandSocket* s, bool success); + void deleteCommandSocketFinish(KCommandSocket* s, bool success); void fillSyncMenu(); - void sendFile(QSocket* s); void getFile( bool ); void readFileFromSocket(); - void readBackFileFromSocket(); - void endConnect(); private: //QTimer* mTimerCommandSocket; QString mPassWordPiSync; - KCommandSocket* mCommandSocket; - QSocket* mCommandSocketFinish; KServerSocket * mServerSocket; bool mClosed; void saveOnClose(); int mCurrentSyncProfile; void enableQuick(); void performQuick(); void performQuickQuick(); void syncRemote( KSyncProfile* , bool ask = true); |