-rw-r--r-- | noncore/settings/netsystemtime/ntp.cpp | 50 | ||||
-rw-r--r-- | noncore/settings/netsystemtime/ntp.h | 4 | ||||
-rw-r--r-- | noncore/settings/netsystemtime/settime.cpp | 24 | ||||
-rw-r--r-- | noncore/settings/netsystemtime/settime.h | 1 |
4 files changed, 45 insertions, 34 deletions
diff --git a/noncore/settings/netsystemtime/ntp.cpp b/noncore/settings/netsystemtime/ntp.cpp index ddb1372..87b20ec 100644 --- a/noncore/settings/netsystemtime/ntp.cpp +++ b/noncore/settings/netsystemtime/ntp.cpp @@ -27,18 +27,18 @@ Ntp::Ntp( QWidget* parent, const char* name, WFlags fl ) LineEditNtpServer->setText( cfg.readEntry("ntpServer") ); ntpProcess = new OProcess( ); connect ( ntpProcess, SIGNAL(receivedStdout(OProcess*,char*,int)), this, SLOT(getNtpOutput(OProcess*,char*,int))); connect ( ntpProcess, SIGNAL(processExited(OProcess*)), this, SLOT(ntpFinished(OProcess*))); connect(runNtp, SIGNAL(clicked()), this, SLOT(slotRunNtp())); connect(PushButtonPredict, SIGNAL(clicked()), this, SLOT(preditctTime())); - _nextCorrection = new QTimer( this ); - connect( _nextCorrection, SIGNAL(timeout()), SLOT(correctClock()) ); +// _nextCorrection = new QTimer( this ); +// connect( _nextCorrection, SIGNAL(timeout()), SLOT(correctClock()) ); slotRunNtp(); readLookups(); } Ntp::~Ntp() { } @@ -78,16 +78,18 @@ void Ntp::getNtpOutput(OProcess *proc, char *buffer, int buflen) void Ntp::ntpFinished(OProcess*) { Config cfg("ntp",Config::User); cfg.setGroup("lookups"); int lastLookup = cfg.readNumEntry("time",0); int lookupCount = cfg.readNumEntry("count",-1); int time = TimeConversion::toUTC( QDateTime::currentDateTime() ); cfg.writeEntry("time", time); + cfg.setGroup("correction"); + cfg.writeEntry("time", time); float timeShift = getTimeShift(); if (timeShift == 0.0) return; int secsSinceLast = time - lastLookup; TextLabelNewTime->setText(QDateTime::currentDateTime().toString()); if ( lastLookup > 0 && secsSinceLast > 60*_minLookupDiff) { lookupCount++; @@ -96,34 +98,38 @@ void Ntp::ntpFinished(OProcess*) _shiftPerSec = timeShift / secsSinceLast; // float nextCorr = _maxOffset / _shiftPerSec; 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)); } } -void Ntp::correctClock() -{ - qDebug("current time: %s",QDateTime::currentDateTime().toString().latin1()); - Config cfg("ntp",Config::User); - cfg.setGroup("correction"); - int lastTime = cfg.readNumEntry("time",0); - int now = TimeConversion::toUTC( QDateTime::currentDateTime() ); - int corr = int((now - lastTime) * _shiftPerSec); - struct timeval myTv; - myTv.tv_sec = TimeConversion::toUTC( QDateTime::currentDateTime().addSecs(corr) ); - myTv.tv_usec = 0; - - if ( myTv.tv_sec != -1 ) - ::settimeofday( &myTv, 0 ); - Global::writeHWClock(); - cfg.writeEntry("time",now); - qDebug("current time: %s",QDateTime::currentDateTime().toString().latin1()); -} +//void Ntp::correctClock() +//{ +// qDebug("current time: %s",QDateTime::currentDateTime().toString().latin1()); +// Config cfg("ntp",Config::User); +// cfg.setGroup("correction"); +// int lastTime = cfg.readNumEntry("time",0); +// if ( lastTime == 0 ) +// { +// return; +// } +// int now = TimeConversion::toUTC( QDateTime::currentDateTime() ); +// int corr = int((now - lastTime) * _shiftPerSec); +// struct timeval myTv; +// myTv.tv_sec = TimeConversion::toUTC( QDateTime::currentDateTime().addSecs(corr) ); +// myTv.tv_usec = 0; +// +// if ( myTv.tv_sec != -1 ) +// ::settimeofday( &myTv, 0 ); +// Global::writeHWClock(); +// cfg.writeEntry("time",now); +// qDebug("current time: %s",QDateTime::currentDateTime().toString().latin1()); +//} float Ntp::getTimeShift() { QString _offset = "offset"; QString _sec = "sec"; QRegExp _reOffset = QRegExp(_offset); QRegExp _reEndOffset = QRegExp(_sec); int posOffset = _reOffset.match( _ntpOutput ); @@ -174,10 +180,12 @@ void Ntp::preditctTime() { qDebug("current time: %s",QDateTime::currentDateTime().toString().latin1()); Config cfg("ntp",Config::User); cfg.setGroup("lookups"); int lastTime = cfg.readNumEntry("time",0); setenv( "TZ", tz->currentZone(), 1 ); int now = TimeConversion::toUTC( QDateTime::currentDateTime() ); int corr = int((now - lastTime) * _shiftPerSec); - TextLabelPredTime->setText(QDateTime::currentDateTime().addSecs(corr).toString()); + QDateTime dt = QDateTime::currentDateTime().addSecs(corr); + setTime(dt); + TextLabelPredTime->setText(dt.toString()); } diff --git a/noncore/settings/netsystemtime/ntp.h b/noncore/settings/netsystemtime/ntp.h index fc233bf..d2e238d 100644 --- a/noncore/settings/netsystemtime/ntp.h +++ b/noncore/settings/netsystemtime/ntp.h @@ -20,22 +20,22 @@ public: protected: virtual void accept(); private: QString _ntpOutput; int _maxOffset; float _shiftPerSec; - QTimer *_nextCorrection; +// QTimer *_nextCorrection; int _minLookupDiff; float getTimeShift(); void readLookups(); private slots: void slotRunNtp(); void getNtpOutput(OProcess *proc, char *buffer, int buflen); void ntpFinished(OProcess*); - void correctClock(); +// void correctClock(); void preditctTime(); }; #endif diff --git a/noncore/settings/netsystemtime/settime.cpp b/noncore/settings/netsystemtime/settime.cpp index dac5bd4..01268c9 100644 --- a/noncore/settings/netsystemtime/settime.cpp +++ b/noncore/settings/netsystemtime/settime.cpp @@ -203,50 +203,52 @@ void SetDateTime::accept() Config lconfig("locale"); lconfig.setGroup( "Location" ); lconfig.writeEntry( "Timezone", tz->currentZone() ); } void SetDateTime::commitTime() { - Config cfg("ntp",Config::User); - cfg.setGroup("lookups"); - int time = TimeConversion::toUTC( QDateTime::currentDateTime() ); - cfg.writeEntry("time", time); tz->setFocus(); // really turn off the screensaver before doing anything { // Needs to be encased in { } so that it deconstructs and sends QCopEnvelope disableScreenSaver( "QPE/System", "setScreenSaverIntervals(int,int,int)" ); disableScreenSaver << 0 << 0 << 0; } // Need to process the QCOP event generated above before proceeding qApp->processEvents(); // before we progress further, set our TZ! setenv( "TZ", tz->currentZone(), 1 ); // now set the time... QDateTime dt( dateButton->date(), timeButton->time() ); - if ( dt.isValid() ) { - struct timeval myTv; - myTv.tv_sec = TimeConversion::toUTC( dt ); - myTv.tv_usec = 0; + if ( dt.isValid() ) setTime(dt); +} + +void SetDateTime::setTime(QDateTime dt) +{ + Config cfg("ntp",Config::User); + cfg.setGroup("correction"); + int t = TimeConversion::toUTC(dt); + struct timeval myTv; + myTv.tv_sec = t; + cfg.writeEntry("time", t ); + myTv.tv_usec = 0; if ( myTv.tv_sec != -1 ) ::settimeofday( &myTv, 0 ); 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; - } else { - qWarning( "Invalid date/time" ); - } + // set the timezone for everyone else... QCopEnvelope setTimeZone( "QPE/System", "timeChange(QString)" ); setTimeZone << tz->currentZone(); // AM/PM setting and notify time changed QCopEnvelope setClock( "QPE/System", "clockChange(bool)" ); setClock << ampmCombo->currentItem(); diff --git a/noncore/settings/netsystemtime/settime.h b/noncore/settings/netsystemtime/settime.h index 053d17a..729bf4b 100644 --- a/noncore/settings/netsystemtime/settime.h +++ b/noncore/settings/netsystemtime/settime.h @@ -71,16 +71,17 @@ public: SetDateTime( QWidget *parent=0, const char *name=0, WFlags f=0 ); protected slots: void tzChange( const QString &tz ); void formatChanged(int); protected: void commitTime(); + void setTime(QDateTime dt); virtual void accept(); virtual void done(int); SetTime *timeButton; DateButton *dateButton; TimeZoneSelector *tz; QComboBox *weekStartCombo; QComboBox *ampmCombo; |