summaryrefslogtreecommitdiff
path: root/noncore/settings/netsystemtime/ntp.cpp
Unidiff
Diffstat (limited to 'noncore/settings/netsystemtime/ntp.cpp') (more/less context) (show whitespace changes)
-rw-r--r--noncore/settings/netsystemtime/ntp.cpp60
1 files changed, 30 insertions, 30 deletions
diff --git a/noncore/settings/netsystemtime/ntp.cpp b/noncore/settings/netsystemtime/ntp.cpp
index b2f192a..52fc6be 100644
--- a/noncore/settings/netsystemtime/ntp.cpp
+++ b/noncore/settings/netsystemtime/ntp.cpp
@@ -3,12 +3,13 @@
3#include <qregexp.h> 3#include <qregexp.h>
4#include <qtable.h> 4#include <qtable.h>
5#include <qlabel.h> 5#include <qlabel.h>
6#include <qsocket.h> 6#include <qsocket.h>
7#include <qlineedit.h> 7#include <qlineedit.h>
8#include <qspinbox.h> 8#include <qspinbox.h>
9#include <qmessagebox.h>
9#include <qmultilineedit.h> 10#include <qmultilineedit.h>
10#include <opie/oprocess.h> 11#include <opie/oprocess.h>
11#include <qpe/config.h> 12#include <qpe/config.h>
12#include <qpe/global.h> 13#include <qpe/global.h>
13#include <qpe/timeconversion.h> 14#include <qpe/timeconversion.h>
14#include <qpe/tzselect.h> 15#include <qpe/tzselect.h>
@@ -23,14 +24,14 @@ Ntp::Ntp( QWidget* parent, const char* name, WFlags fl )
23 : SetDateTime( parent, name, fl ) 24 : SetDateTime( parent, name, fl )
24{ 25{
25 Config cfg("ntp",Config::User); 26 Config cfg("ntp",Config::User);
26 cfg.setGroup("settings"); 27 cfg.setGroup("settings");
27 // _maxOffset = cfg.readNumEntry("maxOffset",5); 28 // _maxOffset = cfg.readNumEntry("maxOffset",5);
28// _minLookupDiff = cfg.readNumEntry("minLookupDiff",10); 29// _minLookupDiff = cfg.readNumEntry("minLookupDiff",10);
29 SpinBoxMinDelay->setValue( cfg.readNumEntry("minLookupDiff",10) ); 30 SpinBoxMinLookupDelay->setValue( cfg.readNumEntry("minLookupDiff",60) );
30 SpinBoxMinDelay->setMinValue( 7 ); 31 SpinBoxNtpDelay->setValue( cfg.readNumEntry("ntpRefreshFreq",60) );
31 LineEditNtpSrv->setText( cfg.readEntry("ntpServer", tr("time.fu-berlin.de")) ); 32 LineEditNtpSrv->setText( cfg.readEntry("ntpServer", tr("time.fu-berlin.de")) );
32 ntpProcess = new OProcess( ); 33 ntpProcess = new OProcess( );
33 34
34 QSocket *ntpSock = new QSocket( this ); 35 QSocket *ntpSock = new QSocket( this );
35 ntpSock->connectToHost( LineEditNtpSrv->text() ,123); 36 ntpSock->connectToHost( LineEditNtpSrv->text() ,123);
36 connect( ntpSock, SIGNAL( error(int) ), 37 connect( ntpSock, SIGNAL( error(int) ),
@@ -49,18 +50,37 @@ Ntp::Ntp( QWidget* parent, const char* name, WFlags fl )
49 50
50Ntp::~Ntp() 51Ntp::~Ntp()
51{ 52{
52 Config cfg("ntp",Config::User); 53 Config cfg("ntp",Config::User);
53 cfg.setGroup("settings"); 54 cfg.setGroup("settings");
54 cfg.writeEntry("ntpServer", LineEditNtpSrv->text()); 55 cfg.writeEntry("ntpServer", LineEditNtpSrv->text());
55 cfg.writeEntry( "minLookupDiff", SpinBoxMinDelay->value() ); 56 cfg.writeEntry( "minLookupDiff", SpinBoxMinLookupDelay->value() );
57 cfg.writeEntry( "ntpRefreshFreq", SpinBoxNtpDelay->value() );
56} 58}
57 59
58 60
59void Ntp::slotRunNtp() 61void Ntp::slotRunNtp()
60{ 62{
63 Config cfg("ntp",Config::User);
64 cfg.setGroup("lookups");
65 int lookupDiff = TimeConversion::toUTC(QDateTime::currentDateTime()) - cfg.readNumEntry("time",0);
66
67 if ( lookupDiff < SpinBoxNtpDelay->value()*60 )
68 {
69 switch (
70 QMessageBox::warning(this, tr("Run ntp?"),
71 tr("You asked for a delay of ")+SpinBoxNtpDelay->text()+tr(" minutes, but only ")+
72 QString::number(lookupDiff%60)+tr(" minutes elapsed since last loopup.")+
73 "<br>"+tr("Rerun ntp?"),
74 QMessageBox::Ok,QMessageBox::Cancel)
75 ) {
76 case QMessageBox::Ok: break;
77 case QMessageBox::Cancel: return;
78 default: return;
79 }
80 }
61 TextLabelStartTime->setText(QDateTime::currentDateTime().toString()); 81 TextLabelStartTime->setText(QDateTime::currentDateTime().toString());
62 ntpProcess->clearArguments(); 82 ntpProcess->clearArguments();
63 *ntpProcess << "ntpdate" << LineEditNtpSrv->text(); 83 *ntpProcess << "ntpdate" << LineEditNtpSrv->text();
64 bool ret = ntpProcess->start(OProcess::NotifyOnExit,OProcess::AllOutput); 84 bool ret = ntpProcess->start(OProcess::NotifyOnExit,OProcess::AllOutput);
65 if ( !ret ) { 85 if ( !ret ) {
66 qDebug("Error while executing ntp"); 86 qDebug("Error while executing ntp");
@@ -92,47 +112,26 @@ void Ntp::ntpFinished(OProcess*)
92 cfg.writeEntry("time", time); 112 cfg.writeEntry("time", time);
93 113
94 float timeShift = getTimeShift(); 114 float timeShift = getTimeShift();
95 if (timeShift == 0.0) return; 115 if (timeShift == 0.0) return;
96 int secsSinceLast = time - lastLookup; 116 int secsSinceLast = time - lastLookup;
97 TextLabelNewTime->setText(QDateTime::currentDateTime().toString()); 117 TextLabelNewTime->setText(QDateTime::currentDateTime().toString());
98 if ( lastLookup > 0 && secsSinceLast > 60*24* SpinBoxMinDelay->value()) 118 TextLabelTimeShift->setText(QString::number(timeShift)+tr(" seconds"));
119 if ( lastLookup > 0 && secsSinceLast > 60* SpinBoxMinLookupDelay->value())
99 { 120 {
100 lookupCount++; 121 lookupCount++;
101 cfg.writeEntry("count",lookupCount); 122 cfg.writeEntry("count",lookupCount);
102 cfg.setGroup("lookup_"+QString::number(lookupCount)); 123 cfg.setGroup("lookup_"+QString::number(lookupCount));
103 _shiftPerSec = timeShift / secsSinceLast; 124 _shiftPerSec = timeShift / secsSinceLast;
104// float nextCorr = _maxOffset / _shiftPerSec; 125// float nextCorr = _maxOffset / _shiftPerSec;
105 qDebug("secs since last lookup %i", secsSinceLast);qDebug("timeshift since last lookup %f", timeShift);qDebug("timeshift since per sec %f", _shiftPerSec); 126 qDebug("secs since last lookup %i", secsSinceLast);qDebug("timeshift since last lookup %f", timeShift);qDebug("timeshift since per sec %f", _shiftPerSec);
106 cfg.writeEntry("secsSinceLast",secsSinceLast); 127 cfg.writeEntry("secsSinceLast",secsSinceLast);
107 cfg.writeEntry("timeShift",QString::number(timeShift)); 128 cfg.writeEntry("timeShift",QString::number(timeShift));
108 } 129 }
109} 130}
110 131
111//void Ntp::correctClock()
112//{
113 //qDebug("current time: %s",QDateTime::currentDateTime().toString().latin1());
114 //Config cfg("ntp",Config::User);
115// cfg.setGroup("correction");
116 // int lastTime = cfg.readNumEntry("time",0);
117// if ( lastTime == 0 )
118// {
119 // return;
120// }
121// int now = TimeConversion::toUTC( QDateTime::currentDateTime() );
122// int corr = int((now - lastTime) * _shiftPerSec);
123// struct timeval myTv;
124// myTv.tv_sec = TimeConversion::toUTC( QDateTime::currentDateTime().addSecs(corr) );
125// myTv.tv_usec = 0;
126//
127// if ( myTv.tv_sec != -1 )
128// ::settimeofday( &myTv, 0 );
129// Global::writeHWClock();
130// cfg.writeEntry("time",now);
131 //qDebug("current time: %s",QDateTime::currentDateTime().toString().latin1());
132//}
133 132
134float Ntp::getTimeShift() 133float Ntp::getTimeShift()
135{ 134{
136 QString _offset = "offset"; 135 QString _offset = "offset";
137 QString _sec = "sec"; 136 QString _sec = "sec";
138 QRegExp _reOffset = QRegExp(_offset); 137 QRegExp _reOffset = QRegExp(_offset);
@@ -140,13 +139,12 @@ float Ntp::getTimeShift()
140 int posOffset = _reOffset.match( _ntpOutput ); 139 int posOffset = _reOffset.match( _ntpOutput );
141 int posEndOffset = _reEndOffset.match( _ntpOutput, posOffset ); 140 int posEndOffset = _reEndOffset.match( _ntpOutput, posOffset );
142 posOffset += _offset.length() + 1; 141 posOffset += _offset.length() + 1;
143 QString diff = _ntpOutput.mid(posOffset, posEndOffset-posOffset-1); 142 QString diff = _ntpOutput.mid(posOffset, posEndOffset-posOffset-1);
144 qDebug("%s", _ntpOutput.latin1()); 143 qDebug("%s", _ntpOutput.latin1());
145 qDebug("diff = >%s<",diff.latin1()); 144 qDebug("diff = >%s<",diff.latin1());
146 TextLabelTimeShift->setText(diff);
147 return diff.toFloat(); 145 return diff.toFloat();
148} 146}
149 147
150void Ntp::readLookups() 148void Ntp::readLookups()
151{ 149{
152 Config cfg("ntp",Config::User); 150 Config cfg("ntp",Config::User);
@@ -161,12 +159,14 @@ void Ntp::readLookups()
161 TableLookups->horizontalHeader()->setLabel(0,"shift/s"); 159 TableLookups->horizontalHeader()->setLabel(0,"shift/s");
162 int cw = 50;//TableLookups->width()/4; 160 int cw = 50;//TableLookups->width()/4;
163 qDebug("column width %i",cw); 161 qDebug("column width %i",cw);
164 TableLookups->setColumnWidth( 0, cw+30 ); 162 TableLookups->setColumnWidth( 0, cw+30 );
165 TableLookups->setColumnWidth( 1, cw ); 163 TableLookups->setColumnWidth( 1, cw );
166 TableLookups->setColumnWidth( 2, cw ); 164 TableLookups->setColumnWidth( 2, cw );
165 TableLookups->sortColumn(0, false, true );
166 // TableLookups->setSorting( true );
167 for (int i=0; i < lookupCount; i++) 167 for (int i=0; i < lookupCount; i++)
168 { 168 {
169 cfg.setGroup("lookup_"+QString::number(i)); 169 cfg.setGroup("lookup_"+QString::number(i));
170 last = cfg.readEntry("secsSinceLast",0).toFloat(); 170 last = cfg.readEntry("secsSinceLast",0).toFloat();
171 shift = QString(cfg.readEntry("timeShift",0)).toFloat(); 171 shift = QString(cfg.readEntry("timeShift",0)).toFloat();
172 // qDebug("%i last %f",i,last); 172 // qDebug("%i last %f",i,last);
@@ -175,13 +175,13 @@ void Ntp::readLookups()
175 _shiftPerSec += shiftPerSec; 175 _shiftPerSec += shiftPerSec;
176 TableLookups->setText( i,0,QString::number(shiftPerSec)); 176 TableLookups->setText( i,0,QString::number(shiftPerSec));
177 TableLookups->setText( i,2,QString::number(shift)); 177 TableLookups->setText( i,2,QString::number(shift));
178 TableLookups->setText( i,1,QString::number(last)); 178 TableLookups->setText( i,1,QString::number(last));
179 } 179 }
180 _shiftPerSec /= lookupCount+1; 180 _shiftPerSec /= lookupCount+1;
181 TextLabelShift->setText(QString::number(_shiftPerSec)); 181 TextLabelShift->setText(QString::number(_shiftPerSec)+tr(" seconds"));
182} 182}
183 183
184void Ntp::preditctTime() 184void Ntp::preditctTime()
185{ 185{
186 qDebug("current time: %s",QDateTime::currentDateTime().toString().latin1()); 186 qDebug("current time: %s",QDateTime::currentDateTime().toString().latin1());
187 Config cfg("ntp",Config::User); 187 Config cfg("ntp",Config::User);
@@ -189,13 +189,13 @@ void Ntp::preditctTime()
189 int lastTime = cfg.readNumEntry("time",0); 189 int lastTime = cfg.readNumEntry("time",0);
190 setenv( "TZ", tz->currentZone(), 1 ); 190 setenv( "TZ", tz->currentZone(), 1 );
191 int now = TimeConversion::toUTC( QDateTime::currentDateTime() ); 191 int now = TimeConversion::toUTC( QDateTime::currentDateTime() );
192 int corr = int((now - lastTime) * _shiftPerSec); 192 int corr = int((now - lastTime) * _shiftPerSec);
193 predictedTime = QDateTime::currentDateTime().addSecs(corr); 193 predictedTime = QDateTime::currentDateTime().addSecs(corr);
194 TextLabelPredTime->setText(predictedTime.toString()); 194 TextLabelPredTime->setText(predictedTime.toString());
195 TextLabelMainPredTime->setText(predictedTime.toString()); 195 TextLabelMainPredTime->setText(tr("Predicted time:")+"<br><b>"+predictedTime.toString()+"</b>");
196} 196}
197 197
198void Ntp::setPredictTime() 198void Ntp::setPredictTime()
199{ 199{
200 preditctTime(); 200 preditctTime();
201 setTime( predictedTime ); 201 setTime( predictedTime );
@@ -207,10 +207,10 @@ void Ntp::slotCheckNtp(int i)
207 { 207 {
208 TextLabelMainPredTime->hide(); 208 TextLabelMainPredTime->hide();
209 ButtonSetTime->setText( tr("Get time from network") ); 209 ButtonSetTime->setText( tr("Get time from network") );
210 connect( ButtonSetTime, SIGNAL(clicked()), SLOT(slotRunNtp()) ); 210 connect( ButtonSetTime, SIGNAL(clicked()), SLOT(slotRunNtp()) );
211 }else{ 211 }else{
212 preditctTime(); 212 preditctTime();
213 ButtonSetTime->setText( tr("Predict time") ); 213 ButtonSetTime->setText( tr("Set predicted time") );
214 connect( ButtonSetTime, SIGNAL(clicked()), SLOT(setPredictTime()) ); 214 connect( ButtonSetTime, SIGNAL(clicked()), SLOT(setPredictTime()) );
215 }; 215 };
216} 216}