summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/settings/netsystemtime/ntp.cpp28
-rw-r--r--noncore/settings/netsystemtime/ntp.h3
-rw-r--r--noncore/settings/netsystemtime/ntpbase.ui8
3 files changed, 18 insertions, 21 deletions
diff --git a/noncore/settings/netsystemtime/ntp.cpp b/noncore/settings/netsystemtime/ntp.cpp
index 6a5c062..0abb401 100644
--- a/noncore/settings/netsystemtime/ntp.cpp
+++ b/noncore/settings/netsystemtime/ntp.cpp
@@ -33,26 +33,24 @@ Ntp::Ntp( QWidget* parent, const char* name, WFlags fl )
33 ntpSrvs.setGroup(QString::number(i)); 33 ntpSrvs.setGroup(QString::number(i));
34 ComboNtpSrv->insertItem( ntpSrvs.readEntry("name") ); 34 ComboNtpSrv->insertItem( ntpSrvs.readEntry("name") );
35 } 35 }
36 if ( srvCount==0 ) ComboNtpSrv->insertItem(tr("time.fu-berlin.de")); 36 if ( srvCount==0 ) ComboNtpSrv->insertItem(tr("time.fu-berlin.de"));
37 37
38 Config cfg("ntp",Config::User); 38 Config cfg("ntp",Config::User);
39 cfg.setGroup("settings"); 39 cfg.setGroup("settings");
40 SpinBoxMinLookupDelay->setValue( cfg.readNumEntry("minLookupDiff",41) ); 40 SpinBoxMinLookupDelay->setValue( cfg.readNumEntry("minLookupDiff",41) );
41 SpinBoxNtpDelay->setValue( cfg.readNumEntry("ntpRefreshFreq",42) ); 41 SpinBoxNtpDelay->setValue( cfg.readNumEntry("ntpRefreshFreq",42) );
42 ComboNtpSrv->setCurrentItem( cfg.readNumEntry("ntpServer", 0) ); 42 ComboNtpSrv->setCurrentItem( cfg.readNumEntry("ntpServer", 0) );
43 43
44 ntpTimer = new QTimer(this); 44 ntpTimer = new QTimer(this);
45 processTimer = new QTimer(this);
46 ntpTimer->start(SpinBoxNtpDelay->value()*1000*60);
47 45
48 ntpProcess = new OProcess( ); 46 ntpProcess = new OProcess( );
49 connect( SpinBoxNtpDelay, SIGNAL( valueChanged(int) ), 47 connect( SpinBoxNtpDelay, SIGNAL( valueChanged(int) ),
50 SLOT(slotNtpDelayChanged(int)) ); 48 SLOT(slotNtpDelayChanged(int)) );
51 49
52 ntpSock = new QSocket( this ); 50 ntpSock = new QSocket( this );
53 connect( ntpSock, SIGNAL( error(int) ), 51 connect( ntpSock, SIGNAL( error(int) ),
54 SLOT(slotCheckNtp(int)) ); 52 SLOT(slotCheckNtp(int)) );
55 slotProbeNtpServer(); 53 slotProbeNtpServer();
56 54
57 connect ( ntpProcess, SIGNAL(receivedStdout(OProcess*,char*,int)), 55 connect ( ntpProcess, SIGNAL(receivedStdout(OProcess*,char*,int)),
58 this, SLOT(getNtpOutput(OProcess*,char*,int))); 56 this, SLOT(getNtpOutput(OProcess*,char*,int)));
@@ -106,26 +104,24 @@ void Ntp::slotRunNtp()
106 tr("You asked for a delay of ")+SpinBoxNtpDelay->text()+tr(" minutes, but only ")+ 104 tr("You asked for a delay of ")+SpinBoxNtpDelay->text()+tr(" minutes, but only ")+
107 QString::number(_lookupDiff/60)+tr(" minutes elapsed since last loopup.")+ 105 QString::number(_lookupDiff/60)+tr(" minutes elapsed since last loopup.")+
108 "<br>"+tr("Rerun NTP?"), 106 "<br>"+tr("Rerun NTP?"),
109 QMessageBox::Ok,QMessageBox::Cancel) 107 QMessageBox::Ok,QMessageBox::Cancel)
110 ) { 108 ) {
111 case QMessageBox::Ok: break; 109 case QMessageBox::Ok: break;
112 case QMessageBox::Cancel: return; 110 case QMessageBox::Cancel: return;
113 default: return; 111 default: return;
114 } 112 }
115 } 113 }
116 TextLabelStartTime->setText(QDateTime::currentDateTime().toString()); 114 TextLabelStartTime->setText(QDateTime::currentDateTime().toString());
117 ntpOutPut( tr("Running:")+"\nntpdate "+getNtpServer() ); 115 ntpOutPut( tr("Running:")+"\nntpdate "+getNtpServer() );
118 connect( processTimer, SIGNAL( timeout() ), SLOT(slotTimeoutNtpProcess()) );
119 processTimer->start(2*1000*60, true);
120 116
121 ntpProcess->clearArguments(); 117 ntpProcess->clearArguments();
122 *ntpProcess << "ntpdate" << getNtpServer(); 118 *ntpProcess << "ntpdate" << getNtpServer();
123 bool ret = ntpProcess->start(OProcess::NotifyOnExit,OProcess::AllOutput); 119 bool ret = ntpProcess->start(OProcess::NotifyOnExit,OProcess::AllOutput);
124 if ( !ret ) { 120 if ( !ret ) {
125 qDebug("Error while executing ntpdate"); 121 qDebug("Error while executing ntpdate");
126 ntpOutPut( tr("Error while executing ntpdate")); 122 ntpOutPut( tr("Error while executing ntpdate"));
127 } 123 }
128} 124}
129 125
130void Ntp::getNtpOutput(OProcess *proc, char *buffer, int buflen) 126void Ntp::getNtpOutput(OProcess *proc, char *buffer, int buflen)
131{ 127{
@@ -133,34 +129,34 @@ void Ntp::getNtpOutput(OProcess *proc, char *buffer, int buflen)
133 lineStr = buffer; 129 lineStr = buffer;
134 lineStr=lineStr.left(buflen); 130 lineStr=lineStr.left(buflen);
135 if (lineStr!=lineStrOld) 131 if (lineStr!=lineStrOld)
136 { 132 {
137 ntpOutPut(lineStr); 133 ntpOutPut(lineStr);
138 _ntpOutput += lineStr; 134 _ntpOutput += lineStr;
139 } 135 }
140 lineStrOld = lineStr; 136 lineStrOld = lineStr;
141} 137}
142 138
143void Ntp::ntpFinished(OProcess *p) 139void Ntp::ntpFinished(OProcess *p)
144{ 140{
145 if (!p->normalExit()) 141 qDebug("p->exitStatus() %i",p->exitStatus());
142 if (p->exitStatus()!=0 || !p->normalExit())
146 { 143 {
147 slotProbeNtpServer(); 144 slotProbeNtpServer();
148 return; 145 return;
149 } 146 }
150 processTimer->stop();
151 Config cfg("ntp",Config::User); 147 Config cfg("ntp",Config::User);
152 cfg.setGroup("lookups"); 148 cfg.setGroup("lookups");
153 int lastLookup = cfg.readNumEntry("time",0); 149 int lastLookup = cfg.readNumEntry("time",0);
154 int lookupCount = cfg.readNumEntry("count",-1); 150 int lookupCount = cfg.readNumEntry("count",0);
155 int time = TimeConversion::toUTC( QDateTime::currentDateTime() ); 151 int time = TimeConversion::toUTC( QDateTime::currentDateTime() );
156 cfg.writeEntry("time", time); 152 cfg.writeEntry("time", time);
157 cfg.setGroup("correction"); 153 cfg.setGroup("correction");
158 cfg.writeEntry("time", time); 154 cfg.writeEntry("time", time);
159 155
160 float timeShift = getTimeShift(); 156 float timeShift = getTimeShift();
161 if (timeShift == 0.0) return; 157 if (timeShift == 0.0) return;
162 int secsSinceLast = time - lastLookup; 158 int secsSinceLast = time - lastLookup;
163 TextLabelNewTime->setText(QDateTime::currentDateTime().toString()); 159 TextLabelNewTime->setText(QDateTime::currentDateTime().toString());
164 TextLabelTimeShift->setText(QString::number(timeShift)+tr(" seconds")); 160 TextLabelTimeShift->setText(QString::number(timeShift)+tr(" seconds"));
165 if ( lastLookup > 0 && secsSinceLast > 60* SpinBoxMinLookupDelay->value()) 161 if ( lastLookup > 0 && secsSinceLast > 60* SpinBoxMinLookupDelay->value())
166 { 162 {
@@ -185,51 +181,51 @@ float Ntp::getTimeShift()
185 int posEndOffset = _reEndOffset.match( _ntpOutput, posOffset ); 181 int posEndOffset = _reEndOffset.match( _ntpOutput, posOffset );
186 posOffset += _offset.length() + 1; 182 posOffset += _offset.length() + 1;
187 QString diff = _ntpOutput.mid(posOffset, posEndOffset-posOffset-1); 183 QString diff = _ntpOutput.mid(posOffset, posEndOffset-posOffset-1);
188 qDebug("%s", _ntpOutput.latin1()); 184 qDebug("%s", _ntpOutput.latin1());
189 qDebug("diff = >%s<",diff.latin1()); 185 qDebug("diff = >%s<",diff.latin1());
190 return diff.toFloat(); 186 return diff.toFloat();
191} 187}
192 188
193void Ntp::readLookups() 189void Ntp::readLookups()
194{ 190{
195 Config cfg("ntp",Config::User); 191 Config cfg("ntp",Config::User);
196 cfg.setGroup("lookups"); 192 cfg.setGroup("lookups");
197 int lookupCount = cfg.readNumEntry("count",-1); 193 int lookupCount = cfg.readNumEntry("count",0);
198 float last, shift, shiftPerSec; 194 float last, shift, shiftPerSec;
199 qDebug("lookupCount = %i",lookupCount); 195 qDebug("lookupCount = %i",lookupCount);
200 TableLookups->setNumCols( 3 ); 196 TableLookups->setNumCols( 3 );
201 TableLookups->setNumRows( lookupCount); 197 TableLookups->setNumRows( lookupCount);
202 TableLookups->horizontalHeader()->setLabel(1,"secsSinceLast"); 198 TableLookups->horizontalHeader()->setLabel(1,tr("last [h]"));
203 TableLookups->horizontalHeader()->setLabel(2,"timeShift"); 199 TableLookups->horizontalHeader()->setLabel(2,tr("offset [s]"));
204 TableLookups->horizontalHeader()->setLabel(0,"shift/s"); 200 TableLookups->horizontalHeader()->setLabel(0,tr("shift [s/h]"));
205 int cw = 50;//TableLookups->width()/4; 201 int cw = 50;//TableLookups->width()/4;
206 qDebug("column width %i",cw); 202 qDebug("column width %i",cw);
207 TableLookups->setColumnWidth( 0, cw+30 ); 203 TableLookups->setColumnWidth( 0, cw+30 );
208 TableLookups->setColumnWidth( 1, cw ); 204 TableLookups->setColumnWidth( 1, cw );
209 TableLookups->setColumnWidth( 2, cw ); 205 TableLookups->setColumnWidth( 2, cw );
210 TableLookups->sortColumn(0, false, true ); 206 TableLookups->sortColumn(0, false, true );
211 // TableLookups->setSorting( true ); 207 // TableLookups->setSorting( true );
212 for (int i=0; i < lookupCount; i++) 208 for (int i=0; i < lookupCount; i++)
213 { 209 {
214 cfg.setGroup("lookup_"+QString::number(i)); 210 cfg.setGroup("lookup_"+QString::number(i));
215 last = cfg.readEntry("secsSinceLast",0).toFloat(); 211 last = cfg.readEntry("secsSinceLast",0).toFloat();
216 shift = QString(cfg.readEntry("timeShift",0)).toFloat(); 212 shift = QString(cfg.readEntry("timeShift",0)).toFloat();
217 // qDebug("%i last %f",i,last); 213 // qDebug("%i last %f",i,last);
218 // qDebug("%i shift %f",i,shift); 214 // qDebug("%i shift %f",i,shift);
219 shiftPerSec = shift / last; 215 shiftPerSec = shift / last;
220 _shiftPerSec += shiftPerSec; 216 _shiftPerSec += shiftPerSec;
221 TableLookups->setText( i,0,QString::number(shiftPerSec)); 217 TableLookups->setText( i,0,QString::number(shiftPerSec*60));
222 TableLookups->setText( i,2,QString::number(shift)); 218 TableLookups->setText( i,2,QString::number(shift));
223 TableLookups->setText( i,1,QString::number(last)); 219 TableLookups->setText( i,1,QString::number(last/60));
224 } 220 }
225 _shiftPerSec /= lookupCount+1; 221 _shiftPerSec /= lookupCount+1;
226 TextLabelShift->setText(QString::number(_shiftPerSec)+tr(" seconds")); 222 TextLabelShift->setText(QString::number(_shiftPerSec)+tr(" seconds"));
227} 223}
228 224
229void Ntp::preditctTime() 225void Ntp::preditctTime()
230{ 226{
231 Config cfg("ntp",Config::User); 227 Config cfg("ntp",Config::User);
232 cfg.setGroup("lookups"); 228 cfg.setGroup("lookups");
233 int lastTime = cfg.readNumEntry("time",0); 229 int lastTime = cfg.readNumEntry("time",0);
234 setenv( "TZ", tz->currentZone(), 1 ); 230 setenv( "TZ", tz->currentZone(), 1 );
235 int now = TimeConversion::toUTC( QDateTime::currentDateTime() ); 231 int now = TimeConversion::toUTC( QDateTime::currentDateTime() );
@@ -264,31 +260,27 @@ void Ntp::slotCheckNtp(int i)
264 } 260 }
265 }else{ 261 }else{
266 preditctTime(); 262 preditctTime();
267 ButtonSetTime->setText( tr("Set predicted time") ); 263 ButtonSetTime->setText( tr("Set predicted time") );
268 if (i>0)ntpOutPut(tr("Could not connect to server ")+getNtpServer()); 264 if (i>0)ntpOutPut(tr("Could not connect to server ")+getNtpServer());
269 connect( ButtonSetTime, SIGNAL(clicked()), SLOT(setPredictTime()) ); 265 connect( ButtonSetTime, SIGNAL(clicked()), SLOT(setPredictTime()) );
270 connect( ntpTimer, SIGNAL( timeout() ), SLOT(slotProbeNtpServer()) ); 266 connect( ntpTimer, SIGNAL( timeout() ), SLOT(slotProbeNtpServer()) );
271 } 267 }
272} 268}
273 269
274void Ntp::slotProbeNtpServer() 270void Ntp::slotProbeNtpServer()
275{ 271{
272 qDebug("Ntp::slotProbeNtpServer()");
276 ntpSock->connectToHost( getNtpServer() ,123); 273 ntpSock->connectToHost( getNtpServer() ,123);
277} 274}
278 275
279void Ntp::slotNtpDelayChanged(int delay) 276void Ntp::slotNtpDelayChanged(int delay)
280{ 277{
281 ntpTimer->changeInterval( delay*1000*60 ); 278 ntpTimer->changeInterval( delay*1000*60 );
282} 279}
283 280
284void Ntp::ntpOutPut(QString out) 281void Ntp::ntpOutPut(QString out)
285{ 282{
286 MultiLineEditntpOutPut->append(out); 283 MultiLineEditntpOutPut->append(out);
287 MultiLineEditntpOutPut->setCursorPosition(MultiLineEditntpOutPut->numLines() + 1,0,FALSE); 284 MultiLineEditntpOutPut->setCursorPosition(MultiLineEditntpOutPut->numLines() + 1,0,FALSE);
288} 285}
289 286
290void Ntp::slotTimeoutNtpProcess()
291{
292 ntpProcess->kill();
293 slotProbeNtpServer();
294}
diff --git a/noncore/settings/netsystemtime/ntp.h b/noncore/settings/netsystemtime/ntp.h
index d166973..c78dc55 100644
--- a/noncore/settings/netsystemtime/ntp.h
+++ b/noncore/settings/netsystemtime/ntp.h
@@ -16,33 +16,32 @@ public:
16 Ntp( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 ); 16 Ntp( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );
17 ~Ntp(); 17 ~Ntp();
18 18
19protected: 19protected:
20 QDateTime predictedTime; 20 QDateTime predictedTime;
21 21
22 22
23private: 23private:
24 QString _ntpOutput; 24 QString _ntpOutput;
25 float _shiftPerSec; 25 float _shiftPerSec;
26 int _lookupDiff; 26 int _lookupDiff;
27 OProcess *ntpProcess; 27 OProcess *ntpProcess;
28 QTimer *ntpTimer, *processTimer; 28 QTimer *ntpTimer;
29 QSocket *ntpSock; 29 QSocket *ntpSock;
30 30
31 float getTimeShift(); 31 float getTimeShift();
32 void readLookups(); 32 void readLookups();
33 void ntpOutPut(QString); 33 void ntpOutPut(QString);
34 bool ntpDelayElapsed(); 34 bool ntpDelayElapsed();
35 QString getNtpServer(); 35 QString getNtpServer();
36private slots: 36private slots:
37 void slotRunNtp(); 37 void slotRunNtp();
38 void getNtpOutput(OProcess *proc, char *buffer, int buflen); 38 void getNtpOutput(OProcess *proc, char *buffer, int buflen);
39 void ntpFinished(OProcess*); 39 void ntpFinished(OProcess*);
40 void preditctTime(); 40 void preditctTime();
41 void slotCheckNtp(int); 41 void slotCheckNtp(int);
42 void setPredictTime(); 42 void setPredictTime();
43 void slotProbeNtpServer(); 43 void slotProbeNtpServer();
44 void slotNtpDelayChanged(int); 44 void slotNtpDelayChanged(int);
45 void slotTimeoutNtpProcess();
46}; 45};
47 46
48#endif 47#endif
diff --git a/noncore/settings/netsystemtime/ntpbase.ui b/noncore/settings/netsystemtime/ntpbase.ui
index a83dc93..f5e9371 100644
--- a/noncore/settings/netsystemtime/ntpbase.ui
+++ b/noncore/settings/netsystemtime/ntpbase.ui
@@ -2,25 +2,25 @@
2<class>NtpBase</class> 2<class>NtpBase</class>
3<widget> 3<widget>
4 <class>QWidget</class> 4 <class>QWidget</class>
5 <property stdset="1"> 5 <property stdset="1">
6 <name>name</name> 6 <name>name</name>
7 <cstring>NtpBase</cstring> 7 <cstring>NtpBase</cstring>
8 </property> 8 </property>
9 <property stdset="1"> 9 <property stdset="1">
10 <name>geometry</name> 10 <name>geometry</name>
11 <rect> 11 <rect>
12 <x>0</x> 12 <x>0</x>
13 <y>0</y> 13 <y>0</y>
14 <width>328</width> 14 <width>324</width>
15 <height>411</height> 15 <height>411</height>
16 </rect> 16 </rect>
17 </property> 17 </property>
18 <property stdset="1"> 18 <property stdset="1">
19 <name>caption</name> 19 <name>caption</name>
20 <string>Network Time</string> 20 <string>Network Time</string>
21 </property> 21 </property>
22 <property> 22 <property>
23 <name>layoutMargin</name> 23 <name>layoutMargin</name>
24 </property> 24 </property>
25 <property> 25 <property>
26 <name>layoutSpacing</name> 26 <name>layoutSpacing</name>
@@ -291,24 +291,30 @@
291 </property> 291 </property>
292 <property stdset="1"> 292 <property stdset="1">
293 <name>spacing</name> 293 <name>spacing</name>
294 <number>6</number> 294 <number>6</number>
295 </property> 295 </property>
296 <widget row="0" column="0" > 296 <widget row="0" column="0" >
297 <class>QTable</class> 297 <class>QTable</class>
298 <property stdset="1"> 298 <property stdset="1">
299 <name>name</name> 299 <name>name</name>
300 <cstring>TableLookups</cstring> 300 <cstring>TableLookups</cstring>
301 </property> 301 </property>
302 <property stdset="1"> 302 <property stdset="1">
303 <name>font</name>
304 <font>
305 <pointsize>8</pointsize>
306 </font>
307 </property>
308 <property stdset="1">
303 <name>numRows</name> 309 <name>numRows</name>
304 <number>2</number> 310 <number>2</number>
305 </property> 311 </property>
306 <property stdset="1"> 312 <property stdset="1">
307 <name>numCols</name> 313 <name>numCols</name>
308 <number>2</number> 314 <number>2</number>
309 </property> 315 </property>
310 </widget> 316 </widget>
311 <widget row="1" column="0" > 317 <widget row="1" column="0" >
312 <class>QLayoutWidget</class> 318 <class>QLayoutWidget</class>
313 <property stdset="1"> 319 <property stdset="1">
314 <name>name</name> 320 <name>name</name>