summaryrefslogtreecommitdiffabout
authorzautrix <zautrix>2004-10-04 18:41:26 (UTC)
committer zautrix <zautrix>2004-10-04 18:41:26 (UTC)
commit144952942e57780587739a46253cc7305c79f27c (patch) (side-by-side diff)
tree82ad5b9b98c6243a9d2c8902f4851c421e70508c
parent2a99a7ca0816fd68b7fcf2f1fee023aef019000d (diff)
downloadkdepimpi-144952942e57780587739a46253cc7305c79f27c.zip
kdepimpi-144952942e57780587739a46253cc7305c79f27c.tar.gz
kdepimpi-144952942e57780587739a46253cc7305c79f27c.tar.bz2
more sync fixes
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/mainwindow.cpp133
-rw-r--r--korganizer/mainwindow.h17
2 files changed, 140 insertions, 10 deletions
diff --git a/korganizer/mainwindow.cpp b/korganizer/mainwindow.cpp
index e4b7869..da73caf 100644
--- a/korganizer/mainwindow.cpp
+++ b/korganizer/mainwindow.cpp
@@ -1884,158 +1884,172 @@ QString MainWindow::getPassword( )
dia.hide();
qApp->processEvents();
return retfile;
}
void MainWindow::enableQuick()
{
QString passWordPiSync = "bhdrvmk";
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);
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 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();
passWordPiSync = lepw.text();
qApp->processEvents();
KOPrefs::instance()->mPassiveSyncPort = retfile;
bool ok;
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 );
+ mServerSocket->setFileName( defaultFileName() );
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*) ) );
+ 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(QSocket* socket)
+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 = "";
@@ -2445,204 +2459,309 @@ void MainWindow::syncSSH()
system ("scp zaurus@192.168.0.65:/home/zaurus/Applications/korganizer/mycalendar.ics /home/polo/Applications/korganizer/z_sync.ics");
while ( timer.elapsed() < 5000 )
qApp->processEvents();
qDebug("MainWindow::merging) ");
mView->syncCalendar( "/home/polo/Applications/korganizer/z_sync.ics", 0 );
while ( mBlockSaveFlag )
qApp->processEvents();
save();
system ("scp /home/polo/Applications/korganizer/mycalendar.ics zaurus@192.168.0.65:/home/zaurus/Applications/korganizer/mycalendar.ics");
#endif
}
void MainWindow::syncSharp()
{
if ( mCalendarModifiedFlag )
save();
mView->syncSharp();
slotModifiedChanged( true );
}
void MainWindow::syncPhone()
{
if ( mCalendarModifiedFlag )
save();
mView->syncPhone();
slotModifiedChanged( true );
}
void MainWindow::printSel( )
{
mView->viewManager()->agendaView()->agenda()->printSelection();
}
void MainWindow::printCal()
{
mView->print();//mCp->showDialog();
}
KServerSocket:: KServerSocket ( QString pw, Q_UINT16 port, int backlog, QObject * parent, const char * name ) : QServerSocket( port, backlog, parent, name )
{
mPassWord = pw;
mSocket = 0;
+ mSyncActionDialog = 0;
};
void KServerSocket::newConnection ( int socket )
{
qDebug("KServerSocket:New connection %d ", socket);
if ( mSocket ) {
qDebug("KServerSocket::newConnection Socket deleted! ");
delete mSocket;
mSocket = 0;
}
mSocket = new QSocket( this );
connect( mSocket , SIGNAL(readyRead()), this, SLOT(readClient()) );
connect( mSocket , SIGNAL(delayedCloseFinished()), this, SLOT(discardClient()) );
mSocket->setSocket( socket );
}
void KServerSocket::discardClient()
{
qDebug(" KServerSocket::discardClient()");
if ( mSocket ) {
qDebug("delete ");
delete mSocket;
mSocket = 0;
}
//emit endConnect();
}
void KServerSocket::readClient()
{
if ( mSocket == 0 ) {
qDebug("ERROR::KServerSocket::readClient(): mSocket == 0 ");
return;
}
qDebug("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 );
+ //emit sendFile( mSocket );
+ send_file();
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 );
+ //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();
}
}
}
+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 );
+ QVBoxLayout* lay = new QVBoxLayout( mSyncActionDialog );
+ lay->addWidget( label);
+ lay->setMargin(7);
+ lay->setSpacing(7);
+ mSyncActionDialog->setFixedSize( 230, 120);
+ mSyncActionDialog->show();
+ qDebug("KSS::saving ... ");
+ emit saveFile();
+ qApp->processEvents();
+ QString fileName = mFileName;
+ QFile file( fileName );
+ if (!file.open( IO_ReadOnly ) ) {
+ delete mSyncActionDialog;
+ mSyncActionDialog = 0;
+ qDebug("KSS::error open file ");
+ mSocket->close();
+ if ( mSocket->state() == QSocket::Idle )
+ QTimer::singleShot( 10, this , SLOT ( discardClient()));
+ return ;
+
+ }
+ mSyncActionDialog->setCaption( i18n("Sending file...") );
+ QTextStream ts( &file );
+ ts.setCodec( QTextCodec::codecForName("utf8") );
+ QTextStream os( mSocket );
+ os.setCodec( QTextCodec::codecForName("utf8") );
+ //os.setEncoding( QTextStream::UnicodeUTF8 );
+ while ( ! ts.atEnd() ) {
+ os << ts.readLine() << "\n";
+ }
+ //os << ts.read();
+ file.close();
+ mSyncActionDialog->setCaption( i18n("Waiting to get back synced file") );
+ qDebug("file sent ");
+ mSocket->close();
+ if ( mSocket->state() == QSocket::Idle )
+ QTimer::singleShot( 10, this , SLOT ( discardClient()));
+}
+void KServerSocket::get_file()
+{
+ mSyncActionDialog->setCaption( i18n("Receiving synced file...") );
+
+ piTime.start();
+ piFileString = "";
+ QTimer::singleShot( 1, this , SLOT (readBackFileFromSocket( ) ));
+}
+
+
+void KServerSocket::readBackFileFromSocket()
+{
+ qDebug("readBackFileFromSocket() %d ", piTime.elapsed ());
+ while ( mSocket->canReadLine () ) {
+ piTime.restart();
+ QString line = mSocket->readLine ();
+ piFileString += line;
+ qDebug("readline: %s ", line.latin1());
+ mSyncActionDialog->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 = mFileName;
+ QFile file ( fileName );
+ if (!file.open( IO_WriteOnly ) ) {
+ delete mSyncActionDialog;
+ mSyncActionDialog = 0;
+ qDebug("error open cal file ");
+ piFileString = "";
+ emit file_received( false );
+ return ;
+
+ }
+
+ // mView->setLoadedFileVersion(QDateTime::currentDateTime().addSecs( -1));
+ QTextStream ts ( &file );
+ ts.setCodec( QTextCodec::codecForName("utf8") );
+ qDebug("finish ");
+ mSyncActionDialog->setCaption( i18n("Writing file to disk...") );
+ ts << piFileString;
+ mSocket->close();
+ if ( mSocket->state() == QSocket::Idle )
+ QTimer::singleShot( 10, this , SLOT ( discardClient()));
+ file.close();
+ delete mSyncActionDialog;
+ mSyncActionDialog = 0;
+ piFileString = "";
+ emit file_received( true );
+
+}
+
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 "));
+ 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);
delete mSocket;
mSocket = 0;
emit commandFinished( mRetVal );
}
diff --git a/korganizer/mainwindow.h b/korganizer/mainwindow.h
index 11a816c..8b76067 100644
--- a/korganizer/mainwindow.h
+++ b/korganizer/mainwindow.h
@@ -1,94 +1,105 @@
#ifndef KORGE_MAINWINDOW_H
#define KORGE_MAINWINDOW_H
#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"
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 ( QString password, Q_UINT16 port, int backlog = 0, QObject * parent=0, const char * name=0 );
void newConnection ( int socket ) ;
+ void setFileName( QString fn ) {mFileName = fn;};
signals:
- void sendFile(QSocket*);
- void getFile(QSocket*);
+ //void sendFile(QSocket*);
+ //void getFile(QSocket*);
+ void file_received( bool );
+ //void file_sent();
+ void saveFile();
void endConnect();
private slots:
void discardClient();
void readClient();
+ void readBackFileFromSocket();
private :
+ void send_file();
+ void get_file();
+ 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 );
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 = "");
~MainWindow();
public slots:
virtual void showMaximized ();
void configureAgenda( int );
void recieve( const QCString& msg, const QByteArray& data );
static QString defaultFileName();
@@ -108,94 +119,94 @@ class MainWindow : public QMainWindow
void aboutAutoSaving();;
void aboutKnownBugs();
void processIncidenceSelection( Incidence * );
void importQtopia();
void importBday();
void importOL();
void importIcal();
void importFile( QString, bool );
void quickImportIcal();
void slotModifiedChanged( bool );
void save();
void configureToolBar( int );
void printSel();
void printCal();
void saveCalendar();
void loadCalendar();
void exportVCalendar();
void fillFilterMenu();
void selectFilter( int );
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:
QSocket* piSocket;
QString piFileString;
QTime piTime;
void deleteCommandSocket(bool);
void deleteCommandSocketFinish();
void fillSyncMenu();
void sendFile(QSocket* s);
- void getFile(QSocket* socket);
+ 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);
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