summaryrefslogtreecommitdiff
path: root/noncore/settings/netsystemtime/ntp.cpp
Side-by-side diff
Diffstat (limited to 'noncore/settings/netsystemtime/ntp.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/settings/netsystemtime/ntp.cpp56
1 files changed, 31 insertions, 25 deletions
diff --git a/noncore/settings/netsystemtime/ntp.cpp b/noncore/settings/netsystemtime/ntp.cpp
index c7e3b52..53dbe46 100644
--- a/noncore/settings/netsystemtime/ntp.cpp
+++ b/noncore/settings/netsystemtime/ntp.cpp
@@ -27,96 +27,98 @@
#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( tabManualSetTime, tr( "Manual" ) );
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*)));
connect(runNtp, SIGNAL(clicked()), this, SLOT(slotButtonRunNtp()));
connect(PushButtonPredict, SIGNAL(clicked()), this, SLOT(preditctTime()));
connect(PushButtonSetPredTime, SIGNAL(clicked()), this, SLOT(setPredictTime()));
slotCheckNtp(-1);
readLookups();
}
Ntp::~Ntp()
{
delete ntpProcess;
+}
+
+void Ntp::saveConfig(){
int srvCount = ComboNtpSrv->count();
bool serversChanged = true;
QString edit = ComboNtpSrv->currentText();
for (int i = 0; i < srvCount; i++){
if ( edit == ComboNtpSrv->text(i)) serversChanged = false;
}
if (serversChanged){
Config ntpSrvs("/etc/ntpservers",Config::File);
ntpSrvs.setGroup("servers");
ntpSrvs.writeEntry("count", srvCount);
for (int i = 0; i < srvCount; i++){
qDebug("ntpSrvs[%i/%i]=%s",i,srvCount,ComboNtpSrv->text(i).latin1());
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() );
}
@@ -178,62 +180,52 @@ void Ntp::slotRunNtp()
}
}
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 );
- TabWidgetMain->showPage( tabManualSetTime );
}
-
+// slotCheckNtp(-1);
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 << "";
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"));
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);
@@ -285,74 +277,76 @@ void Ntp::readLookups()
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);
cfg.setGroup("lookups");
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());
- TextLabelMainPredTime->setText(tr("Predicted time:")+"<br><b>"+predictedTime.toString()+"</b>");
+// TextLabelMainPredTime->setText(tr("Predicted time:")+"<br><b>"+predictedTime.toString()+"</b>");
}
void Ntp::setPredictTime()
{
+ qDebug("Ntp::setPredictTime");
preditctTime();
- setTime( predictedTime );
+ timeButton->setTime( predictedTime );
}
void Ntp::slotCheckNtp(int i)
{
+ qDebug(" Ntp::slotCheckNtp(%i)",i);
if (i == 0)
{
- TextLabelMainPredTime->hide();
+// TextLabelMainPredTime->hide();
ButtonSetTime->setText( tr("Get time from network") );
connect( ButtonSetTime, SIGNAL(clicked()), SLOT(slotButtonRunNtp()) );
if ( ntpDelayElapsed() )
- {
- slotRunNtp();
- disconnect(ntpTimer, SIGNAL( timeout() ), this, SLOT(slotProbeNtpServer()) );
- connect(ntpTimer, SIGNAL( timeout() ), SLOT(slotTimerRunNtp()) );
- }else{
- disconnect(ntpTimer, SIGNAL( timeout() ), this, SLOT(slotTimerRunNtp()) );
- connect(ntpTimer, SIGNAL( timeout() ), SLOT(slotProbeNtpServer()) );
- }
- }else{
+ {
+ slotRunNtp();
+ disconnect(ntpTimer, SIGNAL( timeout() ), this, SLOT(slotProbeNtpServer()) );
+ connect(ntpTimer, SIGNAL( timeout() ), SLOT(slotTimerRunNtp()) );
+ }else{
+ disconnect(ntpTimer, SIGNAL( timeout() ), this, SLOT(slotTimerRunNtp()) );
+ 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);
}
void Ntp::slotNtpDelayChanged(int delay)
{
ntpTimer->changeInterval( delay*1000*60 );
}
void Ntp::ntpOutPut(QString out)
{
MultiLineEditntpOutPut->append(out);
MultiLineEditntpOutPut->setCursorPosition(MultiLineEditntpOutPut->numLines() + 1,0,FALSE);
}
@@ -397,24 +391,36 @@ void Ntp::showAdvancedFeatures(bool advMode)
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();
Line1->hide();
};
TabWidgetMain->show();
}
+
+
+void Ntp::accept( ){
+ qDebug("accepted");
+ //SetTimeDate
+ commitTime();
+ writeSettings();
+ updateSystem();
+ // Ntp
+ saveConfig();
+ qApp->quit();
+} \ No newline at end of file