author | drw <drw> | 2003-03-29 22:32:58 (UTC) |
---|---|---|
committer | drw <drw> | 2003-03-29 22:32:58 (UTC) |
commit | 340cb7e64fb898966996b00b93c03ca05a347aa5 (patch) (side-by-side diff) | |
tree | 0db7548e03ba94e8a71fc73a98fbe74544043062 | |
parent | 4e17e397c6df9e4e1ac6ee8315bbbced3e3b3b49 (diff) | |
download | opie-340cb7e64fb898966996b00b93c03ca05a347aa5.zip opie-340cb7e64fb898966996b00b93c03ca05a347aa5.tar.gz opie-340cb7e64fb898966996b00b93c03ca05a347aa5.tar.bz2 |
Fix for bug #701 - update time and date controls on Main tab after retrieving time from ntpdate.
-rw-r--r-- | noncore/settings/netsystemtime/ntp.cpp | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/noncore/settings/netsystemtime/ntp.cpp b/noncore/settings/netsystemtime/ntp.cpp index aecefc1..f653cd0 100644 --- a/noncore/settings/netsystemtime/ntp.cpp +++ b/noncore/settings/netsystemtime/ntp.cpp @@ -1,87 +1,88 @@ #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/datebookmonth.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 ) { _interactive = false; 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") ); } if ( srvCount==0 ) ComboNtpSrv->insertItem(tr("time.fu-berlin.de")); Config cfg("ntp",Config::User); cfg.setGroup("settings"); SpinBoxMinLookupDelay->setValue( cfg.readNumEntry("minLookupDiff",720) ); SpinBoxNtpDelay->setValue( cfg.readNumEntry("ntpRefreshFreq",1440) ); ComboNtpSrv->setCurrentItem( cfg.readNumEntry("ntpServer", 0) ); //make tab order TabWidgetMain->removePage( tabMain ); TabWidgetMain->removePage( tabManualSetTime ); TabWidgetMain->removePage( TabSettings ); TabWidgetMain->removePage( tabPredict ); TabWidgetMain->removePage( tabNtp ); TabWidgetMain->insertTab( tabMain, tr( "Main" ) ); TabWidgetMain->insertTab( TabSettings, tr( "Settings" ) ); TabWidgetMain->insertTab( tabPredict, tr( "Predict" ) ); TabWidgetMain->insertTab( tabNtp, tr( "NTP" ) ); NtpBaseLayout->addWidget( TabWidgetMain, 0, 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( ); connect( SpinBoxNtpDelay, SIGNAL( valueChanged(int) ), SLOT(slotNtpDelayChanged(int)) ); ntpSock = new QSocket( this ); connect( ntpSock, SIGNAL( error(int) ),SLOT(slotCheckNtp(int)) ); slotProbeNtpServer(); connect ( ntpProcess, SIGNAL(receivedStdout(OProcess*,char*,int)), this, SLOT(getNtpOutput(OProcess*,char*,int))); connect ( ntpProcess, SIGNAL(processExited(OProcess*)), this, SLOT(ntpFinished(OProcess*))); @@ -162,128 +163,132 @@ void Ntp::slotRunNtp() 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()); ntpOutPut( tr("Running:")+"\nntpdate "+getNtpServer() ); ntpProcess->clearArguments(); *ntpProcess << "ntpdate" << getNtpServer(); bool ret = ntpProcess->start(OProcess::NotifyOnExit,OProcess::AllOutput); if ( !ret ) { QMessageBox::critical(this, tr("ntp error"), tr("Error while getting time form network!")); qDebug("Error while executing ntpdate"); ntpOutPut( tr("Error while executing ntpdate")); } } void Ntp::getNtpOutput(OProcess *proc, char *buffer, int buflen) { if (! proc ) qDebug("Ntp::getNtpOutput OProcess is null"); QString lineStr, lineStrOld; lineStr = buffer; lineStr=lineStr.left(buflen); if (lineStr!=lineStrOld) { ntpOutPut(lineStr); _ntpOutput += lineStr; } lineStrOld = lineStr; } void Ntp::ntpFinished(OProcess *p) { qDebug("p->exitStatus() %i",p->exitStatus()); if (p->exitStatus()!=0 || !p->normalExit()) { if ( isVisible() && _interactive ){ QMessageBox::critical(this, tr("ntp error"),tr("Error while getting time form\n server")+getNtpServer()+"\n"+_ntpOutput ); } // slotCheckNtp(-1); return; } 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; TextLabelNewTime->setText(QDateTime::currentDateTime().toString()); TextLabelTimeShift->setText(QString::number(timeShift)+tr(" seconds")); + + dateButton->setDate( QDate::currentDate() ); + timeButton->setTime( QDateTime::currentDateTime() ); + 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); } } float Ntp::getTimeShift() { 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); 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 ); _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))); } _shiftPerSec /= lookupCount; |