summaryrefslogtreecommitdiff
path: root/noncore/settings
Unidiff
Diffstat (limited to 'noncore/settings') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/settings/netsystemtime/ntp.cpp55
-rw-r--r--noncore/settings/netsystemtime/ntp.h4
2 files changed, 40 insertions, 19 deletions
diff --git a/noncore/settings/netsystemtime/ntp.cpp b/noncore/settings/netsystemtime/ntp.cpp
index 6e74e32..c7e3b52 100644
--- a/noncore/settings/netsystemtime/ntp.cpp
+++ b/noncore/settings/netsystemtime/ntp.cpp
@@ -21,24 +21,25 @@
21#include <qpe/timestring.h> 21#include <qpe/timestring.h>
22#include <qpe/qpedialog.h> 22#include <qpe/qpedialog.h>
23#include <qpe/datebookdb.h> 23#include <qpe/datebookdb.h>
24#include <qpe/qcopenvelope_qws.h> 24#include <qpe/qcopenvelope_qws.h>
25#include <sys/time.h> 25#include <sys/time.h>
26#include <time.h> 26#include <time.h>
27#include <stdlib.h> 27#include <stdlib.h>
28 28
29 29
30Ntp::Ntp( QWidget* parent, const char* name, WFlags fl ) 30Ntp::Ntp( QWidget* parent, const char* name, WFlags fl )
31 : SetDateTime( parent, name, fl ) 31 : SetDateTime( parent, name, fl )
32{ 32{
33 _interactive = false;
33 Config ntpSrvs(QPEApplication::qpeDir()+"etc/ntpservers",Config::File); 34 Config ntpSrvs(QPEApplication::qpeDir()+"etc/ntpservers",Config::File);
34 ntpSrvs.setGroup("servers"); 35 ntpSrvs.setGroup("servers");
35 int srvCount = ntpSrvs.readNumEntry("count", 0 ); 36 int srvCount = ntpSrvs.readNumEntry("count", 0 );
36 for (int i = 0; i < srvCount; i++) 37 for (int i = 0; i < srvCount; i++)
37 { 38 {
38 ntpSrvs.setGroup(QString::number(i)); 39 ntpSrvs.setGroup(QString::number(i));
39 ComboNtpSrv->insertItem( ntpSrvs.readEntry("name") ); 40 ComboNtpSrv->insertItem( ntpSrvs.readEntry("name") );
40 } 41 }
41 if ( srvCount==0 ) ComboNtpSrv->insertItem(tr("time.fu-berlin.de")); 42 if ( srvCount==0 ) ComboNtpSrv->insertItem(tr("time.fu-berlin.de"));
42 43
43 Config cfg("ntp",Config::User); 44 Config cfg("ntp",Config::User);
44 cfg.setGroup("settings"); 45 cfg.setGroup("settings");
@@ -69,73 +70,93 @@ Ntp::Ntp( QWidget* parent, const char* name, WFlags fl )
69 connect( CheckBoxAdvSettings, SIGNAL( toggled( bool ) ), 70 connect( CheckBoxAdvSettings, SIGNAL( toggled( bool ) ),
70 SLOT( showAdvancedFeatures( bool ) ) ); 71 SLOT( showAdvancedFeatures( bool ) ) );
71 72
72 makeChannel(); 73 makeChannel();
73 74
74 ntpTimer = new QTimer(this); 75 ntpTimer = new QTimer(this);
75 76
76 ntpProcess = new OProcess( ); 77 ntpProcess = new OProcess( );
77 connect( SpinBoxNtpDelay, SIGNAL( valueChanged(int) ), 78 connect( SpinBoxNtpDelay, SIGNAL( valueChanged(int) ),
78 SLOT(slotNtpDelayChanged(int)) ); 79 SLOT(slotNtpDelayChanged(int)) );
79 80
80 ntpSock = new QSocket( this ); 81 ntpSock = new QSocket( this );
81 connect( ntpSock, SIGNAL( error(int) ), 82 connect( ntpSock, SIGNAL( error(int) ),SLOT(slotCheckNtp(int)) );
82 SLOT(slotCheckNtp(int)) );
83 slotProbeNtpServer(); 83 slotProbeNtpServer();
84 84
85 connect ( ntpProcess, SIGNAL(receivedStdout(OProcess*,char*,int)), 85 connect ( ntpProcess, SIGNAL(receivedStdout(OProcess*,char*,int)),
86 this, SLOT(getNtpOutput(OProcess*,char*,int))); 86 this, SLOT(getNtpOutput(OProcess*,char*,int)));
87 connect ( ntpProcess, SIGNAL(processExited(OProcess*)), 87 connect ( ntpProcess, SIGNAL(processExited(OProcess*)),
88 this, SLOT(ntpFinished(OProcess*))); 88 this, SLOT(ntpFinished(OProcess*)));
89 connect(runNtp, SIGNAL(clicked()), this, SLOT(slotRunNtp())); 89 connect(runNtp, SIGNAL(clicked()), this, SLOT(slotButtonRunNtp()));
90 connect(PushButtonPredict, SIGNAL(clicked()), this, SLOT(preditctTime())); 90 connect(PushButtonPredict, SIGNAL(clicked()), this, SLOT(preditctTime()));
91 connect(PushButtonSetPredTime, SIGNAL(clicked()), this, SLOT(setPredictTime())); 91 connect(PushButtonSetPredTime, SIGNAL(clicked()), this, SLOT(setPredictTime()));
92 slotCheckNtp(-1); 92 slotCheckNtp(-1);
93 readLookups(); 93 readLookups();
94} 94}
95 95
96Ntp::~Ntp() 96Ntp::~Ntp()
97{ 97{
98 delete ntpProcess; 98 delete ntpProcess;
99 Config ntpSrvs("/etc/ntpservers",Config::File);
100 ntpSrvs.setGroup("servers");
101 int srvCount = ComboNtpSrv->count(); 99 int srvCount = ComboNtpSrv->count();
102 ntpSrvs.writeEntry("count", srvCount); 100 bool serversChanged = true;
101 QString edit = ComboNtpSrv->currentText();
103 for (int i = 0; i < srvCount; i++){ 102 for (int i = 0; i < srvCount; i++){
104 ntpSrvs.setGroup(QString::number(i)); 103 if ( edit == ComboNtpSrv->text(i)) serversChanged = false;
105 ntpSrvs.writeEntry( "name", ComboNtpSrv->text(i) ); 104 }
105 if (serversChanged){
106 Config ntpSrvs("/etc/ntpservers",Config::File);
107 ntpSrvs.setGroup("servers");
108 ntpSrvs.writeEntry("count", srvCount);
109 for (int i = 0; i < srvCount; i++){
110 qDebug("ntpSrvs[%i/%i]=%s",i,srvCount,ComboNtpSrv->text(i).latin1());
111 ntpSrvs.setGroup(QString::number(i));
112 ntpSrvs.writeEntry( "name", ComboNtpSrv->text(i) );
113 }
106 } 114 }
107 Config cfg("ntp",Config::User); 115 Config cfg("ntp",Config::User);
108 cfg.setGroup("settings"); 116 cfg.setGroup("settings");
109 cfg.writeEntry("ntpServer", ComboNtpSrv->currentItem()); 117 cfg.writeEntry("ntpServer", ComboNtpSrv->currentItem());
110 cfg.writeEntry( "minLookupDiff", SpinBoxMinLookupDelay->value() ); 118 cfg.writeEntry( "minLookupDiff", SpinBoxMinLookupDelay->value() );
111 cfg.writeEntry( "ntpRefreshFreq", SpinBoxNtpDelay->value() ); 119 cfg.writeEntry( "ntpRefreshFreq", SpinBoxNtpDelay->value() );
112 cfg.writeEntry( "advancedFeatures", CheckBoxAdvSettings->isChecked() ); 120 cfg.writeEntry( "advancedFeatures", CheckBoxAdvSettings->isChecked() );
113} 121}
114 122
115bool Ntp::ntpDelayElapsed() 123bool Ntp::ntpDelayElapsed()
116{ 124{
117 Config cfg("ntp",Config::User); 125 Config cfg("ntp",Config::User);
118 cfg.setGroup("lookups"); 126 cfg.setGroup("lookups");
119 _lookupDiff = TimeConversion::toUTC(QDateTime::currentDateTime()) - cfg.readNumEntry("time",0); 127 _lookupDiff = TimeConversion::toUTC(QDateTime::currentDateTime()) - cfg.readNumEntry("time",0);
120 if (_lookupDiff < 0) return true; 128 if (_lookupDiff < 0) return true;
121 int i =_lookupDiff - (SpinBoxNtpDelay->value()*60); 129 int i =_lookupDiff - (SpinBoxNtpDelay->value()*60);
122 return i > -60; 130 return i > -60;
123} 131}
124 132
125QString Ntp::getNtpServer() 133QString Ntp::getNtpServer()
126{ 134{
127 return ComboNtpSrv->currentText(); 135 return ComboNtpSrv->currentText();
128} 136}
129 137
138void Ntp::slotButtonRunNtp()
139{
140 _interactive = true;
141 slotRunNtp();
142}
143
144void Ntp::slotTimerRunNtp()
145{
146 _interactive = false;
147 slotRunNtp();
148}
149
150
130void Ntp::slotRunNtp() 151void Ntp::slotRunNtp()
131{ 152{
132 if ( !ntpDelayElapsed() && CheckBoxAdvSettings->isChecked() ) 153 if ( !ntpDelayElapsed() && CheckBoxAdvSettings->isChecked() )
133 { 154 {
134 switch ( 155 switch (
135 QMessageBox::warning(this, tr("Run NTP?"), 156 QMessageBox::warning(this, tr("Run NTP?"),
136 tr("You asked for a delay of ")+SpinBoxNtpDelay->text()+tr(" minutes, but only ")+ 157 tr("You asked for a delay of ")+SpinBoxNtpDelay->text()+tr(" minutes, but only ")+
137 QString::number(_lookupDiff/60)+tr(" minutes elapsed since last lookup.")+ 158 QString::number(_lookupDiff/60)+tr(" minutes elapsed since last lookup.")+
138 "<br>"+tr("Rerun NTP?"), 159 "<br>"+tr("Rerun NTP?"),
139 QMessageBox::Ok,QMessageBox::Cancel) 160 QMessageBox::Ok,QMessageBox::Cancel)
140 ) { 161 ) {
141 case QMessageBox::Ok: break; 162 case QMessageBox::Ok: break;
@@ -167,32 +188,29 @@ void Ntp::getNtpOutput(OProcess *proc, char *buffer, int buflen)
167 { 188 {
168 ntpOutPut(lineStr); 189 ntpOutPut(lineStr);
169 _ntpOutput += lineStr; 190 _ntpOutput += lineStr;
170 } 191 }
171 lineStrOld = lineStr; 192 lineStrOld = lineStr;
172} 193}
173 194
174void Ntp::ntpFinished(OProcess *p) 195void Ntp::ntpFinished(OProcess *p)
175{ 196{
176 qDebug("p->exitStatus() %i",p->exitStatus()); 197 qDebug("p->exitStatus() %i",p->exitStatus());
177 if (p->exitStatus()!=0 || !p->normalExit()) 198 if (p->exitStatus()!=0 || !p->normalExit())
178 { 199 {
179 if ( isVisible() ) { 200 if ( isVisible() && _interactive ){
180 QMessageBox::critical(this, tr("ntp error"), 201 QMessageBox::critical(this, tr("ntp error"),tr("Error while getting time form\n server")+getNtpServer()+"\n"+_ntpOutput );
181 tr("Error while getting time form\n server")+ 202 TabWidgetMain->showPage( tabManualSetTime );
182 getNtpServer()+"\n"+
183 _ntpOutput );
184 TabWidgetMain->showPage( tabManualSetTime );
185 } 203 }
186 204
187 return; 205 return;
188 } 206 }
189 207
190 Global::writeHWClock(); 208 Global::writeHWClock();
191 // since time has changed quickly load in the datebookdb 209 // since time has changed quickly load in the datebookdb
192 // to allow the alarm server to get a better grip on itself 210 // to allow the alarm server to get a better grip on itself
193 // (example re-trigger alarms for when we travel back in time) 211 // (example re-trigger alarms for when we travel back in time)
194 DateBookDB db; 212 DateBookDB db;
195 213
196 // QCopEnvelope timeApplet( "QPE/TaskBar", "reloadApplets()" ); 214 // QCopEnvelope timeApplet( "QPE/TaskBar", "reloadApplets()" );
197 // timeApplet << ""; 215 // timeApplet << "";
198 216
@@ -294,32 +312,32 @@ void Ntp::preditctTime()
294void Ntp::setPredictTime() 312void Ntp::setPredictTime()
295{ 313{
296 preditctTime(); 314 preditctTime();
297 setTime( predictedTime ); 315 setTime( predictedTime );
298} 316}
299 317
300void Ntp::slotCheckNtp(int i) 318void Ntp::slotCheckNtp(int i)
301{ 319{
302 if (i == 0) 320 if (i == 0)
303 { 321 {
304 TextLabelMainPredTime->hide(); 322 TextLabelMainPredTime->hide();
305 ButtonSetTime->setText( tr("Get time from network") ); 323 ButtonSetTime->setText( tr("Get time from network") );
306 connect( ButtonSetTime, SIGNAL(clicked()), SLOT(slotRunNtp()) ); 324 connect( ButtonSetTime, SIGNAL(clicked()), SLOT(slotButtonRunNtp()) );
307 if ( ntpDelayElapsed() ) 325 if ( ntpDelayElapsed() )
308 { 326 {
309 slotRunNtp(); 327 slotRunNtp();
310 disconnect(ntpTimer, SIGNAL( timeout() ), this, SLOT(slotProbeNtpServer()) ); 328 disconnect(ntpTimer, SIGNAL( timeout() ), this, SLOT(slotProbeNtpServer()) );
311 connect(ntpTimer, SIGNAL( timeout() ), SLOT(slotRunNtp()) ); 329 connect(ntpTimer, SIGNAL( timeout() ), SLOT(slotTimerRunNtp()) );
312 }else{ 330 }else{
313 disconnect(ntpTimer, SIGNAL( timeout() ), this, SLOT(slotRunNtp()) ); 331 disconnect(ntpTimer, SIGNAL( timeout() ), this, SLOT(slotTimerRunNtp()) );
314 connect(ntpTimer, SIGNAL( timeout() ), SLOT(slotProbeNtpServer()) ); 332 connect(ntpTimer, SIGNAL( timeout() ), SLOT(slotProbeNtpServer()) );
315 } 333 }
316 }else{ 334 }else{
317 preditctTime(); 335 preditctTime();
318 ButtonSetTime->setText( tr("Set predicted time: ")+predictedTime.toString() ); 336 ButtonSetTime->setText( tr("Set predicted time: ")+predictedTime.toString() );
319 if (i>0)ntpOutPut(tr("Could not connect to server ")+getNtpServer()); 337 if (i>0)ntpOutPut(tr("Could not connect to server ")+getNtpServer());
320 connect( ButtonSetTime, SIGNAL(clicked()), SLOT(setPredictTime()) ); 338 connect( ButtonSetTime, SIGNAL(clicked()), SLOT(setPredictTime()) );
321 connect( ntpTimer, SIGNAL( timeout() ), SLOT(slotProbeNtpServer()) ); 339 connect( ntpTimer, SIGNAL( timeout() ), SLOT(slotProbeNtpServer()) );
322 } 340 }
323} 341}
324 342
325void Ntp::slotProbeNtpServer() 343void Ntp::slotProbeNtpServer()
@@ -345,24 +363,25 @@ void Ntp::makeChannel()
345 channel = new QCopChannel( "QPE/Application/netsystemtime", this ); 363 channel = new QCopChannel( "QPE/Application/netsystemtime", this );
346 connect( channel, SIGNAL(received(const QCString&, const QByteArray&)), 364 connect( channel, SIGNAL(received(const QCString&, const QByteArray&)),
347 this, SLOT(receive(const QCString&, const QByteArray&)) ); 365 this, SLOT(receive(const QCString&, const QByteArray&)) );
348} 366}
349 367
350 368
351 369
352void Ntp::receive(const QCString &msg, const QByteArray &arg) 370void Ntp::receive(const QCString &msg, const QByteArray &arg)
353{ 371{
354 qDebug("QCop(Ntp) "+msg+" "+QCString(arg)); 372 qDebug("QCop(Ntp) "+msg+" "+QCString(arg));
355 if ( msg == "ntpLookup(QString)" ) 373 if ( msg == "ntpLookup(QString)" )
356 { 374 {
375 _interactive = false;
357 slotRunNtp(); 376 slotRunNtp();
358 } 377 }
359 if ( msg == "setPredictedTime(QString)" ) 378 if ( msg == "setPredictedTime(QString)" )
360 { 379 {
361 setPredictTime(); 380 setPredictTime();
362 }else{ 381 }else{
363 qDebug("Ntp::receive: Huh what do ya want"); 382 qDebug("Ntp::receive: Huh what do ya want");
364 } 383 }
365} 384}
366 385
367void Ntp::setDocument(const QString &fileName) 386void Ntp::setDocument(const QString &fileName)
368{ 387{
diff --git a/noncore/settings/netsystemtime/ntp.h b/noncore/settings/netsystemtime/ntp.h
index f6694c9..15cddbd 100644
--- a/noncore/settings/netsystemtime/ntp.h
+++ b/noncore/settings/netsystemtime/ntp.h
@@ -23,31 +23,33 @@ protected:
23 QDateTime predictedTime; 23 QDateTime predictedTime;
24 void makeChannel(); 24 void makeChannel();
25protected slots: 25protected slots:
26 void receive(const QCString &msg, const QByteArray &arg); 26 void receive(const QCString &msg, const QByteArray &arg);
27private: 27private:
28 QString _ntpOutput; 28 QString _ntpOutput;
29 float _shiftPerSec; 29 float _shiftPerSec;
30 int _lookupDiff; 30 int _lookupDiff;
31 OProcess *ntpProcess; 31 OProcess *ntpProcess;
32 QTimer *ntpTimer; 32 QTimer *ntpTimer;
33 QSocket *ntpSock; 33 QSocket *ntpSock;
34 QCopChannel *channel; 34 QCopChannel *channel;
35 35 bool _interactive;
36 float getTimeShift(); 36 float getTimeShift();
37 void readLookups(); 37 void readLookups();
38 void ntpOutPut(QString); 38 void ntpOutPut(QString);
39 bool ntpDelayElapsed(); 39 bool ntpDelayElapsed();
40 QString getNtpServer(); 40 QString getNtpServer();
41private slots: 41private slots:
42 void slotTimerRunNtp();
43 void slotButtonRunNtp();
42 void slotRunNtp(); 44 void slotRunNtp();
43 void getNtpOutput(OProcess *proc, char *buffer, int buflen); 45 void getNtpOutput(OProcess *proc, char *buffer, int buflen);
44 void ntpFinished(OProcess*); 46 void ntpFinished(OProcess*);
45 void preditctTime(); 47 void preditctTime();
46 void slotCheckNtp(int); 48 void slotCheckNtp(int);
47 void setPredictTime(); 49 void setPredictTime();
48 void showAdvancedFeatures(bool); 50 void showAdvancedFeatures(bool);
49 void slotProbeNtpServer(); 51 void slotProbeNtpServer();
50 void slotNtpDelayChanged(int); 52 void slotNtpDelayChanged(int);
51}; 53};
52 54
53#endif 55#endif