Merge lp:~rsalveti/location-service/syncing-vivid into lp:location-service/rtm-14.09

Proposed by Ricardo Salveti on 2015-05-03
Status: Merged
Approved by: Manuel de la Peña on 2015-05-04
Approved revision: 194
Merged at revision: 171
Proposed branch: lp:~rsalveti/location-service/syncing-vivid
Merge into: lp:location-service/rtm-14.09
Diff against target: 2691 lines (+1179/-380)
82 files modified
debian/changelog (+69/-0)
po/aa.po (+27/-0)
po/af.po (+27/-0)
po/am.po (+2/-2)
po/ar.po (+2/-2)
po/ast.po (+2/-2)
po/az.po (+4/-4)
po/bg.po (+27/-0)
po/bs.po (+2/-2)
po/ca.po (+2/-2)
po/ca@valencia.po (+2/-2)
po/cs.po (+6/-6)
po/da.po (+2/-2)
po/de.po (+2/-2)
po/el.po (+2/-2)
po/en_AU.po (+3/-3)
po/en_GB.po (+2/-2)
po/es.po (+2/-2)
po/eu.po (+2/-2)
po/fa.po (+2/-2)
po/fi.po (+2/-2)
po/fr.po (+2/-2)
po/fr_CA.po (+2/-2)
po/ga.po (+2/-2)
po/gd.po (+2/-2)
po/gl.po (+2/-2)
po/he.po (+2/-2)
po/hr.po (+4/-4)
po/hu.po (+2/-2)
po/ia.po (+27/-0)
po/id.po (+2/-2)
po/is.po (+2/-2)
po/it.po (+2/-2)
po/ja.po (+2/-2)
po/km.po (+2/-2)
po/ko.po (+2/-2)
po/ml.po (+27/-0)
po/mr.po (+27/-0)
po/ms.po (+2/-2)
po/nb.po (+2/-2)
po/nl.po (+2/-2)
po/ny.po (+27/-0)
po/oc.po (+2/-2)
po/pa.po (+2/-2)
po/pl.po (+4/-4)
po/pt.po (+3/-3)
po/pt_BR.po (+2/-2)
po/ro.po (+2/-2)
po/ru.po (+2/-2)
po/sk.po (+27/-0)
po/sl.po (+2/-2)
po/sq.po (+27/-0)
po/sr.po (+2/-2)
po/sv.po (+8/-7)
po/ta.po (+2/-2)
po/tg.po (+27/-0)
po/th.po (+2/-2)
po/tr.po (+2/-2)
po/ug.po (+2/-2)
po/uk.po (+2/-2)
po/vi.po (+2/-2)
po/zh_CN.po (+2/-2)
po/zh_TW.po (+6/-6)
src/location_service/com/ubuntu/location/CMakeLists.txt (+1/-0)
src/location_service/com/ubuntu/location/connectivity/ofono_nm_connectivity_manager.cpp (+37/-11)
src/location_service/com/ubuntu/location/connectivity/ofono_nm_connectivity_manager.h (+20/-2)
src/location_service/com/ubuntu/location/engine.cpp (+5/-2)
src/location_service/com/ubuntu/location/engine.h (+3/-0)
src/location_service/com/ubuntu/location/providers/geoclue/provider.cpp (+89/-122)
src/location_service/com/ubuntu/location/providers/geoclue/provider.h (+50/-12)
src/location_service/com/ubuntu/location/providers/gps/android_hardware_abstraction_layer.h (+1/-1)
src/location_service/com/ubuntu/location/providers/gps/provider.cpp (+8/-14)
src/location_service/com/ubuntu/location/providers/gps/provider.h (+2/-2)
src/location_service/com/ubuntu/location/providers/remote/provider.cpp (+1/-0)
src/location_service/com/ubuntu/location/providers/skyhook/provider.cpp (+39/-73)
src/location_service/com/ubuntu/location/providers/skyhook/provider.h (+33/-12)
src/location_service/com/ubuntu/location/service/daemon.cpp (+27/-4)
src/location_service/com/ubuntu/location/time_based_update_policy.cpp (+121/-0)
src/location_service/com/ubuntu/location/time_based_update_policy.h (+70/-0)
src/location_service/com/ubuntu/location/update_policy.h (+75/-0)
tests/CMakeLists.txt (+1/-0)
tests/time_based_update_policy_test.cpp (+131/-0)
To merge this branch: bzr merge lp:~rsalveti/location-service/syncing-vivid
Reviewer Review Type Date Requested Status
Manuel de la Peña (community) Approve on 2015-05-04
Thomas Voß (community) 2015-05-03 Approve on 2015-05-04
Review via email: mp+258127@code.launchpad.net

Commit Message

* Make sure that cached modems are considered as well when calculating connection characteristics.
* Increase default timeout for downloading gps xtra data. Fixes: #1447161
* Improve the selection of the bag of providers to ensure that the locations used are within a reasonable time margin.
* Remove the pimpl implementation from the providers and hide their public headers because they should only be used within the project.
* If an exception is thrown from the io_executor run method it must be caught, logger and continued with the main loop.

Description of the Change

Sync from Vivid.

To post a comment you must log in.
194. By Ricardo Salveti on 2015-05-03

