-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 | |||
@@ -19,34 +19,34 @@ | |||
19 | 19 | ||
20 | Ntp::Ntp( QWidget* parent, const char* name, WFlags fl ) | 20 | Ntp::Ntp( QWidget* parent, const char* name, WFlags fl ) |
21 | : SetDateTime( parent, name, fl ) | 21 | : SetDateTime( parent, name, fl ) |
22 | { | 22 | { |
23 | Config cfg("ntp",Config::User); | 23 | Config cfg("ntp",Config::User); |
24 | cfg.setGroup("settings"); | 24 | cfg.setGroup("settings"); |
25 | _maxOffset = cfg.readNumEntry("maxOffset",5); | 25 | _maxOffset = cfg.readNumEntry("maxOffset",5); |
26 | _minLookupDiff = cfg.readNumEntry("minLookupDiff",10); | 26 | _minLookupDiff = cfg.readNumEntry("minLookupDiff",10); |
27 | LineEditNtpServer->setText( cfg.readEntry("ntpServer") ); | 27 | LineEditNtpServer->setText( cfg.readEntry("ntpServer") ); |
28 | ntpProcess = new OProcess( ); | 28 | ntpProcess = new OProcess( ); |
29 | connect ( ntpProcess, SIGNAL(receivedStdout(OProcess*,char*,int)), | 29 | connect ( ntpProcess, SIGNAL(receivedStdout(OProcess*,char*,int)), |
30 | this, SLOT(getNtpOutput(OProcess*,char*,int))); | 30 | this, SLOT(getNtpOutput(OProcess*,char*,int))); |
31 | connect ( ntpProcess, SIGNAL(processExited(OProcess*)), | 31 | connect ( ntpProcess, SIGNAL(processExited(OProcess*)), |
32 | this, SLOT(ntpFinished(OProcess*))); | 32 | this, SLOT(ntpFinished(OProcess*))); |
33 | connect(runNtp, SIGNAL(clicked()), this, SLOT(slotRunNtp())); | 33 | connect(runNtp, SIGNAL(clicked()), this, SLOT(slotRunNtp())); |
34 | connect(PushButtonPredict, SIGNAL(clicked()), this, SLOT(preditctTime())); | 34 | connect(PushButtonPredict, SIGNAL(clicked()), this, SLOT(preditctTime())); |
35 | _nextCorrection = new QTimer( this ); | 35 | // _nextCorrection = new QTimer( this ); |
36 | connect( _nextCorrection, SIGNAL(timeout()), SLOT(correctClock()) ); | 36 | // connect( _nextCorrection, SIGNAL(timeout()), SLOT(correctClock()) ); |
37 | slotRunNtp(); | 37 | slotRunNtp(); |
38 | readLookups(); | 38 | readLookups(); |
39 | } | 39 | } |
40 | 40 | ||
41 | Ntp::~Ntp() | 41 | Ntp::~Ntp() |
42 | { | 42 | { |
43 | 43 | ||
44 | } | 44 | } |
45 | 45 | ||
46 | void Ntp::accept() | 46 | void Ntp::accept() |
47 | { | 47 | { |
48 | Config cfg("ntp",Config::User); | 48 | Config cfg("ntp",Config::User); |
49 | cfg.setGroup("settings"); | 49 | cfg.setGroup("settings"); |
50 | cfg.writeEntry("ntpServer", LineEditNtpServer->text()); | 50 | cfg.writeEntry("ntpServer", LineEditNtpServer->text()); |
51 | } | 51 | } |
52 | 52 | ||
@@ -70,68 +70,74 @@ void Ntp::getNtpOutput(OProcess *proc, char *buffer, int buflen) | |||
70 | if (lineStr!=lineStrOld) | 70 | if (lineStr!=lineStrOld) |
71 | { | 71 | { |
72 | // outPut->append(lineStr); | 72 | // outPut->append(lineStr); |
73 | _ntpOutput += lineStr; | 73 | _ntpOutput += lineStr; |
74 | } | 74 | } |
75 | lineStrOld = lineStr; | 75 | lineStrOld = lineStr; |
76 | } | 76 | } |
77 | 77 | ||
78 | void Ntp::ntpFinished(OProcess*) | 78 | void Ntp::ntpFinished(OProcess*) |
79 | { | 79 | { |
80 | Config cfg("ntp",Config::User); | 80 | Config cfg("ntp",Config::User); |
81 | cfg.setGroup("lookups"); | 81 | cfg.setGroup("lookups"); |
82 | int lastLookup = cfg.readNumEntry("time",0); | 82 | int lastLookup = cfg.readNumEntry("time",0); |
83 | int lookupCount = cfg.readNumEntry("count",-1); | 83 | int lookupCount = cfg.readNumEntry("count",-1); |
84 | int time = TimeConversion::toUTC( QDateTime::currentDateTime() ); | 84 | int time = TimeConversion::toUTC( QDateTime::currentDateTime() ); |
85 | cfg.writeEntry("time", time); | 85 | cfg.writeEntry("time", time); |
86 | cfg.setGroup("correction"); | ||
87 | cfg.writeEntry("time", time); | ||
86 | 88 | ||
87 | float timeShift = getTimeShift(); | 89 | float timeShift = getTimeShift(); |
88 | if (timeShift == 0.0) return; | 90 | if (timeShift == 0.0) return; |
89 | int secsSinceLast = time - lastLookup; | 91 | int secsSinceLast = time - lastLookup; |
90 | TextLabelNewTime->setText(QDateTime::currentDateTime().toString()); | 92 | TextLabelNewTime->setText(QDateTime::currentDateTime().toString()); |
91 | if ( lastLookup > 0 && secsSinceLast > 60*_minLookupDiff) | 93 | if ( lastLookup > 0 && secsSinceLast > 60*_minLookupDiff) |
92 | { | 94 | { |
93 | lookupCount++; | 95 | lookupCount++; |
94 | cfg.writeEntry("count",lookupCount); | 96 | cfg.writeEntry("count",lookupCount); |
95 | cfg.setGroup("lookup_"+QString::number(lookupCount)); | 97 | cfg.setGroup("lookup_"+QString::number(lookupCount)); |
96 | _shiftPerSec = timeShift / secsSinceLast; | 98 | _shiftPerSec = timeShift / secsSinceLast; |
97 | // float nextCorr = _maxOffset / _shiftPerSec; | 99 | // float nextCorr = _maxOffset / _shiftPerSec; |
98 | qDebug("secs since last lookup %i", secsSinceLast);qDebug("timeshift since last lookup %f", timeShift);qDebug("timeshift since per sec %f", _shiftPerSec); | 100 | qDebug("secs since last lookup %i", secsSinceLast);qDebug("timeshift since last lookup %f", timeShift);qDebug("timeshift since per sec %f", _shiftPerSec); |
99 | cfg.writeEntry("secsSinceLast",secsSinceLast); | 101 | cfg.writeEntry("secsSinceLast",secsSinceLast); |
100 | cfg.writeEntry("timeShift",QString::number(timeShift)); | 102 | cfg.writeEntry("timeShift",QString::number(timeShift)); |
101 | } | 103 | } |
102 | } | 104 | } |
103 | 105 | ||
104 | void Ntp::correctClock() | 106 | //void Ntp::correctClock() |
105 | { | 107 | //{ |
106 | qDebug("current time: %s",QDateTime::currentDateTime().toString().latin1()); | 108 | //qDebug("current time: %s",QDateTime::currentDateTime().toString().latin1()); |
107 | Config cfg("ntp",Config::User); | 109 | //Config cfg("ntp",Config::User); |
108 | cfg.setGroup("correction"); | 110 | // cfg.setGroup("correction"); |
109 | int lastTime = cfg.readNumEntry("time",0); | 111 | // int lastTime = cfg.readNumEntry("time",0); |
110 | int now = TimeConversion::toUTC( QDateTime::currentDateTime() ); | 112 | // if ( lastTime == 0 ) |
111 | int corr = int((now - lastTime) * _shiftPerSec); | 113 | // { |
112 | struct timeval myTv; | 114 | // return; |
113 | myTv.tv_sec = TimeConversion::toUTC( QDateTime::currentDateTime().addSecs(corr) ); | 115 | // } |
114 | myTv.tv_usec = 0; | 116 | // int now = TimeConversion::toUTC( QDateTime::currentDateTime() ); |
115 | 117 | // int corr = int((now - lastTime) * _shiftPerSec); | |
116 | if ( myTv.tv_sec != -1 ) | 118 | // struct timeval myTv; |
117 | ::settimeofday( &myTv, 0 ); | 119 | // myTv.tv_sec = TimeConversion::toUTC( QDateTime::currentDateTime().addSecs(corr) ); |
118 | Global::writeHWClock(); | 120 | // myTv.tv_usec = 0; |
119 | cfg.writeEntry("time",now); | 121 | // |
120 | qDebug("current time: %s",QDateTime::currentDateTime().toString().latin1()); | 122 | // if ( myTv.tv_sec != -1 ) |
121 | } | 123 | // ::settimeofday( &myTv, 0 ); |
124 | // Global::writeHWClock(); | ||
125 | // cfg.writeEntry("time",now); | ||
126 | //qDebug("current time: %s",QDateTime::currentDateTime().toString().latin1()); | ||
127 | //} | ||
122 | 128 | ||
123 | float Ntp::getTimeShift() | 129 | float Ntp::getTimeShift() |
124 | { | 130 | { |
125 | QString _offset = "offset"; | 131 | QString _offset = "offset"; |
126 | QString _sec = "sec"; | 132 | QString _sec = "sec"; |
127 | QRegExp _reOffset = QRegExp(_offset); | 133 | QRegExp _reOffset = QRegExp(_offset); |
128 | QRegExp _reEndOffset = QRegExp(_sec); | 134 | QRegExp _reEndOffset = QRegExp(_sec); |
129 | int posOffset = _reOffset.match( _ntpOutput ); | 135 | int posOffset = _reOffset.match( _ntpOutput ); |
130 | int posEndOffset = _reEndOffset.match( _ntpOutput, posOffset ); | 136 | int posEndOffset = _reEndOffset.match( _ntpOutput, posOffset ); |
131 | posOffset += _offset.length() + 1; | 137 | posOffset += _offset.length() + 1; |
132 | QString diff = _ntpOutput.mid(posOffset, posEndOffset-posOffset-1); | 138 | QString diff = _ntpOutput.mid(posOffset, posEndOffset-posOffset-1); |
133 | qDebug("%s", _ntpOutput.latin1()); | 139 | qDebug("%s", _ntpOutput.latin1()); |
134 | qDebug("diff = >%s<",diff.latin1()); | 140 | qDebug("diff = >%s<",diff.latin1()); |
135 | TextLabelTimeShift->setText(diff); | 141 | TextLabelTimeShift->setText(diff); |
136 | return diff.toFloat(); | 142 | return diff.toFloat(); |
137 | } | 143 | } |
@@ -166,18 +172,20 @@ void Ntp::readLookups() | |||
166 | TableLookups->setText( i,1,QString::number(shift)); | 172 | TableLookups->setText( i,1,QString::number(shift)); |
167 | TableLookups->setText( i,2,QString::number(last)); | 173 | TableLookups->setText( i,2,QString::number(last)); |
168 | } | 174 | } |
169 | _shiftPerSec /= lookupCount+1; | 175 | _shiftPerSec /= lookupCount+1; |
170 | TextLabelShift->setText(QString::number(_shiftPerSec)); | 176 | TextLabelShift->setText(QString::number(_shiftPerSec)); |
171 | } | 177 | } |
172 | 178 | ||
173 | void Ntp::preditctTime() | 179 | void Ntp::preditctTime() |
174 | { | 180 | { |
175 | qDebug("current time: %s",QDateTime::currentDateTime().toString().latin1()); | 181 | qDebug("current time: %s",QDateTime::currentDateTime().toString().latin1()); |
176 | Config cfg("ntp",Config::User); | 182 | Config cfg("ntp",Config::User); |
177 | cfg.setGroup("lookups"); | 183 | cfg.setGroup("lookups"); |
178 | int lastTime = cfg.readNumEntry("time",0); | 184 | int lastTime = cfg.readNumEntry("time",0); |
179 | setenv( "TZ", tz->currentZone(), 1 ); | 185 | setenv( "TZ", tz->currentZone(), 1 ); |
180 | int now = TimeConversion::toUTC( QDateTime::currentDateTime() ); | 186 | int now = TimeConversion::toUTC( QDateTime::currentDateTime() ); |
181 | int corr = int((now - lastTime) * _shiftPerSec); | 187 | int corr = int((now - lastTime) * _shiftPerSec); |
182 | TextLabelPredTime->setText(QDateTime::currentDateTime().addSecs(corr).toString()); | 188 | QDateTime dt = QDateTime::currentDateTime().addSecs(corr); |
189 | setTime(dt); | ||
190 | TextLabelPredTime->setText(dt.toString()); | ||
183 | } | 191 | } |
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 | |||
@@ -12,30 +12,30 @@ class Ntp : public SetDateTime | |||
12 | { | 12 | { |
13 | Q_OBJECT | 13 | Q_OBJECT |
14 | 14 | ||
15 | public: | 15 | public: |
16 | Ntp( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 ); | 16 | Ntp( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 ); |
17 | ~Ntp(); | 17 | ~Ntp(); |
18 | 18 | ||
19 | OProcess *ntpProcess; | 19 | OProcess *ntpProcess; |
20 | 20 | ||
21 | protected: | 21 | protected: |
22 | virtual void accept(); | 22 | virtual void accept(); |
23 | 23 | ||
24 | private: | 24 | private: |
25 | QString _ntpOutput; | 25 | QString _ntpOutput; |
26 | int _maxOffset; | 26 | int _maxOffset; |
27 | float _shiftPerSec; | 27 | float _shiftPerSec; |
28 | QTimer *_nextCorrection; | 28 | // QTimer *_nextCorrection; |
29 | int _minLookupDiff; | 29 | int _minLookupDiff; |
30 | 30 | ||
31 | float getTimeShift(); | 31 | float getTimeShift(); |
32 | void readLookups(); | 32 | void readLookups(); |
33 | private slots: | 33 | private slots: |
34 | void slotRunNtp(); | 34 | void slotRunNtp(); |
35 | void getNtpOutput(OProcess *proc, char *buffer, int buflen); | 35 | void getNtpOutput(OProcess *proc, char *buffer, int buflen); |
36 | void ntpFinished(OProcess*); | 36 | void ntpFinished(OProcess*); |
37 | void correctClock(); | 37 | // void correctClock(); |
38 | void preditctTime(); | 38 | void preditctTime(); |
39 | }; | 39 | }; |
40 | 40 | ||
41 | #endif | 41 | #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 | |||
@@ -195,66 +195,68 @@ void SetDateTime::accept() | |||
195 | config.writeEntry( "MONDAY", weekStartCombo->currentItem() ); | 195 | config.writeEntry( "MONDAY", weekStartCombo->currentItem() ); |
196 | config.setGroup( "Date" ); | 196 | config.setGroup( "Date" ); |
197 | DateFormat df = date_formats[dateFormatCombo->currentItem()]; | 197 | DateFormat df = date_formats[dateFormatCombo->currentItem()]; |
198 | config.writeEntry( "Separator", QString(df.separator())); | 198 | config.writeEntry( "Separator", QString(df.separator())); |
199 | config.writeEntry( "ShortOrder", df.shortOrder()); | 199 | config.writeEntry( "ShortOrder", df.shortOrder()); |
200 | config.writeEntry( "LongOrder", df.longOrder()); | 200 | config.writeEntry( "LongOrder", df.longOrder()); |
201 | config.writeEntry( "ClockApplet", clockAppletCombo->currentItem() ); | 201 | config.writeEntry( "ClockApplet", clockAppletCombo->currentItem() ); |
202 | 202 | ||
203 | Config lconfig("locale"); | 203 | Config lconfig("locale"); |
204 | lconfig.setGroup( "Location" ); | 204 | lconfig.setGroup( "Location" ); |
205 | lconfig.writeEntry( "Timezone", tz->currentZone() ); | 205 | lconfig.writeEntry( "Timezone", tz->currentZone() ); |
206 | 206 | ||
207 | } | 207 | } |
208 | 208 | ||
209 | void SetDateTime::commitTime() | 209 | void SetDateTime::commitTime() |
210 | { | 210 | { |
211 | Config cfg("ntp",Config::User); | ||
212 | cfg.setGroup("lookups"); | ||
213 | int time = TimeConversion::toUTC( QDateTime::currentDateTime() ); | ||
214 | cfg.writeEntry("time", time); | ||
215 | tz->setFocus(); | 211 | tz->setFocus(); |
216 | // really turn off the screensaver before doing anything | 212 | // really turn off the screensaver before doing anything |
217 | { | 213 | { |
218 | // Needs to be encased in { } so that it deconstructs and sends | 214 | // Needs to be encased in { } so that it deconstructs and sends |
219 | QCopEnvelope disableScreenSaver( "QPE/System", "setScreenSaverIntervals(int,int,int)" ); | 215 | QCopEnvelope disableScreenSaver( "QPE/System", "setScreenSaverIntervals(int,int,int)" ); |
220 | disableScreenSaver << 0 << 0 << 0; | 216 | disableScreenSaver << 0 << 0 << 0; |
221 | } | 217 | } |
222 | // Need to process the QCOP event generated above before proceeding | 218 | // Need to process the QCOP event generated above before proceeding |
223 | qApp->processEvents(); | 219 | qApp->processEvents(); |
224 | 220 | ||
225 | // before we progress further, set our TZ! | 221 | // before we progress further, set our TZ! |
226 | setenv( "TZ", tz->currentZone(), 1 ); | 222 | setenv( "TZ", tz->currentZone(), 1 ); |
227 | // now set the time... | 223 | // now set the time... |
228 | QDateTime dt( dateButton->date(), timeButton->time() ); | 224 | QDateTime dt( dateButton->date(), timeButton->time() ); |
229 | 225 | ||
230 | if ( dt.isValid() ) { | 226 | if ( dt.isValid() ) setTime(dt); |
231 | struct timeval myTv; | 227 | } |
232 | myTv.tv_sec = TimeConversion::toUTC( dt ); | 228 | |
233 | myTv.tv_usec = 0; | 229 | void SetDateTime::setTime(QDateTime dt) |
230 | { | ||
231 | Config cfg("ntp",Config::User); | ||
232 | cfg.setGroup("correction"); | ||
233 | int t = TimeConversion::toUTC(dt); | ||
234 | struct timeval myTv; | ||
235 | myTv.tv_sec = t; | ||
236 | cfg.writeEntry("time", t ); | ||
237 | myTv.tv_usec = 0; | ||
234 | 238 | ||
235 | if ( myTv.tv_sec != -1 ) | 239 | if ( myTv.tv_sec != -1 ) |
236 | ::settimeofday( &myTv, 0 ); | 240 | ::settimeofday( &myTv, 0 ); |
237 | Global::writeHWClock(); | 241 | Global::writeHWClock(); |
238 | // since time has changed quickly load in the datebookdb | 242 | // since time has changed quickly load in the datebookdb |
239 | // to allow the alarm server to get a better grip on itself | 243 | // to allow the alarm server to get a better grip on itself |
240 | // (example re-trigger alarms for when we travel back in time) | 244 | // (example re-trigger alarms for when we travel back in time) |
241 | DateBookDB db; | 245 | DateBookDB db; |
242 | } else { | 246 | |
243 | qWarning( "Invalid date/time" ); | ||
244 | } | ||
245 | // set the timezone for everyone else... | 247 | // set the timezone for everyone else... |
246 | QCopEnvelope setTimeZone( "QPE/System", "timeChange(QString)" ); | 248 | QCopEnvelope setTimeZone( "QPE/System", "timeChange(QString)" ); |
247 | setTimeZone << tz->currentZone(); | 249 | setTimeZone << tz->currentZone(); |
248 | 250 | ||
249 | // AM/PM setting and notify time changed | 251 | // AM/PM setting and notify time changed |
250 | QCopEnvelope setClock( "QPE/System", "clockChange(bool)" ); | 252 | QCopEnvelope setClock( "QPE/System", "clockChange(bool)" ); |
251 | setClock << ampmCombo->currentItem(); | 253 | setClock << ampmCombo->currentItem(); |
252 | 254 | ||
253 | // Notify everyone what day we prefer to start the week on. | 255 | // Notify everyone what day we prefer to start the week on. |
254 | QCopEnvelope setWeek( "QPE/System", "weekChange(bool)" ); | 256 | QCopEnvelope setWeek( "QPE/System", "weekChange(bool)" ); |
255 | setWeek << weekStartCombo->currentItem(); | 257 | setWeek << weekStartCombo->currentItem(); |
256 | 258 | ||
257 | // Notify everyone what date format to use | 259 | // Notify everyone what date format to use |
258 | QCopEnvelope setDateFormat( "QPE/System", "setDateFormat(DateFormat)" ); | 260 | QCopEnvelope setDateFormat( "QPE/System", "setDateFormat(DateFormat)" ); |
259 | setDateFormat << date_formats[dateFormatCombo->currentItem()]; | 261 | setDateFormat << date_formats[dateFormatCombo->currentItem()]; |
260 | 262 | ||
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 | |||
@@ -63,32 +63,33 @@ protected: | |||
63 | }; | 63 | }; |
64 | 64 | ||
65 | class DateButton; | 65 | class DateButton; |
66 | 66 | ||
67 | class SetDateTime : public NtpBase | 67 | class SetDateTime : public NtpBase |
68 | { | 68 | { |
69 | Q_OBJECT | 69 | Q_OBJECT |
70 | public: | 70 | public: |
71 | SetDateTime( QWidget *parent=0, const char *name=0, WFlags f=0 ); | 71 | SetDateTime( QWidget *parent=0, const char *name=0, WFlags f=0 ); |
72 | 72 | ||
73 | protected slots: | 73 | protected slots: |
74 | void tzChange( const QString &tz ); | 74 | void tzChange( const QString &tz ); |
75 | void formatChanged(int); | 75 | void formatChanged(int); |
76 | 76 | ||
77 | protected: | 77 | protected: |
78 | void commitTime(); | 78 | void commitTime(); |
79 | void setTime(QDateTime dt); | ||
79 | virtual void accept(); | 80 | virtual void accept(); |
80 | virtual void done(int); | 81 | virtual void done(int); |
81 | 82 | ||
82 | SetTime *timeButton; | 83 | SetTime *timeButton; |
83 | DateButton *dateButton; | 84 | DateButton *dateButton; |
84 | TimeZoneSelector *tz; | 85 | TimeZoneSelector *tz; |
85 | QComboBox *weekStartCombo; | 86 | QComboBox *weekStartCombo; |
86 | QComboBox *ampmCombo; | 87 | QComboBox *ampmCombo; |
87 | QComboBox *dateFormatCombo; | 88 | QComboBox *dateFormatCombo; |
88 | QComboBox *clockAppletCombo; | 89 | QComboBox *clockAppletCombo; |
89 | 90 | ||
90 | // QPEDialogListener *dl; | 91 | // QPEDialogListener *dl; |
91 | 92 | ||
92 | DateFormat date_formats[4]; | 93 | DateFormat date_formats[4]; |
93 | }; | 94 | }; |
94 | 95 | ||