author | zautrix <zautrix> | 2004-10-04 10:38:45 (UTC) |
---|---|---|
committer | zautrix <zautrix> | 2004-10-04 10:38:45 (UTC) |
commit | 01b5806c61deb8368f8f454fdec1c4767c73a840 (patch) (side-by-side diff) | |
tree | f2546296a50444d02d2a74f6bf55fd57b0504ebc | |
parent | 743f44c45534a6e1df17ddc7b5f3c62b73921455 (diff) | |
download | kdepimpi-01b5806c61deb8368f8f454fdec1c4767c73a840.zip kdepimpi-01b5806c61deb8368f8f454fdec1c4767c73a840.tar.gz kdepimpi-01b5806c61deb8368f8f454fdec1c4767c73a840.tar.bz2 |
sync fixes
-rw-r--r-- | korganizer/mainwindow.cpp | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/korganizer/mainwindow.cpp b/korganizer/mainwindow.cpp index 8e2f956..10cb2a2 100644 --- a/korganizer/mainwindow.cpp +++ b/korganizer/mainwindow.cpp @@ -1927,514 +1927,516 @@ void MainWindow::enableQuick() Q_UINT16 port = retfile.toUInt(&ok); if ( ! ok ) { KMessageBox::information( this, i18n("No valid port")); return; } qDebug("port %d ", port); mServerSocket = new KServerSocket ( passWordPiSync, 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) "); 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(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 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 ); 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); 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 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; } mPassWordPiSync = lepw.text(); 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 ) { 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 " << mPassWordPiSync << "\r\n"; setCaption( i18n("Sending request for remote file ...") ); - mTimerCommandSocket->start( 15000 ); + mTimerCommandSocket->start( 10000 ); } void MainWindow::deleteCommandSocket() { if ( !mCommandSocket) return; if ( mTimerCommandSocket->isActive () ) { KMessageBox::information( 0, i18n("ERROR:\nConnection to remote host timed out ")); mTimerCommandSocket->stop(); } + //KMessageBox::information( 0, i18n("MainWindow::deleteCommandSocket ")); 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_ 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 temp 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 (); } QTime ti; ti.start(); - while ( ti.elapsed () < 5000 && !mCommandSocket->canReadLine () ) { + while ( ti.elapsed () < 3000 && !mCommandSocket->canReadLine () ) { qApp->processEvents(); qDebug("waiting2 %d ",ti.elapsed () ); if ( !mCommandSocket->canReadLine () ) mCommandSocket->waitForMore ( 100 ); } //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; 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(); 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() ); // pending connect signals connected () and error to new slots 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 ; } - setCaption( i18n("Sending back synced file...") ); 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 ) - deleteCommandSocketFinish(); + QTimer::singleShot( 10, this , SLOT ( deleteCommandSocketFinish())); file.close(); qDebug("Syncing succesful! "); setCaption( i18n("Pi-Sync succesful!") ); + // KMessageBox::information( 0, i18n(" 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 ); } } bool MainWindow::syncWithFile( QString fn , bool quick ) { bool ret = false; QFileInfo info; info.setFile( fn ); QString mess; bool loadbup = true; if ( !info. exists() ) { mess = i18n( "Sync file \n...%1\ndoes not exist!\nNothing synced!\n").arg(fn.right( 30) ); int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"), mess ); return ret; } int result = 0; if ( !quick ) { mess = i18n("Sync with file \n...%1\nfrom:\n%2\n").arg(fn.right( 25)).arg(KGlobal::locale()->formatDateTime(info.lastModified (), true, false )); result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"), mess, i18n("Sync"), i18n("Cancel"), 0, 0, 1 ); if ( result ) return false; } if ( KOPrefs::instance()->mAskForPreferences ) mView->edit_sync_options(); if ( result == 0 ) { //qDebug("Now sycing ... "); if ( ret = mView->syncCalendar( fn, KOPrefs::instance()->mSyncAlgoPrefs ) ) setCaption( i18n("Synchronization successful") ); else setCaption( i18n("Sync cancelled or failed. Nothing synced.") ); if ( ! quick ) KOPrefs::instance()->mLastSyncedLocalFile = fn; slotModifiedChanged( true ); } return ret; } void MainWindow::quickSyncLocalFile() { //mView->setSyncDevice("local-file" ); //qDebug("quickSyncLocalFile() "); if ( syncWithFile( KOPrefs::instance()->mLastSyncedLocalFile, false ) ) { // Event* e = mView->getLastSyncEvent(); // e->setReadOnly( false ); // e->setLocation( i18n("Quick with file: ")+ KOPrefs::instance()->mLastSyncedLocalFile); // e->setReadOnly( true ); } } void MainWindow::confSync() { mView->confSync(); fillSyncMenu(); } void MainWindow::syncRemote( KSyncProfile* prof, bool ask) { QString question; if ( ask ) { question = i18n("Do you really want\nto remote sync\nwith profile \n")+ prof->getName()+" ?\n"; if ( QMessageBox::information( this, i18n("KO/Pi Sync"), question, i18n("Yes"), i18n("No"), 0, 0 ) != 0 ) return; } QString command = prof->getPreSyncCommand(); int fi; if ( (fi = command.find("$PWD$")) > 0 ) { QString pwd = getPassword(); command = command.left( fi )+ pwd + command.mid( fi+5 ); } int maxlen = 30; if ( QApplication::desktop()->width() > 320 ) maxlen += 25; setCaption ( i18n( "Copy remote file to local machine..." ) ); int fileSize = 0; int result = system ( command ); // 0 : okay // 256: no such file or dir // qDebug("KO: Remote copy result(0 = okay): %d ",result ); if ( result != 0 ) { int len = maxlen; while ( len < command.length() ) { command.insert( len , "\n" ); len += maxlen +2; } question = i18n("Sorry, the copy command failed!\nCommand was:\n%1\n \nTry command on console to get more\ndetailed info about the reason.\n").arg (command) ; QMessageBox::information( this, i18n("KO/Pi Sync - ERROR"), question, i18n("Okay!")) ; setCaption ("KO/Pi"); return; } setCaption ( i18n( "Copying succeed." ) ); //qDebug(" file **%s** ",prof->getLocalTempFile().latin1() ); if ( syncWithFile( prof->getLocalTempFile(), true ) ) { // Event* e = mView->getLastSyncEvent(); // e->setReadOnly( false ); // e->setLocation( KOPrefs::instance()->mSyncProfileNames[mCurrentSyncProfile]); // e->setReadOnly( true ); if ( KOPrefs::instance()->mWriteBackFile ) { command = prof->getPostSyncCommand(); int fi; if ( (fi = command.find("$PWD$")) > 0 ) { QString pwd = getPassword(); command = command.left( fi )+ pwd + command.mid( fi+5 ); } setCaption ( i18n( "Writing back file ..." ) ); result = system ( command ); qDebug("KO: Writing back file result: %d ", result); if ( result != 0 ) { setCaption ( i18n( "Writing back file result: " )+QString::number( result ) ); return; } else { setCaption ( i18n( "Syncronization sucessfully completed" ) ); } } } return; } void MainWindow::syncSSH() { // not used anymore QTime timer; timer.start(); //qDebug("MainWindow::syncssh() "); KOPrefs *p = KOPrefs::instance(); QString localFile = p->mLocalTempFile; QString remoteIP = p->mRemoteIP; QString remoteUser = p->mRemoteUser; QString remoteFile = p->mRemoteFile; if ( p->mUsePassWd && p->mRemotePassWd.length() > 0 ) remoteUser += ":" + p->mRemotePassWd; QString question = i18n("Do you really want\nto remote sync?\n \n") + i18n("IP: " ) +remoteIP +"\n" + i18n("User: " ) + remoteUser +"\n" ; int maxlen = 30; if ( QApplication::desktop()->width() > 320 ) maxlen += 25; if ( remoteFile.length() > maxlen ) question += i18n("Remote file:\n..." ) + remoteFile.right(maxlen) +"\n"; else question += i18n("Remote file:\n " ) + remoteFile +"\n"; if ( localFile.length() > maxlen ) question += i18n("Local temp file:\n..." ) + localFile.right(maxlen) +"\n"; else question += i18n("Local temp file:\n " ) + localFile +"\n"; if ( QMessageBox::information( this, i18n("KO/Pi Sync"), question, i18n("Yes"), i18n("No"), 0, 0 ) != 0 ) return; // if ( !p->mUsePassWd ) { // QString pass = getPassword(); // if ( pass.length() > 0 ) // remoteUser += ":" + pass; // } QString command = "scp " + remoteUser + "@" + remoteIP +":" + remoteFile +" " +localFile; setCaption ( i18n( "Copy remote file to local machine..." ) ); int fileSize = 0; int result = system ( command ); // 0 : okay // 256: no such file or dir // qDebug("KO: Remote copy result(0 = okay): %d ",result ); |