summaryrefslogtreecommitdiffabout
authorzautrix <zautrix>2004-10-04 17:32:48 (UTC)
committer zautrix <zautrix>2004-10-04 17:32:48 (UTC)
commit2a99a7ca0816fd68b7fcf2f1fee023aef019000d (patch) (side-by-side diff)
treecef1bc6813689ecc05ef8d1d4323947adeabafcb
parent01b5806c61deb8368f8f454fdec1c4767c73a840 (diff)
downloadkdepimpi-2a99a7ca0816fd68b7fcf2f1fee023aef019000d.zip
kdepimpi-2a99a7ca0816fd68b7fcf2f1fee023aef019000d.tar.gz
kdepimpi-2a99a7ca0816fd68b7fcf2f1fee023aef019000d.tar.bz2
more sync fixes
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--korganizer/mainwindow.cpp172
-rw-r--r--korganizer/mainwindow.h34
-rw-r--r--version2
3 files changed, 140 insertions, 68 deletions
diff --git a/korganizer/mainwindow.cpp b/korganizer/mainwindow.cpp
index 10cb2a2..e4b7869 100644
--- a/korganizer/mainwindow.cpp
+++ b/korganizer/mainwindow.cpp
@@ -62,26 +62,24 @@ 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 )
{
mPassWordPiSync = "abc";
- mTimerCommandSocket = new QTimer ( this );
- connect( mTimerCommandSocket, SIGNAL ( timeout () ), this, SLOT ( deleteCommandSocket() ) );
#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();
@@ -2094,107 +2092,67 @@ void MainWindow::performQuick()
}
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";
+ mCommandSocket = new KCommandSocket( mPassWordPiSync, port, KOPrefs::instance()->mActiveSyncIP, this );
+ connect( mCommandSocket, SIGNAL(commandFinished( bool )), this, SLOT(deleteCommandSocket(bool)) );
setCaption( i18n("Sending request for remote file ...") );
- mTimerCommandSocket->start( 10000 );
-
+ QString fileName;
+#ifdef _WIN32_
+ fileName = defaultFileName() +"sync";
+#else
+ fileName = "/tmp/kopitempfile.ics";
+#endif
+ mCommandSocket->readFile( fileName );
}
-void MainWindow::deleteCommandSocket()
+void MainWindow::deleteCommandSocket( bool success)
{
- if ( !mCommandSocket)
+ if ( ! success ) {
+ setCaption( i18n("ERROR:Receiving remote file failed.") );
+ // pending : send stop
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() ");
+ QTimer::singleShot( 1, this , SLOT ( readFileFromSocket()));
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();
+ // 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 () < 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();
@@ -2208,25 +2166,24 @@ void MainWindow::readFileFromSocket()
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 ;
}
QTextStream ts2( &file2 );
ts2.setCodec( QTextCodec::codecForName("utf8") );
QTextStream os2( mCommandSocketFinish );
os2.setCodec( QTextCodec::codecForName("utf8") );
@@ -2234,25 +2191,25 @@ void MainWindow::readFileFromSocket()
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()));
- file.close();
+ file2.close();
qDebug("Syncing succesful! ");
setCaption( i18n("Pi-Sync succesful!") );
// KMessageBox::information( 0, i18n(" Pi-Sync succesful! "));
}
void MainWindow::syncLocalFile()
{
QString fn =KOPrefs::instance()->mLastSyncedLocalFile;
@@ -2582,23 +2539,110 @@ void KServerSocket::readClient()
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();
}
}
}
+KCommandSocket::KCommandSocket ( QString password, Q_UINT16 port, QString host, QObject * parent, const char * name ): QObject( parent, name )
+{
+ mPassWord = password;
+ mSocket = 0;
+ mPort = port;
+ mHost = host;
+ mRetVal = false;
+ mTimerSocket = new QTimer ( this );
+ connect( mTimerSocket, SIGNAL ( timeout () ), this, SLOT ( deleteSocket() ) );
+}
+void KCommandSocket::readFile( QString fn )
+{
+ if ( !mSocket ) {
+ mSocket = new QSocket( this );
+ connect( mSocket, SIGNAL(readyRead()), this, SLOT(startReadFileFromSocket()) );
+ connect( mSocket, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteSocket()) );
+ }
+ mFileString = "";
+ mFileName = 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::startReadFileFromSocket()
+{
+ if ( ! mFirst )
+ return;
+ mFirst = false;
+ mTimerSocket->stop();
+ mFileString = "";
+ mTime.start();
+ QTimer::singleShot( 1, this , SLOT (readFileFromSocket( ) ));
+}
+void KCommandSocket::readFileFromSocket()
+{
+ qDebug("readBackFileFromSocket() %d ", mTime.elapsed ());
+ while ( mSocket->canReadLine () ) {
+ mTime.restart();
+ QString line = mSocket->readLine ();
+ mFileString += line;
+ qDebug("readline: %s ", line.latin1());
+ }
+ if ( mTime.elapsed () < 3000 ) {
+ // wait for more
+ qDebug("waitformore ");
+ QTimer::singleShot( 100, this , SLOT (readFileFromSocket( ) ));
+ return;
+ }
+ QString fileName = mFileName;
+ QFile file ( fileName );
+ if (!file.open( IO_WriteOnly ) ) {
+ mFileString = "";
+ mRetVal = false;
+ qDebug("Error open temp calender file for writing: %s",fileName.latin1() );
+ deleteSocket();
+ return ;
+ }
+ // mView->setLoadedFileVersion(QDateTime::currentDateTime().addSecs( -1));
+ QTextStream ts ( &file );
+ ts.setCodec( QTextCodec::codecForName("utf8") );
+ qDebug("finish ");
+ ts << mFileString;
+ file.close();
+ mFileString = "";
+ mRetVal = true;
+ mSocket->close();
+ // 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 "));
+ mRetVal = false;
+ }
+ qDebug("KCommandSocket::deleteSocket() %d", mRetVal);
+ delete mSocket;
+ mSocket = 0;
+ emit commandFinished( mRetVal );
+}
diff --git a/korganizer/mainwindow.h b/korganizer/mainwindow.h
index d217578..11a816c 100644
--- a/korganizer/mainwindow.h
+++ b/korganizer/mainwindow.h
@@ -37,24 +37,52 @@ public:
signals:
void sendFile(QSocket*);
void getFile(QSocket*);
void endConnect();
private slots:
void discardClient();
void readClient();
private :
QSocket* mSocket;
QString mPassWord;
};
+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 );
+
+
+signals:
+ void commandFinished( bool );
+private slots:
+ void startReadFileFromSocket();
+ void readFileFromSocket();
+ void deleteSocket();
+ private :
+ QSocket* mSocket;
+ QString mPassWord;
+ Q_UINT16 mPort;
+ QString mHost;
+ QString mFileName;
+ QTimer* mTimerSocket;
+ bool mRetVal;
+ QTime mTime;
+ QString mFileString;
+ bool mFirst;
+};
namespace KCal {
class CalendarLocal;
}
using namespace KCal;
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow( QWidget *parent = 0, const char *name = 0, QString command = "");
@@ -112,36 +140,36 @@ class MainWindow : public QMainWindow
protected:
void displayText( QString, QString);
void displayFile( QString, QString);
void enableIncidenceActions( bool );
private slots:
QSocket* piSocket;
QString piFileString;
QTime piTime;
- void deleteCommandSocket();
+ void deleteCommandSocket(bool);
void deleteCommandSocketFinish();
void fillSyncMenu();
void sendFile(QSocket* s);
void getFile(QSocket* socket);
void readFileFromSocket();
void readBackFileFromSocket();
void endConnect();
private:
- QTimer* mTimerCommandSocket;
+ //QTimer* mTimerCommandSocket;
QString mPassWordPiSync;
- QSocket* mCommandSocket;
+ KCommandSocket* mCommandSocket;
QSocket* mCommandSocketFinish;
KServerSocket * mServerSocket;
bool mClosed;
void saveOnClose();
int mCurrentSyncProfile;
void enableQuick();
void performQuick();
void performQuickQuick();
void syncRemote( KSyncProfile* , bool ask = true);
bool mFlagKeyPressed;
bool mBlockAtStartup;
QPEToolBar *iconToolBar;
diff --git a/version b/version
index 576852d..f085278 100644
--- a/version
+++ b/version
@@ -1 +1 @@
-version = "1.9.6";
+version = "1.9.7";