Merge lp:~knitzsche/day-scope/bugfix-1543793-english-moon-phase-names into lp:day-scope

Proposed by Kyle Nitzsche
Status: Merged
Merged at revision: 41
Proposed branch: lp:~knitzsche/day-scope/bugfix-1543793-english-moon-phase-names
Merge into: lp:day-scope
Diff against target: 434 lines (+208/-52)
4 files modified
CMakeLists.txt (+2/-2)
include/query.h (+12/-4)
src/CMakeLists.txt (+6/-6)
src/query.cpp (+188/-40)
To merge this branch: bzr merge lp:~knitzsche/day-scope/bugfix-1543793-english-moon-phase-names
Reviewer Review Type Date Requested Status
Jin Pending
Review via email: mp+285538@code.launchpad.net

Description of the change

lunar phase names are returned from the web api without the expected space in them. So for example we get "fullmoon". Translators have been adding the space. This MR fixes the string after the translation has been retrieved if the string is unchanged: that is, if it is still in English, "fullmoon" becomes "Full moon" (and the same for all eight moon phases).

To post a comment you must log in.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'CMakeLists.txt'
2--- CMakeLists.txt 2016-01-26 07:06:29 +0000
3+++ CMakeLists.txt 2016-02-09 21:55:26 +0000
4@@ -1,4 +1,4 @@
5-set(VERSION "1.2.2")
6+set(VERSION "1.3.1")
7
8 # Supress qDebug() output
9 ADD_DEFINITIONS( -DQT_NO_DEBUG_OUTPUT )
10@@ -66,7 +66,7 @@
11 include(GNUInstallDirs)
12
13 include(FindPkgConfig)
14-pkg_check_modules(UNITY_SCOPES libunity-scopes>=0.4.0 REQUIRED)
15+pkg_check_modules(UNITY_SCOPES libunity-scopes>=0.6.0 REQUIRED)
16
17 include_directories(
18 "${CMAKE_SOURCE_DIR}/include"
19
20=== modified file 'include/query.h'
21--- include/query.h 2015-08-06 06:01:34 +0000
22+++ include/query.h 2016-02-09 21:55:26 +0000
23@@ -49,7 +49,7 @@
24 QCoreApplication *app;
25 QNetworkAccessManager manager;
26 QEventLoop loop;
27- QMap<QString,QString> getSuns();
28+ QMap<QString,QString> getSuns(QFile &, QFile &);
29 QString cacheDir_;
30 QString mUserAgent;
31 QString getLunarPhase(QFile &, QFile &);
32@@ -72,14 +72,22 @@
33
34 QFile lunarData_f;
35 QString lunarData_filename;
36+ QFile sunData_f;
37+ QString sunData_filename;
38 QFile lunarLastRefresh_f;
39 QString lunarLastRefresh_filename;
40+ QFile sunsLastRefresh_f;
41+ QString sunsLastRefresh_filename;
42 QString phase;
43- bool useNetwork(QFile &, QFile &);
44+ QMap<QString,QString> suns;
45+ bool useNetworkLunar(QFile &, QFile &);
46+ bool useNetworkSuns(QFile &, QFile &);
47 QString formatToday();
48 QString parseLunarPhase(QJsonDocument &);
49- void getFromNetwork(QFile &, QFile &);
50- void getFromLocal(QFile &, QFile &);
51+ void getLunarFromNetwork(QFile &, QFile &);
52+ void getLunarFromLocal(QFile &, QFile &);
53+ void getSunsFromNetwork(QFile &, QFile &);
54+ void getSunsFromLocal(QFile &, QFile &);
55 };
56
57 #endif
58
59=== modified file 'src/CMakeLists.txt'
60--- src/CMakeLists.txt 2015-03-30 16:16:43 +0000
61+++ src/CMakeLists.txt 2016-02-09 21:55:26 +0000
62@@ -1,3 +1,9 @@
63+add_library(${SO_NAME} SHARED
64+ preview.cpp
65+ query.cpp
66+ scope.cpp
67+)
68+
69 add_definitions(
70 -DGETTEXT_PACKAGE=\"${PROJECT_NAME}\"
71 -DGETTEXT_LOCALEDIR=\"${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LOCALEDIR}\"
72@@ -5,12 +11,6 @@
73
74 include_directories(${UNITY_SCOPES_INCLUDE_DIRS})
75
76-add_library(${SO_NAME} SHARED
77- preview.cpp
78- query.cpp
79- scope.cpp
80-)
81-
82 find_package(Qt5Core REQUIRED)
83 find_package(Qt5Network REQUIRED)
84 qt5_use_modules(${SO_NAME} Core Network)
85
86=== modified file 'src/query.cpp'
87--- src/query.cpp 2015-09-11 06:24:31 +0000
88+++ src/query.cpp 2016-02-09 21:55:26 +0000
89@@ -84,11 +84,14 @@
90 scope_(scope),
91 cacheDir_(cacheDir_)
92 {
93- qDebug() << "==== cacheDir_ = " << cacheDir_;
94 lunarData_filename = QString("%1/LunarData.json").arg(cacheDir_);
95 lunarData_f.setFileName(lunarData_filename);
96+ sunData_filename = QString("%1/SunData.json").arg(cacheDir_);
97+ sunData_f.setFileName(sunData_filename);
98 lunarLastRefresh_filename = QString("%1/LastRefresh.txt").arg(cacheDir_);
99 lunarLastRefresh_f.setFileName(lunarLastRefresh_filename);
100+ sunsLastRefresh_filename = QString("%1/SunLastRefresh.txt").arg(cacheDir_);
101+ sunsLastRefresh_f.setFileName(sunsLastRefresh_filename);
102 }
103
104 Query::~Query()
105@@ -103,22 +106,74 @@
106 return QString("<strong>%1</strong>").arg(str);
107 }
108
109-bool Query::useNetwork(QFile &data, QFile &lastRefresh)
110-{
111- qDebug() << "==== useNetwork()";
112- data.close();
113- if (!data.open(QIODevice::ReadOnly))
114- {
115- qWarning() << "===== The JSON file missing!";
116- data.close();
117- data.remove();
118- return true;
119- }
120-
121- lastRefresh.close();
122- if (!lastRefresh.open(QIODevice::ReadOnly))
123- {
124- qWarning() << "===== The TXT file missing!";
125+
126+bool Query::useNetworkSuns(QFile &data, QFile &lastRefresh)
127+{
128+
129+ if (!search_metadata().has_location() || !search_metadata().internet_connectivity() == us::QueryMetadata::Connected)
130+ return false;
131+
132+ qDebug() << "==== useNetworkSuns()";
133+ data.close();
134+ if (!data.open(QIODevice::ReadOnly))
135+ {
136+ qWarning() << "===== The suns data JSON file missing";
137+ data.close();
138+ data.remove();
139+ return true;
140+ }
141+ lastRefresh.close();
142+ if (!lastRefresh.open(QIODevice::ReadOnly))
143+ {
144+ qWarning() << "===== The suns last refresh cache file missing.";
145+ lastRefresh.remove();
146+ return true;
147+ }
148+ else
149+ {
150+ QDate today = QDate::currentDate();
151+ QByteArray cachedDate_ba = lastRefresh.readAll();
152+ lastRefresh.close();
153+ QString cachedDate_qstr = QString(cachedDate_ba);
154+ QDate cachedDate = QDate::fromString(cachedDate_qstr.trimmed(), "yyyy-MM-dd");
155+ if (!cachedDate.isValid())
156+ {
157+ qWarning() << "===== Timestamp in last refresh sun data file is invalid!";
158+ lastRefresh.remove();
159+ return true;
160+ }
161+ if (cachedDate != today)
162+ {
163+ qDebug() << "==== Suns cache date not today, so use network.";
164+ lastRefresh.remove();
165+ data.remove();
166+ return true;
167+ }
168+ }
169+ return false;
170+}
171+
172+bool Query::useNetworkLunar(QFile &data, QFile &lastRefresh)
173+{
174+ qDebug() << "==== useNetworkLunar()";
175+
176+
177+ if (!search_metadata().has_location() || !search_metadata().internet_connectivity() == us::QueryMetadata::Connected)
178+ return false;
179+
180+ data.close();
181+ if (!data.open(QIODevice::ReadOnly))
182+ {
183+ qWarning() << "===== The lunar data JSON file cannot be read";
184+ data.close();
185+ data.remove();
186+ return true;
187+ }
188+
189+ lastRefresh.close();
190+ if (!lastRefresh.open(QIODevice::ReadOnly))
191+ {
192+ qWarning() << "===== The lunar last refresh cannot be read.";
193 lastRefresh.remove();
194 return true;
195 }
196@@ -133,13 +188,13 @@
197 QDate rDate_da = QDate::fromString(rDate_qstr.trimmed(), "yyyy-MM-dd");
198 if (!rDate_da.isValid())
199 {
200- qWarning() << "===== Time stamp is invalid!";
201+ qWarning() << "===== The lunar timestamp is invalid!";
202 lastRefresh.remove();
203 return true;
204 }
205 if ((rDate_da == oneMonthAgo) || (rDate_da < oneMonthAgo))
206 {
207- qDebug() << "==== An overdue using of caching result.";
208+ qDebug() << "==== Lunar timestamp indicates we need to refresh cache from web.";
209 lastRefresh.remove();
210 data.remove();
211 return true;
212@@ -150,19 +205,39 @@
213 return false;
214 }
215
216-void Query::getFromNetwork(QFile &data, QFile &lastRefresh)
217-{
218- qDebug() << "==== getFromNetwork()";
219+void Query::getSunsFromNetwork(QFile &sunData, QFile &lastRefresh)
220+{
221+ if (search_metadata().has_location() && search_metadata().internet_connectivity() == us::QueryMetadata::Connected)
222+ {
223+ qDebug() << "==== getSunsFromNetwork()";
224+ if (!haveSignature)
225+ {
226+ makeSignature();
227+ }
228+ suns = getSuns(sunData, lastRefresh);
229+ }
230+ else
231+ {
232+ qDebug() << "==== DAY. no location";
233+ suns["sunrise"] = QString::fromStdString(_("No Information"));
234+ suns["sunset"] = QString::fromStdString(_("No Information"));
235+ }
236+}
237+
238+
239+void Query::getLunarFromNetwork(QFile &lunarData, QFile &lastRefresh)
240+{
241+ qDebug() << "==== getLunarFromNetwork()";
242 if (!haveSignature)
243 {
244 makeSignature();
245 }
246- phase = getLunarPhase(data, lastRefresh);
247+ phase = getLunarPhase(lunarData, lastRefresh);
248 }
249
250-void Query::getFromLocal(QFile &data, QFile &lastRefresh)
251+void Query::getLunarFromLocal(QFile &data, QFile &lastRefresh)
252 {
253- qDebug() << "==== getFromLocal()";
254+ qDebug() << "==== getLunarFromLocal()";
255 data.close();
256 if (data.open(QIODevice::ReadOnly))
257 {
258@@ -183,21 +258,56 @@
259 phase = parseLunarPhase(doc);
260 if (phase.isEmpty())
261 {
262- qWarning() << "!!!!! Weird case, need to check local cache file.";
263- qWarning() << "===== Request moon phase from network.";
264- getFromNetwork(data, lastRefresh);
265+ qWarning() << "===== Lunar cache file invalid. Request moon phase from network.";
266+ getLunarFromNetwork(data, lastRefresh);
267 }
268 }
269 else
270 {
271- getFromNetwork(data, lastRefresh);
272+ getLunarFromNetwork(data, lastRefresh);
273 return;
274 }
275 }
276 }
277 else
278 {
279- getFromNetwork(data, lastRefresh);
280+ getLunarFromNetwork(data, lastRefresh);
281+ }
282+}
283+
284+void Query::getSunsFromLocal(QFile &data, QFile &lastRefresh)
285+{
286+ qDebug() << "==== getSunsFromLocal()";
287+ data.close();
288+ if (data.open(QIODevice::ReadOnly))
289+ {
290+ QByteArray ba = data.readAll();
291+ QJsonParseError err;
292+ QJsonDocument doc = QJsonDocument::fromJson(ba, &err);
293+
294+ if (err.error != QJsonParseError::NoError)
295+ {
296+ qWarning() << "Cannot parse sunset/rise info from cache file: " << err.errorString();
297+ data.remove();
298+ }
299+ else
300+ {
301+ QJsonObject obj = doc.object();
302+ if (obj.contains("sunrise") && obj.contains("sunset"))
303+ {
304+ QString sunr = obj["sunrise"].toString();
305+ suns["sunrise"] = sunr.split(" ")[1];
306+ QString sunset = obj["sunset"].toString();
307+ suns["sunset"] = sunset.split(" ")[1];
308+ } else {
309+ qWarning()<<"Day scope. cached suns file cannot be parsed. Deleting it.";
310+ lastRefresh.remove();
311+ }
312+ }
313+ }
314+ else
315+ {
316+ getLunarFromNetwork(data, lastRefresh);
317 }
318 }
319
320@@ -221,16 +331,23 @@
321 }
322 catch (unity::Exception const &e)
323 {
324- qWarning() << "Location object not found: " << QString::fromStdString(e.what());
325+ qWarning() << "Location object not found and exception is caught: " << QString::fromStdString(e.what());
326 }
327
328- if (useNetwork(lunarData_f, lunarLastRefresh_f))
329- {
330- getFromNetwork(lunarData_f, lunarLastRefresh_f);
331+ if (useNetworkSuns(sunData_f, sunsLastRefresh_f))
332+ {
333+ getSunsFromNetwork(sunData_f, sunsLastRefresh_f);
334+ } else {
335+ getSunsFromLocal(sunData_f, sunsLastRefresh_f);
336+ }
337+
338+ if (useNetworkLunar(lunarData_f, lunarLastRefresh_f))
339+ {
340+ getLunarFromNetwork(lunarData_f, lunarLastRefresh_f);
341 }
342 else
343 {
344- getFromLocal(lunarData_f, lunarLastRefresh_f);
345+ getLunarFromLocal(lunarData_f, lunarLastRefresh_f);
346 }
347
348 if (QString::fromStdString(phase.toStdString()).isEmpty())
349@@ -240,6 +357,23 @@
350 else
351 {
352 phase = _(phase.toStdString().c_str());
353+ //correct english. Note that current translations provide corrections
354+ if (phase == "waningcrescent")
355+ phase = "Waning crescent";
356+ else if (phase == "thirdquarter")
357+ phase = "Third quarter";
358+ else if (phase == "waninggibbous")
359+ phase = "Waning gibbous";
360+ else if (phase == "fullmoon" )
361+ phase = "Full moon";
362+ else if (phase == "waxinggibbous")
363+ phase = "Waxing gibbous";
364+ else if (phase == "firstquarter")
365+ phase = "First quarter";
366+ else if (phase == "waxingcrescent")
367+ phase = "Waxing crescent";
368+ else if (phase == "newmoon")
369+ phase = "New moon";
370 }
371
372 // Initial date info
373@@ -261,7 +395,6 @@
374 string icon_path =
375 QString("%1/images/calendar-app_day-%2.png").arg(QString::fromStdString(scope_.scope_directory())).arg(today.toString("dd")).toStdString();
376 date_res.set_art(icon_path);
377- qDebug() << "====DAY: getSuns. ICON PATH:" << QString::fromStdString(icon_path);
378
379 us::VariantBuilder builder;
380 builder.add_tuple({
381@@ -278,9 +411,8 @@
382
383 if (search_metadata().has_location() && search_metadata().internet_connectivity() == us::QueryMetadata::Connected)
384 {
385- qDebug() << "==== DAY. has location";
386+ qDebug() << "==== we have location && network";
387 us::Location loc = search_metadata().location();
388- QMap<QString,QString> suns = getSuns();
389 if (suns.size() >= 2) {
390 sunrise_time = suns["sunrise"];
391 sunset_time = suns["sunset"];
392@@ -321,9 +453,13 @@
393
394 }
395
396-QMap<QString,QString> Query::getSuns() {
397+QMap<QString,QString> Query::getSuns(QFile &cache_f, QFile &lastRefresh) {
398 qDebug() << "=== DAY getSuns()";
399 qDebug() << "=== DAY lat long before suns: " << lat << " " << lng;
400+
401+ cache_f.remove();
402+ lastRefresh.remove();
403+
404 QString lat_ = lat;
405 QString lng_ = lng;
406 if (lat_.startsWith("-"))
407@@ -348,7 +484,7 @@
408 QEventLoop loop;
409
410 QObject::connect(&manager, SIGNAL(finished(QNetworkReply*)), &loop, SLOT(quit()));
411- QObject::connect(&manager, &QNetworkAccessManager::finished,[&suns, this](QNetworkReply *msg) {
412+ QObject::connect(&manager, &QNetworkAccessManager::finished,[&lastRefresh, &cache_f, &suns, this](QNetworkReply *msg) {
413
414 QByteArray data = msg->readAll();
415 QJsonParseError err;
416@@ -356,6 +492,18 @@
417 if (err.error != QJsonParseError::NoError)
418 qCritical() << "Failed to parse server data: " << err.errorString();
419
420+ if (cache_f.open(QIODevice::ReadWrite | QIODevice::Truncate | QIODevice::Text))
421+ {
422+ cache_f.write(doc.toJson());
423+ cache_f.close();
424+ QDate today = QDate::currentDate();
425+ QString today_qstr = today.toString("yyyy-MM-dd");
426+ if (lastRefresh.open(QIODevice::ReadWrite | QIODevice::Truncate))
427+ {
428+ lastRefresh.write(today_qstr.toUtf8());
429+ lastRefresh.close();
430+ }
431+ }
432 QJsonObject obj = doc.object();
433 QString sunr = obj["sunrise"].toString();
434 suns["sunrise"] = sunr.split(" ")[1];

Subscribers

People subscribed via source and target branches

to all changes: