-rw-r--r-- | korganizer/koprefs.cpp | 5 | ||||
-rw-r--r-- | korganizer/koprefs.h | 4 | ||||
-rw-r--r-- | korganizer/mainwindow.cpp | 317 | ||||
-rw-r--r-- | korganizer/mainwindow.h | 65 |
4 files changed, 386 insertions, 5 deletions
diff --git a/korganizer/koprefs.cpp b/korganizer/koprefs.cpp index 5d7db4f..0034715 100644 --- a/korganizer/koprefs.cpp +++ b/korganizer/koprefs.cpp | |||
@@ -184,17 +184,20 @@ KOPrefs::KOPrefs() : | |||
184 | // addItemStringList("SyncProfileNames",&mSyncProfileNames); | 184 | // addItemStringList("SyncProfileNames",&mSyncProfileNames); |
185 | // addItemStringList("ExternSyncProfiles",&mExternSyncProfileNames); | 185 | // addItemStringList("ExternSyncProfiles",&mExternSyncProfileNames); |
186 | 186 | ||
187 | KPrefs::setCurrentGroup("RemoteSyncing"); | 187 | KPrefs::setCurrentGroup("RemoteSyncing"); |
188 | // addItemBool("UsePasswd",&mUsePassWd,false); | 188 | // addItemBool("UsePasswd",&mUsePassWd,false); |
189 | // addItemBool("WriteBackFile",&mWriteBackFile,true); | 189 | // addItemBool("WriteBackFile",&mWriteBackFile,true); |
190 | // addItemBool("WriteBackExistingOnly",&mWriteBackExistingOnly,false); | 190 | // addItemBool("WriteBackExistingOnly",&mWriteBackExistingOnly,false); |
191 | // addItemBool("AskForPreferences",&mAskForPreferences,true); | 191 | // addItemBool("AskForPreferences",&mAskForPreferences,true); |
192 | // addItemBool("ShowSyncSummary",&mShowSyncSummary,true); | 192 | // addItemBool("ShowSyncSummary",&mShowSyncSummary,true); |
193 | addItemString("PassiveSyncPort",&mPassiveSyncPort,"9197" ); | ||
194 | addItemString("ActiveSyncPort",&mActiveSyncPort,"9197" ); | ||
195 | addItemString("ActiveSyncIP",&mActiveSyncIP,"192.168.0.40" ); | ||
193 | addItemBool("ShowSyncEvents",&mShowSyncEvents,false); | 196 | addItemBool("ShowSyncEvents",&mShowSyncEvents,false); |
194 | addItemInt("LastSyncTime",&mLastSyncTime,0); | 197 | addItemInt("LastSyncTime",&mLastSyncTime,0); |
195 | addItemInt("SyncAlgoPrefs",&mSyncAlgoPrefs,3); | 198 | addItemInt("SyncAlgoPrefs",&mSyncAlgoPrefs,3); |
196 | addItemInt("RingSyncAlgoPrefs",&mRingSyncAlgoPrefs,3); | 199 | addItemInt("RingSyncAlgoPrefs",&mRingSyncAlgoPrefs,3); |
197 | 200 | ||
198 | #ifdef _WIN32_ | 201 | #ifdef _WIN32_ |
199 | QString hdp= locateLocal("data","korganizer")+"\\\\"; | 202 | QString hdp= locateLocal("data","korganizer")+"\\\\"; |
200 | #else | 203 | #else |
diff --git a/korganizer/koprefs.h b/korganizer/koprefs.h index 33eda60..696433e 100644 --- a/korganizer/koprefs.h +++ b/korganizer/koprefs.h | |||
@@ -274,16 +274,20 @@ class KOPrefs : public KPimPrefs | |||
274 | QStringList mTodoSummaryUser; | 274 | QStringList mTodoSummaryUser; |
275 | 275 | ||
276 | bool mUseInternalAlarmNotification; | 276 | bool mUseInternalAlarmNotification; |
277 | int mAlarmPlayBeeps; | 277 | int mAlarmPlayBeeps; |
278 | int mAlarmSuspendTime; | 278 | int mAlarmSuspendTime; |
279 | int mAlarmSuspendCount; | 279 | int mAlarmSuspendCount; |
280 | int mAlarmBeepInterval; | 280 | int mAlarmBeepInterval; |
281 | 281 | ||
282 | QString mPassiveSyncPort; | ||
283 | QString mActiveSyncPort; | ||
284 | QString mActiveSyncIP; | ||
285 | |||
282 | 286 | ||
283 | //US I copied the following settings into KPimGlobalPrefs | 287 | //US I copied the following settings into KPimGlobalPrefs |
284 | // that allows us later to easily remove the settings from here. | 288 | // that allows us later to easily remove the settings from here. |
285 | int mPreferredDate; | 289 | int mPreferredDate; |
286 | QString mUserDateFormatLong; | 290 | QString mUserDateFormatLong; |
287 | QString mUserDateFormatShort; | 291 | QString mUserDateFormatShort; |
288 | int mPreferredLanguage; | 292 | int mPreferredLanguage; |
289 | int mPreferredTime; | 293 | int mPreferredTime; |
diff --git a/korganizer/mainwindow.cpp b/korganizer/mainwindow.cpp index 6315c64..f2e1bf8 100644 --- a/korganizer/mainwindow.cpp +++ b/korganizer/mainwindow.cpp | |||
@@ -1,16 +1,17 @@ | |||
1 | #include <stdlib.h> | 1 | #include <stdlib.h> |
2 | 2 | ||
3 | #include <qaction.h> | 3 | #include <qaction.h> |
4 | #include <qpopupmenu.h> | 4 | #include <qpopupmenu.h> |
5 | #include <qpainter.h> | 5 | #include <qpainter.h> |
6 | #include <qwhatsthis.h> | 6 | #include <qwhatsthis.h> |
7 | #include <qmessagebox.h> | 7 | #include <qmessagebox.h> |
8 | #include <qlineedit.h> | 8 | #include <qlineedit.h> |
9 | #include <qtextcodec.h> | ||
9 | #include <qfile.h> | 10 | #include <qfile.h> |
10 | #include <qdir.h> | 11 | #include <qdir.h> |
11 | #include <qapp.h> | 12 | #include <qapp.h> |
12 | #include <qfileinfo.h> | 13 | #include <qfileinfo.h> |
13 | #include <qlabel.h> | 14 | #include <qlabel.h> |
14 | #include <qmap.h> | 15 | #include <qmap.h> |
15 | #include <qwmatrix.h> | 16 | #include <qwmatrix.h> |
16 | #include <qtextbrowser.h> | 17 | #include <qtextbrowser.h> |
@@ -66,17 +67,19 @@ using namespace KCal; | |||
66 | int globalFlagBlockStartup; | 67 | int globalFlagBlockStartup; |
67 | MainWindow::MainWindow( QWidget *parent, const char *name, QString msg) : | 68 | MainWindow::MainWindow( QWidget *parent, const char *name, QString msg) : |
68 | QMainWindow( parent, name ) | 69 | QMainWindow( parent, name ) |
69 | { | 70 | { |
70 | 71 | ||
71 | #ifdef DESKTOP_VERSION | 72 | #ifdef DESKTOP_VERSION |
72 | setFont( QFont("Arial"), 14 ); | 73 | setFont( QFont("Arial"), 14 ); |
73 | #endif | 74 | #endif |
74 | 75 | mCommandSocket = 0; | |
76 | mSyncActionDialog = 0; | ||
77 | mServerSocket = 0; | ||
75 | mClosed = false; | 78 | mClosed = false; |
76 | //QString confFile = KStandardDirs::appDir() + "config/korganizerrc"; | 79 | //QString confFile = KStandardDirs::appDir() + "config/korganizerrc"; |
77 | QString confFile = locateLocal("config","korganizerrc"); | 80 | QString confFile = locateLocal("config","korganizerrc"); |
78 | QFileInfo finf ( confFile ); | 81 | QFileInfo finf ( confFile ); |
79 | bool showWarning = !finf.exists(); | 82 | bool showWarning = !finf.exists(); |
80 | setIcon(SmallIcon( "ko24" ) ); | 83 | setIcon(SmallIcon( "ko24" ) ); |
81 | mBlockAtStartup = true; | 84 | mBlockAtStartup = true; |
82 | mFlagKeyPressed = false; | 85 | mFlagKeyPressed = false; |
@@ -208,17 +211,17 @@ MainWindow::MainWindow( QWidget *parent, const char *name, QString msg) : | |||
208 | #ifndef DESKTOP_VERSION | 211 | #ifndef DESKTOP_VERSION |
209 | connect(qApp, SIGNAL (appMessage ( const QCString &, const QByteArray & )), ExternalAppHandler::instance(), SLOT (appMessage ( const QCString &, const QByteArray & ))); | 212 | connect(qApp, SIGNAL (appMessage ( const QCString &, const QByteArray & )), ExternalAppHandler::instance(), SLOT (appMessage ( const QCString &, const QByteArray & ))); |
210 | #endif | 213 | #endif |
211 | } | 214 | } |
212 | MainWindow::~MainWindow() | 215 | MainWindow::~MainWindow() |
213 | { | 216 | { |
214 | //qDebug("MainWindow::~MainWindow() "); | 217 | //qDebug("MainWindow::~MainWindow() "); |
215 | //save toolbar location | 218 | //save toolbar location |
216 | 219 | delete mServerSocket; | |
217 | delete mCalendar; | 220 | delete mCalendar; |
218 | delete KOPrefs::instance(); | 221 | delete KOPrefs::instance(); |
219 | delete KIncidenceFormatter::instance(); | 222 | delete KIncidenceFormatter::instance(); |
220 | 223 | ||
221 | 224 | ||
222 | } | 225 | } |
223 | void MainWindow::showMaximized () | 226 | void MainWindow::showMaximized () |
224 | { | 227 | { |
@@ -857,16 +860,25 @@ void MainWindow::initActions() | |||
857 | connect( configureAgendaMenu, SIGNAL( activated( int ) ),this, SLOT(configureAgenda( int ) ) ); | 860 | connect( configureAgendaMenu, SIGNAL( activated( int ) ),this, SLOT(configureAgenda( int ) ) ); |
858 | } | 861 | } |
859 | void MainWindow::fillSyncMenu() | 862 | void MainWindow::fillSyncMenu() |
860 | { | 863 | { |
861 | if ( syncMenu->count() ) | 864 | if ( syncMenu->count() ) |
862 | syncMenu->clear(); | 865 | syncMenu->clear(); |
863 | syncMenu->insertItem( i18n("Configure..."), 0 ); | 866 | syncMenu->insertItem( i18n("Configure..."), 0 ); |
864 | syncMenu->insertSeparator(); | 867 | syncMenu->insertSeparator(); |
868 | if ( mServerSocket == 0 ) { | ||
869 | syncMenu->insertItem( i18n("Enable Easy-Pi-Sync"), 2 ); | ||
870 | } else { | ||
871 | syncMenu->insertItem( i18n("Disable Easy-Pi-Sync"), 3 ); | ||
872 | } | ||
873 | syncMenu->insertSeparator(); | ||
874 | syncMenu->insertItem( i18n("New Easy-Pi-Sync!"), 4 ); | ||
875 | syncMenu->insertItem( i18n("Quick Easy-Pi-Sync!"), 5 ); | ||
876 | syncMenu->insertSeparator(); | ||
865 | syncMenu->insertItem( i18n("Multiple sync"), 1 ); | 877 | syncMenu->insertItem( i18n("Multiple sync"), 1 ); |
866 | syncMenu->insertSeparator(); | 878 | syncMenu->insertSeparator(); |
867 | KConfig config ( locateLocal( "config","ksyncprofilesrc" ) ); | 879 | KConfig config ( locateLocal( "config","ksyncprofilesrc" ) ); |
868 | config.setGroup("General"); | 880 | config.setGroup("General"); |
869 | QStringList prof = config.readListEntry("SyncProfileNames"); | 881 | QStringList prof = config.readListEntry("SyncProfileNames"); |
870 | KOPrefs::instance()->mLocalMachineName = config.readEntry("LocalMachineName","undefined"); | 882 | KOPrefs::instance()->mLocalMachineName = config.readEntry("LocalMachineName","undefined"); |
871 | if ( prof.count() < 3 ) { | 883 | if ( prof.count() < 3 ) { |
872 | prof.clear(); | 884 | prof.clear(); |
@@ -991,32 +1003,51 @@ void MainWindow::multiSync( bool askforPrefs ) | |||
991 | if ( num ) | 1003 | if ( num ) |
992 | setCaption(i18n("%1 profiles synced. Multiple sync completed!").arg(num) ); | 1004 | setCaption(i18n("%1 profiles synced. Multiple sync completed!").arg(num) ); |
993 | else | 1005 | else |
994 | setCaption(i18n("Nothing synced! No profiles defined for multisync!")); | 1006 | setCaption(i18n("Nothing synced! No profiles defined for multisync!")); |
995 | return; | 1007 | return; |
996 | } | 1008 | } |
997 | void MainWindow::slotSyncMenu( int action ) | 1009 | void MainWindow::slotSyncMenu( int action ) |
998 | { | 1010 | { |
999 | //qDebug("syncaction %d ", action); | 1011 | qDebug("syncaction %d ", action); |
1000 | if ( action == 0 ) { | 1012 | if ( action == 0 ) { |
1001 | 1013 | ||
1002 | // seems to be a Qt2 event handling bug | 1014 | // seems to be a Qt2 event handling bug |
1003 | // syncmenu.clear causes a segfault at first time | 1015 | // syncmenu.clear causes a segfault at first time |
1004 | // when we call it after the main event loop, it is ok | 1016 | // when we call it after the main event loop, it is ok |
1005 | // same behaviour when calling OM/Pi via QCOP for the first time | 1017 | // same behaviour when calling OM/Pi via QCOP for the first time |
1006 | QTimer::singleShot ( 1, this, SLOT ( confSync() ) ); | 1018 | QTimer::singleShot ( 1, this, SLOT ( confSync() ) ); |
1007 | //confSync(); | 1019 | //confSync(); |
1008 | 1020 | ||
1009 | return; | 1021 | return; |
1010 | } | 1022 | } |
1011 | if ( action == 1 ) { | 1023 | if ( action == 1 ) { |
1012 | multiSync( true ); | 1024 | multiSync( true ); |
1013 | return; | 1025 | return; |
1014 | } | 1026 | } |
1027 | if ( action == 2 ) { | ||
1028 | enableQuick(); | ||
1029 | QTimer::singleShot ( 1, this, SLOT ( fillSyncMenu() ) ); | ||
1030 | return; | ||
1031 | } | ||
1032 | if ( action == 3 ) { | ||
1033 | delete mServerSocket; | ||
1034 | mServerSocket = 0; | ||
1035 | QTimer::singleShot ( 1, this, SLOT ( fillSyncMenu() ) ); | ||
1036 | return; | ||
1037 | } | ||
1038 | if ( action == 4 ) { | ||
1039 | performQuick(); | ||
1040 | return; | ||
1041 | } | ||
1042 | if ( action == 5 ) { | ||
1043 | performQuickQuick(); | ||
1044 | return; | ||
1045 | } | ||
1015 | 1046 | ||
1016 | if (mBlockSaveFlag) | 1047 | if (mBlockSaveFlag) |
1017 | return; | 1048 | return; |
1018 | mBlockSaveFlag = true; | 1049 | mBlockSaveFlag = true; |
1019 | mCurrentSyncProfile = action - 1000 ; | 1050 | mCurrentSyncProfile = action - 1000 ; |
1020 | mView->setSyncDevice(KOPrefs::instance()->mSyncProfileNames[mCurrentSyncProfile] ); | 1051 | mView->setSyncDevice(KOPrefs::instance()->mSyncProfileNames[mCurrentSyncProfile] ); |
1021 | mView->setSyncName( KOPrefs::instance()->mLocalMachineName ); | 1052 | mView->setSyncName( KOPrefs::instance()->mLocalMachineName ); |
1022 | KConfig config ( locateLocal( "config","ksyncprofilesrc" ) ); | 1053 | KConfig config ( locateLocal( "config","ksyncprofilesrc" ) ); |
@@ -1855,16 +1886,296 @@ QString MainWindow::getPassword( ) | |||
1855 | if ( res ) | 1886 | if ( res ) |
1856 | retfile = lab.text(); | 1887 | retfile = lab.text(); |
1857 | dia.hide(); | 1888 | dia.hide(); |
1858 | qApp->processEvents(); | 1889 | qApp->processEvents(); |
1859 | return retfile; | 1890 | return retfile; |
1860 | 1891 | ||
1861 | } | 1892 | } |
1862 | 1893 | ||
1894 | void MainWindow::enableQuick() | ||
1895 | { | ||
1896 | QString retfile = ""; | ||
1897 | QDialog dia ( this, "input-dialog", true ); | ||
1898 | QLineEdit lab ( &dia ); | ||
1899 | QVBoxLayout lay( &dia ); | ||
1900 | lab.setText( KOPrefs::instance()->mPassiveSyncPort ); | ||
1901 | lay.setMargin(7); | ||
1902 | lay.setSpacing(7); | ||
1903 | QLabel label ( i18n("Port number (Default: 9197)"), &dia ); | ||
1904 | lay.addWidget( &label); | ||
1905 | lay.addWidget( &lab); | ||
1906 | dia.setFixedSize( 230,80 ); | ||
1907 | dia.setCaption( i18n("Enter port for Easy-Pi-Sync") ); | ||
1908 | QPushButton pb ( "OK", &dia); | ||
1909 | lay.addWidget( &pb ); | ||
1910 | connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) ); | ||
1911 | dia.show(); | ||
1912 | int res = dia.exec(); | ||
1913 | if ( res ) | ||
1914 | retfile = lab.text(); | ||
1915 | else | ||
1916 | return; | ||
1917 | dia.hide(); | ||
1918 | qApp->processEvents(); | ||
1919 | KOPrefs::instance()->mPassiveSyncPort = retfile; | ||
1920 | bool ok; | ||
1921 | Q_UINT16 port = retfile.toUInt(&ok); | ||
1922 | if ( ! ok ) { | ||
1923 | qDebug("no valid port "); | ||
1924 | return; | ||
1925 | } | ||
1926 | qDebug("port %d ", port); | ||
1927 | mServerSocket = new KServerSocket ( port ,1 ); | ||
1928 | qDebug("connected "); | ||
1929 | if ( !mServerSocket->ok() ) { | ||
1930 | qWarning("Failed to bind to port %d", port); | ||
1931 | delete mServerSocket; | ||
1932 | mServerSocket = 0; | ||
1933 | return; | ||
1934 | } | ||
1935 | connect( mServerSocket, SIGNAL ( sendFile(QSocket*) ), this, SLOT ( sendFile(QSocket*) ) ); | ||
1936 | connect( mServerSocket, SIGNAL ( getFile(QSocket*) ), this, SLOT ( getFile(QSocket*) ) ); | ||
1937 | } | ||
1938 | void MainWindow::sendFile(QSocket* socket) | ||
1939 | { | ||
1940 | setCaption( i18n("Received request for file") ); | ||
1941 | qDebug("MainWindow::sendFile(QSocket* s) "); | ||
1942 | mSyncActionDialog = new QDialog ( this, "input-dialog", true ); | ||
1943 | mSyncActionDialog->setCaption(i18n("KO/Pi - WARNING")); | ||
1944 | QLabel* label = new QLabel( i18n("Synchronizing...\nDo not use\nthis application!\n"), mSyncActionDialog ); | ||
1945 | QVBoxLayout* lay = new QVBoxLayout( mSyncActionDialog ); | ||
1946 | lay->addWidget( label); | ||
1947 | lay->setMargin(7); | ||
1948 | lay->setSpacing(7); | ||
1949 | mSyncActionDialog->setFixedSize( 200,100 ); | ||
1950 | mSyncActionDialog->show(); | ||
1951 | qApp->processEvents(); | ||
1952 | qDebug("saving ... "); | ||
1953 | save(); | ||
1954 | QString fileName = defaultFileName(); | ||
1955 | QFile file( fileName ); | ||
1956 | if (!file.open( IO_ReadOnly ) ) { | ||
1957 | setCaption( i18n("Error open file") ); | ||
1958 | delete mSyncActionDialog; | ||
1959 | mSyncActionDialog = 0; | ||
1960 | qDebug("error open cal file "); | ||
1961 | return ; | ||
1962 | |||
1963 | } | ||
1964 | setCaption( i18n("Sending file...") ); | ||
1965 | QTextStream ts( &file ); | ||
1966 | ts.setCodec( QTextCodec::codecForName("utf8") ); | ||
1967 | QTextStream os( socket ); | ||
1968 | os.setCodec( QTextCodec::codecForName("utf8") ); | ||
1969 | //os.setEncoding( QTextStream::UnicodeUTF8 ); | ||
1970 | while ( ! ts.atEnd() ) { | ||
1971 | os << ts.readLine() << "\n"; | ||
1972 | } | ||
1973 | //os << ts.read(); | ||
1974 | socket->close(); | ||
1975 | file.close(); | ||
1976 | setCaption( i18n("File sent. Waiting to get back synced file") ); | ||
1977 | qDebug("file sent "); | ||
1978 | } | ||
1979 | void MainWindow::getFile(QSocket* socket) | ||
1980 | { | ||
1981 | setCaption( i18n("Receiving synced file...") ); | ||
1982 | qDebug("MainWindow::sendFile(QSocket* s) "); | ||
1983 | |||
1984 | QString fileName = defaultFileName(); | ||
1985 | QFile file( fileName ); | ||
1986 | if (!file.open( IO_WriteOnly ) ) { | ||
1987 | setCaption( i18n("Error open file") ); | ||
1988 | delete mSyncActionDialog; | ||
1989 | mSyncActionDialog = 0; | ||
1990 | qDebug("error open cal file "); | ||
1991 | return ; | ||
1992 | |||
1993 | } | ||
1994 | |||
1995 | mView->setLoadedFileVersion(QDateTime::currentDateTime().addSecs( -1)); | ||
1996 | QTextStream ts( &file ); | ||
1997 | ts.setCodec( QTextCodec::codecForName("utf8") ); | ||
1998 | bool first = true; | ||
1999 | while ( socket->canReadLine () || first ) { | ||
2000 | first = false; | ||
2001 | while ( socket->canReadLine () ) { | ||
2002 | ts << socket->readLine (); | ||
2003 | } | ||
2004 | socket->waitForMore ( 5000 ); | ||
2005 | } | ||
2006 | setCaption( i18n("File received - reloading calendar...") ); | ||
2007 | file.close(); | ||
2008 | socket->close(); | ||
2009 | mView->watchSavedFile(); | ||
2010 | mView->openCalendar( defaultFileName() ); | ||
2011 | setCaption( i18n("Easy-Pi-Sync successful!") ); | ||
2012 | delete mSyncActionDialog; | ||
2013 | mSyncActionDialog = 0; | ||
2014 | |||
2015 | |||
2016 | } | ||
2017 | void MainWindow::endConnect() | ||
2018 | { | ||
2019 | setCaption( i18n("No file received - syncing successful") ); | ||
2020 | delete mSyncActionDialog; | ||
2021 | mSyncActionDialog = 0; | ||
2022 | } | ||
2023 | void MainWindow::performQuick() | ||
2024 | { | ||
2025 | setCaption( i18n("Please input connection settings") ); | ||
2026 | QString retfile = ""; | ||
2027 | QDialog dia ( this, "input-dialog", true ); | ||
2028 | QLineEdit lab ( &dia ); | ||
2029 | QVBoxLayout lay( &dia ); | ||
2030 | QLabel label ( i18n("IP address\n(Example: 192.168.0.40)"), &dia ); | ||
2031 | lay.addWidget( &label); | ||
2032 | lab.setText( KOPrefs::instance()->mActiveSyncIP ); | ||
2033 | lay.setMargin(7); | ||
2034 | lay.setSpacing(7); | ||
2035 | lay.addWidget( &lab); | ||
2036 | QLabel label2 ( i18n("Port number (Default: 9197)"), &dia ); | ||
2037 | lay.addWidget( &label2); | ||
2038 | QLineEdit lab2 ( &dia ); | ||
2039 | lab2.setText( KOPrefs::instance()->mActiveSyncPort ); | ||
2040 | lay.addWidget( &lab2); | ||
2041 | dia.setFixedSize( 230,200 ); | ||
2042 | dia.setCaption( i18n("Enter port for Easy-Pi-Sync ") ); | ||
2043 | QPushButton pb ( "OK", &dia); | ||
2044 | lay.addWidget( &pb ); | ||
2045 | connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) ); | ||
2046 | dia.show(); | ||
2047 | int res = dia.exec(); | ||
2048 | if ( !res ) { | ||
2049 | setCaption( i18n("Syncing cancelled!") ); | ||
2050 | return; | ||
2051 | } | ||
2052 | dia.hide(); | ||
2053 | KOPrefs::instance()->mActiveSyncPort = lab2.text(); | ||
2054 | KOPrefs::instance()->mActiveSyncIP = lab.text(); | ||
2055 | qApp->processEvents(); | ||
2056 | performQuickQuick(); | ||
2057 | } | ||
2058 | |||
2059 | void MainWindow::performQuickQuick() | ||
2060 | { | ||
2061 | // setCaption( i18n("") ); | ||
2062 | |||
2063 | bool ok; | ||
2064 | Q_UINT16 port = KOPrefs::instance()->mActiveSyncPort.toUInt(&ok); | ||
2065 | if ( ! ok ) { | ||
2066 | setCaption( i18n("Sorry, no valid port.Syncing cancelled.") ); | ||
2067 | return; | ||
2068 | } | ||
2069 | if ( mCommandSocket ) | ||
2070 | delete mCommandSocket; | ||
2071 | mCommandSocket = new QSocket( this ); | ||
2072 | connect( mCommandSocket, SIGNAL(readyRead()), this, SLOT(readFileFromSocket()) ); | ||
2073 | QString host = KOPrefs::instance()->mActiveSyncIP; | ||
2074 | mCommandSocket->connectToHost( host, port ); | ||
2075 | QTextStream os( mCommandSocket ); | ||
2076 | os.setEncoding( QTextStream::UnicodeUTF8 ); | ||
2077 | os << "GET\r\n"; | ||
2078 | setCaption( i18n("Sending request for remote file ...") ); | ||
2079 | |||
2080 | } | ||
2081 | void MainWindow::readFileFromSocket() | ||
2082 | { | ||
2083 | setCaption( i18n("Receiving remote file ...") ); | ||
2084 | qDebug("MainWindow::readFileFromSocket() "); | ||
2085 | QString fileName; | ||
2086 | #ifdef _WIN32_ | ||
2087 | fileName = defaultFileName() +"sync"; | ||
2088 | #else | ||
2089 | fileName = "/tmp/kopitempfile.ics"; | ||
2090 | #endif | ||
2091 | QFile file( fileName ); | ||
2092 | if (!file.open( IO_WriteOnly ) ) { | ||
2093 | setCaption( i18n("Error: Cannot open temp file for write.") ); | ||
2094 | qDebug("Error open calender file for writing: %s",fileName.latin1() ); | ||
2095 | return ; | ||
2096 | } | ||
2097 | |||
2098 | //QTextStream os2( mCommandSocket ); | ||
2099 | //os2.setEncoding( QTextStream::UnicodeUTF8 ); | ||
2100 | |||
2101 | QTextStream ts( &file ); | ||
2102 | ts.setCodec( QTextCodec::codecForName("utf8") ); | ||
2103 | bool first = true; | ||
2104 | while ( mCommandSocket->canReadLine () || first) { | ||
2105 | first = false; | ||
2106 | while ( mCommandSocket->canReadLine () ) { | ||
2107 | ts << mCommandSocket->readLine (); | ||
2108 | } | ||
2109 | mCommandSocket->waitForMore ( 5000 ); | ||
2110 | } | ||
2111 | file.close(); | ||
2112 | mCommandSocket->close(); | ||
2113 | delete mCommandSocket; | ||
2114 | setCaption( i18n("Remote file saved to temp file.") ); | ||
2115 | mCommandSocket = 0; | ||
2116 | mCurrentSyncProfile = 2 ; // last file | ||
2117 | mView->setSyncDevice(KOPrefs::instance()->mSyncProfileNames[mCurrentSyncProfile] ); | ||
2118 | mView->setSyncName( KOPrefs::instance()->mLocalMachineName ); | ||
2119 | KConfig config ( locateLocal( "config","ksyncprofilesrc" ) ); | ||
2120 | KSyncProfile* temp = new KSyncProfile (); | ||
2121 | temp->setName(KOPrefs::instance()->mSyncProfileNames[mCurrentSyncProfile]); | ||
2122 | temp->readConfig(&config); | ||
2123 | KOPrefs::instance()->mAskForPreferences = temp->getAskForPreferences(); | ||
2124 | KOPrefs::instance()->mSyncAlgoPrefs = temp->getSyncPrefs(); | ||
2125 | KOPrefs::instance()->mWriteBackFile = temp->getWriteBackFile(); | ||
2126 | KOPrefs::instance()->mWriteBackExistingOnly = temp->getWriteBackExisting(); | ||
2127 | KOPrefs::instance()->mWriteBackInFuture = 0; | ||
2128 | if ( temp->getWriteBackFuture() ) | ||
2129 | KOPrefs::instance()->mWriteBackInFuture = temp->getWriteBackFutureWeeks( ); | ||
2130 | KOPrefs::instance()->mShowSyncSummary = temp->getShowSummaryAfterSync(); | ||
2131 | |||
2132 | setCaption( i18n("Remote file saved to temp file.") ); | ||
2133 | if ( ! syncWithFile( fileName , true ) ) { | ||
2134 | setCaption( i18n("Syncing failed.") ); | ||
2135 | qDebug("Syncing failed "); | ||
2136 | return; | ||
2137 | } | ||
2138 | |||
2139 | mCommandSocket = new QSocket( this ); | ||
2140 | QString host = KOPrefs::instance()->mActiveSyncIP; | ||
2141 | mCommandSocket->connectToHost( KOPrefs::instance()->mActiveSyncIP, KOPrefs::instance()->mActiveSyncPort.toUInt() ); | ||
2142 | |||
2143 | QFile file2( fileName ); | ||
2144 | if (!file2.open( IO_ReadOnly ) ) { | ||
2145 | setCaption( i18n("Error: Cannot open temp file for read.") ); | ||
2146 | qDebug("error open cal file "); | ||
2147 | return ; | ||
2148 | |||
2149 | } | ||
2150 | setCaption( i18n("Sending back synced file...") ); | ||
2151 | QTextStream ts2( &file2 ); | ||
2152 | ts2.setCodec( QTextCodec::codecForName("utf8") ); | ||
2153 | QTextStream os2( mCommandSocket ); | ||
2154 | os2.setCodec( QTextCodec::codecForName("utf8") ); | ||
2155 | //os.setEncoding( QTextStream::UnicodeUTF8 ); | ||
2156 | if ( KOPrefs::instance()->mWriteBackFile ) { | ||
2157 | os2 << "PUT\r\n"; | ||
2158 | while ( ! ts2.atEnd() ) { | ||
2159 | os2 << ts2.readLine() << "\n"; | ||
2160 | } | ||
2161 | } else { | ||
2162 | os2 << "STOP\r\n"; | ||
2163 | } | ||
2164 | mCommandSocket->close(); | ||
2165 | file.close(); | ||
2166 | delete mCommandSocket; | ||
2167 | mCommandSocket = 0; | ||
2168 | qDebug("Syncing succesful! "); | ||
2169 | setCaption( i18n("Easy-Pi-Sync succesful!") ); | ||
2170 | |||
2171 | |||
2172 | } | ||
2173 | |||
1863 | void MainWindow::syncLocalFile() | 2174 | void MainWindow::syncLocalFile() |
1864 | { | 2175 | { |
1865 | 2176 | ||
1866 | QString fn =KOPrefs::instance()->mLastSyncedLocalFile; | 2177 | QString fn =KOPrefs::instance()->mLastSyncedLocalFile; |
1867 | 2178 | ||
1868 | fn =KFileDialog:: getOpenFileName( fn, i18n("Sync filename(*.ics/*.vcs)"), this ); | 2179 | fn =KFileDialog:: getOpenFileName( fn, i18n("Sync filename(*.ics/*.vcs)"), this ); |
1869 | if ( fn == "" ) | 2180 | if ( fn == "" ) |
1870 | return; | 2181 | return; |
diff --git a/korganizer/mainwindow.h b/korganizer/mainwindow.h index 47a7a90..58081f6 100644 --- a/korganizer/mainwindow.h +++ b/korganizer/mainwindow.h | |||
@@ -1,27 +1,78 @@ | |||
1 | #ifndef KORGE_MAINWINDOW_H | 1 | #ifndef KORGE_MAINWINDOW_H |
2 | #define KORGE_MAINWINDOW_H | 2 | #define KORGE_MAINWINDOW_H |
3 | 3 | ||
4 | #include <qmainwindow.h> | 4 | #include <qmainwindow.h> |
5 | #include <qtimer.h> | 5 | #include <qtimer.h> |
6 | #include <qdict.h> | 6 | #include <qdict.h> |
7 | #include <qregexp.h> | ||
7 | 8 | ||
8 | #include <libkcal/incidence.h> | 9 | #include <libkcal/incidence.h> |
9 | #include "simplealarmclient.h" | 10 | #include "simplealarmclient.h" |
10 | 11 | ||
11 | class QAction; | 12 | class QAction; |
12 | class CalendarView; | 13 | class CalendarView; |
13 | class KSyncProfile; | 14 | class KSyncProfile; |
14 | #ifdef DESKTOP_VERSION | 15 | #ifdef DESKTOP_VERSION |
15 | 16 | ||
16 | #define QPEToolBar QToolBar | 17 | #define QPEToolBar QToolBar |
17 | #define QPEMenuBar QMenuBar | 18 | #define QPEMenuBar QMenuBar |
18 | #endif | 19 | #endif |
19 | class QPEToolBar; | 20 | class QPEToolBar; |
21 | #include <qserversocket.h> | ||
22 | #include <qsocket.h> | ||
23 | #include <qnetworkprotocol.h> | ||
24 | |||
25 | class KServerSocket : public QServerSocket | ||
26 | { | ||
27 | Q_OBJECT | ||
28 | |||
29 | public: | ||
30 | KServerSocket ( Q_UINT16 port, int backlog = 0, QObject * parent=0, const char * name=0 ) : | ||
31 | QServerSocket( port, backlog, parent, name ){;}; | ||
32 | void newConnection ( int socket ) | ||
33 | { | ||
34 | qDebug("KServerSocket:New connection %d ", socket); | ||
35 | QSocket* s = new QSocket( this ); | ||
36 | connect( s, SIGNAL(readyRead()), this, SLOT(readClient()) ); | ||
37 | connect( s, SIGNAL(delayedCloseFinished()), this, SLOT(discardClient()) ); | ||
38 | s->setSocket( socket ); | ||
39 | } | ||
40 | |||
41 | signals: | ||
42 | void sendFile(QSocket*); | ||
43 | void getFile(QSocket*); | ||
44 | void endConnect(); | ||
45 | private slots: | ||
46 | void discardClient() | ||
47 | { | ||
48 | QSocket* socket = (QSocket*)sender(); | ||
49 | delete socket; | ||
50 | emit endConnect(); | ||
51 | } | ||
52 | void readClient() | ||
53 | { | ||
54 | qDebug("readClient() "); | ||
55 | QSocket* socket = (QSocket*)sender(); | ||
56 | if ( socket->canReadLine() ) { | ||
57 | QStringList tokens = QStringList::split( QRegExp("[ \r\n][ \r\n]*"), socket->readLine() ); | ||
58 | if ( tokens[0] == "GET" ) { | ||
59 | emit sendFile( socket ); | ||
60 | } | ||
61 | if ( tokens[0] == "PUT" ) { | ||
62 | emit getFile( socket ); | ||
63 | } | ||
64 | if ( tokens[0] == "STOP" ) { | ||
65 | emit endConnect(); | ||
66 | } | ||
67 | } | ||
68 | } | ||
69 | }; | ||
70 | |||
20 | 71 | ||
21 | namespace KCal { | 72 | namespace KCal { |
22 | class CalendarLocal; | 73 | class CalendarLocal; |
23 | } | 74 | } |
24 | 75 | ||
25 | using namespace KCal; | 76 | using namespace KCal; |
26 | 77 | ||
27 | class MainWindow : public QMainWindow | 78 | class MainWindow : public QMainWindow |
@@ -83,22 +134,32 @@ class MainWindow : public QMainWindow | |||
83 | 134 | ||
84 | 135 | ||
85 | protected: | 136 | protected: |
86 | void displayText( QString, QString); | 137 | void displayText( QString, QString); |
87 | void displayFile( QString, QString); | 138 | void displayFile( QString, QString); |
88 | 139 | ||
89 | void enableIncidenceActions( bool ); | 140 | void enableIncidenceActions( bool ); |
90 | 141 | ||
142 | private slots: | ||
143 | void fillSyncMenu(); | ||
144 | void sendFile(QSocket* s); | ||
145 | void getFile(QSocket* socket); | ||
146 | void readFileFromSocket(); | ||
147 | void endConnect(); | ||
91 | private: | 148 | private: |
149 | QSocket* mCommandSocket; | ||
150 | KServerSocket * mServerSocket; | ||
92 | bool mClosed; | 151 | bool mClosed; |
93 | void saveOnClose(); | 152 | void saveOnClose(); |
94 | int mCurrentSyncProfile; | 153 | int mCurrentSyncProfile; |
154 | void enableQuick(); | ||
155 | void performQuick(); | ||
156 | void performQuickQuick(); | ||
95 | void syncRemote( KSyncProfile* , bool ask = true); | 157 | void syncRemote( KSyncProfile* , bool ask = true); |
96 | void fillSyncMenu(); | ||
97 | bool mFlagKeyPressed; | 158 | bool mFlagKeyPressed; |
98 | bool mBlockAtStartup; | 159 | bool mBlockAtStartup; |
99 | QPEToolBar *iconToolBar; | 160 | QPEToolBar *iconToolBar; |
100 | void initActions(); | 161 | void initActions(); |
101 | void setDefaultPreferences(); | 162 | void setDefaultPreferences(); |
102 | void keyPressEvent ( QKeyEvent * ) ; | 163 | void keyPressEvent ( QKeyEvent * ) ; |
103 | void keyReleaseEvent ( QKeyEvent * ) ; | 164 | void keyReleaseEvent ( QKeyEvent * ) ; |
104 | QPopupMenu *configureToolBarMenu; | 165 | QPopupMenu *configureToolBarMenu; |
@@ -113,11 +174,13 @@ class MainWindow : public QMainWindow | |||
113 | QAction *mEditAction; | 174 | QAction *mEditAction; |
114 | QAction *mDeleteAction; | 175 | QAction *mDeleteAction; |
115 | void closeEvent( QCloseEvent* ce ); | 176 | void closeEvent( QCloseEvent* ce ); |
116 | SimpleAlarmClient mAlarmClient; | 177 | SimpleAlarmClient mAlarmClient; |
117 | QTimer mSaveTimer; | 178 | QTimer mSaveTimer; |
118 | bool mBlockSaveFlag; | 179 | bool mBlockSaveFlag; |
119 | bool mCalendarModifiedFlag; | 180 | bool mCalendarModifiedFlag; |
120 | QPixmap loadPixmap( QString ); | 181 | QPixmap loadPixmap( QString ); |
182 | QDialog * mSyncActionDialog; | ||
121 | }; | 183 | }; |
122 | 184 | ||
185 | |||
123 | #endif | 186 | #endif |