* Make sure that cached modems are considered as well when calculating
  connection characteristics (LP: #1441619)
* Improve the selection of the bag of providers to ensure that the
  locations used are within a reasonable time margin.
* Remove the pimpl implementation from the providers and hide their
  public headers because they should only be used within the project.
* If an exception is thrown from the io_executor run method it must be
  caught, logger and continued with the main loop.
* Increase default timeout for downloading gps xtra data.
  (LP: #1447161)

Thomas Voß (thomas-voss) wrote :

Not sure this change is included here, but NM broke its dbus interface for the data type of the LastSeen timestamp from rtm -> vivid. If this is meant to land for RTM, we have to be very careful about that particular change.

review: Needs Information
Ricardo Salveti (rsalveti) wrote :

Rev 193 is that revert.

Thomas Voß (thomas-voss) wrote :

With that: LGTM.

review: Approve
Manuel de la Peña (mandel) wrote :

Looking good, awesome to get this to RTM!

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'debian/changelog'
2--- debian/changelog 2015-02-13 13:54:26 +0000
3+++ debian/changelog 2015-05-03 15:50:48 +0000
4@@ -1,3 +1,72 @@
5+location-service (2.1+15.04.20150427.1-0ubuntu2) UNRELEASED; urgency=medium
6+
7+ [ Manuel de la Pena ]
8+ * Make sure that cached modems are considered as well when calculating
9+ connection characteristics (LP: #1441619)
10+ * Improve the selection of the bag of providers to ensure that the
11+ locations used are within a reasonable time margin.
12+ * Remove the pimpl implementation from the providers and hide their
13+ public headers because they should only be used within the project.
14+ * If an exception is thrown from the io_executor run method it must be
15+ caught, logger and continued with the main loop.
16+
17+ [ Thomas Voß ]
18+ * Increase default timeout for downloading gps xtra data.
19+ (LP: #1447161)
20+
21+ -- Ricardo Salveti de Araujo <ricardo.salveti@canonical.com> Sun, 03 May 2015 10:46:33 -0500
22+
23+location-service (2.1+15.04.20150427.1-0ubuntu1) vivid; urgency=medium
24+
25+ [ CI Train Bot ]
26+ * New rebuild forced.
27+
28+ [ Manuel de la Pena ]
29+ * Make sure that cached modems are considered as well when calculating
30+ connection characteristics.
31+
32+ -- CI Train Bot <ci-train-bot@canonical.com> Mon, 27 Apr 2015 22:55:52 +0000
33+
34+location-service (2.1+15.04.20150424-0ubuntu1) vivid; urgency=medium
35+
36+ [ CI Train Bot ]
37+ * New rebuild forced.
38+
39+ [ Manuel de la Pena ]
40+ * Improve the selection of the bag of providers to ensure that the
41+ locations used are within a reasonable time margin.
42+ * Remove the pimpl implementation from the providers and hide their
43+ public headers because they should only be used within the project.
44+
45+ [ Thomas Voß ]
46+ * Increase default timeout for downloading gps xtra data. (LP:
47+ #1447161)
48+
49+ -- CI Train Bot <ci-train-bot@canonical.com> Fri, 24 Apr 2015 14:46:59 +0000
50+
51+location-service (2.1+15.04.20150417-0ubuntu1) vivid; urgency=medium
52+
53+ [ CI Train Bot ]
54+ * New rebuild forced.
55+
56+ [ Manuel de la Pena ]
57+ * If an exception is thrown from the io_executor run method it must be
58+ caught, logger and continued with the main loop.
59+
60+ -- CI Train Bot <ci-train-bot@canonical.com> Fri, 17 Apr 2015 09:45:52 +0000
61+
62+location-service (2.1+15.04.20150226-0ubuntu1) vivid; urgency=medium
63+
64+ [ CI Train Bot ]
65+ * Launchpad automatic translations update. added: po/af.po po/bg.po
66+ po/sk.po
67+ * New rebuild forced.
68+
69+ [ thomas-voss ]
70+ * Account for dbus interface breakage in NM from 0.9.8.8 -> 0.9.10.0.
71+
72+ -- CI Train Bot <ci-train-bot@canonical.com> Thu, 26 Feb 2015 19:53:44 +0000
73+
74 location-service (2.1+15.04.20150213-0ubuntu1) vivid; urgency=medium
75
76 [ thomas-voss ]
77
78=== removed directory 'include/location_service/com/ubuntu/location/providers/geoclue'
79=== removed directory 'include/location_service/com/ubuntu/location/providers/skyhook'
80=== added file 'po/aa.po'
81--- po/aa.po 1970-01-01 00:00:00 +0000
82+++ po/aa.po 2015-05-03 15:50:48 +0000
83@@ -0,0 +1,27 @@
84+# Afar translation for location-service
85+# Copyright (c) 2015 Rosetta Contributors and Canonical Ltd 2015
86+# This file is distributed under the same license as the location-service package.
87+# FIRST AUTHOR <EMAIL@ADDRESS>, 2015.
88+#
89+msgid ""
90+msgstr ""
91+"Project-Id-Version: location-service\n"
92+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
93+"POT-Creation-Date: 2014-09-19 01:04+0200\n"
94+"PO-Revision-Date: 2015-04-05 19:35+0000\n"
95+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
96+"Language-Team: Afar <aa@li.org>\n"
97+"MIME-Version: 1.0\n"
98+"Content-Type: text/plain; charset=UTF-8\n"
99+"Content-Transfer-Encoding: 8bit\n"
100+"X-Launchpad-Export-Date: 2015-04-25 05:37+0000\n"
101+"X-Generator: Launchpad (build 17430)\n"
102+
103+#: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:170
104+msgid "An unconfined application wants to access your current location."
105+msgstr "Deber sinni abnisso away elle tan arac kok taaxigem faxxa."
106+
107+#: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:173
108+#, boost-format
109+msgid "%1% wants to access your current location."
110+msgstr "%1% away elle tan arac kok yaaxigem faxa."
111
112=== added file 'po/af.po'
113--- po/af.po 1970-01-01 00:00:00 +0000
114+++ po/af.po 2015-05-03 15:50:48 +0000
115@@ -0,0 +1,27 @@
116+# Afrikaans translation for location-service
117+# Copyright (c) 2015 Rosetta Contributors and Canonical Ltd 2015
118+# This file is distributed under the same license as the location-service package.
119+# FIRST AUTHOR <EMAIL@ADDRESS>, 2015.
120+#
121+msgid ""
122+msgstr ""
123+"Project-Id-Version: location-service\n"
124+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
125+"POT-Creation-Date: 2014-09-19 01:04+0200\n"
126+"PO-Revision-Date: 2015-02-25 20:57+0000\n"
127+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
128+"Language-Team: Afrikaans <af@li.org>\n"
129+"MIME-Version: 1.0\n"
130+"Content-Type: text/plain; charset=UTF-8\n"
131+"Content-Transfer-Encoding: 8bit\n"
132+"X-Launchpad-Export-Date: 2015-04-25 05:37+0000\n"
133+"X-Generator: Launchpad (build 17430)\n"
134+
135+#: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:170
136+msgid "An unconfined application wants to access your current location."
137+msgstr "'n Onbegrensde program wil toegang to jou posisie hê."
138+
139+#: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:173
140+#, boost-format
141+msgid "%1% wants to access your current location."
142+msgstr "%1% wil toegang to jou posisie hê."
143
144=== modified file 'po/am.po'
145--- po/am.po 2015-01-15 06:05:52 +0000
146+++ po/am.po 2015-05-03 15:50:48 +0000
147@@ -14,8 +14,8 @@
148 "MIME-Version: 1.0\n"
149 "Content-Type: text/plain; charset=UTF-8\n"
150 "Content-Transfer-Encoding: 8bit\n"
151-"X-Launchpad-Export-Date: 2015-01-15 06:05+0000\n"
152-"X-Generator: Launchpad (build 17303)\n"
153+"X-Launchpad-Export-Date: 2015-04-25 05:37+0000\n"
154+"X-Generator: Launchpad (build 17430)\n"
155
156 #: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:170
157 msgid "An unconfined application wants to access your current location."
158
159=== modified file 'po/ar.po'
160--- po/ar.po 2015-01-15 06:05:52 +0000
161+++ po/ar.po 2015-05-03 15:50:48 +0000
162@@ -14,8 +14,8 @@
163 "MIME-Version: 1.0\n"
164 "Content-Type: text/plain; charset=UTF-8\n"
165 "Content-Transfer-Encoding: 8bit\n"
166-"X-Launchpad-Export-Date: 2015-01-15 06:05+0000\n"
167-"X-Generator: Launchpad (build 17303)\n"
168+"X-Launchpad-Export-Date: 2015-04-25 05:37+0000\n"
169+"X-Generator: Launchpad (build 17430)\n"
170
171 #: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:170
172 msgid "An unconfined application wants to access your current location."
173
174=== modified file 'po/ast.po'
175--- po/ast.po 2015-01-15 06:05:52 +0000
176+++ po/ast.po 2015-05-03 15:50:48 +0000
177@@ -14,8 +14,8 @@
178 "MIME-Version: 1.0\n"
179 "Content-Type: text/plain; charset=UTF-8\n"
180 "Content-Transfer-Encoding: 8bit\n"
181-"X-Launchpad-Export-Date: 2015-01-15 06:05+0000\n"
182-"X-Generator: Launchpad (build 17303)\n"
183+"X-Launchpad-Export-Date: 2015-04-25 05:37+0000\n"
184+"X-Generator: Launchpad (build 17430)\n"
185
186 #: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:170
187 msgid "An unconfined application wants to access your current location."
188
189=== modified file 'po/az.po'
190--- po/az.po 2015-01-28 06:29:29 +0000
191+++ po/az.po 2015-05-03 15:50:48 +0000
192@@ -14,14 +14,14 @@
193 "MIME-Version: 1.0\n"
194 "Content-Type: text/plain; charset=UTF-8\n"
195 "Content-Transfer-Encoding: 8bit\n"
196-"X-Launchpad-Export-Date: 2015-01-28 06:29+0000\n"
197-"X-Generator: Launchpad (build 17306)\n"
198+"X-Launchpad-Export-Date: 2015-04-25 05:37+0000\n"
199+"X-Generator: Launchpad (build 17430)\n"
200
201 #: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:170
202 msgid "An unconfined application wants to access your current location."
203-msgstr ""
204+msgstr "Məhdudiyyətsiz tətbiq sizin hazırki məkanınız üçün icazə istəyir."
205
206 #: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:173
207 #, boost-format
208 msgid "%1% wants to access your current location."
209-msgstr ""
210+msgstr "%1% sizin hazırki məkanınız üçün icazə istəyir."
211
212=== added file 'po/bg.po'
213--- po/bg.po 1970-01-01 00:00:00 +0000
214+++ po/bg.po 2015-05-03 15:50:48 +0000
215@@ -0,0 +1,27 @@
216+# Bulgarian translation for location-service
217+# Copyright (c) 2015 Rosetta Contributors and Canonical Ltd 2015
218+# This file is distributed under the same license as the location-service package.
219+# FIRST AUTHOR <EMAIL@ADDRESS>, 2015.
220+#
221+msgid ""
222+msgstr ""
223+"Project-Id-Version: location-service\n"
224+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
225+"POT-Creation-Date: 2014-09-19 01:04+0200\n"
226+"PO-Revision-Date: 2015-02-23 11:35+0000\n"
227+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
228+"Language-Team: Bulgarian <bg@li.org>\n"
229+"MIME-Version: 1.0\n"
230+"Content-Type: text/plain; charset=UTF-8\n"
231+"Content-Transfer-Encoding: 8bit\n"
232+"X-Launchpad-Export-Date: 2015-04-25 05:37+0000\n"
233+"X-Generator: Launchpad (build 17430)\n"
234+
235+#: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:170
236+msgid "An unconfined application wants to access your current location."
237+msgstr ""
238+
239+#: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:173
240+#, boost-format
241+msgid "%1% wants to access your current location."
242+msgstr ""
243
244=== modified file 'po/bs.po'
245--- po/bs.po 2015-01-15 06:05:52 +0000
246+++ po/bs.po 2015-05-03 15:50:48 +0000
247@@ -14,8 +14,8 @@
248 "MIME-Version: 1.0\n"
249 "Content-Type: text/plain; charset=UTF-8\n"
250 "Content-Transfer-Encoding: 8bit\n"
251-"X-Launchpad-Export-Date: 2015-01-15 06:05+0000\n"
252-"X-Generator: Launchpad (build 17303)\n"
253+"X-Launchpad-Export-Date: 2015-04-25 05:37+0000\n"
254+"X-Generator: Launchpad (build 17430)\n"
255
256 #: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:170
257 msgid "An unconfined application wants to access your current location."
258
259=== modified file 'po/ca.po'
260--- po/ca.po 2015-01-15 06:05:52 +0000
261+++ po/ca.po 2015-05-03 15:50:48 +0000
262@@ -14,8 +14,8 @@
263 "MIME-Version: 1.0\n"
264 "Content-Type: text/plain; charset=UTF-8\n"
265 "Content-Transfer-Encoding: 8bit\n"
266-"X-Launchpad-Export-Date: 2015-01-15 06:05+0000\n"
267-"X-Generator: Launchpad (build 17303)\n"
268+"X-Launchpad-Export-Date: 2015-04-25 05:37+0000\n"
269+"X-Generator: Launchpad (build 17430)\n"
270
271 #: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:170
272 msgid "An unconfined application wants to access your current location."
273
274=== modified file 'po/ca@valencia.po'
275--- po/ca@valencia.po 2015-01-15 06:05:52 +0000
276+++ po/ca@valencia.po 2015-05-03 15:50:48 +0000
277@@ -14,8 +14,8 @@
278 "MIME-Version: 1.0\n"
279 "Content-Type: text/plain; charset=UTF-8\n"
280 "Content-Transfer-Encoding: 8bit\n"
281-"X-Launchpad-Export-Date: 2015-01-15 06:05+0000\n"
282-"X-Generator: Launchpad (build 17303)\n"
283+"X-Launchpad-Export-Date: 2015-04-25 05:37+0000\n"
284+"X-Generator: Launchpad (build 17430)\n"
285
286 #: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:170
287 msgid "An unconfined application wants to access your current location."
288
289=== modified file 'po/cs.po'
290--- po/cs.po 2015-01-15 06:05:52 +0000
291+++ po/cs.po 2015-05-03 15:50:48 +0000
292@@ -8,20 +8,20 @@
293 "Project-Id-Version: location-service\n"
294 "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
295 "POT-Creation-Date: 2014-09-19 01:04+0200\n"
296-"PO-Revision-Date: 2014-10-12 18:54+0000\n"
297-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
298+"PO-Revision-Date: 2015-02-16 07:46+0000\n"
299+"Last-Translator: prom <mmatej@yahoo.com>\n"
300 "Language-Team: Czech <cs@li.org>\n"
301 "MIME-Version: 1.0\n"
302 "Content-Type: text/plain; charset=UTF-8\n"
303 "Content-Transfer-Encoding: 8bit\n"
304-"X-Launchpad-Export-Date: 2015-01-15 06:05+0000\n"
305-"X-Generator: Launchpad (build 17303)\n"
306+"X-Launchpad-Export-Date: 2015-04-25 05:37+0000\n"
307+"X-Generator: Launchpad (build 17430)\n"
308
309 #: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:170
310 msgid "An unconfined application wants to access your current location."
311-msgstr ""
312+msgstr "Neznámá aplikace požaduje přístup k vaší současné poloze."
313
314 #: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:173
315 #, boost-format
316 msgid "%1% wants to access your current location."
317-msgstr ""
318+msgstr "%1% požaduje přístup k vaší současné poloze."
319
320=== modified file 'po/da.po'
321--- po/da.po 2015-01-15 06:05:52 +0000
322+++ po/da.po 2015-05-03 15:50:48 +0000
323@@ -14,8 +14,8 @@
324 "MIME-Version: 1.0\n"
325 "Content-Type: text/plain; charset=UTF-8\n"
326 "Content-Transfer-Encoding: 8bit\n"
327-"X-Launchpad-Export-Date: 2015-01-15 06:05+0000\n"
328-"X-Generator: Launchpad (build 17303)\n"
329+"X-Launchpad-Export-Date: 2015-04-25 05:37+0000\n"
330+"X-Generator: Launchpad (build 17430)\n"
331
332 #: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:170
333 msgid "An unconfined application wants to access your current location."
334
335=== modified file 'po/de.po'
336--- po/de.po 2015-01-15 06:05:52 +0000
337+++ po/de.po 2015-05-03 15:50:48 +0000
338@@ -13,8 +13,8 @@
339 "MIME-Version: 1.0\n"
340 "Content-Type: text/plain; charset=UTF-8\n"
341 "Content-Transfer-Encoding: 8bit\n"
342-"X-Launchpad-Export-Date: 2015-01-15 06:05+0000\n"
343-"X-Generator: Launchpad (build 17303)\n"
344+"X-Launchpad-Export-Date: 2015-04-25 05:37+0000\n"
345+"X-Generator: Launchpad (build 17430)\n"
346 "Language: DE\n"
347
348 #: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:170
349
350=== modified file 'po/el.po'
351--- po/el.po 2015-01-15 06:05:52 +0000
352+++ po/el.po 2015-05-03 15:50:48 +0000
353@@ -14,8 +14,8 @@
354 "MIME-Version: 1.0\n"
355 "Content-Type: text/plain; charset=UTF-8\n"
356 "Content-Transfer-Encoding: 8bit\n"
357-"X-Launchpad-Export-Date: 2015-01-15 06:05+0000\n"
358-"X-Generator: Launchpad (build 17303)\n"
359+"X-Launchpad-Export-Date: 2015-04-25 05:37+0000\n"
360+"X-Generator: Launchpad (build 17430)\n"
361
362 #: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:170
363 msgid "An unconfined application wants to access your current location."
364
365=== modified file 'po/en_AU.po'
366--- po/en_AU.po 2015-01-15 06:05:52 +0000
367+++ po/en_AU.po 2015-05-03 15:50:48 +0000
368@@ -14,12 +14,12 @@
369 "MIME-Version: 1.0\n"
370 "Content-Type: text/plain; charset=UTF-8\n"
371 "Content-Transfer-Encoding: 8bit\n"
372-"X-Launchpad-Export-Date: 2015-01-15 06:05+0000\n"
373-"X-Generator: Launchpad (build 17303)\n"
374+"X-Launchpad-Export-Date: 2015-04-25 05:37+0000\n"
375+"X-Generator: Launchpad (build 17430)\n"
376
377 #: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:170
378 msgid "An unconfined application wants to access your current location."
379-msgstr ""
380+msgstr "An unconfined application wants to access your current location."
381
382 #: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:173
383 #, boost-format
384
385=== modified file 'po/en_GB.po'
386--- po/en_GB.po 2015-01-15 06:05:52 +0000
387+++ po/en_GB.po 2015-05-03 15:50:48 +0000
388@@ -14,8 +14,8 @@
389 "MIME-Version: 1.0\n"
390 "Content-Type: text/plain; charset=UTF-8\n"
391 "Content-Transfer-Encoding: 8bit\n"
392-"X-Launchpad-Export-Date: 2015-01-15 06:05+0000\n"
393-"X-Generator: Launchpad (build 17303)\n"
394+"X-Launchpad-Export-Date: 2015-04-25 05:37+0000\n"
395+"X-Generator: Launchpad (build 17430)\n"
396
397 #: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:170
398 msgid "An unconfined application wants to access your current location."
399
400=== modified file 'po/es.po'
401--- po/es.po 2015-01-15 06:05:52 +0000
402+++ po/es.po 2015-05-03 15:50:48 +0000
403@@ -14,8 +14,8 @@
404 "MIME-Version: 1.0\n"
405 "Content-Type: text/plain; charset=UTF-8\n"
406 "Content-Transfer-Encoding: 8bit\n"
407-"X-Launchpad-Export-Date: 2015-01-15 06:05+0000\n"
408-"X-Generator: Launchpad (build 17303)\n"
409+"X-Launchpad-Export-Date: 2015-04-25 05:37+0000\n"
410+"X-Generator: Launchpad (build 17430)\n"
411
412 #: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:170
413 msgid "An unconfined application wants to access your current location."
414
415=== modified file 'po/eu.po'
416--- po/eu.po 2015-01-22 06:45:44 +0000
417+++ po/eu.po 2015-05-03 15:50:48 +0000
418@@ -14,8 +14,8 @@
419 "MIME-Version: 1.0\n"
420 "Content-Type: text/plain; charset=UTF-8\n"
421 "Content-Transfer-Encoding: 8bit\n"
422-"X-Launchpad-Export-Date: 2015-01-22 06:45+0000\n"
423-"X-Generator: Launchpad (build 17306)\n"
424+"X-Launchpad-Export-Date: 2015-04-25 05:37+0000\n"
425+"X-Generator: Launchpad (build 17430)\n"
426
427 #: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:170
428 msgid "An unconfined application wants to access your current location."
429
430=== modified file 'po/fa.po'
431--- po/fa.po 2015-01-15 06:05:52 +0000
432+++ po/fa.po 2015-05-03 15:50:48 +0000
433@@ -14,8 +14,8 @@
434 "MIME-Version: 1.0\n"
435 "Content-Type: text/plain; charset=UTF-8\n"
436 "Content-Transfer-Encoding: 8bit\n"
437-"X-Launchpad-Export-Date: 2015-01-15 06:05+0000\n"
438-"X-Generator: Launchpad (build 17303)\n"
439+"X-Launchpad-Export-Date: 2015-04-25 05:37+0000\n"
440+"X-Generator: Launchpad (build 17430)\n"
441
442 #: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:170
443 msgid "An unconfined application wants to access your current location."
444
445=== modified file 'po/fi.po'
446--- po/fi.po 2015-01-15 06:05:52 +0000
447+++ po/fi.po 2015-05-03 15:50:48 +0000
448@@ -14,8 +14,8 @@
449 "MIME-Version: 1.0\n"
450 "Content-Type: text/plain; charset=UTF-8\n"
451 "Content-Transfer-Encoding: 8bit\n"
452-"X-Launchpad-Export-Date: 2015-01-15 06:05+0000\n"
453-"X-Generator: Launchpad (build 17303)\n"
454+"X-Launchpad-Export-Date: 2015-04-25 05:37+0000\n"
455+"X-Generator: Launchpad (build 17430)\n"
456
457 #: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:170
458 msgid "An unconfined application wants to access your current location."
459
460=== modified file 'po/fr.po'
461--- po/fr.po 2015-01-15 06:05:52 +0000
462+++ po/fr.po 2015-05-03 15:50:48 +0000
463@@ -14,8 +14,8 @@
464 "MIME-Version: 1.0\n"
465 "Content-Type: text/plain; charset=UTF-8\n"
466 "Content-Transfer-Encoding: 8bit\n"
467-"X-Launchpad-Export-Date: 2015-01-15 06:05+0000\n"
468-"X-Generator: Launchpad (build 17303)\n"
469+"X-Launchpad-Export-Date: 2015-04-25 05:37+0000\n"
470+"X-Generator: Launchpad (build 17430)\n"
471
472 #: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:170
473 msgid "An unconfined application wants to access your current location."
474
475=== modified file 'po/fr_CA.po'
476--- po/fr_CA.po 2015-01-15 06:05:52 +0000
477+++ po/fr_CA.po 2015-05-03 15:50:48 +0000
478@@ -14,8 +14,8 @@
479 "MIME-Version: 1.0\n"
480 "Content-Type: text/plain; charset=UTF-8\n"
481 "Content-Transfer-Encoding: 8bit\n"
482-"X-Launchpad-Export-Date: 2015-01-15 06:05+0000\n"
483-"X-Generator: Launchpad (build 17303)\n"
484+"X-Launchpad-Export-Date: 2015-04-25 05:37+0000\n"
485+"X-Generator: Launchpad (build 17430)\n"
486
487 #: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:170
488 msgid "An unconfined application wants to access your current location."
489
490=== modified file 'po/ga.po'
491--- po/ga.po 2015-01-15 06:05:52 +0000
492+++ po/ga.po 2015-05-03 15:50:48 +0000
493@@ -14,8 +14,8 @@
494 "MIME-Version: 1.0\n"
495 "Content-Type: text/plain; charset=UTF-8\n"
496 "Content-Transfer-Encoding: 8bit\n"
497-"X-Launchpad-Export-Date: 2015-01-15 06:05+0000\n"
498-"X-Generator: Launchpad (build 17303)\n"
499+"X-Launchpad-Export-Date: 2015-04-25 05:37+0000\n"
500+"X-Generator: Launchpad (build 17430)\n"
501
502 #: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:170
503 msgid "An unconfined application wants to access your current location."
504
505=== modified file 'po/gd.po'
506--- po/gd.po 2015-01-15 06:05:52 +0000
507+++ po/gd.po 2015-05-03 15:50:48 +0000
508@@ -14,8 +14,8 @@
509 "MIME-Version: 1.0\n"
510 "Content-Type: text/plain; charset=UTF-8\n"
511 "Content-Transfer-Encoding: 8bit\n"
512-"X-Launchpad-Export-Date: 2015-01-15 06:05+0000\n"
513-"X-Generator: Launchpad (build 17303)\n"
514+"X-Launchpad-Export-Date: 2015-04-25 05:37+0000\n"
515+"X-Generator: Launchpad (build 17430)\n"
516 "Language: gd\n"
517
518 #: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:170
519
520=== modified file 'po/gl.po'
521--- po/gl.po 2015-01-15 06:05:52 +0000
522+++ po/gl.po 2015-05-03 15:50:48 +0000
523@@ -14,8 +14,8 @@
524 "MIME-Version: 1.0\n"
525 "Content-Type: text/plain; charset=UTF-8\n"
526 "Content-Transfer-Encoding: 8bit\n"
527-"X-Launchpad-Export-Date: 2015-01-15 06:05+0000\n"
528-"X-Generator: Launchpad (build 17303)\n"
529+"X-Launchpad-Export-Date: 2015-04-25 05:37+0000\n"
530+"X-Generator: Launchpad (build 17430)\n"
531
532 #: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:170
533 msgid "An unconfined application wants to access your current location."
534
535=== modified file 'po/he.po'
536--- po/he.po 2015-01-15 06:05:52 +0000
537+++ po/he.po 2015-05-03 15:50:48 +0000
538@@ -14,8 +14,8 @@
539 "MIME-Version: 1.0\n"
540 "Content-Type: text/plain; charset=UTF-8\n"
541 "Content-Transfer-Encoding: 8bit\n"
542-"X-Launchpad-Export-Date: 2015-01-15 06:05+0000\n"
543-"X-Generator: Launchpad (build 17303)\n"
544+"X-Launchpad-Export-Date: 2015-04-25 05:37+0000\n"
545+"X-Generator: Launchpad (build 17430)\n"
546
547 #: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:170
548 msgid "An unconfined application wants to access your current location."
549
550=== modified file 'po/hr.po'
551--- po/hr.po 2015-01-15 06:05:52 +0000
552+++ po/hr.po 2015-05-03 15:50:48 +0000
553@@ -14,14 +14,14 @@
554 "MIME-Version: 1.0\n"
555 "Content-Type: text/plain; charset=UTF-8\n"
556 "Content-Transfer-Encoding: 8bit\n"
557-"X-Launchpad-Export-Date: 2015-01-15 06:05+0000\n"
558-"X-Generator: Launchpad (build 17303)\n"
559+"X-Launchpad-Export-Date: 2015-04-25 05:37+0000\n"
560+"X-Generator: Launchpad (build 17430)\n"
561
562 #: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:170
563 msgid "An unconfined application wants to access your current location."
564-msgstr ""
565+msgstr "Nepoznata aplikacija želi pristupiti vašoj trenutnoj lokaciji."
566
567 #: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:173
568 #, boost-format
569 msgid "%1% wants to access your current location."
570-msgstr ""
571+msgstr "%1% želi pristupiti vašoj trenutnoj lokaciji."
572
573=== modified file 'po/hu.po'
574--- po/hu.po 2015-01-15 06:05:52 +0000
575+++ po/hu.po 2015-05-03 15:50:48 +0000
576@@ -14,8 +14,8 @@
577 "MIME-Version: 1.0\n"
578 "Content-Type: text/plain; charset=UTF-8\n"
579 "Content-Transfer-Encoding: 8bit\n"
580-"X-Launchpad-Export-Date: 2015-01-15 06:05+0000\n"
581-"X-Generator: Launchpad (build 17303)\n"
582+"X-Launchpad-Export-Date: 2015-04-25 05:37+0000\n"
583+"X-Generator: Launchpad (build 17430)\n"
584
585 #: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:170
586 msgid "An unconfined application wants to access your current location."
587
588=== added file 'po/ia.po'
589--- po/ia.po 1970-01-01 00:00:00 +0000
590+++ po/ia.po 2015-05-03 15:50:48 +0000
591@@ -0,0 +1,27 @@
592+# Interlingua translation for location-service
593+# Copyright (c) 2015 Rosetta Contributors and Canonical Ltd 2015
594+# This file is distributed under the same license as the location-service package.
595+# FIRST AUTHOR <EMAIL@ADDRESS>, 2015.
596+#
597+msgid ""
598+msgstr ""
599+"Project-Id-Version: location-service\n"
600+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
601+"POT-Creation-Date: 2014-09-19 01:04+0200\n"
602+"PO-Revision-Date: 2015-04-24 09:06+0000\n"
603+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
604+"Language-Team: Interlingua <ia@li.org>\n"
605+"MIME-Version: 1.0\n"
606+"Content-Type: text/plain; charset=UTF-8\n"
607+"Content-Transfer-Encoding: 8bit\n"
608+"X-Launchpad-Export-Date: 2015-04-25 05:37+0000\n"
609+"X-Generator: Launchpad (build 17430)\n"
610+
611+#: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:170
612+msgid "An unconfined application wants to access your current location."
613+msgstr "Un application non cognoscite vole acceder a tu localisation actual"
614+
615+#: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:173
616+#, boost-format
617+msgid "%1% wants to access your current location."
618+msgstr "%1% vole haber access a tu localisation actual"
619
620=== modified file 'po/id.po'
621--- po/id.po 2015-01-15 06:05:52 +0000
622+++ po/id.po 2015-05-03 15:50:48 +0000
623@@ -14,8 +14,8 @@
624 "MIME-Version: 1.0\n"
625 "Content-Type: text/plain; charset=UTF-8\n"
626 "Content-Transfer-Encoding: 8bit\n"
627-"X-Launchpad-Export-Date: 2015-01-15 06:05+0000\n"
628-"X-Generator: Launchpad (build 17303)\n"
629+"X-Launchpad-Export-Date: 2015-04-25 05:37+0000\n"
630+"X-Generator: Launchpad (build 17430)\n"
631
632 #: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:170
633 msgid "An unconfined application wants to access your current location."
634
635=== modified file 'po/is.po'
636--- po/is.po 2015-01-15 06:05:52 +0000
637+++ po/is.po 2015-05-03 15:50:48 +0000
638@@ -14,8 +14,8 @@
639 "MIME-Version: 1.0\n"
640 "Content-Type: text/plain; charset=UTF-8\n"
641 "Content-Transfer-Encoding: 8bit\n"
642-"X-Launchpad-Export-Date: 2015-01-15 06:05+0000\n"
643-"X-Generator: Launchpad (build 17303)\n"
644+"X-Launchpad-Export-Date: 2015-04-25 05:37+0000\n"
645+"X-Generator: Launchpad (build 17430)\n"
646
647 #: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:170
648 msgid "An unconfined application wants to access your current location."
649
650=== modified file 'po/it.po'
651--- po/it.po 2015-01-15 06:05:52 +0000
652+++ po/it.po 2015-05-03 15:50:48 +0000
653@@ -14,8 +14,8 @@
654 "MIME-Version: 1.0\n"
655 "Content-Type: text/plain; charset=UTF-8\n"
656 "Content-Transfer-Encoding: 8bit\n"
657-"X-Launchpad-Export-Date: 2015-01-15 06:05+0000\n"
658-"X-Generator: Launchpad (build 17303)\n"
659+"X-Launchpad-Export-Date: 2015-04-25 05:37+0000\n"
660+"X-Generator: Launchpad (build 17430)\n"
661
662 #: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:170
663 msgid "An unconfined application wants to access your current location."
664
665=== modified file 'po/ja.po'
666--- po/ja.po 2015-01-15 06:05:52 +0000
667+++ po/ja.po 2015-05-03 15:50:48 +0000
668@@ -14,8 +14,8 @@
669 "MIME-Version: 1.0\n"
670 "Content-Type: text/plain; charset=UTF-8\n"
671 "Content-Transfer-Encoding: 8bit\n"
672-"X-Launchpad-Export-Date: 2015-01-15 06:05+0000\n"
673-"X-Generator: Launchpad (build 17303)\n"
674+"X-Launchpad-Export-Date: 2015-04-25 05:37+0000\n"
675+"X-Generator: Launchpad (build 17430)\n"
676
677 #: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:170
678 msgid "An unconfined application wants to access your current location."
679
680=== modified file 'po/km.po'
681--- po/km.po 2015-01-15 06:05:52 +0000
682+++ po/km.po 2015-05-03 15:50:48 +0000
683@@ -14,8 +14,8 @@
684 "MIME-Version: 1.0\n"
685 "Content-Type: text/plain; charset=UTF-8\n"
686 "Content-Transfer-Encoding: 8bit\n"
687-"X-Launchpad-Export-Date: 2015-01-15 06:05+0000\n"
688-"X-Generator: Launchpad (build 17303)\n"
689+"X-Launchpad-Export-Date: 2015-04-25 05:37+0000\n"
690+"X-Generator: Launchpad (build 17430)\n"
691
692 #: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:170
693 msgid "An unconfined application wants to access your current location."
694
695=== modified file 'po/ko.po'
696--- po/ko.po 2015-01-15 06:05:52 +0000
697+++ po/ko.po 2015-05-03 15:50:48 +0000
698@@ -14,8 +14,8 @@
699 "MIME-Version: 1.0\n"
700 "Content-Type: text/plain; charset=UTF-8\n"
701 "Content-Transfer-Encoding: 8bit\n"
702-"X-Launchpad-Export-Date: 2015-01-15 06:05+0000\n"
703-"X-Generator: Launchpad (build 17303)\n"
704+"X-Launchpad-Export-Date: 2015-04-25 05:37+0000\n"
705+"X-Generator: Launchpad (build 17430)\n"
706
707 #: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:170
708 msgid "An unconfined application wants to access your current location."
709
710=== added file 'po/ml.po'
711--- po/ml.po 1970-01-01 00:00:00 +0000
712+++ po/ml.po 2015-05-03 15:50:48 +0000
713@@ -0,0 +1,27 @@
714+# Malayalam translation for location-service
715+# Copyright (c) 2015 Rosetta Contributors and Canonical Ltd 2015
716+# This file is distributed under the same license as the location-service package.
717+# FIRST AUTHOR <EMAIL@ADDRESS>, 2015.
718+#
719+msgid ""
720+msgstr ""
721+"Project-Id-Version: location-service\n"
722+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
723+"POT-Creation-Date: 2014-09-19 01:04+0200\n"
724+"PO-Revision-Date: 2015-03-04 05:28+0000\n"
725+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
726+"Language-Team: Malayalam <ml@li.org>\n"
727+"MIME-Version: 1.0\n"
728+"Content-Type: text/plain; charset=UTF-8\n"
729+"Content-Transfer-Encoding: 8bit\n"
730+"X-Launchpad-Export-Date: 2015-04-25 05:37+0000\n"
731+"X-Generator: Launchpad (build 17430)\n"
732+
733+#: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:170
734+msgid "An unconfined application wants to access your current location."
735+msgstr ""
736+
737+#: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:173
738+#, boost-format
739+msgid "%1% wants to access your current location."
740+msgstr ""
741
742=== added file 'po/mr.po'
743--- po/mr.po 1970-01-01 00:00:00 +0000
744+++ po/mr.po 2015-05-03 15:50:48 +0000
745@@ -0,0 +1,27 @@
746+# Marathi translation for location-service
747+# Copyright (c) 2015 Rosetta Contributors and Canonical Ltd 2015
748+# This file is distributed under the same license as the location-service package.
749+# FIRST AUTHOR <EMAIL@ADDRESS>, 2015.
750+#
751+msgid ""
752+msgstr ""
753+"Project-Id-Version: location-service\n"
754+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
755+"POT-Creation-Date: 2014-09-19 01:04+0200\n"
756+"PO-Revision-Date: 2015-04-04 04:12+0000\n"
757+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
758+"Language-Team: Marathi <mr@li.org>\n"
759+"MIME-Version: 1.0\n"
760+"Content-Type: text/plain; charset=UTF-8\n"
761+"Content-Transfer-Encoding: 8bit\n"
762+"X-Launchpad-Export-Date: 2015-04-25 05:37+0000\n"
763+"X-Generator: Launchpad (build 17430)\n"
764+
765+#: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:170
766+msgid "An unconfined application wants to access your current location."
767+msgstr "एक unconfined अॅपलिकेशन आपले वर्तमान स्थान प्रवेश करू इच्छिते."
768+
769+#: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:173
770+#, boost-format
771+msgid "%1% wants to access your current location."
772+msgstr "%1% आपले वर्तमान स्थान प्रवेश करू इच्छिते."
773
774=== modified file 'po/ms.po'
775--- po/ms.po 2015-01-15 06:05:52 +0000
776+++ po/ms.po 2015-05-03 15:50:48 +0000
777@@ -14,8 +14,8 @@
778 "MIME-Version: 1.0\n"
779 "Content-Type: text/plain; charset=UTF-8\n"
780 "Content-Transfer-Encoding: 8bit\n"
781-"X-Launchpad-Export-Date: 2015-01-15 06:05+0000\n"
782-"X-Generator: Launchpad (build 17303)\n"
783+"X-Launchpad-Export-Date: 2015-04-25 05:37+0000\n"
784+"X-Generator: Launchpad (build 17430)\n"
785
786 #: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:170
787 msgid "An unconfined application wants to access your current location."
788
789=== modified file 'po/nb.po'
790--- po/nb.po 2015-01-15 06:05:52 +0000
791+++ po/nb.po 2015-05-03 15:50:48 +0000
792@@ -14,8 +14,8 @@
793 "MIME-Version: 1.0\n"
794 "Content-Type: text/plain; charset=UTF-8\n"
795 "Content-Transfer-Encoding: 8bit\n"
796-"X-Launchpad-Export-Date: 2015-01-15 06:05+0000\n"
797-"X-Generator: Launchpad (build 17303)\n"
798+"X-Launchpad-Export-Date: 2015-04-25 05:37+0000\n"
799+"X-Generator: Launchpad (build 17430)\n"
800
801 #: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:170
802 msgid "An unconfined application wants to access your current location."
803
804=== modified file 'po/nl.po'
805--- po/nl.po 2015-01-15 06:05:52 +0000
806+++ po/nl.po 2015-05-03 15:50:48 +0000
807@@ -14,8 +14,8 @@
808 "MIME-Version: 1.0\n"
809 "Content-Type: text/plain; charset=UTF-8\n"
810 "Content-Transfer-Encoding: 8bit\n"
811-"X-Launchpad-Export-Date: 2015-01-15 06:05+0000\n"
812-"X-Generator: Launchpad (build 17303)\n"
813+"X-Launchpad-Export-Date: 2015-04-25 05:37+0000\n"
814+"X-Generator: Launchpad (build 17430)\n"
815
816 #: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:170
817 msgid "An unconfined application wants to access your current location."
818
819=== added file 'po/ny.po'
820--- po/ny.po 1970-01-01 00:00:00 +0000
821+++ po/ny.po 2015-05-03 15:50:48 +0000
822@@ -0,0 +1,27 @@
823+# Chewa; Chichewa; Nyanja translation for location-service
824+# Copyright (c) 2015 Rosetta Contributors and Canonical Ltd 2015
825+# This file is distributed under the same license as the location-service package.
826+# FIRST AUTHOR <EMAIL@ADDRESS>, 2015.
827+#
828+msgid ""
829+msgstr ""
830+"Project-Id-Version: location-service\n"
831+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
832+"POT-Creation-Date: 2014-09-19 01:04+0200\n"
833+"PO-Revision-Date: 2015-03-09 13:11+0000\n"
834+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
835+"Language-Team: Chewa; Chichewa; Nyanja <ny@li.org>\n"
836+"MIME-Version: 1.0\n"
837+"Content-Type: text/plain; charset=UTF-8\n"
838+"Content-Transfer-Encoding: 8bit\n"
839+"X-Launchpad-Export-Date: 2015-04-25 05:37+0000\n"
840+"X-Generator: Launchpad (build 17430)\n"
841+
842+#: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:170
843+msgid "An unconfined application wants to access your current location."
844+msgstr "Pologalamu yosadziwika ikufuna lowenawo mumalo anu muliwa."
845+
846+#: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:173
847+#, boost-format
848+msgid "%1% wants to access your current location."
849+msgstr "%1% akufuna alowe nawo mumalo omwe muliwa."
850
851=== modified file 'po/oc.po'
852--- po/oc.po 2015-01-15 06:05:52 +0000
853+++ po/oc.po 2015-05-03 15:50:48 +0000
854@@ -14,8 +14,8 @@
855 "MIME-Version: 1.0\n"
856 "Content-Type: text/plain; charset=UTF-8\n"
857 "Content-Transfer-Encoding: 8bit\n"
858-"X-Launchpad-Export-Date: 2015-01-15 06:05+0000\n"
859-"X-Generator: Launchpad (build 17303)\n"
860+"X-Launchpad-Export-Date: 2015-04-25 05:37+0000\n"
861+"X-Generator: Launchpad (build 17430)\n"
862
863 #: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:170
864 msgid "An unconfined application wants to access your current location."
865
866=== modified file 'po/pa.po'
867--- po/pa.po 2015-01-15 06:05:52 +0000
868+++ po/pa.po 2015-05-03 15:50:48 +0000
869@@ -14,8 +14,8 @@
870 "MIME-Version: 1.0\n"
871 "Content-Type: text/plain; charset=UTF-8\n"
872 "Content-Transfer-Encoding: 8bit\n"
873-"X-Launchpad-Export-Date: 2015-01-15 06:05+0000\n"
874-"X-Generator: Launchpad (build 17303)\n"
875+"X-Launchpad-Export-Date: 2015-04-25 05:37+0000\n"
876+"X-Generator: Launchpad (build 17430)\n"
877
878 #: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:170
879 msgid "An unconfined application wants to access your current location."
880
881=== modified file 'po/pl.po'
882--- po/pl.po 2015-01-22 06:45:44 +0000
883+++ po/pl.po 2015-05-03 15:50:48 +0000
884@@ -14,14 +14,14 @@
885 "MIME-Version: 1.0\n"
886 "Content-Type: text/plain; charset=UTF-8\n"
887 "Content-Transfer-Encoding: 8bit\n"
888-"X-Launchpad-Export-Date: 2015-01-22 06:45+0000\n"
889-"X-Generator: Launchpad (build 17306)\n"
890+"X-Launchpad-Export-Date: 2015-04-25 05:37+0000\n"
891+"X-Generator: Launchpad (build 17430)\n"
892
893 #: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:170
894 msgid "An unconfined application wants to access your current location."
895-msgstr ""
896+msgstr "Nieograniczony program chce uzyskać dostęp do bieżącej lokalizacji."
897
898 #: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:173
899 #, boost-format
900 msgid "%1% wants to access your current location."
901-msgstr ""
902+msgstr "%1% chce uzyskać dostęp do bieżącej lokalizacji."
903
904=== modified file 'po/pt.po'
905--- po/pt.po 2015-01-15 06:05:52 +0000
906+++ po/pt.po 2015-05-03 15:50:48 +0000
907@@ -14,8 +14,8 @@
908 "MIME-Version: 1.0\n"
909 "Content-Type: text/plain; charset=UTF-8\n"
910 "Content-Transfer-Encoding: 8bit\n"
911-"X-Launchpad-Export-Date: 2015-01-15 06:05+0000\n"
912-"X-Generator: Launchpad (build 17303)\n"
913+"X-Launchpad-Export-Date: 2015-04-25 05:37+0000\n"
914+"X-Generator: Launchpad (build 17430)\n"
915
916 #: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:170
917 msgid "An unconfined application wants to access your current location."
918@@ -24,4 +24,4 @@
919 #: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:173
920 #, boost-format
921 msgid "%1% wants to access your current location."
922-msgstr "%1% quer aceder à sua localização actual"
923+msgstr "%1% quer aceder à sua localização atual."
924
925=== modified file 'po/pt_BR.po'
926--- po/pt_BR.po 2015-01-15 06:05:52 +0000
927+++ po/pt_BR.po 2015-05-03 15:50:48 +0000
928@@ -14,8 +14,8 @@
929 "MIME-Version: 1.0\n"
930 "Content-Type: text/plain; charset=UTF-8\n"
931 "Content-Transfer-Encoding: 8bit\n"
932-"X-Launchpad-Export-Date: 2015-01-15 06:05+0000\n"
933-"X-Generator: Launchpad (build 17303)\n"
934+"X-Launchpad-Export-Date: 2015-04-25 05:37+0000\n"
935+"X-Generator: Launchpad (build 17430)\n"
936
937 #: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:170
938 msgid "An unconfined application wants to access your current location."
939
940=== modified file 'po/ro.po'
941--- po/ro.po 2015-01-15 06:05:52 +0000
942+++ po/ro.po 2015-05-03 15:50:48 +0000
943@@ -14,8 +14,8 @@
944 "MIME-Version: 1.0\n"
945 "Content-Type: text/plain; charset=UTF-8\n"
946 "Content-Transfer-Encoding: 8bit\n"
947-"X-Launchpad-Export-Date: 2015-01-15 06:05+0000\n"
948-"X-Generator: Launchpad (build 17303)\n"
949+"X-Launchpad-Export-Date: 2015-04-25 05:37+0000\n"
950+"X-Generator: Launchpad (build 17430)\n"
951
952 #: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:170
953 msgid "An unconfined application wants to access your current location."
954
955=== modified file 'po/ru.po'
956--- po/ru.po 2015-01-15 06:05:52 +0000
957+++ po/ru.po 2015-05-03 15:50:48 +0000
958@@ -14,8 +14,8 @@
959 "MIME-Version: 1.0\n"
960 "Content-Type: text/plain; charset=UTF-8\n"
961 "Content-Transfer-Encoding: 8bit\n"
962-"X-Launchpad-Export-Date: 2015-01-15 06:05+0000\n"
963-"X-Generator: Launchpad (build 17303)\n"
964+"X-Launchpad-Export-Date: 2015-04-25 05:37+0000\n"
965+"X-Generator: Launchpad (build 17430)\n"
966
967 #: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:170
968 msgid "An unconfined application wants to access your current location."
969
970=== added file 'po/sk.po'
971--- po/sk.po 1970-01-01 00:00:00 +0000
972+++ po/sk.po 2015-05-03 15:50:48 +0000
973@@ -0,0 +1,27 @@
974+# Slovak translation for location-service
975+# Copyright (c) 2015 Rosetta Contributors and Canonical Ltd 2015
976+# This file is distributed under the same license as the location-service package.
977+# FIRST AUTHOR <EMAIL@ADDRESS>, 2015.
978+#
979+msgid ""
980+msgstr ""
981+"Project-Id-Version: location-service\n"
982+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
983+"POT-Creation-Date: 2014-09-19 01:04+0200\n"
984+"PO-Revision-Date: 2015-02-22 06:58+0000\n"
985+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
986+"Language-Team: Slovak <sk@li.org>\n"
987+"MIME-Version: 1.0\n"
988+"Content-Type: text/plain; charset=UTF-8\n"
989+"Content-Transfer-Encoding: 8bit\n"
990+"X-Launchpad-Export-Date: 2015-04-25 05:37+0000\n"
991+"X-Generator: Launchpad (build 17430)\n"
992+
993+#: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:170
994+msgid "An unconfined application wants to access your current location."
995+msgstr ""
996+
997+#: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:173
998+#, boost-format
999+msgid "%1% wants to access your current location."
1000+msgstr ""
1001
1002=== modified file 'po/sl.po'
1003--- po/sl.po 2015-01-15 06:05:52 +0000
1004+++ po/sl.po 2015-05-03 15:50:48 +0000
1005@@ -14,8 +14,8 @@
1006 "MIME-Version: 1.0\n"
1007 "Content-Type: text/plain; charset=UTF-8\n"
1008 "Content-Transfer-Encoding: 8bit\n"
1009-"X-Launchpad-Export-Date: 2015-01-15 06:05+0000\n"
1010-"X-Generator: Launchpad (build 17303)\n"
1011+"X-Launchpad-Export-Date: 2015-04-25 05:37+0000\n"
1012+"X-Generator: Launchpad (build 17430)\n"
1013
1014 #: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:170
1015 msgid "An unconfined application wants to access your current location."
1016
1017=== added file 'po/sq.po'
1018--- po/sq.po 1970-01-01 00:00:00 +0000
1019+++ po/sq.po 2015-05-03 15:50:48 +0000
1020@@ -0,0 +1,27 @@
1021+# Albanian translation for location-service
1022+# Copyright (c) 2015 Rosetta Contributors and Canonical Ltd 2015
1023+# This file is distributed under the same license as the location-service package.
1024+# FIRST AUTHOR <EMAIL@ADDRESS>, 2015.
1025+#
1026+msgid ""
1027+msgstr ""
1028+"Project-Id-Version: location-service\n"
1029+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
1030+"POT-Creation-Date: 2014-09-19 01:04+0200\n"
1031+"PO-Revision-Date: 2015-03-24 13:49+0000\n"
1032+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1033+"Language-Team: Albanian <sq@li.org>\n"
1034+"MIME-Version: 1.0\n"
1035+"Content-Type: text/plain; charset=UTF-8\n"
1036+"Content-Transfer-Encoding: 8bit\n"
1037+"X-Launchpad-Export-Date: 2015-04-25 05:37+0000\n"
1038+"X-Generator: Launchpad (build 17430)\n"
1039+
1040+#: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:170
1041+msgid "An unconfined application wants to access your current location."
1042+msgstr "Një program i panjohur kërkon të gjejë se ku ndodheni tani."
1043+
1044+#: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:173
1045+#, boost-format
1046+msgid "%1% wants to access your current location."
1047+msgstr "%1% do të gjejë vendndodhjen tuaj të tanishme."
1048
1049=== modified file 'po/sr.po'
1050--- po/sr.po 2015-01-15 06:05:52 +0000
1051+++ po/sr.po 2015-05-03 15:50:48 +0000
1052@@ -14,8 +14,8 @@
1053 "MIME-Version: 1.0\n"
1054 "Content-Type: text/plain; charset=UTF-8\n"
1055 "Content-Transfer-Encoding: 8bit\n"
1056-"X-Launchpad-Export-Date: 2015-01-15 06:05+0000\n"
1057-"X-Generator: Launchpad (build 17303)\n"
1058+"X-Launchpad-Export-Date: 2015-04-25 05:37+0000\n"
1059+"X-Generator: Launchpad (build 17430)\n"
1060
1061 #: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:170
1062 msgid "An unconfined application wants to access your current location."
1063
1064=== modified file 'po/sv.po'
1065--- po/sv.po 2015-01-15 06:05:52 +0000
1066+++ po/sv.po 2015-05-03 15:50:48 +0000
1067@@ -2,24 +2,25 @@
1068 # Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
1069 # This file is distributed under the same license as the location-service package.
1070 # FIRST AUTHOR <EMAIL@ADDRESS>, 2014.
1071-#
1072+# clone <josef.andersson@fripost.org>, 2015.
1073 msgid ""
1074 msgstr ""
1075 "Project-Id-Version: location-service\n"
1076 "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
1077 "POT-Creation-Date: 2014-09-19 01:04+0200\n"
1078-"PO-Revision-Date: 2014-10-12 10:39+0000\n"
1079-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1080-"Language-Team: Swedish <sv@li.org>\n"
1081+"PO-Revision-Date: 2015-04-03 05:35+0000\n"
1082+"Last-Translator: Josef Andersson <Unknown>\n"
1083+"Language-Team: Swedish\n"
1084 "MIME-Version: 1.0\n"
1085 "Content-Type: text/plain; charset=UTF-8\n"
1086 "Content-Transfer-Encoding: 8bit\n"
1087-"X-Launchpad-Export-Date: 2015-01-15 06:05+0000\n"
1088-"X-Generator: Launchpad (build 17303)\n"
1089+"X-Launchpad-Export-Date: 2015-04-25 05:37+0000\n"
1090+"X-Generator: Launchpad (build 17430)\n"
1091+"Language: sv\n"
1092
1093 #: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:170
1094 msgid "An unconfined application wants to access your current location."
1095-msgstr "Ett obevakat program vill komma åt din nuvarande plats."
1096+msgstr "Ett obegränsat program vill komma åt din nuvarande platsinformation."
1097
1098 #: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:173
1099 #, boost-format
1100
1101=== modified file 'po/ta.po'
1102--- po/ta.po 2015-01-15 06:05:52 +0000
1103+++ po/ta.po 2015-05-03 15:50:48 +0000
1104@@ -14,8 +14,8 @@
1105 "MIME-Version: 1.0\n"
1106 "Content-Type: text/plain; charset=UTF-8\n"
1107 "Content-Transfer-Encoding: 8bit\n"
1108-"X-Launchpad-Export-Date: 2015-01-15 06:05+0000\n"
1109-"X-Generator: Launchpad (build 17303)\n"
1110+"X-Launchpad-Export-Date: 2015-04-25 05:37+0000\n"
1111+"X-Generator: Launchpad (build 17430)\n"
1112
1113 #: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:170
1114 msgid "An unconfined application wants to access your current location."
1115
1116=== added file 'po/tg.po'
1117--- po/tg.po 1970-01-01 00:00:00 +0000
1118+++ po/tg.po 2015-05-03 15:50:48 +0000
1119@@ -0,0 +1,27 @@
1120+# Tajik translation for location-service
1121+# Copyright (c) 2015 Rosetta Contributors and Canonical Ltd 2015
1122+# This file is distributed under the same license as the location-service package.
1123+# FIRST AUTHOR <EMAIL@ADDRESS>, 2015.
1124+#
1125+msgid ""
1126+msgstr ""
1127+"Project-Id-Version: location-service\n"
1128+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
1129+"POT-Creation-Date: 2014-09-19 01:04+0200\n"
1130+"PO-Revision-Date: 2015-03-10 04:55+0000\n"
1131+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1132+"Language-Team: Tajik <tg@li.org>\n"
1133+"MIME-Version: 1.0\n"
1134+"Content-Type: text/plain; charset=UTF-8\n"
1135+"Content-Transfer-Encoding: 8bit\n"
1136+"X-Launchpad-Export-Date: 2015-04-25 05:37+0000\n"
1137+"X-Generator: Launchpad (build 17430)\n"
1138+
1139+#: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:170
1140+msgid "An unconfined application wants to access your current location."
1141+msgstr ""
1142+
1143+#: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:173
1144+#, boost-format
1145+msgid "%1% wants to access your current location."
1146+msgstr ""
1147
1148=== modified file 'po/th.po'
1149--- po/th.po 2015-01-15 06:05:52 +0000
1150+++ po/th.po 2015-05-03 15:50:48 +0000
1151@@ -14,8 +14,8 @@
1152 "MIME-Version: 1.0\n"
1153 "Content-Type: text/plain; charset=UTF-8\n"
1154 "Content-Transfer-Encoding: 8bit\n"
1155-"X-Launchpad-Export-Date: 2015-01-15 06:05+0000\n"
1156-"X-Generator: Launchpad (build 17303)\n"
1157+"X-Launchpad-Export-Date: 2015-04-25 05:37+0000\n"
1158+"X-Generator: Launchpad (build 17430)\n"
1159
1160 #: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:170
1161 msgid "An unconfined application wants to access your current location."
1162
1163=== modified file 'po/tr.po'
1164--- po/tr.po 2015-01-15 06:05:52 +0000
1165+++ po/tr.po 2015-05-03 15:50:48 +0000
1166@@ -14,8 +14,8 @@
1167 "MIME-Version: 1.0\n"
1168 "Content-Type: text/plain; charset=UTF-8\n"
1169 "Content-Transfer-Encoding: 8bit\n"
1170-"X-Launchpad-Export-Date: 2015-01-15 06:05+0000\n"
1171-"X-Generator: Launchpad (build 17303)\n"
1172+"X-Launchpad-Export-Date: 2015-04-25 05:37+0000\n"
1173+"X-Generator: Launchpad (build 17430)\n"
1174
1175 #: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:170
1176 msgid "An unconfined application wants to access your current location."
1177
1178=== modified file 'po/ug.po'
1179--- po/ug.po 2015-01-15 06:05:52 +0000
1180+++ po/ug.po 2015-05-03 15:50:48 +0000
1181@@ -14,8 +14,8 @@
1182 "MIME-Version: 1.0\n"
1183 "Content-Type: text/plain; charset=UTF-8\n"
1184 "Content-Transfer-Encoding: 8bit\n"
1185-"X-Launchpad-Export-Date: 2015-01-15 06:05+0000\n"
1186-"X-Generator: Launchpad (build 17303)\n"
1187+"X-Launchpad-Export-Date: 2015-04-25 05:37+0000\n"
1188+"X-Generator: Launchpad (build 17430)\n"
1189
1190 #: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:170
1191 msgid "An unconfined application wants to access your current location."
1192
1193=== modified file 'po/uk.po'
1194--- po/uk.po 2015-01-15 06:05:52 +0000
1195+++ po/uk.po 2015-05-03 15:50:48 +0000
1196@@ -14,8 +14,8 @@
1197 "MIME-Version: 1.0\n"
1198 "Content-Type: text/plain; charset=UTF-8\n"
1199 "Content-Transfer-Encoding: 8bit\n"
1200-"X-Launchpad-Export-Date: 2015-01-15 06:05+0000\n"
1201-"X-Generator: Launchpad (build 17303)\n"
1202+"X-Launchpad-Export-Date: 2015-04-25 05:37+0000\n"
1203+"X-Generator: Launchpad (build 17430)\n"
1204
1205 #: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:170
1206 msgid "An unconfined application wants to access your current location."
1207
1208=== modified file 'po/vi.po'
1209--- po/vi.po 2015-02-01 06:35:17 +0000
1210+++ po/vi.po 2015-05-03 15:50:48 +0000
1211@@ -14,8 +14,8 @@
1212 "MIME-Version: 1.0\n"
1213 "Content-Type: text/plain; charset=UTF-8\n"
1214 "Content-Transfer-Encoding: 8bit\n"
1215-"X-Launchpad-Export-Date: 2015-02-01 06:35+0000\n"
1216-"X-Generator: Launchpad (build 17306)\n"
1217+"X-Launchpad-Export-Date: 2015-04-25 05:37+0000\n"
1218+"X-Generator: Launchpad (build 17430)\n"
1219
1220 #: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:170
1221 msgid "An unconfined application wants to access your current location."
1222
1223=== modified file 'po/zh_CN.po'
1224--- po/zh_CN.po 2015-01-15 06:05:52 +0000
1225+++ po/zh_CN.po 2015-05-03 15:50:48 +0000
1226@@ -14,8 +14,8 @@
1227 "MIME-Version: 1.0\n"
1228 "Content-Type: text/plain; charset=UTF-8\n"
1229 "Content-Transfer-Encoding: 8bit\n"
1230-"X-Launchpad-Export-Date: 2015-01-15 06:05+0000\n"
1231-"X-Generator: Launchpad (build 17303)\n"
1232+"X-Launchpad-Export-Date: 2015-04-25 05:37+0000\n"
1233+"X-Generator: Launchpad (build 17430)\n"
1234
1235 #: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:170
1236 msgid "An unconfined application wants to access your current location."
1237
1238=== modified file 'po/zh_TW.po'
1239--- po/zh_TW.po 2015-01-31 06:19:34 +0000
1240+++ po/zh_TW.po 2015-05-03 15:50:48 +0000
1241@@ -8,20 +8,20 @@
1242 "Project-Id-Version: location-service\n"
1243 "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
1244 "POT-Creation-Date: 2014-09-19 01:04+0200\n"
1245-"PO-Revision-Date: 2015-01-30 22:56+0000\n"
1246-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1247+"PO-Revision-Date: 2015-03-01 10:46+0000\n"
1248+"Last-Translator: Cheng-Chia Tseng <pswo10680@gmail.com>\n"
1249 "Language-Team: Chinese (Traditional) <zh_TW@li.org>\n"
1250 "MIME-Version: 1.0\n"
1251 "Content-Type: text/plain; charset=UTF-8\n"
1252 "Content-Transfer-Encoding: 8bit\n"
1253-"X-Launchpad-Export-Date: 2015-01-31 06:19+0000\n"
1254-"X-Generator: Launchpad (build 17306)\n"
1255+"X-Launchpad-Export-Date: 2015-04-25 05:37+0000\n"
1256+"X-Generator: Launchpad (build 17430)\n"
1257
1258 #: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:170
1259 msgid "An unconfined application wants to access your current location."
1260-msgstr ""
1261+msgstr "有個尚未設限的程式想要存取您的目前位置。"
1262
1263 #: /tmp/i18n/src/location_service/com/ubuntu/location/service/trust_store_permission_manager.cpp:173
1264 #, boost-format
1265 msgid "%1% wants to access your current location."
1266-msgstr ""
1267+msgstr "%1% 想存取您的目前位置。"
1268
1269=== modified file 'src/location_service/com/ubuntu/location/CMakeLists.txt'
1270--- src/location_service/com/ubuntu/location/CMakeLists.txt 2015-01-25 12:45:30 +0000
1271+++ src/location_service/com/ubuntu/location/CMakeLists.txt 2015-05-03 15:50:48 +0000
1272@@ -27,6 +27,7 @@
1273 proxy_provider.cpp
1274 satellite_based_positioning_state.cpp
1275 settings.cpp
1276+ time_based_update_policy.cpp
1277 set_name_for_thread.cpp
1278 wifi_and_cell_reporting_state.cpp
1279
1280
1281=== modified file 'src/location_service/com/ubuntu/location/connectivity/ofono_nm_connectivity_manager.cpp'
1282--- src/location_service/com/ubuntu/location/connectivity/ofono_nm_connectivity_manager.cpp 2015-01-06 12:35:02 +0000
1283+++ src/location_service/com/ubuntu/location/connectivity/ofono_nm_connectivity_manager.cpp 2015-05-03 15:50:48 +0000
1284@@ -75,8 +75,9 @@
1285 {
1286 std::lock_guard<std::mutex> lg(d.cached.guard);
1287
1288- for (const auto& pair : d.cached.wireless_devices)
1289- pair.second.request_scan();
1290+ for (const auto& pair : d.cached.nm_devices)
1291+ if (pair.second.type() == xdg::NetworkManager::Device::Type::wifi)
1292+ pair.second.request_scan();
1293 }
1294
1295 const core::Signal<>& connectivity::OfonoNmConnectivityManager::wireless_network_scan_finished() const
1296@@ -506,16 +507,23 @@
1297 const core::dbus::types::ObjectPath& device_path,
1298 std::unique_lock<std::mutex>& ul)
1299 {
1300- if (cached.wireless_devices.count(device_path) > 0)
1301+ if (cached.nm_devices.count(device_path) > 0)
1302 return;
1303
1304 auto device = network_manager->device_for_path(device_path);
1305
1306+ if (device.type() == xdg::NetworkManager::Device::Type::modem)
1307+ {
1308+ // Make the device known to the cache.
1309+ std::map<core::dbus::types::ObjectPath, org::freedesktop::NetworkManager::Device>::iterator it;
1310+ std::tie(it, std::ignore) = cached.nm_devices.insert(std::make_pair(device_path, device));
1311+ }
1312+
1313 if (device.type() == xdg::NetworkManager::Device::Type::wifi)
1314 {
1315 // Make the device known to the cache.
1316 std::map<core::dbus::types::ObjectPath, org::freedesktop::NetworkManager::Device>::iterator it;
1317- std::tie(it, std::ignore) = cached.wireless_devices.insert(std::make_pair(device_path, device));
1318+ std::tie(it, std::ignore) = cached.nm_devices.insert(std::make_pair(device_path, device));
1319
1320 // Iterate over all currently known wifis
1321 it->second.for_each_access_point([this, device_path, &ul](const core::dbus::types::ObjectPath& path)
1322@@ -567,7 +575,7 @@
1323 const core::dbus::types::ObjectPath& path,
1324 std::unique_lock<std::mutex>&)
1325 {
1326- cached.wireless_devices.erase(path);
1327+ cached.nm_devices.erase(path);
1328 }
1329
1330 void connectivity::OfonoNmConnectivityManager::Private::on_access_point_added(
1331@@ -577,8 +585,8 @@
1332 {
1333 // Let's see if we have a device known for the path. We return early
1334 // if we do not know about the device.
1335- auto itd = cached.wireless_devices.find(device_path);
1336- if (itd == cached.wireless_devices.end())
1337+ auto itd = cached.nm_devices.find(device_path);
1338+ if (itd == cached.nm_devices.end() || itd->second.type() != xdg::NetworkManager::Device::Type::wifi)
1339 return;
1340
1341 xdg::NetworkManager::AccessPoint ap
1342@@ -638,8 +646,8 @@
1343 // We only consider cached devices and do not reach out to enumerate all of the devices
1344 // to prevent from excessive dbus roundtrips.
1345 std::lock_guard<std::mutex> lg{cached.guard};
1346- if (cached.wireless_devices.count(path) > 0)
1347- type = cached.wireless_devices.at(path).type();
1348+ if (cached.nm_devices.count(path) > 0 )
1349+ type = cached.nm_devices.at(path).type();
1350 }
1351
1352 // We interpret a primary connection over a modem device as
1353@@ -672,7 +680,7 @@
1354 }
1355 }
1356
1357- characteristics = characteristics | all_characteristics();
1358+ characteristics = characteristics | all_characteristics();
1359 } else if (type == xdg::NetworkManager::Device::Type::wifi)
1360 {
1361 characteristics = characteristics | connectivity::Characteristics::connection_goes_via_wifi;
1362@@ -684,6 +692,7 @@
1363 // Empty on purpose.
1364 }
1365
1366+ LOG(INFO) << characteristics << std::endl;
1367 return characteristics;
1368 }
1369
1370@@ -705,7 +714,24 @@
1371
1372 worker_thread = std::move(std::thread
1373 {
1374- [this]() { system_bus->run(); }
1375+ [this]()
1376+ {
1377+ while(true) {
1378+ try
1379+ {
1380+ system_bus->run();
1381+ break; // run exited normally
1382+ }
1383+ catch (const std::exception& e)
1384+ {
1385+ LOG(WARNING) << e.what();
1386+ }
1387+ catch(...)
1388+ {
1389+ LOG(WARNING) << "Unexpected exception was raised by the io executor.";
1390+ }
1391+ }
1392+ }
1393 });
1394 }
1395
1396
1397=== modified file 'src/location_service/com/ubuntu/location/connectivity/ofono_nm_connectivity_manager.h'
1398--- src/location_service/com/ubuntu/location/connectivity/ofono_nm_connectivity_manager.h 2014-11-10 20:12:56 +0000
1399+++ src/location_service/com/ubuntu/location/connectivity/ofono_nm_connectivity_manager.h 2015-05-03 15:50:48 +0000
1400@@ -126,7 +126,25 @@
1401 // And a dedicated worker thread.
1402 std::thread worker
1403 {
1404- [this]() { service.run(); }
1405+ [this]()
1406+ {
1407+ while(true)
1408+ {
1409+ try
1410+ {
1411+ service.run();
1412+ break; // normal exit
1413+ }
1414+ catch (const std::exception& e)
1415+ {
1416+ LOG(WARNING) << e.what();
1417+ }
1418+ catch(...)
1419+ {
1420+ LOG(WARNING) << "Received unexpected exception.";
1421+ }
1422+ }
1423+ }
1424 };
1425 } dispatcher;
1426
1427@@ -144,7 +162,7 @@
1428 std::map<core::dbus::types::ObjectPath, detail::CachedRadioCell::Ptr> cells;
1429 std::map<core::dbus::types::ObjectPath, org::Ofono::Manager::Modem> modems;
1430 std::map<core::dbus::types::ObjectPath, detail::CachedWirelessNetwork::Ptr> wifis;
1431- std::map<core::dbus::types::ObjectPath, org::freedesktop::NetworkManager::Device> wireless_devices;
1432+ std::map<core::dbus::types::ObjectPath, org::freedesktop::NetworkManager::Device> nm_devices;
1433 std::map<core::dbus::types::ObjectPath, org::freedesktop::NetworkManager::ActiveConnection> primary_connection;
1434 std::map<core::dbus::types::ObjectPath, org::freedesktop::NetworkManager::Device> primary_connection_devices;
1435 } cached;
1436
1437=== modified file 'src/location_service/com/ubuntu/location/engine.cpp'
1438--- src/location_service/com/ubuntu/location/engine.cpp 2015-01-25 12:44:20 +0000
1439+++ src/location_service/com/ubuntu/location/engine.cpp 2015-05-03 15:50:48 +0000
1440@@ -24,6 +24,8 @@
1441 #include <stdexcept>
1442 #include <unordered_map>
1443
1444+#include "time_based_update_policy.h"
1445+
1446 namespace cul = com::ubuntu::location;
1447
1448 const cul::SatelliteBasedPositioningState cul::Engine::Configuration::Defaults::satellite_based_positioning_state;
1449@@ -33,7 +35,8 @@
1450 cul::Engine::Engine(const cul::ProviderSelectionPolicy::Ptr& provider_selection_policy,
1451 const cul::Settings::Ptr& settings)
1452 : provider_selection_policy(provider_selection_policy),
1453- settings(settings)
1454+ settings(settings),
1455+ update_policy(std::make_shared<cul::TimeBasedUpdatePolicy>())
1456 {
1457 if (!provider_selection_policy) throw std::runtime_error
1458 {
1459@@ -204,7 +207,7 @@
1460 // We should come up with a better heuristic here.
1461 auto cpr = provider->updates().position.connect([this](const cul::Update<cul::Position>& src)
1462 {
1463- updates.reference_location = src;
1464+ updates.reference_location = update_policy->verify_update(src);
1465 });
1466
1467 std::lock_guard<std::mutex> lg(guard);
1468
1469=== modified file 'src/location_service/com/ubuntu/location/engine.h'
1470--- src/location_service/com/ubuntu/location/engine.h 2015-01-14 13:41:54 +0000
1471+++ src/location_service/com/ubuntu/location/engine.h 2015-05-03 15:50:48 +0000
1472@@ -33,6 +33,8 @@
1473 #include <mutex>
1474 #include <set>
1475
1476+#include "update_policy.h"
1477+
1478 namespace com
1479 {
1480 namespace ubuntu
1481@@ -193,6 +195,7 @@
1482 std::map<Provider::Ptr, ProviderConnections> providers;
1483 ProviderSelectionPolicy::Ptr provider_selection_policy;
1484 Settings::Ptr settings;
1485+ UpdatePolicy::Ptr update_policy;
1486 };
1487
1488 /** @brief Pretty prints the given status to the given stream. */
1489
1490=== renamed file 'include/location_service/com/ubuntu/location/providers/geoclue/geoclue.h' => 'src/location_service/com/ubuntu/location/providers/geoclue/geoclue.h'
1491=== modified file 'src/location_service/com/ubuntu/location/providers/geoclue/provider.cpp'
1492--- src/location_service/com/ubuntu/location/providers/geoclue/provider.cpp 2014-02-03 13:52:21 +0000
1493+++ src/location_service/com/ubuntu/location/providers/geoclue/provider.cpp 2015-05-03 15:50:48 +0000
1494@@ -1,5 +1,5 @@
1495 /*
1496- * Copyright © 2012-2013 Canonical Ltd.
1497+ * Copyright © 2012-2015 Canonical Ltd.
1498 *
1499 * This program is free software: you can redistribute it and/or modify it
1500 * under the terms of the GNU Lesser General Public License version 3,
1501@@ -14,18 +14,10 @@
1502 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1503 *
1504 * Authored by: Thomas Voß <thomas.voss@canonical.com>
1505+ * Manuel de la Pena <manuel.delapena@canonial.com>
1506 */
1507-#include <com/ubuntu/location/providers/geoclue/provider.h>
1508-
1509-#include <com/ubuntu/location/providers/geoclue/geoclue.h>
1510-
1511-#include <core/dbus/object.h>
1512-#include <core/dbus/signal.h>
1513-
1514-#include "core/dbus/object.h"
1515-#include "core/dbus/signal.h"
1516-
1517-#include <thread>
1518+
1519+#include "provider.h"
1520
1521 namespace cul = com::ubuntu::location;
1522 namespace culpg = com::ubuntu::location::providers::geoclue;
1523@@ -41,128 +33,103 @@
1524 }
1525 }
1526
1527-struct culpg::Provider::Private
1528-{
1529- typedef dbus::Signal<
1530- org::freedesktop::Geoclue::Position::Signals::PositionChanged,
1531- org::freedesktop::Geoclue::Position::Signals::PositionChanged::ArgumentType
1532- > PositionChanged;
1533-
1534- typedef dbus::Signal<
1535- org::freedesktop::Geoclue::Velocity::Signals::VelocityChanged,
1536- org::freedesktop::Geoclue::Velocity::Signals::VelocityChanged::ArgumentType
1537- > VelocityChanged;
1538-
1539- Private(const culpg::Provider::Configuration& config)
1540- : bus(the_session_bus()),
1541- service(dbus::Service::use_service(bus, config.name)),
1542- object(service->object_for_path(config.path)),
1543- signal_position_changed(object->get_signal<org::freedesktop::Geoclue::Position::Signals::PositionChanged>()),
1544- signal_velocity_changed(object->get_signal<org::freedesktop::Geoclue::Velocity::Signals::VelocityChanged>())
1545- {
1546- }
1547-
1548- void start()
1549- {
1550- if (!worker.joinable())
1551- worker = std::move(std::thread{std::bind(&dbus::Bus::run, bus)});
1552- }
1553-
1554- void stop()
1555- {
1556- bus->stop();
1557- if (worker.joinable())
1558- worker.join();
1559- }
1560-
1561- dbus::Bus::Ptr bus;
1562- dbus::Service::Ptr service;
1563- dbus::Object::Ptr object;
1564- PositionChanged::Ptr signal_position_changed;
1565- VelocityChanged::Ptr signal_velocity_changed;
1566- PositionChanged::SubscriptionToken position_updates_connection;
1567- VelocityChanged::SubscriptionToken velocity_updates_connection;
1568-
1569- std::thread worker;
1570-};
1571+void culpg::Provider::start()
1572+{
1573+ if (!worker.joinable())
1574+ worker = std::move(std::thread{std::bind(&dbus::Bus::run, bus)});
1575+}
1576+
1577+void culpg::Provider::stop()
1578+{
1579+ bus->stop();
1580+ if (worker.joinable())
1581+ worker.join();
1582+}
1583+
1584+void culpg::Provider::on_position_changed(const fd::Geoclue::Position::Signals::PositionChanged::ArgumentType& arg)
1585+{
1586+ fd::Geoclue::Position::FieldFlags flags{static_cast<unsigned long>(std::get<0>(arg))};
1587+ cul::Position pos
1588+ {
1589+ flags.test(fd::Geoclue::Position::Field::latitude) ?
1590+ cul::wgs84::Latitude{std::get<2>(arg)* cul::units::Degrees} : cul::wgs84::Latitude{},
1591+ flags.test(fd::Geoclue::Position::Field::longitude) ?
1592+ cul::wgs84::Longitude{std::get<3>(arg)* cul::units::Degrees} : cul::wgs84::Longitude{}
1593+ };
1594+
1595+ if (flags.test(fd::Geoclue::Position::Field::altitude))
1596+ pos.altitude = cul::wgs84::Altitude{std::get<4>(arg)* cul::units::Meters};
1597+
1598+ cul::Update<cul::Position> update(pos);
1599+ mutable_updates().position(update);
1600+}
1601+
1602+void culpg::Provider::on_velocity_changed(const fd::Geoclue::Velocity::Signals::VelocityChanged::ArgumentType& arg)
1603+{
1604+ fd::Geoclue::Velocity::FieldFlags flags{static_cast<unsigned long>(std::get<0>(arg))};
1605+ if (flags.none())
1606+ return;
1607+ if (flags.test(fd::Geoclue::Velocity::Field::speed))
1608+ {
1609+ cul::Update<cul::Velocity> update
1610+ {
1611+ std::get<2>(arg) * cul::units::MetersPerSecond,
1612+ cul::Clock::now()
1613+ };
1614+ mutable_updates().velocity(update);
1615+ }
1616+
1617+ if (flags.test(fd::Geoclue::Velocity::Field::direction))
1618+ {
1619+ cul::Update<cul::Heading> update
1620+ {
1621+ std::get<3>(arg) * cul::units::Degrees,
1622+ cul::Clock::now()
1623+ };
1624+
1625+ mutable_updates().heading(update);
1626+ }
1627+}
1628
1629 cul::Provider::Ptr culpg::Provider::create_instance(const cul::ProviderFactory::Configuration& config)
1630 {
1631 culpg::Provider::Configuration pConfig;
1632- pConfig.name = config.count(Configuration::key_name()) > 0 ? config.get<std::string>(Configuration::key_name()) : throw std::runtime_error("Missing bus-name");
1633- pConfig.path = config.count(Configuration::key_path()) > 0 ? config.get<std::string>(Configuration::key_path()) : throw std::runtime_error("Missing bus-path");
1634+ pConfig.name = config.count(Configuration::key_name()) > 0 ?
1635+ config.get<std::string>(Configuration::key_name()) : throw std::runtime_error("Missing bus-name");
1636+ pConfig.path = config.count(Configuration::key_path()) > 0 ?
1637+ config.get<std::string>(Configuration::key_path()) : throw std::runtime_error("Missing bus-path");
1638 return cul::Provider::Ptr{new culpg::Provider{pConfig}};
1639 }
1640
1641 culpg::Provider::Provider(const culpg::Provider::Configuration& config)
1642 : com::ubuntu::location::Provider(config.features, config.requirements),
1643- d(new Private(config))
1644+ bus(the_session_bus()),
1645+ service(dbus::Service::use_service(bus, config.name)),
1646+ object(service->object_for_path(config.path)),
1647+ signal_position_changed(object->get_signal<fd::Geoclue::Position::Signals::PositionChanged>()),
1648+ signal_velocity_changed(object->get_signal<fd::Geoclue::Velocity::Signals::VelocityChanged>())
1649 {
1650- d->position_updates_connection =
1651- d->signal_position_changed->connect(
1652- [this](const org::freedesktop::Geoclue::Position::Signals::PositionChanged::ArgumentType& arg)
1653- {
1654- org::freedesktop::Geoclue::Position::FieldFlags flags{static_cast<unsigned long>(std::get<0>(arg))};
1655- cul::Position pos
1656- {
1657- flags.test(org::freedesktop::Geoclue::Position::Field::latitude) ?
1658- cul::wgs84::Latitude{std::get<2>(arg)* cul::units::Degrees} : cul::wgs84::Latitude{},
1659- flags.test(org::freedesktop::Geoclue::Position::Field::longitude) ?
1660- cul::wgs84::Longitude{std::get<3>(arg)* cul::units::Degrees} : cul::wgs84::Longitude{}
1661- };
1662-
1663- if (flags.test(org::freedesktop::Geoclue::Position::Field::altitude))
1664- pos.altitude = cul::wgs84::Altitude{std::get<4>(arg)* cul::units::Meters};
1665-
1666- cul::Update<cul::Position> update(pos);
1667- this->mutable_updates().position(update);
1668- });
1669-
1670- d->velocity_updates_connection =
1671- d->signal_velocity_changed->connect(
1672- [this](const org::freedesktop::Geoclue::Velocity::Signals::VelocityChanged::ArgumentType& arg)
1673- {
1674- org::freedesktop::Geoclue::Velocity::FieldFlags flags{static_cast<unsigned long>(std::get<0>(arg))};
1675- if (flags.none())
1676- return;
1677- if (flags.test(org::freedesktop::Geoclue::Velocity::Field::speed))
1678- {
1679- cul::Update<cul::Velocity> update
1680- {
1681- std::get<2>(arg) * cul::units::MetersPerSecond,
1682- cul::Clock::now()
1683- };
1684- this->mutable_updates().velocity(update);
1685- }
1686-
1687- if (flags.test(org::freedesktop::Geoclue::Velocity::Field::direction))
1688- {
1689- cul::Update<cul::Heading> update
1690- {
1691- std::get<3>(arg) * cul::units::Degrees,
1692- cul::Clock::now()
1693- };
1694-
1695- this->mutable_updates().heading(update);
1696- }
1697- });
1698-
1699- auto info = d->object->invoke_method_synchronously<
1700- org::freedesktop::Geoclue::GetProviderInfo,
1701- org::freedesktop::Geoclue::GetProviderInfo::ResultType>();
1702- auto status = d->object->invoke_method_synchronously<
1703- org::freedesktop::Geoclue::GetStatus,
1704- org::freedesktop::Geoclue::GetStatus::ResultType>();
1705+ position_updates_connection = signal_position_changed->connect(
1706+ std::bind(&culpg::Provider::on_position_changed, this, std::placeholders::_1));
1707+ velocity_updates_connection = signal_velocity_changed->connect(
1708+ std::bind(&culpg::Provider::on_velocity_changed, this, std::placeholders::_1));
1709+
1710+ auto info = object->invoke_method_synchronously<
1711+ fd::Geoclue::GetProviderInfo,
1712+ fd::Geoclue::GetProviderInfo::ResultType>();
1713+ auto status = object->invoke_method_synchronously<
1714+ fd::Geoclue::GetStatus,
1715+ fd::Geoclue::GetStatus::ResultType>();
1716
1717 std::cout << "GeoclueProvider: ["
1718 << std::get<0>(info.value()) << ", "
1719 << std::get<1>(info.value()) << ","
1720- << static_cast<org::freedesktop::Geoclue::Status>(status.value()) << "]" <<std::endl;
1721+ << static_cast<fd::Geoclue::Status>(status.value()) << "]" <<std::endl;
1722 }
1723
1724 culpg::Provider::~Provider() noexcept
1725 {
1726- d->stop();
1727+ stop();
1728 }
1729
1730 bool culpg::Provider::matches_criteria(const cul::Criteria&)
1731@@ -172,30 +139,30 @@
1732
1733 void culpg::Provider::start_position_updates()
1734 {
1735- d->start();
1736+ start();
1737 }
1738
1739 void culpg::Provider::stop_position_updates()
1740 {
1741- d->stop();
1742+ stop();
1743 }
1744
1745 void culpg::Provider::start_velocity_updates()
1746 {
1747- d->start();
1748+ start();
1749 }
1750
1751 void culpg::Provider::stop_velocity_updates()
1752 {
1753- d->stop();
1754+ stop();
1755 }
1756
1757 void culpg::Provider::start_heading_updates()
1758 {
1759- d->start();
1760+ start();
1761 }
1762
1763 void culpg::Provider::stop_heading_updates()
1764 {
1765- d->stop();
1766+ stop();
1767 }
1768
1769=== renamed file 'include/location_service/com/ubuntu/location/providers/geoclue/provider.h' => 'src/location_service/com/ubuntu/location/providers/geoclue/provider.h'
1770--- include/location_service/com/ubuntu/location/providers/geoclue/provider.h 2013-12-10 09:42:54 +0000
1771+++ src/location_service/com/ubuntu/location/providers/geoclue/provider.h 2015-05-03 15:50:48 +0000
1772@@ -14,13 +14,26 @@
1773 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1774 *
1775 * Authored by: Thomas Voß <thomas.voss@canonical.com>
1776+ * Manuel de la Pena <manuel.delapena@canonical.com>
1777 */
1778 #ifndef LOCATION_SERVICE_COM_UBUNTU_LOCATION_PROVIDERS_GEOCLUE_PROVIDER_H_
1779 #define LOCATION_SERVICE_COM_UBUNTU_LOCATION_PROVIDERS_GEOCLUE_PROVIDER_H_
1780
1781+#include <core/dbus/object.h>
1782+#include <core/dbus/signal.h>
1783+
1784+#include "core/dbus/object.h"
1785+#include "core/dbus/signal.h"
1786+
1787 #include <com/ubuntu/location/provider.h>
1788 #include <com/ubuntu/location/provider_factory.h>
1789
1790+#include <thread>
1791+
1792+#include "geoclue.h"
1793+
1794+namespace fd = org::freedesktop;
1795+
1796 namespace com
1797 {
1798 namespace ubuntu
1799@@ -33,6 +46,17 @@
1800 {
1801 class Provider : public com::ubuntu::location::Provider
1802 {
1803+
1804+ typedef dbus::Signal<
1805+ fd::Geoclue::Position::Signals::PositionChanged,
1806+ fd::Geoclue::Position::Signals::PositionChanged::ArgumentType
1807+ > PositionChanged;
1808+
1809+ typedef dbus::Signal<
1810+ fd::Geoclue::Velocity::Signals::VelocityChanged,
1811+ fd::Geoclue::Velocity::Signals::VelocityChanged::ArgumentType
1812+ > VelocityChanged;
1813+
1814 public:
1815 static Provider::Ptr create_instance(const ProviderFactory::Configuration&);
1816
1817@@ -52,18 +76,32 @@
1818
1819 virtual bool matches_criteria(const Criteria&);
1820
1821- virtual void start_position_updates();
1822- virtual void stop_position_updates();
1823-
1824- virtual void start_velocity_updates();
1825- virtual void stop_velocity_updates();
1826-
1827- virtual void start_heading_updates();
1828- virtual void stop_heading_updates();
1829-
1830- private:
1831- struct Private;
1832- std::unique_ptr<Private> d;
1833+ virtual void start_position_updates() override;
1834+ virtual void stop_position_updates() override;
1835+
1836+ virtual void start_velocity_updates() override;
1837+ virtual void stop_velocity_updates() override;
1838+
1839+ virtual void start_heading_updates() override;
1840+ virtual void stop_heading_updates() override;
1841+
1842+ private:
1843+ void start();
1844+ void stop();
1845+
1846+ void on_position_changed(const fd::Geoclue::Position::Signals::PositionChanged::ArgumentType& arg);
1847+ void on_velocity_changed(const fd::Geoclue::Velocity::Signals::VelocityChanged::ArgumentType& arg);
1848+
1849+ private:
1850+ dbus::Bus::Ptr bus;
1851+ dbus::Service::Ptr service;
1852+ dbus::Object::Ptr object;
1853+ PositionChanged::Ptr signal_position_changed;
1854+ VelocityChanged::Ptr signal_velocity_changed;
1855+ PositionChanged::SubscriptionToken position_updates_connection;
1856+ VelocityChanged::SubscriptionToken velocity_updates_connection;
1857+
1858+ std::thread worker;
1859 };
1860 }
1861 }
1862
1863=== modified file 'src/location_service/com/ubuntu/location/providers/gps/android_hardware_abstraction_layer.h'
1864--- src/location_service/com/ubuntu/location/providers/gps/android_hardware_abstraction_layer.h 2014-06-23 07:47:27 +0000
1865+++ src/location_service/com/ubuntu/location/providers/gps/android_hardware_abstraction_layer.h 2015-05-03 15:50:48 +0000
1866@@ -49,7 +49,7 @@
1867 /** @brief Timeout on gps xtra download operations. */
1868 std::chrono::milliseconds timeout
1869 {
1870- 1500
1871+ 5000
1872 };
1873
1874 /** Set of hosts serving GPS xtra data. */
1875
1876=== modified file 'src/location_service/com/ubuntu/location/providers/gps/provider.cpp'
1877--- src/location_service/com/ubuntu/location/providers/gps/provider.cpp 2014-10-27 21:58:16 +0000
1878+++ src/location_service/com/ubuntu/location/providers/gps/provider.cpp 2015-05-03 15:50:48 +0000
1879@@ -28,11 +28,6 @@
1880 namespace cul = com::ubuntu::location;
1881 namespace culg = com::ubuntu::location::providers::gps;
1882
1883-struct culg::Provider::Private
1884-{
1885- std::shared_ptr<HardwareAbstractionLayer> hal;
1886-};
1887-
1888 std::string culg::Provider::class_name()
1889 {
1890 return "gps::Provider";
1891@@ -47,26 +42,25 @@
1892 : cul::Provider(
1893 cul::Provider::Features::position | cul::Provider::Features::velocity | cul::Provider::Features::heading,
1894 cul::Provider::Requirements::satellites),
1895- d(new Private())
1896+ hal(hal)
1897 {
1898- d->hal = hal;
1899
1900- d->hal->position_updates().connect([this](const location::Position& pos)
1901+ hal->position_updates().connect([this](const location::Position& pos)
1902 {
1903 mutable_updates().position(Update<Position>(pos));
1904 });
1905
1906- d->hal->heading_updates().connect([this](const location::Heading& heading)
1907+ hal->heading_updates().connect([this](const location::Heading& heading)
1908 {
1909 mutable_updates().heading(Update<Heading>(heading));
1910 });
1911
1912- d->hal->velocity_updates().connect([this](const location::Velocity& velocity)
1913+ hal->velocity_updates().connect([this](const location::Velocity& velocity)
1914 {
1915 mutable_updates().velocity(Update<Velocity>(velocity));
1916 });
1917
1918- d->hal->space_vehicle_updates().connect([this](const std::set<location::SpaceVehicle>& svs)
1919+ hal->space_vehicle_updates().connect([this](const std::set<location::SpaceVehicle>& svs)
1920 {
1921 mutable_updates().svs(Update<std::set<location::SpaceVehicle>>(svs));
1922 });
1923@@ -83,12 +77,12 @@
1924
1925 void culg::Provider::start_position_updates()
1926 {
1927- d->hal->start_positioning();
1928+ hal->start_positioning();
1929 }
1930
1931 void culg::Provider::stop_position_updates()
1932 {
1933- d->hal->stop_positioning();
1934+ hal->stop_positioning();
1935 }
1936
1937 void culg::Provider::start_velocity_updates()
1938@@ -109,6 +103,6 @@
1939
1940 void culg::Provider::on_reference_location_updated(const cul::Update<cul::Position>& position)
1941 {
1942- d->hal->inject_reference_position(position.value);
1943+ hal->inject_reference_position(position.value);
1944 }
1945
1946
1947=== modified file 'src/location_service/com/ubuntu/location/providers/gps/provider.h'
1948--- src/location_service/com/ubuntu/location/providers/gps/provider.h 2014-01-20 13:03:19 +0000
1949+++ src/location_service/com/ubuntu/location/providers/gps/provider.h 2015-05-03 15:50:48 +0000
1950@@ -14,6 +14,7 @@
1951 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1952 *
1953 * Authored by: Thomas Voß <thomas.voss@canonical.com>
1954+ * Manuel de la Pena <manuel.delapena@canonical.com>
1955 */
1956 #ifndef LOCATION_SERVICE_COM_UBUNTU_LOCATION_PROVIDERS_GPS_PROVIDER_H_
1957 #define LOCATION_SERVICE_COM_UBUNTU_LOCATION_PROVIDERS_GPS_PROVIDER_H_
1958@@ -60,8 +61,7 @@
1959 void on_reference_location_updated(const Update<Position>& position);
1960
1961 private:
1962- struct Private;
1963- std::unique_ptr<Private> d;
1964+ std::shared_ptr<HardwareAbstractionLayer> hal;
1965 };
1966 }
1967 }
1968
1969=== modified file 'src/location_service/com/ubuntu/location/providers/remote/provider.cpp'
1970--- src/location_service/com/ubuntu/location/providers/remote/provider.cpp 2015-01-26 19:13:52 +0000
1971+++ src/location_service/com/ubuntu/location/providers/remote/provider.cpp 2015-05-03 15:50:48 +0000
1972@@ -66,6 +66,7 @@
1973 try
1974 {
1975 service.run();
1976+ break; // provider has exited correctly
1977 }
1978 catch (const std::exception& e)
1979 {
1980
1981=== modified file 'src/location_service/com/ubuntu/location/providers/skyhook/provider.cpp'
1982--- src/location_service/com/ubuntu/location/providers/skyhook/provider.cpp 2013-12-10 09:42:54 +0000
1983+++ src/location_service/com/ubuntu/location/providers/skyhook/provider.cpp 2015-05-03 15:50:48 +0000
1984@@ -53,71 +53,6 @@
1985 };
1986 }
1987
1988-struct culs::Provider::Private
1989-{
1990- enum class State
1991- {
1992- stopped,
1993- started,
1994- stop_requested
1995- };
1996-
1997- static WPS_Continuation periodic_callback(
1998- void* context,
1999- WPS_ReturnCode code,
2000- const WPS_Location* location,
2001- const void*);
2002-
2003- Private(
2004- const culs::Provider::Configuration& config,
2005- culs::Provider* parent)
2006- : parent(parent),
2007- config(config),
2008- state(State::stopped)
2009- {
2010- }
2011-
2012- void start()
2013- {
2014- if (state != State::stopped)
2015- return;
2016-
2017- if (worker.joinable())
2018- worker.join();
2019-
2020- static const unsigned infinite_iterations = 0;
2021-
2022- authentication.username = config.user_name.c_str();
2023- authentication.realm = config.realm.c_str();
2024-
2025- worker = std::move(std::thread([&]()
2026- {
2027- int rc = WPS_periodic_location(
2028- &authentication,
2029- WPS_NO_STREET_ADDRESS_LOOKUP,
2030- config.period.count(),
2031- infinite_iterations,
2032- culs::Provider::Private::periodic_callback,
2033- this);
2034-
2035- if (rc != WPS_OK)
2036- LOG(ERROR) << return_code_lut.at(rc);
2037- }));
2038-
2039- state = State::started;
2040- }
2041-
2042- void request_stop()
2043- {
2044- state = State::stop_requested;
2045- }
2046-
2047- culs::Provider* parent;
2048- Configuration config;
2049- State state;
2050- WPS_SimpleAuthentication authentication;
2051- std::thread worker;
2052-};
2053
2054 WPS_Continuation culs::Provider::Private::periodic_callback(void* context,
2055 WPS_ReturnCode code,
2056@@ -195,13 +130,44 @@
2057
2058 culs::Provider::Provider(const culs::Provider::Configuration& config)
2059 : com::ubuntu::location::Provider(culs::Provider::default_feature_flags(), culs::Provider::default_requirement_flags()),
2060- d(new Private(config, this))
2061+ config(config),
2062+ state(State::stopped)
2063 {
2064 }
2065
2066 culs::Provider::~Provider() noexcept
2067 {
2068- d->request_stop();
2069+ request_stop();
2070+}
2071+
2072+void culs::Provider::start()
2073+{
2074+ if (state != State::stopped)
2075+ return;
2076+
2077+ if (worker.joinable())
2078+ worker.join();
2079+
2080+ static const unsigned infinite_iterations = 0;
2081+
2082+ authentication.username = config.user_name.c_str();
2083+ authentication.realm = config.realm.c_str();
2084+
2085+ worker = std::move(std::thread([&]()
2086+ {
2087+ int rc = WPS_periodic_location(&authentication, WPS_NO_STREET_ADDRESS_LOOKUP, config.period.count(),
2088+ infinite_iterations, culs::Provider::Private::periodic_callback, this);
2089+
2090+ if (rc != WPS_OK)
2091+ LOG(ERROR) << return_code_lut.at(rc);
2092+ }));
2093+
2094+ state = State::started;
2095+}
2096+
2097+void culs::Provider::request_stop()
2098+{
2099+ state = State::stop_requested;
2100 }
2101
2102 bool culs::Provider::matches_criteria(const cul::Criteria&)
2103@@ -211,30 +177,30 @@
2104
2105 void culs::Provider::start_position_updates()
2106 {
2107- d->start();
2108+ start();
2109 }
2110
2111 void culs::Provider::stop_position_updates()
2112 {
2113- d->request_stop();
2114+ request_stop();
2115 }
2116
2117 void culs::Provider::start_velocity_updates()
2118 {
2119- d->start();
2120+ start();
2121 }
2122
2123 void culs::Provider::stop_velocity_updates()
2124 {
2125- d->request_stop();
2126+ request_stop();
2127 }
2128
2129 void culs::Provider::start_heading_updates()
2130 {
2131- d->start();
2132+ start();
2133 }
2134
2135 void culs::Provider::stop_heading_updates()
2136 {
2137- d->request_stop();
2138+ request_stop();
2139 }
2140
2141=== renamed file 'include/location_service/com/ubuntu/location/providers/skyhook/provider.h' => 'src/location_service/com/ubuntu/location/providers/skyhook/provider.h'
2142--- include/location_service/com/ubuntu/location/providers/skyhook/provider.h 2013-12-10 09:42:54 +0000
2143+++ src/location_service/com/ubuntu/location/providers/skyhook/provider.h 2015-05-03 15:50:48 +0000
2144@@ -14,6 +14,7 @@
2145 * along with this program. If not, see <http://www.gnu.org/licenses/>.
2146 *
2147 * Authored by: Thomas Voß <thomas.voss@canonical.com>
2148+ * Manuel de la Pena <manuel.delapena@canonical.com>
2149 */
2150 #ifndef LOCATION_SERVICE_COM_UBUNTU_LOCATION_PROVIDERS_SKYHOOK_PROVIDER_H_
2151 #define LOCATION_SERVICE_COM_UBUNTU_LOCATION_PROVIDERS_SKYHOOK_PROVIDER_H_
2152@@ -35,6 +36,13 @@
2153 {
2154 class Provider : public com::ubuntu::location::Provider
2155 {
2156+ enum class State
2157+ {
2158+ stopped,
2159+ started,
2160+ stop_requested
2161+ };
2162+
2163 public:
2164 static Provider::Ptr create_instance(const ProviderFactory::Configuration& config);
2165
2166@@ -57,20 +65,33 @@
2167 Provider& operator=(const Provider&) = delete;
2168 ~Provider() noexcept;
2169
2170- virtual bool matches_criteria(const Criteria&);
2171-
2172- virtual void start_position_updates();
2173- virtual void stop_position_updates();
2174-
2175- virtual void start_velocity_updates();
2176- virtual void stop_velocity_updates();
2177-
2178- virtual void start_heading_updates();
2179- virtual void stop_heading_updates();
2180+ virtual bool matches_criteria(const Criteria&) override;
2181+
2182+ virtual void start_position_updates() override;
2183+ virtual void stop_position_updates() override;
2184+
2185+ virtual void start_velocity_updates() override;
2186+ virtual void stop_velocity_updates() override;
2187+
2188+ virtual void start_heading_updates() override;
2189+ virtual void stop_heading_updates() override;
2190+
2191+ private:
2192+ static WPS_Continuation periodic_callback(
2193+ void* context,
2194+ WPS_ReturnCode code,
2195+ const WPS_Location* location,
2196+ const void*);
2197+
2198+ void start();
2199+ void stop();
2200
2201 private:
2202- struct Private;
2203- std::unique_ptr<Private> d;
2204+
2205+ Configuration config;
2206+ State state;
2207+ WPS_SimpleAuthentication authentication;
2208+ std::thread worker;
2209 };
2210 }
2211 }
2212
2213=== modified file 'src/location_service/com/ubuntu/location/service/daemon.cpp'
2214--- src/location_service/com/ubuntu/location/service/daemon.cpp 2015-02-13 13:19:18 +0000
2215+++ src/location_service/com/ubuntu/location/service/daemon.cpp 2015-05-03 15:50:48 +0000
2216@@ -15,6 +15,8 @@
2217 *
2218 * Authored by: Thomas Voß <thomas.voss@canonical.com>
2219 */
2220+
2221+#include <com/ubuntu/location/logging.h>
2222 #include <com/ubuntu/location/boost_ptree_settings.h>
2223 #include <com/ubuntu/location/provider_factory.h>
2224
2225@@ -239,11 +241,32 @@
2226 };
2227
2228 auto location_service = std::make_shared<location::service::Implementation>(configuration);
2229+ // We need to ensure that any exception raised by the executor does not crash the app
2230+ // and also gets logged.
2231+ auto execute = [] (std::shared_ptr<core::dbus::Bus> bus) {
2232+ while(true)
2233+ {
2234+ try
2235+ {
2236+ VLOG(10) << "Starting a bus executor";
2237+ bus->run();
2238+ break; // run() exited normally
2239+ }
2240+ catch (const std::exception& e)
2241+ {
2242+ LOG(WARNING) << e.what();
2243+ }
2244+ catch (...)
2245+ {
2246+ LOG(WARNING) << "Unexpected exception was raised by the bus executor";
2247+ }
2248+ }
2249+ };
2250
2251- std::thread t1{[&config](){config.incoming->run();}};
2252- std::thread t2{[&config](){config.incoming->run();}};
2253- std::thread t3{[&config](){config.incoming->run();}};
2254- std::thread t4{[&config](){config.outgoing->run();}};
2255+ std::thread t1{execute, config.incoming};
2256+ std::thread t2{execute, config.incoming};
2257+ std::thread t3{execute, config.incoming};
2258+ std::thread t4{execute, config.outgoing};
2259
2260 trap->run();
2261
2262
2263=== added file 'src/location_service/com/ubuntu/location/time_based_update_policy.cpp'
2264--- src/location_service/com/ubuntu/location/time_based_update_policy.cpp 1970-01-01 00:00:00 +0000
2265+++ src/location_service/com/ubuntu/location/time_based_update_policy.cpp 2015-05-03 15:50:48 +0000
2266@@ -0,0 +1,121 @@
2267+/*
2268+ * Copyright © 2015 Canonical Ltd.
2269+ *
2270+ * This program is free software: you can redistribute it and/or modify it
2271+ * under the terms of the GNU Lesser General Public License version 3,
2272+ * as published by the Free Software Foundation.
2273+ *
2274+ * This program is distributed in the hope that it will be useful,
2275+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
2276+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2277+ * GNU Lesser General Public License for more details.
2278+ *
2279+ * You should have received a copy of the GNU Lesser General Public License
2280+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
2281+ *
2282+ * Authored by: Manuel de la Pena <manuel.delapena@canonical.com>
2283+ */
2284+
2285+#include "time_based_update_policy.h"
2286+
2287+namespace com
2288+{
2289+namespace ubuntu
2290+{
2291+namespace location
2292+{
2293+
2294+std::chrono::minutes TimeBasedUpdatePolicy::default_timeout()
2295+{
2296+ static const std::chrono::minutes default_limit(2);
2297+ return default_limit;
2298+}
2299+
2300+TimeBasedUpdatePolicy::TimeBasedUpdatePolicy(std::chrono::minutes mins)
2301+ : limit(mins)
2302+{
2303+
2304+}
2305+
2306+const location::Update<location::Position>& TimeBasedUpdatePolicy::verify_update(const location::Update<location::Position>& update)
2307+{
2308+ std::lock_guard<std::mutex> guard(position_update_mutex);
2309+ bool use_new_update;
2310+ if (is_significantly_newer(last_position_update, update, limit))
2311+ {
2312+ use_new_update = true;
2313+ }
2314+ else if (is_significantly_older(last_position_update, update, limit))
2315+ {
2316+ use_new_update = false;
2317+ }
2318+ else
2319+ {
2320+ // if the update has happened within a reasonable amount of time we will just use it if it is more accurate
2321+ // that the previous one.
2322+ use_new_update = last_position_update.value.accuracy.horizontal && update.value.accuracy.horizontal
2323+ && *last_position_update.value.accuracy.horizontal >= *update.value.accuracy.horizontal;
2324+ }
2325+
2326+ if (use_new_update)
2327+ {
2328+ last_position_update = update;
2329+ return update;
2330+ }
2331+ else
2332+ {
2333+ return last_position_update;
2334+ }
2335+}
2336+
2337+
2338+const location::Update<location::Heading>& TimeBasedUpdatePolicy::verify_update(const location::Update<location::Heading>& update)
2339+{
2340+ std::lock_guard<std::mutex> guard(heading_update_mutex);
2341+ bool use_new_update;
2342+ if (is_significantly_newer(last_heading_update, update, limit))
2343+ {
2344+ use_new_update = true;
2345+ }
2346+ else if (is_significantly_older(last_heading_update, update, limit))
2347+ {
2348+ use_new_update = false;
2349+ }
2350+ if (use_new_update)
2351+ {
2352+ last_heading_update = update;
2353+ return update;
2354+ }
2355+ else
2356+ {
2357+ return last_heading_update;
2358+ }
2359+}
2360+
2361+const location::Update<location::Velocity>& TimeBasedUpdatePolicy::verify_update(const location::Update<location::Velocity>& update)
2362+{
2363+ std::lock_guard<std::mutex> guard(velocity_update_mutex);
2364+ bool use_new_update;
2365+ if (is_significantly_newer(last_velocity_update, update, limit))
2366+ {
2367+ use_new_update = true;
2368+ }
2369+ else if (is_significantly_older(last_velocity_update, update, limit))
2370+ {
2371+ use_new_update = false;
2372+ }
2373+
2374+ if (use_new_update)
2375+ {
2376+ last_velocity_update = update;
2377+ return update;
2378+ }
2379+ else
2380+ {
2381+ return last_velocity_update;
2382+ }
2383+}
2384+
2385+}
2386+}
2387+}
2388\ No newline at end of file
2389
2390=== added file 'src/location_service/com/ubuntu/location/time_based_update_policy.h'
2391--- src/location_service/com/ubuntu/location/time_based_update_policy.h 1970-01-01 00:00:00 +0000
2392+++ src/location_service/com/ubuntu/location/time_based_update_policy.h 2015-05-03 15:50:48 +0000
2393@@ -0,0 +1,70 @@
2394+/*
2395+ * Copyright © 2015 Canonical Ltd.
2396+ *
2397+ * This program is free software: you can redistribute it and/or modify it
2398+ * under the terms of the GNU Lesser General Public License version 3,
2399+ * as published by the Free Software Foundation.
2400+ *
2401+ * This program is distributed in the hope that it will be useful,
2402+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
2403+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2404+ * GNU Lesser General Public License for more details.
2405+ *
2406+ * You should have received a copy of the GNU Lesser General Public License
2407+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
2408+ *
2409+ * Authored by: Manuel de la Pena <manuel.delapena@canonical.com>
2410+ */
2411+#ifndef LOCATION_SERVICE_UBUNTU_LOCATION_SERVICE_TIMES_BASED_UPDATE_POLICY_H_
2412+#define LOCATION_SERVICE_UBUNTU_LOCATION_SERVICE_TIMES_BASED_UPDATE_POLICY_H_
2413+
2414+#include <chrono>
2415+#include <mutex>
2416+
2417+#include "update_policy.h"
2418+
2419+namespace com
2420+{
2421+namespace ubuntu
2422+{
2423+namespace location
2424+{
2425+
2426+// An interface that can be implemented to add heuristics on how heading, position or velocity updates will be chosen.
2427+// This class ensures that the best update possible is chosen within a reasonable time bracket.
2428+class TimeBasedUpdatePolicy : public UpdatePolicy {
2429+
2430+ public:
2431+ TimeBasedUpdatePolicy(std::chrono::minutes mins=default_timeout());
2432+ TimeBasedUpdatePolicy(const TimeBasedUpdatePolicy&) = delete;
2433+ ~TimeBasedUpdatePolicy() = default;
2434+
2435+ // Return if the given position update will be verified as the new position in the engine.
2436+ const location::Update<location::Position>& verify_update(const location::Update<location::Position>& update) override;
2437+ // Return if the given heading update will be verified as the new heading in the engine.
2438+ const location::Update<location::Heading>& verify_update(const location::Update<location::Heading>& update) override;
2439+ // Return if the given velocity update will be verified as the new velocity in the engine.
2440+ const location::Update<location::Velocity>& verify_update(const location::Update<location::Velocity>& update) override;
2441+
2442+ static std::chrono::minutes default_timeout();
2443+
2444+ protected:
2445+ // not private to simplify the testing but should be private
2446+ location::Update<location::Position> last_position_update;
2447+ location::Update<location::Heading> last_heading_update;
2448+ location::Update<location::Velocity> last_velocity_update;
2449+
2450+ private:
2451+ // callbacks can happen in diff threads, make sure multi-threading will work in this class
2452+ std::mutex position_update_mutex;
2453+ std::mutex heading_update_mutex;
2454+ std::mutex velocity_update_mutex;
2455+ // used to calculate the time accepted bracket
2456+ std::chrono::minutes limit;
2457+};
2458+
2459+}
2460+}
2461+}
2462+
2463+#endif //LOCATION_SERVICE_UBUNTU_LOCATION_SERVICE_TIMES_BASED_UPDATE_POLICY_H_
2464
2465=== added file 'src/location_service/com/ubuntu/location/update_policy.h'
2466--- src/location_service/com/ubuntu/location/update_policy.h 1970-01-01 00:00:00 +0000
2467+++ src/location_service/com/ubuntu/location/update_policy.h 2015-05-03 15:50:48 +0000
2468@@ -0,0 +1,75 @@
2469+/*
2470+ * Copyright © 2015 Canonical Ltd.
2471+ *
2472+ * This program is free software: you can redistribute it and/or modify it
2473+ * under the terms of the GNU Lesser General Public License version 3,
2474+ * as published by the Free Software Foundation.
2475+ *
2476+ * This program is distributed in the hope that it will be useful,
2477+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
2478+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2479+ * GNU Lesser General Public License for more details.
2480+ *
2481+ * You should have received a copy of the GNU Lesser General Public License
2482+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
2483+ *
2484+ * Authored by: Manuel de la Pena <manuel.delapena@canonical.com>
2485+ */
2486+#ifndef LOCATION_SERVICE_UBUNTU_LOCATION_SERVICE_UPDATE_POLICY_H_
2487+#define LOCATION_SERVICE_UBUNTU_LOCATION_SERVICE_UPDATE_POLICY_H_
2488+
2489+#include <memory>
2490+
2491+#include <com/ubuntu/location/heading.h>
2492+#include <com/ubuntu/location/position.h>
2493+#include <com/ubuntu/location/update.h>
2494+#include <com/ubuntu/location/velocity.h>
2495+
2496+namespace com
2497+{
2498+namespace ubuntu
2499+{
2500+namespace location
2501+{
2502+
2503+// An interface that can be implemented to add heuristics on how heading, position or velocity updateswill be chosen.
2504+// This class allows developers to inject different heuristics in the engine to perform the update selection
2505+// so that the app developers can take advantage of it.
2506+class UpdatePolicy {
2507+ public:
2508+ typedef std::shared_ptr<UpdatePolicy> Ptr;
2509+
2510+ UpdatePolicy(const UpdatePolicy&) = delete;
2511+ UpdatePolicy(UpdatePolicy&&) = delete;
2512+ UpdatePolicy& operator=(const UpdatePolicy&) = delete;
2513+ virtual ~UpdatePolicy() = default;
2514+
2515+ // Return if the given position update will be verified as the new position in the engine.
2516+ virtual const location::Update<location::Position>& verify_update(const location::Update<location::Position>& update) = 0;
2517+ // Return if the given heading update will be verified as the new heading in the engine.
2518+ virtual const location::Update<location::Heading>& verify_update(const location::Update<location::Heading>& update) = 0;
2519+ // Return if the given velocity update will be verified as the new velocity in the engine.
2520+ virtual const location::Update<location::Velocity>& verify_update(const location::Update<location::Velocity>& update) = 0;
2521+ protected:
2522+ UpdatePolicy() = default;
2523+
2524+ template <class T> bool is_significantly_newer(const location::Update<T> last_update, const location::Update<T> update, std::chrono::minutes limit) const
2525+ {
2526+ auto delta = update.when - last_update.when;
2527+ return delta > limit;
2528+ }
2529+
2530+ template <class T> bool is_significantly_older(const location::Update<T> last_update, const location::Update<T> update, std::chrono::minutes limit) const
2531+ {
2532+ auto delta = update.when - last_update.when;
2533+ return delta < (-1 * limit);
2534+ }
2535+
2536+
2537+};
2538+}
2539+}
2540+}
2541+
2542+#endif // LOCATION_SERVICE_UBUNTU_LOCATION_SERVICE_UPDATE_POLICY_H_
2543+
2544
2545=== modified file 'tests/CMakeLists.txt'
2546--- tests/CMakeLists.txt 2014-11-14 11:26:45 +0000
2547+++ tests/CMakeLists.txt 2015-05-03 15:50:48 +0000
2548@@ -80,6 +80,7 @@
2549 LOCATION_SERVICE_ADD_TEST(engine_test engine_test.cpp)
2550 LOCATION_SERVICE_ADD_TEST(harvester_test harvester_test.cpp)
2551 LOCATION_SERVICE_ADD_TEST(demultiplexing_reporter_test demultiplexing_reporter_test.cpp)
2552+LOCATION_SERVICE_ADD_TEST(time_based_update_policy_test time_based_update_policy_test.cpp)
2553
2554 if (NET_CPP_FOUND)
2555 LOCATION_SERVICE_ADD_TEST(ichnaea_reporter_test ichnaea_reporter_test.cpp)
2556
2557=== added file 'tests/time_based_update_policy_test.cpp'
2558--- tests/time_based_update_policy_test.cpp 1970-01-01 00:00:00 +0000
2559+++ tests/time_based_update_policy_test.cpp 2015-05-03 15:50:48 +0000
2560@@ -0,0 +1,131 @@
2561+/*
2562+ * Copyright © 2015 Canonical Ltd.
2563+ *
2564+ * This program is free software: you can redistribute it and/or modify it
2565+ * under the terms of the GNU Lesser General Public License version 3,
2566+ * as published by the Free Software Foundation.
2567+ *
2568+ * This program is distributed in the hope that it will be useful,
2569+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
2570+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2571+ * GNU Lesser General Public License for more details.
2572+ *
2573+ * You should have received a copy of the GNU Lesser General Public License
2574+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
2575+ *
2576+ * Authored by: Manuel de la Pena <manuel.delapena@canonical.com>
2577+ */
2578+#include <com/ubuntu/location/time_based_update_policy.h>
2579+
2580+#include <gtest/gtest.h>
2581+
2582+using namespace ::testing;
2583+namespace cul = com::ubuntu::location;
2584+
2585+namespace
2586+{
2587+ auto timestamp = com::ubuntu::location::Clock::now();
2588+
2589+ com::ubuntu::location::Update<com::ubuntu::location::Position> reference_position_update
2590+ {
2591+ {
2592+ com::ubuntu::location::wgs84::Latitude{9. * com::ubuntu::location::units::Degrees},
2593+ com::ubuntu::location::wgs84::Longitude{53. * com::ubuntu::location::units::Degrees},
2594+ com::ubuntu::location::wgs84::Altitude{-2. * com::ubuntu::location::units::Meters},
2595+ },
2596+ timestamp
2597+ };
2598+}
2599+
2600+// make certain internal details public so that we can set the last update
2601+class PublicTimeBasedUpdatePolicy : public cul::TimeBasedUpdatePolicy {
2602+ public:
2603+ PublicTimeBasedUpdatePolicy(std::chrono::minutes mins) : cul::TimeBasedUpdatePolicy(mins) {}
2604+ using cul::TimeBasedUpdatePolicy::last_position_update;
2605+ using cul::TimeBasedUpdatePolicy::last_heading_update;
2606+ using cul::TimeBasedUpdatePolicy::last_velocity_update;
2607+};
2608+
2609+TEST(TimeBasedUpdatePolicy, policy_ignores_updates_that_are_too_old)
2610+{
2611+ auto policy = std::make_shared<PublicTimeBasedUpdatePolicy>(std::chrono::minutes(2));
2612+ policy->last_position_update = reference_position_update;
2613+
2614+ com::ubuntu::location::Update<com::ubuntu::location::Position> old_update
2615+ {
2616+ {
2617+ com::ubuntu::location::wgs84::Latitude{10. * com::ubuntu::location::units::Degrees},
2618+ com::ubuntu::location::wgs84::Longitude{60. * com::ubuntu::location::units::Degrees},
2619+ com::ubuntu::location::wgs84::Altitude{10. * com::ubuntu::location::units::Meters}
2620+ },
2621+ timestamp - std::chrono::minutes(5)
2622+ };
2623+ policy->verify_update(old_update);
2624+
2625+ ASSERT_NE(policy->last_position_update.value.latitude, old_update.value.latitude);
2626+ ASSERT_EQ(policy->last_position_update.value.latitude, reference_position_update.value.latitude);
2627+
2628+ ASSERT_NE(policy->last_position_update.value.longitude, old_update.value.longitude);
2629+ ASSERT_EQ(policy->last_position_update.value.longitude, reference_position_update.value.longitude);
2630+
2631+ ASSERT_NE(policy->last_position_update.value.altitude, old_update.value.altitude);
2632+ ASSERT_EQ(policy->last_position_update.value.altitude, reference_position_update.value.altitude);
2633+}
2634+
2635+TEST(TimeBasedUpdatePolicy, policy_uses_very_recent_updates)
2636+{
2637+ auto policy = std::make_shared<PublicTimeBasedUpdatePolicy>(std::chrono::minutes(2));
2638+
2639+ policy->last_position_update = reference_position_update;
2640+
2641+ com::ubuntu::location::Update<com::ubuntu::location::Position> new_update
2642+ {
2643+ {
2644+ com::ubuntu::location::wgs84::Latitude{10. * com::ubuntu::location::units::Degrees},
2645+ com::ubuntu::location::wgs84::Longitude{60. * com::ubuntu::location::units::Degrees},
2646+ com::ubuntu::location::wgs84::Altitude{10. * com::ubuntu::location::units::Meters}
2647+ },
2648+ timestamp + std::chrono::minutes(3)
2649+ };
2650+
2651+ policy->verify_update(new_update);
2652+
2653+ ASSERT_EQ(policy->last_position_update.value.latitude, new_update.value.latitude);
2654+ ASSERT_NE(policy->last_position_update.value.latitude, reference_position_update.value.latitude);
2655+
2656+ ASSERT_EQ(policy->last_position_update.value.longitude, new_update.value.longitude);
2657+ ASSERT_NE(policy->last_position_update.value.longitude, reference_position_update.value.longitude);
2658+
2659+ ASSERT_EQ(policy->last_position_update.value.altitude, new_update.value.altitude);
2660+ ASSERT_NE(policy->last_position_update.value.altitude, reference_position_update.value.altitude);
2661+}
2662+
2663+TEST(TimeBasedUpdatePolicy, policy_ignores_inaccurate_updates)
2664+{
2665+ auto policy = std::make_shared<PublicTimeBasedUpdatePolicy>(std::chrono::minutes(2));
2666+ reference_position_update.value.accuracy.horizontal = 1. * com::ubuntu::location::units::Meters;
2667+ policy->last_position_update = reference_position_update;
2668+
2669+ com::ubuntu::location::Update<com::ubuntu::location::Position> new_update
2670+ {
2671+ {
2672+ com::ubuntu::location::wgs84::Latitude{10. * com::ubuntu::location::units::Degrees},
2673+ com::ubuntu::location::wgs84::Longitude{60. * com::ubuntu::location::units::Degrees},
2674+ com::ubuntu::location::wgs84::Altitude{10. * com::ubuntu::location::units::Meters},
2675+ },
2676+ timestamp + std::chrono::minutes(1)
2677+ };
2678+ new_update.value.accuracy.horizontal = 8. * com::ubuntu::location::units::Meters;
2679+
2680+ policy->verify_update(new_update);
2681+ ASSERT_TRUE(*new_update.value.accuracy.horizontal > *reference_position_update.value.accuracy.horizontal);
2682+
2683+ ASSERT_NE(policy->last_position_update.value.latitude, new_update.value.latitude);
2684+ ASSERT_EQ(policy->last_position_update.value.latitude, reference_position_update.value.latitude);
2685+
2686+ ASSERT_NE(policy->last_position_update.value.longitude, new_update.value.longitude);
2687+ ASSERT_EQ(policy->last_position_update.value.longitude, reference_position_update.value.longitude);
2688+
2689+ ASSERT_NE(policy->last_position_update.value.altitude, new_update.value.altitude);
2690+ ASSERT_EQ(policy->last_position_update.value.altitude, reference_position_update.value.altitude);
2691+}

Subscribers

People subscribed via source and target branches