summaryrefslogtreecommitdiff
authortille <tille>2002-10-25 17:42:20 (UTC)
committer tille <tille>2002-10-25 17:42:20 (UTC)
commit1914dcb5988dff9e972ad67eb1eecd7452b88ffa (patch) (side-by-side diff)
tree57b336a964de005ce1f2c4b699de50758bc220ea
parent8d7cfaf101c780c7b870234de5cc14b51544f6d6 (diff)
downloadopie-1914dcb5988dff9e972ad67eb1eecd7452b88ffa.zip
opie-1914dcb5988dff9e972ad67eb1eecd7452b88ffa.tar.gz
opie-1914dcb5988dff9e972ad67eb1eecd7452b88ffa.tar.bz2
fixed neg lookuptime bug
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/settings/netsystemtime/ntp.cpp228
1 files changed, 115 insertions, 113 deletions
diff --git a/noncore/settings/netsystemtime/ntp.cpp b/noncore/settings/netsystemtime/ntp.cpp
index f60e38d..40805a0 100644
--- a/noncore/settings/netsystemtime/ntp.cpp
+++ b/noncore/settings/netsystemtime/ntp.cpp
@@ -1,366 +1,368 @@
#include "ntp.h"
#include <qpushbutton.h>
#include <qregexp.h>
#include <qtimer.h>
#include <qtable.h>
#include <qlabel.h>
#include <qsocket.h>
#include <qlineedit.h>
#include <qspinbox.h>
#include <qcheckbox.h>
#include <qtabwidget.h>
#include <qlayout.h>
#include <qmessagebox.h>
#include <qmultilineedit.h>
#include <opie/oprocess.h>
#include <qpe/qpeapplication.h>
#include <qpe/config.h>
#include <qpe/global.h>
#include <qpe/timeconversion.h>
#include <qpe/tzselect.h>
#include <qpe/timestring.h>
#include <qpe/qpedialog.h>
#include <qpe/datebookdb.h>
#include <qpe/qcopenvelope_qws.h>
#include <sys/time.h>
#include <time.h>
#include <stdlib.h>
Ntp::Ntp( QWidget* parent, const char* name, WFlags fl )
- : SetDateTime( parent, name, fl )
+ : SetDateTime( parent, name, fl )
{
- Config ntpSrvs(QPEApplication::qpeDir()+"etc/ntpservers",Config::File);
+ Config ntpSrvs(QPEApplication::qpeDir()+"etc/ntpservers",Config::File);
ntpSrvs.setGroup("servers");
int srvCount = ntpSrvs.readNumEntry("count", 0 );
for (int i = 0; i < srvCount; i++)
- {
- ntpSrvs.setGroup(QString::number(i));
- ComboNtpSrv->insertItem( ntpSrvs.readEntry("name") );
- }
+ {
+ ntpSrvs.setGroup(QString::number(i));
+ ComboNtpSrv->insertItem( ntpSrvs.readEntry("name") );
+ }
if ( srvCount==0 ) ComboNtpSrv->insertItem(tr("time.fu-berlin.de"));
- Config cfg("ntp",Config::User);
+ Config cfg("ntp",Config::User);
cfg.setGroup("settings");
- SpinBoxMinLookupDelay->setValue( cfg.readNumEntry("minLookupDiff",720) );
- SpinBoxNtpDelay->setValue( cfg.readNumEntry("ntpRefreshFreq",1440) );
+ SpinBoxMinLookupDelay->setValue( cfg.readNumEntry("minLookupDiff",720) );
+ SpinBoxNtpDelay->setValue( cfg.readNumEntry("ntpRefreshFreq",1440) );
ComboNtpSrv->setCurrentItem( cfg.readNumEntry("ntpServer", 0) );
bool advMode = cfg.readBoolEntry("advancedFeatures", false );
showAdvancedFeatures(advMode);
CheckBoxAdvSettings->setChecked( advMode );
connect( CheckBoxAdvSettings, SIGNAL( toggled( bool ) ),
SLOT( showAdvancedFeatures( bool ) ) );
makeChannel();
ntpTimer = new QTimer(this);
- ntpProcess = new OProcess( );
+ ntpProcess = new OProcess( );
connect( SpinBoxNtpDelay, SIGNAL( valueChanged(int) ),
- SLOT(slotNtpDelayChanged(int)) );
+ SLOT(slotNtpDelayChanged(int)) );
ntpSock = new QSocket( this );
connect( ntpSock, SIGNAL( error(int) ),
- SLOT(slotCheckNtp(int)) );
+ SLOT(slotCheckNtp(int)) );
slotProbeNtpServer();
connect ( ntpProcess, SIGNAL(receivedStdout(OProcess*,char*,int)),
- this, SLOT(getNtpOutput(OProcess*,char*,int)));
+ this, SLOT(getNtpOutput(OProcess*,char*,int)));
connect ( ntpProcess, SIGNAL(processExited(OProcess*)),
- this, SLOT(ntpFinished(OProcess*)));
+ this, SLOT(ntpFinished(OProcess*)));
connect(runNtp, SIGNAL(clicked()), this, SLOT(slotRunNtp()));
connect(PushButtonPredict, SIGNAL(clicked()), this, SLOT(preditctTime()));
connect(PushButtonSetPredTime, SIGNAL(clicked()), this, SLOT(setPredictTime()));
slotCheckNtp(-1);
readLookups();
}
Ntp::~Ntp()
{
delete ntpProcess;
Config ntpSrvs("/etc/ntpservers",Config::File);
ntpSrvs.setGroup("servers");
int srvCount = ComboNtpSrv->count();
ntpSrvs.writeEntry("count", srvCount);
for (int i = 0; i < srvCount; i++){
ntpSrvs.setGroup(QString::number(i));
ntpSrvs.writeEntry( "name", ComboNtpSrv->text(i) );
}
Config cfg("ntp",Config::User);
cfg.setGroup("settings");
cfg.writeEntry("ntpServer", ComboNtpSrv->currentItem());
cfg.writeEntry( "minLookupDiff", SpinBoxMinLookupDelay->value() );
cfg.writeEntry( "ntpRefreshFreq", SpinBoxNtpDelay->value() );
cfg.writeEntry( "advancedFeatures", CheckBoxAdvSettings->isChecked() );
}
bool Ntp::ntpDelayElapsed()
{
- Config cfg("ntp",Config::User);
+ Config cfg("ntp",Config::User);
cfg.setGroup("lookups");
_lookupDiff = TimeConversion::toUTC(QDateTime::currentDateTime()) - cfg.readNumEntry("time",0);
- return (_lookupDiff - (SpinBoxNtpDelay->value()*60)) > -60;
+ if (_lookupDiff < 0) return true;
+ int i =_lookupDiff - (SpinBoxNtpDelay->value()*60);
+ return i > -60;
}
QString Ntp::getNtpServer()
{
- return ComboNtpSrv->currentText();
+ return ComboNtpSrv->currentText();
}
void Ntp::slotRunNtp()
{
if ( !ntpDelayElapsed() )
- {
- switch (
- QMessageBox::warning(this, tr("Run NTP?"),
- tr("You asked for a delay of ")+SpinBoxNtpDelay->text()+tr(" minutes, but only ")+
- QString::number(_lookupDiff/60)+tr(" minutes elapsed since last lookup.")+
- "<br>"+tr("Rerun NTP?"),
- QMessageBox::Ok,QMessageBox::Cancel)
- ) {
- case QMessageBox::Ok: break;
- case QMessageBox::Cancel: return;
- default: return;
+ {
+ switch (
+ QMessageBox::warning(this, tr("Run NTP?"),
+ tr("You asked for a delay of ")+SpinBoxNtpDelay->text()+tr(" minutes, but only ")+
+ QString::number(_lookupDiff/60)+tr(" minutes elapsed since last lookup.")+
+ "<br>"+tr("Rerun NTP?"),
+ QMessageBox::Ok,QMessageBox::Cancel)
+ ) {
+ case QMessageBox::Ok: break;
+ case QMessageBox::Cancel: return;
+ default: return;
}
- }
- TextLabelStartTime->setText(QDateTime::currentDateTime().toString());
+ }
+ TextLabelStartTime->setText(QDateTime::currentDateTime().toString());
ntpOutPut( tr("Running:")+"\nntpdate "+getNtpServer() );
- ntpProcess->clearArguments();
- *ntpProcess << "ntpdate" << getNtpServer();
- bool ret = ntpProcess->start(OProcess::NotifyOnExit,OProcess::AllOutput);
+ ntpProcess->clearArguments();
+ *ntpProcess << "ntpdate" << getNtpServer();
+ bool ret = ntpProcess->start(OProcess::NotifyOnExit,OProcess::AllOutput);
if ( !ret ) {
- qDebug("Error while executing ntpdate");
- ntpOutPut( tr("Error while executing ntpdate"));
+ qDebug("Error while executing ntpdate");
+ ntpOutPut( tr("Error while executing ntpdate"));
}
}
void Ntp::getNtpOutput(OProcess *proc, char *buffer, int buflen)
{
QString lineStr, lineStrOld;
lineStr = buffer;
lineStr=lineStr.left(buflen);
if (lineStr!=lineStrOld)
- {
- ntpOutPut(lineStr);
- _ntpOutput += lineStr;
- }
+ {
+ ntpOutPut(lineStr);
+ _ntpOutput += lineStr;
+ }
lineStrOld = lineStr;
}
void Ntp::ntpFinished(OProcess *p)
{
// qDebug("p->exitStatus() %i",p->exitStatus());
- if (p->exitStatus()!=0 || !p->normalExit())
- {
- slotProbeNtpServer();
- return;
- }
+ if (p->exitStatus()!=0 || !p->normalExit())
+ {
+ slotProbeNtpServer();
+ return;
+ }
Global::writeHWClock();
// since time has changed quickly load in the datebookdb
// to allow the alarm server to get a better grip on itself
// (example re-trigger alarms for when we travel back in time)
DateBookDB db;
-// QCopEnvelope timeApplet( "QPE/TaskBar", "reloadApplets()" );
-// timeApplet << "";
+ // QCopEnvelope timeApplet( "QPE/TaskBar", "reloadApplets()" );
+ // timeApplet << "";
- Config cfg("ntp",Config::User);
+ Config cfg("ntp",Config::User);
cfg.setGroup("lookups");
int lastLookup = cfg.readNumEntry("time",0);
int lookupCount = cfg.readNumEntry("count",0);
bool lastNtp = cfg.readBoolEntry("lastNtp",false);
int time = TimeConversion::toUTC( QDateTime::currentDateTime() );
cfg.writeEntry("time", time);
float timeShift = getTimeShift();
if (timeShift == 0.0) return;
- int secsSinceLast = time - lastLookup;
+ int secsSinceLast = time - lastLookup;
TextLabelNewTime->setText(QDateTime::currentDateTime().toString());
TextLabelTimeShift->setText(QString::number(timeShift)+tr(" seconds"));
if ( lastNtp && lastLookup > 0 && secsSinceLast > 60* SpinBoxMinLookupDelay->value())
- {
- cfg.setGroup("lookup_"+QString::number(lookupCount));
- lookupCount++;
- _shiftPerSec = timeShift / secsSinceLast;
- qDebug("secs since last lookup %i", secsSinceLast);qDebug("timeshift since last lookup %f", timeShift);qDebug("timeshift since per sec %f", _shiftPerSec);
- cfg.writeEntry("secsSinceLast",secsSinceLast);
- cfg.writeEntry("timeShift",QString::number(timeShift));
- cfg.setGroup("lookups");
- cfg.writeEntry("count",lookupCount);
- cfg.writeEntry("lastNtp",true);
- }
+ {
+ cfg.setGroup("lookup_"+QString::number(lookupCount));
+ lookupCount++;
+ _shiftPerSec = timeShift / secsSinceLast;
+ qDebug("secs since last lookup %i", secsSinceLast);qDebug("timeshift since last lookup %f", timeShift);qDebug("timeshift since per sec %f", _shiftPerSec);
+ cfg.writeEntry("secsSinceLast",secsSinceLast);
+ cfg.writeEntry("timeShift",QString::number(timeShift));
+ cfg.setGroup("lookups");
+ cfg.writeEntry("count",lookupCount);
+ cfg.writeEntry("lastNtp",true);
+ }
}
float Ntp::getTimeShift()
{
- QString _offset = "offset";
+ QString _offset = "offset";
QString _sec = "sec";
QRegExp _reOffset = QRegExp(_offset);
QRegExp _reEndOffset = QRegExp(_sec);
int posOffset = _reOffset.match( _ntpOutput );
int posEndOffset = _reEndOffset.match( _ntpOutput, posOffset );
posOffset += _offset.length() + 1;
QString diff = _ntpOutput.mid(posOffset, posEndOffset-posOffset-1);
qDebug("%s", _ntpOutput.latin1());
qDebug("diff = >%s<",diff.latin1());
return diff.toFloat();
}
void Ntp::readLookups()
{
- Config cfg("ntp",Config::User);
+ Config cfg("ntp",Config::User);
cfg.setGroup("lookups");
int lookupCount = cfg.readNumEntry("count",0);
float last, shift, shiftPerSec;
qDebug("lookupCount = %i",lookupCount);
TableLookups->setNumCols( 3 );
TableLookups->setNumRows( lookupCount);
TableLookups->horizontalHeader()->setLabel(1,tr("last [h]"));
TableLookups->horizontalHeader()->setLabel(2,tr("offset [s]"));
TableLookups->horizontalHeader()->setLabel(0,tr("shift [s/h]"));
int cw = TableLookups->width()/4;
qDebug("column width %i",cw);
cw = 50;
TableLookups->setColumnWidth( 0, cw+30 );
TableLookups->setColumnWidth( 1, cw );
TableLookups->setColumnWidth( 2, cw );
TableLookups->sortColumn(0, false, true );
- // TableLookups->setSorting( true );
+ // TableLookups->setSorting( true );
_shiftPerSec = 0;
for (int i=0; i < lookupCount; i++)
- {
- cfg.setGroup("lookup_"+QString::number(i));
- last = cfg.readEntry("secsSinceLast",0).toFloat();
- shift = QString(cfg.readEntry("timeShift",0)).toFloat();
- shiftPerSec = shift / last;
- qDebug("%i shift %f",i,shiftPerSec);
- _shiftPerSec += shiftPerSec;
- TableLookups->setText( i,0,QString::number(shiftPerSec*60*60));
- TableLookups->setText( i,2,QString::number(shift));
- TableLookups->setText( i,1,QString::number(last/(60*60)));
- }
+ {
+ cfg.setGroup("lookup_"+QString::number(i));
+ last = cfg.readEntry("secsSinceLast",0).toFloat();
+ shift = QString(cfg.readEntry("timeShift",0)).toFloat();
+ shiftPerSec = shift / last;
+ qDebug("%i shift %f",i,shiftPerSec);
+ _shiftPerSec += shiftPerSec;
+ TableLookups->setText( i,0,QString::number(shiftPerSec*60*60));
+ TableLookups->setText( i,2,QString::number(shift));
+ TableLookups->setText( i,1,QString::number(last/(60*60)));
+ }
_shiftPerSec /= lookupCount;
TextLabelShift->setText(QString::number(_shiftPerSec*60*60)+tr(" s/h"));
}
void Ntp::preditctTime()
{
- Config cfg("ntp",Config::User);
+ Config cfg("ntp",Config::User);
cfg.setGroup("lookups");
- int lastTime = cfg.readNumEntry("time",0);
- cfg.writeEntry("lastNtp",true);
+ int lastTime = cfg.readNumEntry("time",0);
+ cfg.writeEntry("lastNtp",true);
setenv( "TZ", tz->currentZone(), 1 );
int now = TimeConversion::toUTC( QDateTime::currentDateTime() );
int corr = int((now - lastTime) * _shiftPerSec);
TextLabelEstimatedShift->setText(QString::number(corr)+tr(" seconds"));
predictedTime = QDateTime::currentDateTime().addSecs(corr);
- TextLabelPredTime->setText(predictedTime.toString());
+ TextLabelPredTime->setText(predictedTime.toString());
TextLabelMainPredTime->setText(tr("Predicted time:")+"<br><b>"+predictedTime.toString()+"</b>");
}
void Ntp::setPredictTime()
{
preditctTime();
- setTime( predictedTime );
+ setTime( predictedTime );
}
void Ntp::slotCheckNtp(int i)
{
- if (i == 0)
- {
- TextLabelMainPredTime->hide();
- ButtonSetTime->setText( tr("Get time from network") );
- connect( ButtonSetTime, SIGNAL(clicked()), SLOT(slotRunNtp()) );
- if ( ntpDelayElapsed() )
+ if (i == 0)
+ {
+ TextLabelMainPredTime->hide();
+ ButtonSetTime->setText( tr("Get time from network") );
+ connect( ButtonSetTime, SIGNAL(clicked()), SLOT(slotRunNtp()) );
+ if ( ntpDelayElapsed() )
{
- slotRunNtp();
- disconnect(ntpTimer, SIGNAL( timeout() ), this, SLOT(slotProbeNtpServer()) );
- connect(ntpTimer, SIGNAL( timeout() ), SLOT(slotRunNtp()) );
- }else{
- disconnect(ntpTimer, SIGNAL( timeout() ), this, SLOT(slotRunNtp()) );
- connect(ntpTimer, SIGNAL( timeout() ), SLOT(slotProbeNtpServer()) );
+ slotRunNtp();
+ disconnect(ntpTimer, SIGNAL( timeout() ), this, SLOT(slotProbeNtpServer()) );
+ connect(ntpTimer, SIGNAL( timeout() ), SLOT(slotRunNtp()) );
+ }else{
+ disconnect(ntpTimer, SIGNAL( timeout() ), this, SLOT(slotRunNtp()) );
+ connect(ntpTimer, SIGNAL( timeout() ), SLOT(slotProbeNtpServer()) );
+ }
+ }else{
+ preditctTime();
+ ButtonSetTime->setText( tr("Set predicted time: ")+predictedTime.toString() );
+ if (i>0)ntpOutPut(tr("Could not connect to server ")+getNtpServer());
+ connect( ButtonSetTime, SIGNAL(clicked()), SLOT(setPredictTime()) );
+ connect( ntpTimer, SIGNAL( timeout() ), SLOT(slotProbeNtpServer()) );
}
- }else{
- preditctTime();
- ButtonSetTime->setText( tr("Set predicted time: ")+predictedTime.toString() );
- if (i>0)ntpOutPut(tr("Could not connect to server ")+getNtpServer());
- connect( ButtonSetTime, SIGNAL(clicked()), SLOT(setPredictTime()) );
- connect( ntpTimer, SIGNAL( timeout() ), SLOT(slotProbeNtpServer()) );
- }
}
void Ntp::slotProbeNtpServer()
{
- ntpSock->connectToHost( getNtpServer() ,123);
+ ntpSock->connectToHost( getNtpServer() ,123);
}
void Ntp::slotNtpDelayChanged(int delay)
{
ntpTimer->changeInterval( delay*1000*60 );
}
void Ntp::ntpOutPut(QString out)
{
- MultiLineEditntpOutPut->append(out);
+ MultiLineEditntpOutPut->append(out);
MultiLineEditntpOutPut->setCursorPosition(MultiLineEditntpOutPut->numLines() + 1,0,FALSE);
}
void Ntp::makeChannel()
{
- channel = new QCopChannel( "QPE/Application/netsystemtime", this );
- connect( channel, SIGNAL(received(const QCString&, const QByteArray&)),
- this, SLOT(receive(const QCString&, const QByteArray&)) );
+ channel = new QCopChannel( "QPE/Application/netsystemtime", this );
+ connect( channel, SIGNAL(received(const QCString&, const QByteArray&)),
+ this, SLOT(receive(const QCString&, const QByteArray&)) );
}
void Ntp::receive(const QCString &msg, const QByteArray &arg)
{
- qDebug("QCop(Ntp) "+msg+" "+QCString(arg));
- if ( msg == "ntpLookup(QString)" )
- {
- slotRunNtp();
- }
- if ( msg == "setPredictedTime(QString)" )
- {
- setPredictTime();
- }else{
- qDebug("Ntp::receive: Huh what do ya want");
- }
+ qDebug("QCop(Ntp) "+msg+" "+QCString(arg));
+ if ( msg == "ntpLookup(QString)" )
+ {
+ slotRunNtp();
+ }
+ if ( msg == "setPredictedTime(QString)" )
+ {
+ setPredictTime();
+ }else{
+ qDebug("Ntp::receive: Huh what do ya want");
+ }
}
void Ntp::setDocument(const QString &fileName)
{
}
void Ntp::showAdvancedFeatures(bool advMode)
{
if (advMode) {
TabWidgetMain->addTab( tabPredict, tr( "Predict" ) );
TabWidgetMain->addTab( tabNtp, tr( "NTP" ) );
TextLabel1_2_2->show();
TextLabel2_3->show();
TextLabel3_3_2->show();
TextLabel1_2->show();
SpinBoxMinLookupDelay->show();
TextLabel2->show();
TextLabel3_3->show();
SpinBoxNtpDelay->show();
Line1->show();
}else{
TabWidgetMain->removePage( tabPredict );
TabWidgetMain->removePage( tabNtp );
TextLabel1_2_2->hide();
TextLabel2_3->hide();
TextLabel3_3_2->hide();
TextLabel1_2->hide();
SpinBoxMinLookupDelay->hide();
TextLabel2->hide();
TextLabel3_3->hide();
SpinBoxNtpDelay->hide();