indicator-location-13.10.0+16.04.20160218/ 0000755 0000156 0000165 00000000000 12661375163 020014 5 ustar pbuser pbgroup 0000000 0000000 indicator-location-13.10.0+16.04.20160218/cmake/ 0000755 0000156 0000165 00000000000 12661375163 021074 5 ustar pbuser pbgroup 0000000 0000000 indicator-location-13.10.0+16.04.20160218/cmake/Translations.cmake 0000644 0000156 0000165 00000003042 12661374651 024557 0 ustar pbuser pbgroup 0000000 0000000 # Translations.cmake, CMake macros written for Marlin, feel free to re-use them
macro(add_translations_directory NLS_PACKAGE)
add_custom_target (i18n ALL)
find_program (MSGFMT_EXECUTABLE msgfmt)
file (GLOB PO_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.po)
foreach (PO_INPUT ${PO_FILES})
get_filename_component (PO_INPUT_BASE ${PO_INPUT} NAME_WE)
set (MO_OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${PO_INPUT_BASE}.mo)
add_custom_command (TARGET i18n COMMAND ${MSGFMT_EXECUTABLE} -o ${MO_OUTPUT} ${PO_INPUT})
install (FILES ${MO_OUTPUT} DESTINATION
${CMAKE_INSTALL_LOCALEDIR}/${PO_INPUT_BASE}/LC_MESSAGES
RENAME ${NLS_PACKAGE}.mo)
endforeach (PO_INPUT ${PO_FILES})
endmacro(add_translations_directory)
macro(add_translations_catalog NLS_PACKAGE)
add_custom_target (pot COMMENT “Building translation catalog.”)
find_program (XGETTEXT_EXECUTABLE xgettext)
# init this list, which will hold all the sources across all dirs
set(SOURCES "")
# add each directory's sources to the overall sources list
foreach(FILES_INPUT ${ARGN})
set (DIR ${CMAKE_CURRENT_SOURCE_DIR}/${FILES_INPUT})
file (GLOB_RECURSE DIR_SOURCES ${DIR}/*.c ${DIR}/*.cc ${DIR}/*.cpp ${DIR}/*.cxx ${DIR}/*.vala)
set (SOURCES ${SOURCES} ${DIR_SOURCES})
endforeach()
add_custom_command (TARGET pot COMMAND
${XGETTEXT_EXECUTABLE} -d ${NLS_PACKAGE} -o ${CMAKE_CURRENT_SOURCE_DIR}/${NLS_PACKAGE}.pot
${SOURCES} --keyword="_" --keyword="N_" --from-code=UTF-8
)
endmacro()
indicator-location-13.10.0+16.04.20160218/cmake/GCov.cmake 0000644 0000156 0000165 00000005301 12661374651 022734 0 ustar pbuser pbgroup 0000000 0000000 if (CMAKE_BUILD_TYPE MATCHES coverage)
set(LCOV_RAW_FILE "lcov-raw.info")
set(LCOV_FILE "lcov.info")
set(GCOV_FLAGS "${GCOV_FLAGS} --coverage")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${GCOV_FLAGS}")
set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${GCOV_FLAGS}")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${GCOV_FLAGS}")
set(GCOV_LIBS ${GCOV_LIBS} gcov)
find_program(GCOVR_EXECUTABLE gcovr HINTS ${GCOVR_ROOT} "${GCOVR_ROOT}/bin")
if (NOT GCOVR_EXECUTABLE)
message(STATUS "Gcovr binary was not found, can not generate XML coverage info.")
else ()
message(STATUS "Gcovr found, can generate XML coverage info.")
add_custom_target (coverage-xml
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
COMMAND "${GCOVR_EXECUTABLE}" --exclude="test.*" -x -r "${CMAKE_SOURCE_DIR}"
--object-directory=${CMAKE_BINARY_DIR} -o coverage.xml)
endif()
find_program(LCOV_EXECUTABLE lcov HINTS ${LCOV_ROOT} "${GCOVR_ROOT}/bin")
find_program(GENHTML_EXECUTABLE genhtml HINTS ${GENHTML_ROOT})
if (NOT LCOV_EXECUTABLE)
message(STATUS "Lcov binary was not found, can not generate HTML coverage info.")
else ()
if(NOT GENHTML_EXECUTABLE)
message(STATUS "Genthml binary not found, can not generate HTML coverage info.")
else()
message(STATUS "Lcov and genhtml found, can generate HTML coverage info.")
add_custom_target (coverage-html
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
COMMAND "${CMAKE_CTEST_COMMAND}" --force-new-ctest-process --verbose
# generate the raw lcov data
COMMAND "${LCOV_EXECUTABLE}" --directory ${CMAKE_BINARY_DIR} --capture -o ${LCOV_RAW_FILE}
# FIXME: when ubuntu gets lcov 1.10 we can use --no-external instead of the brittle --remove
COMMAND "${LCOV_EXECUTABLE}" --remove ${LCOV_RAW_FILE} "/usr/include/*" | ${CMAKE_SOURCE_DIR}/trim-lcov.py > ${LCOV_FILE}
COMMAND LANG=C "${GENHTML_EXECUTABLE}" --prefix ${CMAKE_BINARY_DIR} --output-directory lcov-html --legend --show-details ${LCOV_FILE}
COMMAND ${CMAKE_COMMAND} -E echo ""
COMMAND ${CMAKE_COMMAND} -E echo "file://${CMAKE_BINARY_DIR}/lcov-html/index.html"
COMMAND ${CMAKE_COMMAND} -E echo ""
VERBATIM) # VERBATIM is necessary here for the wildcard in --remove... again, when we go to lcov 1.10 we can drop this
#)
endif()
endif()
endif()
#$(MAKE) $(AM_MAKEFLAGS) check
#lcov --directory $(top_builddir) --capture --test-name dconf | $(top_srcdir)/trim-lcov.py > dconf-lcov.info
#LANG=C genhtml --prefix $(top_builddir) --output-directory lcov-html --legend --show-details dconf-lcov.info
#@echo
#@echo " file://$(abs_top_builddir)/lcov-html/index.html"
#@echo
indicator-location-13.10.0+16.04.20160218/_clang-format 0000644 0000156 0000165 00000002623 12661374724 022455 0 ustar pbuser pbgroup 0000000 0000000 ---
AccessModifierOffset: -4
AlignEscapedNewlinesLeft: true
AlignTrailingComments: true
AllowAllParametersOfDeclarationOnNextLine: true
AllowShortFunctionsOnASingleLine: false
AllowShortIfStatementsOnASingleLine: false
AllowShortLoopsOnASingleLine: false
AlwaysBreakBeforeMultilineStrings: true
AlwaysBreakTemplateDeclarations: true
BinPackParameters: false
BreakBeforeBinaryOperators: false
BreakBeforeBraces: Allman
BreakBeforeTernaryOperators: false
BreakConstructorInitializersBeforeComma: true
ColumnLimit: 120
ConstructorInitializerAllOnOneLineOrOnePerLine: false
ConstructorInitializerIndentWidth: 4
ContinuationIndentWidth: 4
Cpp11BracedListStyle: true
DerivePointerBinding: true
ExperimentalAutoDetectBinPacking: false
IndentCaseLabels: true
IndentFunctionDeclarationAfterType: true
IndentWidth: 4
Language: Cpp
MaxEmptyLinesToKeep: 1
NamespaceIndentation: None
ObjCSpaceBeforeProtocolList: false
PenaltyBreakBeforeFirstCallParameter: 1
PenaltyBreakComment: 60
PenaltyBreakFirstLessLess: 120
PenaltyBreakString: 1000
PenaltyExcessCharacter: 1000000
PenaltyReturnTypeOnItsOwnLine: 200
PointerBindsToType: true
SpaceBeforeAssignmentOperators: true
SpaceBeforeParens: ControlStatements
SpaceInEmptyParentheses: false
SpacesBeforeTrailingComments: 2
SpacesInAngles: false
SpacesInCStyleCastParentheses: false
SpacesInParentheses: false
Standard: Cpp11
TabWidth: 8
UseTab: Never
...
indicator-location-13.10.0+16.04.20160218/tests/ 0000755 0000156 0000165 00000000000 12661375163 021156 5 ustar pbuser pbgroup 0000000 0000000 indicator-location-13.10.0+16.04.20160218/tests/gtest-dbus-indicator-fixture.h 0000644 0000156 0000165 00000021676 12661374724 027064 0 ustar pbuser pbgroup 0000000 0000000 /*
* Copyright 2013-2016 Canonical Ltd.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 3.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see .
*
* Authors:
* Charles Kerr
*/
#pragma once
#include "src/dbus-shared.h"
#include "gtest-dbus-fixture.h"
class GTestDBusIndicatorFixture : public GTestDBusFixture
{
typedef GTestDBusFixture super;
enum
{
TIME_LIMIT_SEC = 10
};
private:
static void on_name_appeared(GDBusConnection* connection G_GNUC_UNUSED,
const gchar* name G_GNUC_UNUSED,
const gchar* name_owner G_GNUC_UNUSED,
gpointer gself)
{
g_main_loop_quit(static_cast(gself)->loop);
}
GSList* menu_references;
gboolean any_item_changed;
static void on_items_changed(GMenuModel* model G_GNUC_UNUSED,
gint position G_GNUC_UNUSED,
gint removed G_GNUC_UNUSED,
gint added G_GNUC_UNUSED,
gpointer gany_item_changed)
{
*static_cast(gany_item_changed) = true;
}
protected:
void activate_subtree(GMenuModel* model)
{
// query the GDBusMenuModel for information to activate it
int n = g_menu_model_get_n_items(model);
if (!n)
{
// give the model a moment to populate its info
wait_msec(100);
n = g_menu_model_get_n_items(model);
}
// keep a ref so that it stays activated
menu_references = g_slist_prepend(menu_references, g_object_ref(model));
g_signal_connect(model, "items-changed", G_CALLBACK(on_items_changed), &any_item_changed);
// recurse
for (int i = 0; i < n; ++i)
{
GMenuModel* link;
GMenuLinkIter* iter = g_menu_model_iterate_item_links(model, i);
while (g_menu_link_iter_get_next(iter, nullptr, &link))
{
activate_subtree(link);
g_object_unref(link);
}
g_clear_object(&iter);
}
}
void sync_menu(void)
{
g_slist_free_full(menu_references, GDestroyNotify(g_object_unref));
menu_references = nullptr;
activate_subtree(G_MENU_MODEL(menu_model));
}
GDBusMenuModel* menu_model;
GDBusActionGroup* action_group;
GTimer* timer;
virtual void setup_service() = 0;
virtual void teardown_service() = 0;
virtual void SetUp()
{
super::SetUp();
menu_references = nullptr;
any_item_changed = FALSE;
timer = g_timer_new();
// Start an IndicatorSessionService and wait for it to appear on the bus.
setup_service();
const guint watch_id = g_bus_watch_name_on_connection(conn, INDICATOR_BUS_NAME, G_BUS_NAME_WATCHER_FLAGS_NONE,
on_name_appeared, // quits the loop
nullptr, this, nullptr);
const guint timer_id = g_timeout_add_seconds(TIME_LIMIT_SEC, GSourceFunc(g_main_loop_quit), loop);
g_main_loop_run(loop);
g_source_remove(timer_id);
g_bus_unwatch_name(watch_id);
ASSERT_FALSE(times_up());
// get the actions & menus that the service exported.
action_group = g_dbus_action_group_get(conn, INDICATOR_BUS_NAME, INDICATOR_OBJECT_PATH);
menu_model = g_dbus_menu_model_get(conn, INDICATOR_BUS_NAME, INDICATOR_OBJECT_PATH "/" INDICATOR_PROFILE);
// the actions are added asynchronously, so wait for the actions
if (!g_action_group_has_action(G_ACTION_GROUP(action_group), INDICATOR_PROFILE "-header"))
{
wait_for_signal(action_group, "action-added");
}
// activate all the groups in the menu so it'll be ready when we need it
g_signal_connect(menu_model, "items-changed", G_CALLBACK(on_items_changed), &any_item_changed);
sync_menu();
}
virtual void TearDown()
{
g_clear_pointer(&timer, g_timer_destroy);
g_slist_free_full(menu_references, GDestroyNotify(g_object_unref));
menu_references = nullptr;
g_clear_object(&menu_model);
g_clear_object(&action_group);
teardown_service();
wait_msec(100);
super::TearDown();
}
private:
bool times_up() const
{
return g_timer_elapsed(timer, nullptr) >= TIME_LIMIT_SEC;
}
protected:
void wait_for_has_action(const char* name)
{
while (!g_action_group_has_action(G_ACTION_GROUP(action_group), name) && !times_up())
{
wait_msec(50);
}
ASSERT_FALSE(times_up());
ASSERT_TRUE(g_action_group_has_action(G_ACTION_GROUP(action_group), name));
}
void wait_for_menu_resync(void)
{
any_item_changed = false;
while (!times_up() && !any_item_changed)
{
wait_msec(50);
}
g_warn_if_fail(any_item_changed);
sync_menu();
}
void wait_for_action_state_change(const gchar* action_name)
{
gchar* signal_name = g_strdup_printf("action-state-changed::%s", action_name);
wait_for_signal(action_group, signal_name);
g_free(signal_name);
}
void wait_for_action_enabled_change(const gchar* action_name)
{
gchar* signal_name = g_strdup_printf("action-enabled-changed::%s", action_name);
wait_for_signal(action_group, signal_name);
g_free(signal_name);
}
protected:
bool find_menu_item_for_action(const char* action_key, GMenuModel** setme, int* item_index)
{
bool success = false;
for (GSList* l = menu_references; !success && (l != nullptr); l = l->next)
{
GMenuModel* mm = G_MENU_MODEL(l->data);
const int n = g_menu_model_get_n_items(mm);
for (int i = 0; !success && i < n; ++i)
{
char* action = nullptr;
if (!g_menu_model_get_item_attribute(mm, i, G_MENU_ATTRIBUTE_ACTION, "s", &action))
{
continue;
}
if ((success = !g_strcmp0(action, action_key)))
{
if (setme != nullptr)
{
*setme = G_MENU_MODEL(g_object_ref(G_OBJECT(mm)));
}
if (item_index != nullptr)
{
*item_index = i;
}
}
g_free(action);
}
}
return success;
}
bool action_exists(const char* action_name)
{
#if 0
gchar** actions = g_action_group_list_actions (G_ACTION_GROUP (action_group));
for (int i=0; actions && actions[i]; i++)
{
g_message ("[%d][%s]", i, actions[i]);
}
#endif
return g_action_group_has_action(G_ACTION_GROUP(action_group), action_name);
}
bool action_menuitem_exists(const char* action_name)
{
bool found;
GMenuModel* model = nullptr;
int pos = -1;
if ((found = find_menu_item_for_action(action_name, &model, &pos)))
{
g_object_unref(G_OBJECT(model));
}
return found;
}
void check_header(const char* expected_label, const char* expected_icon, const char* expected_a11y)
{
GVariant* variant;
const gchar* label = nullptr;
const gchar* icon = nullptr;
const gchar* a11y = nullptr;
gboolean visible;
variant = g_action_group_get_action_state(G_ACTION_GROUP(action_group), "_header");
g_variant_get(variant, "(&s&s&sb)", &label, &icon, &a11y, &visible);
if (expected_label != nullptr)
{
ASSERT_STREQ(expected_label, label);
}
if (expected_icon != nullptr)
{
ASSERT_STREQ(expected_icon, icon);
}
if (expected_a11y != nullptr)
{
ASSERT_STREQ(expected_a11y, a11y);
}
// the session menu is always visible...
ASSERT_TRUE(visible);
g_variant_unref(variant);
}
void check_label(const char* expected_label, GMenuModel* model, int pos)
{
char* label = nullptr;
ASSERT_TRUE(g_menu_model_get_item_attribute(model, pos, G_MENU_ATTRIBUTE_LABEL, "s", &label));
ASSERT_STREQ(expected_label, label);
g_free(label);
}
};
indicator-location-13.10.0+16.04.20160218/tests/controller-mock.h 0000644 0000156 0000165 00000003170 12661374724 024444 0 ustar pbuser pbgroup 0000000 0000000 /*
* Copyright 2013-2016 Canonical Ltd.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 3.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see .
*
* Authors:
* Charles Kerr
*/
#pragma once
#include
class MockController : public Controller
{
public:
MockController() = default;
virtual ~MockController() = default;
core::Property& is_valid()
{
return m_is_valid;
}
const core::Property& is_valid() const override
{
return m_is_valid;
}
const core::Property& gps_enabled() const override
{
return m_gps_enabled;
}
const core::Property& location_service_enabled() const override
{
return m_location_service_enabled;
}
void set_gps_enabled(bool enabled) override
{
m_gps_enabled = enabled;
}
void set_location_service_enabled(bool enabled) override
{
m_location_service_enabled = enabled;
}
private:
core::Property m_is_valid{true};
core::Property m_gps_enabled{false};
core::Property m_location_service_enabled{false};
};
indicator-location-13.10.0+16.04.20160218/tests/phone-test.cc 0000644 0000156 0000165 00000030273 12661374724 023562 0 ustar pbuser pbgroup 0000000 0000000 /*
* Copyright 2013-2016 Canonical Ltd.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 3.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see .
*
* Authors:
* Charles Kerr
*/
// must be defined before including gtest-dbus-indicator-fixture
#define INDICATOR_PROFILE "phone"
#include "gtest-dbus-indicator-fixture.h"
#include "controller-mock.h"
#include "src/dbus-shared.h"
#include "src/service.h"
class PhoneTest : public GTestDBusIndicatorFixture
{
protected:
bool loc_enabled;
bool loc_enabled_changed;
bool gps_enabled;
bool gps_enabled_changed;
std::shared_ptr myController;
std::shared_ptr myService;
std::vector myConnections;
public:
void clear_callbacks()
{
gps_enabled = false;
gps_enabled_changed = false;
loc_enabled = false;
loc_enabled_changed = false;
}
virtual void on_gps_enabled_changed(bool is_enabled)
{
gps_enabled_changed = true;
gps_enabled = is_enabled;
}
virtual void on_location_service_enabled_changed(bool is_enabled)
{
loc_enabled_changed = true;
loc_enabled = is_enabled;
}
protected:
virtual void SetUp()
{
GTestDBusIndicatorFixture::SetUp();
clear_callbacks();
}
virtual void setup_service()
{
myController.reset(new MockController());
myService.reset(new Service(myController));
myConnections.push_back(myController->gps_enabled().changed().connect([this](bool enabled)
{
gps_enabled_changed = true;
gps_enabled = enabled;
}));
myConnections.push_back(myController->location_service_enabled().changed().connect([this](bool enabled)
{
loc_enabled_changed =
true;
loc_enabled = enabled;
}));
}
virtual void teardown_service()
{
myService.reset();
myConnections.clear();
myController.reset();
}
};
TEST_F(PhoneTest, ActionsExit)
{
ASSERT_TRUE(action_exists("gps-detection-enabled"));
ASSERT_TRUE(action_exists("location-detection-enabled"));
ASSERT_TRUE(action_exists("phone-header"));
ASSERT_TRUE(action_exists("settings"));
}
TEST_F(PhoneTest, MenuitemsExist)
{
ASSERT_TRUE(action_menuitem_exists("indicator.location-detection-enabled"));
ASSERT_FALSE(action_menuitem_exists("indicator.gps-detection-enabled"));
ASSERT_TRUE(action_menuitem_exists("indicator.settings"));
}
TEST_F(PhoneTest, IsValidEnabled)
{
bool is_valid = myController->is_valid().get();
auto ag = G_ACTION_GROUP(action_group);
constexpr int n_iters = 4;
const std::array action_names = {"gps-detection-enabled", "location-detection-enabled"};
// test that the loc/gps actions are enabled/disabled based on controller->is_valid()
for (int i = 0; i < n_iters; ++i)
{
is_valid = !is_valid;
myController->is_valid().set(is_valid);
wait_for_action_enabled_change(action_names[0]);
for (const auto& action_name : action_names)
{
EXPECT_EQ(is_valid, g_action_group_get_action_enabled(ag, action_name));
}
}
}
TEST_F(PhoneTest, IsValidVisible)
{
// make sure something's enabled so that the indicator should be visible
if (!myController->location_service_enabled().get())
{
myController->set_location_service_enabled(true);
wait_for_action_state_change("location-detection-enabled");
}
// test the header's 'invisible' entry tracks the controller's is_valid() state
constexpr int n_iters = 4;
const char* header_action_name = INDICATOR_PROFILE "-header";
auto ag = G_ACTION_GROUP(action_group);
for (int i = 0; i < n_iters; ++i)
{
myController->is_valid().set(!myController->is_valid().get());
wait_for_action_state_change(header_action_name);
auto dict = g_action_group_get_action_state(ag, header_action_name);
EXPECT_TRUE(dict != nullptr);
EXPECT_TRUE(g_variant_is_of_type(dict, G_VARIANT_TYPE_VARDICT));
auto v = g_variant_lookup_value(dict, "visible", G_VARIANT_TYPE_BOOLEAN);
EXPECT_TRUE(v != nullptr);
EXPECT_EQ(myController->is_valid().get(), g_variant_get_boolean(v));
g_clear_pointer(&v, g_variant_unref);
g_clear_pointer(&dict, g_variant_unref);
}
}
TEST_F(PhoneTest, PlatformTogglesGPS)
{
bool enabled;
const char* const key = "gps-detection-enabled";
GActionGroup* ag = G_ACTION_GROUP(action_group);
GVariant* v;
// check that the current state is the default value of 'false'
v = g_action_group_get_action_state(ag, key);
ASSERT_TRUE(v != nullptr);
enabled = g_variant_get_boolean(v);
g_variant_unref(v);
ASSERT_FALSE(enabled);
// confirm that toggling the mock controller's GPS is reflected in the action state
for (int i = 0; i < 4; i++)
{
enabled = !enabled;
myController->set_gps_enabled(enabled);
wait_for_action_state_change(key);
v = g_action_group_get_action_state(ag, key);
ASSERT_TRUE(v != nullptr);
ASSERT_EQ(enabled, g_variant_get_boolean(v));
g_variant_unref(v);
}
}
TEST_F(PhoneTest, UserTogglesGPS)
{
bool enabled;
const char* const key = "gps-detection-enabled";
GActionGroup* ag = G_ACTION_GROUP(action_group);
GVariant* v;
// check that the current state is the default value of 'false'
v = g_action_group_get_action_state(ag, key);
ASSERT_TRUE(v != nullptr);
enabled = g_variant_get_boolean(v);
g_variant_unref(v);
ASSERT_FALSE(enabled);
// confirm that toggling menu updates the controller
for (int i = 0; i < 4; i++)
{
clear_callbacks();
g_action_group_activate_action(ag, key, nullptr);
while (!gps_enabled_changed)
{
wait_msec(50);
}
ASSERT_TRUE(gps_enabled_changed);
enabled = !enabled;
ASSERT_EQ(enabled, gps_enabled);
}
}
TEST_F(PhoneTest, PlatformTogglesLocation)
{
bool enabled;
const char* const key = "location-detection-enabled";
GActionGroup* ag = G_ACTION_GROUP(action_group);
GVariant* v;
// check that the current state is the default value of 'false'
v = g_action_group_get_action_state(ag, key);
ASSERT_TRUE(v != nullptr);
enabled = g_variant_get_boolean(v);
g_variant_unref(v);
ASSERT_FALSE(enabled);
// confirm that toggling the mock controller's GPS is reflected in the action state
for (int i = 0; i < 4; i++)
{
enabled = !enabled;
myController->set_location_service_enabled(enabled);
wait_for_action_state_change(key);
v = g_action_group_get_action_state(ag, key);
ASSERT_TRUE(v != nullptr);
ASSERT_EQ(enabled, g_variant_get_boolean(v));
g_variant_unref(v);
}
}
TEST_F(PhoneTest, UserTogglesLocation)
{
bool enabled;
const char* const key = "location-detection-enabled";
GActionGroup* ag = G_ACTION_GROUP(action_group);
GVariant* v;
// check that the current state is the default value of 'false'
v = g_action_group_get_action_state(ag, key);
ASSERT_TRUE(v != nullptr);
enabled = g_variant_get_boolean(v);
g_variant_unref(v);
ASSERT_FALSE(enabled);
// confirm that toggling menu updates the controller
for (int i = 0; i < 4; i++)
{
clear_callbacks();
g_action_group_activate_action(ag, key, nullptr);
while (!loc_enabled_changed)
{
wait_msec(50);
}
ASSERT_TRUE(loc_enabled_changed);
enabled = !enabled;
ASSERT_EQ(enabled, loc_enabled);
}
}
TEST_F(PhoneTest, Header)
{
wait_msec();
auto connection = g_bus_get_sync(G_BUS_TYPE_SESSION, nullptr, nullptr);
// SETUP: get the action group and wait for it to be populated
auto dbus_action_group = g_dbus_action_group_get(connection, INDICATOR_BUS_NAME, INDICATOR_OBJECT_PATH);
auto action_group = G_ACTION_GROUP(dbus_action_group);
auto names_strv = g_action_group_list_actions(action_group);
if (g_strv_length(names_strv) == 0)
{
g_strfreev(names_strv);
wait_for_signal(dbus_action_group, "action-added");
names_strv = g_action_group_list_actions(action_group);
}
g_clear_pointer(&names_strv, g_strfreev);
// SETUP: get the menu model and wait for it to be activated
auto dbus_menu_model =
g_dbus_menu_model_get(connection, INDICATOR_BUS_NAME, INDICATOR_OBJECT_PATH "/" INDICATOR_PROFILE);
auto menu_model = G_MENU_MODEL(dbus_menu_model);
int n = g_menu_model_get_n_items(menu_model);
if (!n)
{
// give the model a moment to populate its info
wait_msec(100);
n = g_menu_model_get_n_items(menu_model);
}
EXPECT_TRUE(menu_model != nullptr);
EXPECT_NE(0, n);
// test to confirm that a header menuitem exists
gchar* str = nullptr;
g_menu_model_get_item_attribute(menu_model, 0, "x-canonical-type", "s", &str);
EXPECT_STREQ("com.canonical.indicator.root", str);
g_clear_pointer(&str, g_free);
g_menu_model_get_item_attribute(menu_model, 0, G_MENU_ATTRIBUTE_ACTION, "s", &str);
const auto action_name = INDICATOR_PROFILE "-header";
EXPECT_EQ(std::string("indicator.") + action_name, str);
g_clear_pointer(&str, g_free);
// cursory first look at the header
auto dict = g_action_group_get_action_state(action_group, action_name);
EXPECT_TRUE(dict != nullptr);
EXPECT_TRUE(g_variant_is_of_type(dict, G_VARIANT_TYPE_VARDICT));
auto v = g_variant_lookup_value(dict, "accessible-desc", G_VARIANT_TYPE_STRING);
EXPECT_TRUE(v != nullptr);
g_variant_unref(v);
v = g_variant_lookup_value(dict, "title", G_VARIANT_TYPE_STRING);
EXPECT_TRUE(v != nullptr);
g_variant_unref(v);
v = g_variant_lookup_value(dict, "visible", G_VARIANT_TYPE_BOOLEAN);
EXPECT_TRUE(v != nullptr);
g_clear_pointer(&v, g_variant_unref);
g_clear_pointer(&dict, g_variant_unref);
// test visibility states
struct
{
bool gps_enabled;
bool location_service_enabled;
bool expected_visible;
} visibility_tests[] = {{false, false, false}, {true, false, false}, {false, true, true}, {true, true, true}};
for (const auto& test : visibility_tests)
{
myController->set_gps_enabled(test.gps_enabled);
myController->set_location_service_enabled(test.location_service_enabled);
wait_msec();
// cusory first look at the header
dict = g_action_group_get_action_state(action_group, action_name);
EXPECT_TRUE(dict != nullptr);
EXPECT_TRUE(g_variant_is_of_type(dict, G_VARIANT_TYPE_VARDICT));
v = g_variant_lookup_value(dict, "visible", G_VARIANT_TYPE_BOOLEAN);
EXPECT_TRUE(v != nullptr);
EXPECT_EQ(test.expected_visible, g_variant_get_boolean(v));
g_clear_pointer(&v, g_variant_unref);
g_clear_pointer(&dict, g_variant_unref);
}
// cleanup
g_clear_object(&action_group);
g_clear_object(&dbus_menu_model);
g_clear_object(&connection);
}
indicator-location-13.10.0+16.04.20160218/tests/gtest-dbus-fixture.h 0000644 0000156 0000165 00000010015 12661374724 025073 0 ustar pbuser pbgroup 0000000 0000000 /*
* Copyright 2013-2016 Canonical Ltd.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 3.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see .
*
* Authors:
* Charles Kerr
*/
#pragma once
#include
#include
#include
/***
****
***/
class GTestDBusFixture : public ::testing::Test
{
private:
static void on_bus_opened(GObject* o G_GNUC_UNUSED, GAsyncResult* res, gpointer gself)
{
GTestDBusFixture* self = static_cast(gself);
GError* err = nullptr;
self->conn = g_bus_get_finish(res, &err);
g_assert_no_error(err);
g_main_loop_quit(self->loop);
}
static void on_bus_closed(GObject* o G_GNUC_UNUSED, GAsyncResult* res, gpointer gself)
{
GTestDBusFixture* self = static_cast(gself);
GError* err = nullptr;
g_dbus_connection_close_finish(self->conn, res, &err);
g_assert_no_error(err);
g_main_loop_quit(self->loop);
}
static gboolean wait_for_signal__timeout(gpointer name)
{
g_error("%s: timed out waiting for signal '%s'", G_STRLOC, name);
return G_SOURCE_REMOVE;
}
static gboolean wait_msec__timeout(gpointer loop)
{
g_main_loop_quit(static_cast(loop));
return G_SOURCE_CONTINUE;
}
protected:
virtual void SetUp()
{
conn = nullptr;
test_dbus = nullptr;
loop = nullptr;
// g_setenv ("GSETTINGS_SCHEMA_DIR", SCHEMA_DIR, TRUE);
// g_setenv ("GSETTINGS_BACKEND", "memory", TRUE);
// g_debug ("SCHEMA_DIR is %s", SCHEMA_DIR);
// pull up a test dbus
loop = g_main_loop_new(nullptr, FALSE);
test_dbus = g_test_dbus_new(G_TEST_DBUS_NONE);
// g_test_dbus_add_service_dir (test_dbus, INDICATOR_SERVICE_DIR);
// g_debug ("INDICATOR_SERVICE_DIR is %s", INDICATOR_SERVICE_DIR);
g_test_dbus_up(test_dbus);
const char* address;
address = g_test_dbus_get_bus_address(test_dbus);
g_setenv("DBUS_SYSTEM_BUS_ADDRESS", address, TRUE);
g_debug("test_dbus's address is %s", address);
// wait for the GDBusConnection before returning
g_bus_get(G_BUS_TYPE_SYSTEM, nullptr, on_bus_opened, this);
g_main_loop_run(loop);
}
virtual void TearDown()
{
// close the bus connection
g_dbus_connection_close(conn, nullptr, on_bus_closed, this);
g_main_loop_run(loop);
g_clear_object(&conn);
// tear down the test dbus
g_test_dbus_down(test_dbus);
g_clear_object(&test_dbus);
g_clear_pointer(&loop, g_main_loop_unref);
}
protected:
/* convenience func to loop while waiting for a GObject's signal */
void wait_for_signal(gpointer o, const gchar* signal, const guint timeout_seconds = 5)
{
// wait for the signal or for timeout, whichever comes first
const auto handler_id = g_signal_connect_swapped(o, signal, G_CALLBACK(g_main_loop_quit), loop);
const auto timeout_id = g_timeout_add_seconds(timeout_seconds, wait_for_signal__timeout, loop);
g_main_loop_run(loop);
g_source_remove(timeout_id);
g_signal_handler_disconnect(o, handler_id);
}
/* convenience func to loop for N msec */
void wait_msec(guint msec = 50)
{
const auto id = g_timeout_add(msec, wait_msec__timeout, loop);
g_main_loop_run(loop);
g_source_remove(id);
}
GMainLoop* loop;
GTestDBus* test_dbus;
GDBusConnection* conn;
};
indicator-location-13.10.0+16.04.20160218/tests/CMakeLists.txt 0000644 0000156 0000165 00000002522 12661374724 023721 0 ustar pbuser pbgroup 0000000 0000000
###
### Google Test Framework
###
add_library (gtest STATIC
${GTEST_SOURCE_DIR}/gtest-all.cc
${GTEST_SOURCE_DIR}/gtest_main.cc)
set_target_properties (gtest PROPERTIES INCLUDE_DIRECTORIES ${INCLUDE_DIRECTORIES} ${GTEST_INCLUDE_DIR})
set_target_properties (gtest PROPERTIES COMPILE_FLAGS ${COMPILE_FLAGS} -w)
###
### General setup
###
include_directories (${CMAKE_SOURCE_DIR})
#include_directories (${CMAKE_CURRENT_BINARY_DIR})
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g ${CC_WARNING_ARGS}")
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g ${CC_WARNING_ARGS} -std=c++11")
add_test(NAME formatcode
COMMAND "${CMAKE_SOURCE_DIR}/tools/format-test.sh" "${CMAKE_SOURCE_DIR}" "${CMAKE_BINARY_DIR}/tools/formatcode")
###
### phone-test
###
set (TEST_NAME phone-test)
add_executable (${TEST_NAME} ${TEST_NAME}.cc)
add_test (${TEST_NAME} ${TEST_NAME})
add_dependencies (${TEST_NAME} ${SERVICE_LIB})
target_link_libraries (${TEST_NAME} ${SERVICE_LIB} gtest ${SERVICE_DEPS_LIBRARIES} ${GTEST_LIBS})
###
### globals
###
#set_property (TARGET ${ALL_TESTS}
# APPEND PROPERTY LINK_LIBRARIES libindicator-location-service gtest ${GTEST_LIBS} ${GCOV_LIBS})
#
#set_property (TARGET ${ALL_TESTS} gtest
# APPEND PROPERTY INCLUDE_DIRECTORIES ${CMAKE_SOURCE_DIR} ${SERVICE_INCLUDE_DIRS} ${GTEST_INCLUDE_DIR})
indicator-location-13.10.0+16.04.20160218/tests/manual 0000644 0000156 0000165 00000003274 12661374651 022365 0 ustar pbuser pbgroup 0000000 0000000
Test-case indicator-location/unity7-items-check
- Log in to a Unity 7 user session
- Go to the panel and click on the Location indicator
- Ensure there are items in the menu
Test-case indicator-location/unity7-greeter-items-check
- Start a system and wait for the greeter or logout of the current user session
- Go to the panel and click on the Location indicator
- Ensure there are items in the menu
Test-case indicator-location/unity8-items-check
- Login to a user session running Unity 8
- Pull down the top panel until it sticks open
- Navigate through the tabs until "Location" is shown
- Location is at the top of the menu
- The menu is populated with items
Test-case indicator-location/phone-visibility
- If the location indicator is visible, disable both location and GPS from its menu
- The Location indicator should disappear from the panel
- In ubuntu-system-settings's Battery sheet, enable the GPS setting
- The Location indicator should be visible in the panel
- In the location indicator, disable both Location and GPS settings
- The Location indicator should disappear from the panel
- In ubuntu-system-settings's Battery sheet, re-enable the GPS setting.
(NB: bug #1336715 causes ubuntu-system-settings's toggles
to fall out-of-sync with indicator toggles. In the interim
until that is fixed, you may have to tap the uss controls
multiple times to activate them, and they may not correctly
match the indicator's state.)
- The Location indicator should appear in the panel
indicator-location-13.10.0+16.04.20160218/src/ 0000755 0000156 0000165 00000000000 12661375163 020603 5 ustar pbuser pbgroup 0000000 0000000 indicator-location-13.10.0+16.04.20160218/src/service.cc 0000644 0000156 0000165 00000007560 12661374724 022564 0 ustar pbuser pbgroup 0000000 0000000 /*
* Copyright 2013-2016 Canonical Ltd.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 3.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see .
*
* Authors:
* Charles Kerr
*/
#include
#include
#include "dbus-shared.h"
#include "service.h"
/**
***
**/
Service::Service(const std::shared_ptr& controller)
: action_group(g_simple_action_group_new(), GObjectDeleter())
, phone_profile(controller, action_group)
, name_lost_callback(nullptr)
, name_lost_user_data(0)
, action_group_export_id(0)
, bus_own_id(0)
{
bus_own_id = g_bus_own_name(G_BUS_TYPE_SESSION, INDICATOR_BUS_NAME, G_BUS_NAME_OWNER_FLAGS_NONE, on_bus_acquired,
nullptr, on_name_lost, this, nullptr);
}
Service::~Service()
{
if (connection)
{
unexport();
}
if (bus_own_id != 0)
{
g_bus_unown_name(bus_own_id);
}
}
void Service::set_name_lost_callback(name_lost_callback_func callback, void* user_data)
{
name_lost_callback = callback;
name_lost_user_data = user_data;
}
void Service::unexport()
{
g_return_if_fail(connection);
// unexport the menu(s)
for (auto& id : exported_menus)
{
g_dbus_connection_unexport_menu_model(connection.get(), id);
}
exported_menus.clear();
// unexport the action group
if (action_group_export_id != 0)
{
g_dbus_connection_unexport_action_group(connection.get(), action_group_export_id);
action_group_export_id = 0;
}
}
/***
**** GDBus
***/
void Service::on_name_lost(GDBusConnection* conn, const char* name, gpointer gself)
{
g_debug("%s::%s: %s %p", G_STRLOC, G_STRFUNC, name, conn);
static_cast(gself)->on_name_lost(conn, name);
}
void Service::on_name_lost(GDBusConnection* conn, const char* name)
{
g_debug("%s::%s: %s %p", G_STRLOC, G_STRFUNC, name, conn);
if (name_lost_callback != nullptr)
{
(name_lost_callback)(this, name_lost_user_data);
}
}
void Service::on_bus_acquired(GDBusConnection* conn, const char* name, gpointer gself)
{
static_cast(gself)->on_bus_acquired(conn, name);
}
void Service::on_bus_acquired(GDBusConnection* conn, const char* name)
{
g_debug("%s::%s: %s %p", G_STRLOC, G_STRFUNC, name, conn);
this->connection.reset(G_DBUS_CONNECTION(g_object_ref(conn)));
GError* error = nullptr;
/* export the action group */
unsigned int export_id =
g_dbus_connection_export_action_group(conn, INDICATOR_OBJECT_PATH, G_ACTION_GROUP(action_group.get()), &error);
if (error != nullptr)
{
g_warning("Unable to export action group: %s", error->message);
g_clear_error(&error);
}
else
{
action_group_export_id = export_id;
}
/* export the menu(s) */
struct
{
std::shared_ptr menu;
const char* path;
} menus[] = {{phone_profile.get_menu(), INDICATOR_OBJECT_PATH "/phone"}};
for (unsigned int i = 0, n = G_N_ELEMENTS(menus); i < n; i++)
{
export_id = g_dbus_connection_export_menu_model(conn, menus[i].path, G_MENU_MODEL(menus[i].menu.get()), &error);
if (error != nullptr)
{
g_warning("Unable to export phone menu: %s", error->message);
g_clear_error(&error);
}
else
{
exported_menus.insert(export_id);
}
}
}
indicator-location-13.10.0+16.04.20160218/src/phone.h 0000644 0000156 0000165 00000004141 12661374724 022067 0 ustar pbuser pbgroup 0000000 0000000 /*
* Copyright 2013-2016 Canonical Ltd.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 3.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see .
*
* Authors:
* Charles Kerr
*/
#pragma once
#include
#include
#include
#include
#include "controller.h"
class Phone
{
public:
Phone(const std::shared_ptr& controller, const std::shared_ptr& action_group);
virtual ~Phone();
std::shared_ptr get_menu()
{
return menu;
}
protected:
std::shared_ptr controller;
std::vector controller_connections;
private:
std::shared_ptr menu;
std::shared_ptr submenu;
std::shared_ptr action_group;
private:
void create_menu();
void rebuild_submenu();
private:
bool should_be_visible() const;
GVariant* action_state_for_root() const;
GSimpleAction* create_root_action();
void update_header();
void update_actions_enabled();
private:
GVariant* action_state_for_location_detection();
GSimpleAction* create_detection_enabled_action();
void update_detection_enabled_action();
static void on_detection_location_activated(GSimpleAction*, GVariant*, gpointer);
private:
GVariant* action_state_for_gps_detection();
GSimpleAction* create_gps_enabled_action();
void update_gps_enabled_action();
static void on_detection_gps_activated(GSimpleAction*, GVariant*, gpointer);
private:
GSimpleAction* create_settings_action();
private:
GSimpleAction* create_licence_action();
};
indicator-location-13.10.0+16.04.20160218/src/location-service-controller.h 0000644 0000156 0000165 00000002723 12661374724 026411 0 ustar pbuser pbgroup 0000000 0000000 /*
* Copyright 2013-2016 Canonical Ltd.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 3.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see .
*
* Authors:
* Charles Kerr
*/
#pragma once
#include "controller.h" // parent class
#include // std::unique_ptr
class LocationServiceController : public Controller
{
public:
LocationServiceController();
virtual ~LocationServiceController();
const core::Property& is_valid() const override;
const core::Property& gps_enabled() const override;
const core::Property& location_service_enabled() const override;
void set_gps_enabled(bool enabled) override;
void set_location_service_enabled(bool enabled) override;
LocationServiceController(const LocationServiceController&) = delete;
LocationServiceController& operator=(const LocationServiceController&) = delete;
private:
friend class Impl;
class Impl;
std::unique_ptr impl;
};
indicator-location-13.10.0+16.04.20160218/src/controller.h 0000644 0000156 0000165 00000002301 12661374724 023135 0 ustar pbuser pbgroup 0000000 0000000 /*
* Copyright 2013-2016 Canonical Ltd.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 3.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see .
*
* Authors:
* Charles Kerr
*/
#pragma once
#include
class Controller
{
public:
Controller();
virtual ~Controller();
/// True iff we've gotten status info from the location service
virtual const core::Property& is_valid() const = 0;
virtual const core::Property& gps_enabled() const = 0;
virtual const core::Property& location_service_enabled() const = 0;
virtual void set_gps_enabled(bool enabled) = 0;
virtual void set_location_service_enabled(bool enabled) = 0;
};
indicator-location-13.10.0+16.04.20160218/src/location-service-controller.cc 0000644 0000156 0000165 00000027433 12661374724 026554 0 ustar pbuser pbgroup 0000000 0000000 /*
* Copyright 2013-2016 Canonical Ltd.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 3.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see .
*
* Authors:
* Charles Kerr
*/
#include
#include "location-service-controller.h"
#include "utils.h"
/***
****
***/
class LocationServiceController::Impl
{
public:
Impl()
{
m_cancellable.reset(g_cancellable_new(), [](GCancellable* c)
{
g_cancellable_cancel(c);
g_object_unref(c);
});
g_bus_get(G_BUS_TYPE_SYSTEM, m_cancellable.get(), on_system_bus_ready, this);
}
~Impl() = default;
const core::Property& is_valid() const
{
return m_is_valid;
}
const core::Property& gps_enabled() const
{
return m_gps_enabled;
}
const core::Property& location_service_enabled() const
{
return m_loc_enabled;
}
void set_gps_enabled(bool enabled)
{
set_bool_property(PROP_KEY_GPS_ENABLED, enabled);
}
void set_location_service_enabled(bool enabled)
{
set_bool_property(PROP_KEY_LOC_ENABLED, enabled);
}
private:
/***
**** bus bootstrapping & name watching
***/
static void on_system_bus_ready(GObject*, GAsyncResult* res, gpointer gself)
{
GError* error;
GDBusConnection* system_bus;
error = nullptr;
system_bus = g_bus_get_finish(res, &error);
if (system_bus != nullptr)
{
auto self = static_cast(gself);
self->m_system_bus.reset(system_bus, GObjectDeleter());
auto name_tag = g_bus_watch_name_on_connection(system_bus, BUS_NAME, G_BUS_NAME_WATCHER_FLAGS_AUTO_START,
on_name_appeared, on_name_vanished, gself, nullptr);
// manage the name_tag's lifespan
self->m_name_tag.reset(new guint{name_tag}, [](guint* tag)
{
g_bus_unwatch_name(*tag);
delete tag;
});
}
else if (error != nullptr)
{
if (!g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
{
g_warning("Couldn't get system bus: %s", error->message);
}
g_error_free(error);
}
}
static void on_name_appeared(GDBusConnection* system_bus,
const gchar* /*bus_name*/,
const gchar* name_owner,
gpointer gself)
{
auto self = static_cast(gself);
// Why do we use PropertiesChanged, Get, and Set by hand instead
// of letting gdbus-codegen or g_dbus_proxy_new() do the dirty work?
// ubuntu-location-service's GetAll method is broken; proxies aren't
// able to bootstrap themselves and cache the object properties. Ugh.
// subscribe to PropertiesChanged signals from the service
auto signal_tag = g_dbus_connection_signal_subscribe(
system_bus, name_owner, PROP_IFACE_NAME, "PropertiesChanged", OBJECT_PATH,
nullptr, // arg0
G_DBUS_SIGNAL_FLAGS_NONE, on_properties_changed, gself, nullptr);
// manage the signal_tag lifespan
g_object_ref(system_bus);
self->m_signal_tag.reset(new guint{signal_tag}, [system_bus](guint* tag)
{
g_dbus_connection_signal_unsubscribe(system_bus, *tag);
g_object_unref(system_bus);
delete tag;
});
// GetAll is borked so call Get on each property we care about
struct
{
const char* name;
GAsyncReadyCallback callback;
} props[] = {{PROP_KEY_LOC_ENABLED, on_loc_enabled_reply}, {PROP_KEY_GPS_ENABLED, on_gps_enabled_reply}};
for (const auto& prop : props)
{
g_dbus_connection_call(system_bus, BUS_NAME, OBJECT_PATH, PROP_IFACE_NAME, "Get",
g_variant_new("(ss)", LOC_IFACE_NAME, prop.name), // args
G_VARIANT_TYPE("(v)"), // return type
G_DBUS_CALL_FLAGS_NONE,
-1, // use default timeout
self->m_cancellable.get(), prop.callback, gself);
}
g_debug("setting is_valid to true: location-service appeared");
self->m_is_valid.set(true);
}
static void on_name_vanished(GDBusConnection*, const gchar*, gpointer gself)
{
auto self = static_cast(gself);
g_debug("setting is_valid to false: location-service vanished");
self->m_is_valid.set(false);
self->m_signal_tag.reset();
}
/***
**** org.freedesktop.dbus.properties.PropertiesChanged handling
***/
static void on_properties_changed(GDBusConnection* /*connection*/,
const gchar* /*sender_name*/,
const gchar* /*object_path*/,
const gchar* /*interface_name*/,
const gchar* /*signal_name*/,
GVariant* parameters,
gpointer gself)
{
auto self = static_cast(gself);
const gchar* interface_name;
GVariant* changed_properties;
const gchar** invalidated_properties;
GVariantIter property_iter;
const gchar* key;
GVariant* val;
g_variant_get(parameters, "(&s@a{sv}^a&s)", &interface_name, &changed_properties, &invalidated_properties);
g_variant_iter_init(&property_iter, changed_properties);
while (g_variant_iter_next(&property_iter, "{&sv}", &key, &val))
{
if (!g_strcmp0(key, PROP_KEY_LOC_ENABLED))
{
self->m_loc_enabled.set(g_variant_get_boolean(val));
}
else if (!g_strcmp0(key, PROP_KEY_GPS_ENABLED))
{
self->m_gps_enabled.set(g_variant_get_boolean(val));
}
g_variant_unref(val);
}
g_variant_unref(changed_properties);
g_free(invalidated_properties);
}
/***
**** org.freedesktop.dbus.properties.Get handling
***/
static std::tuple get_bool_reply_from_call(GObject* source, GAsyncResult* res)
{
GError* error;
GVariant* v;
bool success{false};
bool result{false};
error = nullptr;
GDBusConnection* conn = G_DBUS_CONNECTION(source);
v = g_dbus_connection_call_finish(conn, res, &error);
if (v != nullptr)
{
GVariant* inner{};
g_variant_get(v, "(v)", &inner);
success = true;
result = g_variant_get_boolean(inner);
g_variant_unref(inner);
g_variant_unref(v);
}
else if (error != nullptr)
{
if (!g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
{
g_warning("Error calling dbus method: %s", error->message);
}
g_error_free(error);
success = false;
}
return std::make_tuple(success, result);
}
static void on_loc_enabled_reply(GObject* source_object, GAsyncResult* res, gpointer gself)
{
bool success, value;
std::tie(success, value) = get_bool_reply_from_call(source_object, res);
g_debug("service loc reply: success %d value %d", int(success), int(value));
if (success)
{
static_cast(gself)->m_loc_enabled.set(value);
}
}
static void on_gps_enabled_reply(GObject* source_object, GAsyncResult* res, gpointer gself)
{
bool success, value;
std::tie(success, value) = get_bool_reply_from_call(source_object, res);
g_debug("service gps reply: success %d value %d", int(success), int(value));
if (success)
{
static_cast(gself)->m_gps_enabled.set(value);
}
}
/***
**** org.freedesktop.dbus.properties.Set handling
***/
void set_bool_property(const char* property_name, bool b)
{
g_return_if_fail(m_system_bus);
auto args = g_variant_new("(ssv)", LOC_IFACE_NAME, property_name, g_variant_new_boolean(b));
g_dbus_connection_call(m_system_bus.get(), BUS_NAME, OBJECT_PATH, PROP_IFACE_NAME,
"Set", // method name,
args,
nullptr, // reply type
G_DBUS_CALL_FLAGS_NONE,
-1, // timeout msec
m_cancellable.get(), check_method_call_reply, this);
}
static void check_method_call_reply(GObject* connection, GAsyncResult* res, gpointer /*gself*/)
{
GError* error;
GVariant* v;
error = nullptr;
v = g_dbus_connection_call_finish(G_DBUS_CONNECTION(connection), res, &error);
if (v != nullptr)
{
auto vs = g_variant_print(v, true);
g_debug("method call returned '%s'", vs);
g_free(vs);
g_variant_unref(v);
}
else if (error != nullptr)
{
if (!g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
{
g_warning("dbus method returned an error : %s", error->message);
}
g_error_free(error);
}
}
/***
****
***/
static constexpr const char* BUS_NAME{"com.ubuntu.location.Service"};
static constexpr const char* OBJECT_PATH{"/com/ubuntu/location/Service"};
static constexpr const char* LOC_IFACE_NAME{"com.ubuntu.location.Service"};
static constexpr const char* PROP_IFACE_NAME{"org.freedesktop.DBus.Properties"};
static constexpr const char* PROP_KEY_LOC_ENABLED{"IsOnline"};
static constexpr const char* PROP_KEY_GPS_ENABLED{"DoesSatelliteBasedPositioning"};
core::Property m_gps_enabled{false};
core::Property m_loc_enabled{false};
core::Property m_is_valid{false};
std::shared_ptr m_cancellable{};
std::shared_ptr m_system_bus{};
std::shared_ptr m_name_tag{};
std::shared_ptr m_signal_tag{};
};
/***
****
***/
LocationServiceController::LocationServiceController()
: impl{new Impl{}}
{
}
LocationServiceController::~LocationServiceController()
{
}
const core::Property& LocationServiceController::is_valid() const
{
return impl->is_valid();
}
const core::Property& LocationServiceController::gps_enabled() const
{
return impl->gps_enabled();
}
const core::Property& LocationServiceController::location_service_enabled() const
{
return impl->location_service_enabled();
}
void LocationServiceController::set_gps_enabled(bool enabled)
{
impl->set_gps_enabled(enabled);
}
void LocationServiceController::set_location_service_enabled(bool enabled)
{
impl->set_location_service_enabled(enabled);
}
indicator-location-13.10.0+16.04.20160218/src/utils.h 0000644 0000156 0000165 00000002244 12661374724 022120 0 ustar pbuser pbgroup 0000000 0000000 /*
* Copyright 2013-2016 Canonical Ltd.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 3.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see .
*
* Authors:
* Charles Kerr
*/
#pragma once
#include
#include
struct GObjectDeleter
{
void operator()(GObject* o)
{
g_object_unref(o);
}
void operator()(GMenu* o)
{
operator()(G_OBJECT(o));
}
void operator()(GDBusProxy* o)
{
operator()(G_OBJECT(o));
}
void operator()(GDBusConnection* o)
{
operator()(G_OBJECT(o));
}
void operator()(GSimpleActionGroup* o)
{
operator()(G_OBJECT(o));
}
};
indicator-location-13.10.0+16.04.20160218/src/main.cc 0000644 0000156 0000165 00000002746 12661374724 022051 0 ustar pbuser pbgroup 0000000 0000000 /*
* Copyright 2013-2016 Canonical Ltd.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 3.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see .
*
* Authors:
* Charles Kerr
*/
#include
#include
#include
#include "location-service-controller.h"
#include "service.h"
static void on_name_lost(Service* service G_GNUC_UNUSED, gpointer loop)
{
g_main_loop_quit(static_cast(loop));
}
int main(int argc G_GNUC_UNUSED, char** argv G_GNUC_UNUSED)
{
GMainLoop* loop;
/* boilerplate i18n */
setlocale(LC_ALL, "");
bindtextdomain(GETTEXT_PACKAGE, GNOMELOCALEDIR);
textdomain(GETTEXT_PACKAGE);
/* set up the service */
loop = g_main_loop_new(nullptr, false);
auto controller = std::make_shared();
Service service(controller);
service.set_name_lost_callback(on_name_lost, loop);
g_main_loop_run(loop);
/* cleanup */
g_main_loop_unref(loop);
return 0;
}
indicator-location-13.10.0+16.04.20160218/src/service.h 0000644 0000156 0000165 00000003402 12661374724 022415 0 ustar pbuser pbgroup 0000000 0000000 /*
* Copyright 2013-2016 Canonical Ltd.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 3.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see .
*
* Authors:
* Charles Kerr
*/
#pragma once
#include
#include
#include "controller.h"
#include "phone.h"
#include "utils.h" // GObjectDeleter
class Service
{
public:
explicit Service(const std::shared_ptr& controller);
virtual ~Service();
private:
std::shared_ptr action_group;
std::unique_ptr connection;
Phone phone_profile;
public:
typedef void (*name_lost_callback_func)(Service*, void* user_data);
void set_name_lost_callback(name_lost_callback_func callback, void* user_data);
private:
name_lost_callback_func name_lost_callback;
void* name_lost_user_data;
private:
unsigned int action_group_export_id;
std::set exported_menus;
void unexport();
private: // DBus callbacks
unsigned int bus_own_id;
void on_name_lost(GDBusConnection*, const char*);
void on_bus_acquired(GDBusConnection*, const char*);
static void on_name_lost(GDBusConnection*, const char*, gpointer);
static void on_bus_acquired(GDBusConnection*, const char*, gpointer);
};
indicator-location-13.10.0+16.04.20160218/src/CMakeLists.txt 0000644 0000156 0000165 00000002072 12661374664 023351 0 ustar pbuser pbgroup 0000000 0000000 SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -g ${CXX_WARNING_ARGS} ${GCOV_FLAGS}")
#set_property (DIRECTORY
# APPEND PROPERTY INCLUDE_DIRECTORIES ${SERVICE_INCLUDE_DIRS})
#
#set_property (DIRECTORY
# APPEND PROPERTY LINK_DIRECTORIES ${SERVICE_INCLUDE_DIRS})
###
### The library.
### this doesn't get installed anywhere;
### it's built apart from main() as a convenience for tests/
###
add_library (${SERVICE_LIB} STATIC
controller.cc
phone.cc
service.cc
location-service-controller.cc
)
include_directories (${CMAKE_SOURCE_DIR})
link_directories (${SERVICE_DEPS_LIBRARY_DIRS})
###
### The service execuable.
###
add_executable (${SERVICE_EXEC} main.cc)
target_link_libraries (${SERVICE_EXEC} ${SERVICE_LIB} ${SERVICE_DEPS_LIBRARIES})
install (TARGETS ${SERVICE_EXEC}
RUNTIME DESTINATION ${CMAKE_INSTALL_FULL_PKGLIBEXECDIR})
set_property (SOURCE main.cc
APPEND PROPERTY COMPILE_DEFINITIONS
GETTEXT_PACKAGE="${GETTEXT_PACKAGE}"
GNOMELOCALEDIR="${CMAKE_INSTALL_FULL_LOCALEDIR}")
indicator-location-13.10.0+16.04.20160218/src/controller.cc 0000644 0000156 0000165 00000001446 12661374724 023304 0 ustar pbuser pbgroup 0000000 0000000 /*
* Copyright 2013-2016 Canonical Ltd.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 3.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see .
*
* Authors:
* Charles Kerr
*/
#include "controller.h"
Controller::Controller() = default;
Controller::~Controller() = default;
indicator-location-13.10.0+16.04.20160218/src/phone.cc 0000644 0000156 0000165 00000017777 12661374741 022247 0 ustar pbuser pbgroup 0000000 0000000 /*
* Copyright 2013-2016 Canonical Ltd.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 3.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see .
*
* Authors:
* Charles Kerr
*/
#include
#include
#include
#include
#include "phone.h"
#include "utils.h" // GObjectDeleter
#define PROFILE_NAME "phone"
#define LOCATION_ACTION_KEY "location-detection-enabled"
#define GPS_ACTION_KEY "gps-detection-enabled"
Phone::Phone(const std::shared_ptr& controller_, const std::shared_ptr& action_group_)
: controller(controller_)
, action_group(action_group_)
{
create_menu();
auto on_gps = [this](bool enabled)
{
update_gps_enabled_action();
update_header();
};
controller_connections.push_back(controller->gps_enabled().changed().connect(on_gps));
auto on_loc = [this](bool enabled)
{
update_detection_enabled_action();
update_header();
};
controller_connections.push_back(controller->location_service_enabled().changed().connect(on_loc));
auto on_valid = [this](bool valid)
{
update_actions_enabled();
};
controller_connections.push_back(controller->is_valid().changed().connect(on_valid));
/* create the actions & add them to the group */
std::array actions = {
create_root_action(), create_detection_enabled_action(), create_gps_enabled_action(), create_settings_action()};
for (auto a : actions)
{
g_action_map_add_action(G_ACTION_MAP(action_group.get()), G_ACTION(a));
g_object_unref(a);
}
update_actions_enabled();
}
Phone::~Phone()
{
}
/***
****
***/
bool Phone::should_be_visible() const
{
if (!controller->is_valid())
{
return false;
}
// as per "Indicators - RTM Usability Fix" document:
// visible iff location is enabled
return controller->location_service_enabled().get();
}
GVariant* Phone::action_state_for_root() const
{
GVariantBuilder builder;
g_variant_builder_init(&builder, G_VARIANT_TYPE_VARDICT);
const char* a11y = _("Location");
g_variant_builder_add(&builder, "{sv}", "accessible-desc", g_variant_new_string(a11y));
const char* title = _("Location");
g_variant_builder_add(&builder, "{sv}", "title", g_variant_new_string(title));
gboolean visible = should_be_visible();
g_variant_builder_add(&builder, "{sv}", "visible", g_variant_new_boolean(visible));
const char* icon_name = "gps";
GIcon* icon = g_themed_icon_new_with_default_fallbacks(icon_name);
GVariant* serialized_icon = g_icon_serialize(icon);
if (serialized_icon != NULL)
{
g_variant_builder_add(&builder, "{sv}", "icon", serialized_icon);
g_variant_unref(serialized_icon);
}
g_object_unref(icon);
return g_variant_builder_end(&builder);
}
#define HEADER_ACTION_KEY PROFILE_NAME "-header"
GSimpleAction* Phone::create_root_action()
{
return g_simple_action_new_stateful(HEADER_ACTION_KEY, nullptr, action_state_for_root());
}
void Phone::update_header()
{
g_action_group_change_action_state(G_ACTION_GROUP(action_group.get()), HEADER_ACTION_KEY, action_state_for_root());
}
void Phone::update_actions_enabled()
{
const auto map = G_ACTION_MAP(action_group.get());
const bool is_valid = controller->is_valid().get();
std::array keys = {LOCATION_ACTION_KEY, GPS_ACTION_KEY};
for (const auto& key : keys)
{
g_simple_action_set_enabled(G_SIMPLE_ACTION(g_action_map_lookup_action(map, key)), is_valid);
}
update_header();
}
/***
****
***/
GVariant* Phone::action_state_for_location_detection()
{
return g_variant_new_boolean(controller->location_service_enabled().get());
}
void Phone::on_detection_location_activated(GSimpleAction* action, GVariant* parameter G_GNUC_UNUSED, gpointer gself)
{
GVariant* state = g_action_get_state(G_ACTION(action));
static_cast(gself)->controller->set_location_service_enabled(!g_variant_get_boolean(state));
g_variant_unref(state);
}
GSimpleAction* Phone::create_detection_enabled_action()
{
GSimpleAction* action;
action = g_simple_action_new_stateful(LOCATION_ACTION_KEY, nullptr, action_state_for_location_detection());
g_signal_connect(action, "activate", G_CALLBACK(on_detection_location_activated), this);
return action;
}
void Phone::update_detection_enabled_action()
{
GAction* action = g_action_map_lookup_action(G_ACTION_MAP(action_group.get()), LOCATION_ACTION_KEY);
g_simple_action_set_state(G_SIMPLE_ACTION(action), action_state_for_location_detection());
}
/***
****
***/
GVariant* Phone::action_state_for_gps_detection()
{
return g_variant_new_boolean(controller->gps_enabled().get());
}
void Phone::on_detection_gps_activated(GSimpleAction* action, GVariant* parameter G_GNUC_UNUSED, gpointer gself)
{
GVariant* state = g_action_get_state(G_ACTION(action));
static_cast(gself)->controller->set_gps_enabled(!g_variant_get_boolean(state));
g_variant_unref(state);
}
GSimpleAction* Phone::create_gps_enabled_action()
{
GSimpleAction* action;
action = g_simple_action_new_stateful(GPS_ACTION_KEY, nullptr, action_state_for_gps_detection());
g_signal_connect(action, "activate", G_CALLBACK(on_detection_gps_activated), this);
return action;
}
void Phone::update_gps_enabled_action()
{
GAction* action = g_action_map_lookup_action(G_ACTION_MAP(action_group.get()), GPS_ACTION_KEY);
g_simple_action_set_state(G_SIMPLE_ACTION(action), action_state_for_gps_detection());
}
/***
****
***/
#define SETTINGS_ACTION_KEY "settings"
namespace
{
void on_uri_dispatched(const gchar* uri, gboolean success, gpointer user_data G_GNUC_UNUSED)
{
if (!success)
{
g_warning("Unable to activate '%s'", uri);
}
}
void on_settings_activated(GSimpleAction* simple G_GNUC_UNUSED, GVariant* parameter, gpointer user_data G_GNUC_UNUSED)
{
const char* key = g_variant_get_string(parameter, nullptr);
gchar* uri = g_strdup_printf("settings:///%s", key);
g_debug("%s calling url_dispatch_send '%s'", G_STRLOC, uri);
url_dispatch_send(uri, on_uri_dispatched, nullptr);
g_free(uri);
}
}
GSimpleAction* Phone::create_settings_action()
{
GSimpleAction* action;
action = g_simple_action_new(SETTINGS_ACTION_KEY, G_VARIANT_TYPE_STRING);
g_signal_connect(action, "activate", G_CALLBACK(on_settings_activated), nullptr);
return action;
}
/***
****
***/
void Phone::create_menu()
{
GMenuItem* header;
/* create the submenu */
submenu.reset(g_menu_new(), GObjectDeleter());
/* populate the submenu */
rebuild_submenu();
/* add the submenu to a new header */
header = g_menu_item_new(nullptr, "indicator." HEADER_ACTION_KEY);
g_menu_item_set_attribute(header, "x-canonical-type", "s", "com.canonical.indicator.root");
g_menu_item_set_submenu(header, G_MENU_MODEL(submenu.get()));
/* add the header to a new menu */
menu.reset(g_menu_new(), GObjectDeleter());
g_menu_append_item(menu.get(), header);
g_object_unref(header);
}
void Phone::rebuild_submenu()
{
g_menu_remove_all(submenu.get());
GMenuItem* location = g_menu_item_new(_("Location detection"), "indicator." LOCATION_ACTION_KEY);
g_menu_item_set_attribute(location, "x-canonical-type", "s", "com.canonical.indicator.switch");
g_menu_append_item(submenu.get(), location);
g_object_unref(location);
g_menu_append(submenu.get(), _("Location settings…"), "indicator." SETTINGS_ACTION_KEY "::location");
}
indicator-location-13.10.0+16.04.20160218/src/dbus-shared.h 0000644 0000156 0000165 00000001521 12661374724 023156 0 ustar pbuser pbgroup 0000000 0000000 /*
* Copyright 2014-2016 Canonical Ltd.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 3.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see .
*
* Authors:
* Charles Kerr
*/
#pragma once
#define INDICATOR_BUS_NAME "com.canonical.indicator.location"
#define INDICATOR_OBJECT_PATH "/com/canonical/indicator/location"
indicator-location-13.10.0+16.04.20160218/README 0000644 0000156 0000165 00000000011 12661374651 020665 0 ustar pbuser pbgroup 0000000 0000000 Write me
indicator-location-13.10.0+16.04.20160218/po/ 0000755 0000156 0000165 00000000000 12661375163 020432 5 ustar pbuser pbgroup 0000000 0000000 indicator-location-13.10.0+16.04.20160218/po/pl.po 0000644 0000156 0000165 00000001751 12661374651 021412 0 ustar pbuser pbgroup 0000000 0000000 # Polish translation for indicator-location
# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
# This file is distributed under the same license as the indicator-location package.
# FIRST AUTHOR , 2014.
#
msgid ""
msgstr ""
"Project-Id-Version: indicator-location\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2014-09-02 19:21+0100\n"
"PO-Revision-Date: 2014-05-26 11:31+0000\n"
"Last-Translator: FULL NAME \n"
"Language-Team: Polish \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-10-15 20:20+0000\n"
"X-Generator: Launchpad (build 17196)\n"
#: ../src/phone.cc:81 ../src/phone.cc:84
msgid "Location"
msgstr "Lokalizacja"
#: ../src/phone.cc:335
msgid "Location detection"
msgstr "Wykrywanie lokalizacji"
#: ../src/phone.cc:344
msgid "View HERE terms and conditions"
msgstr ""
#: ../src/phone.cc:348
msgid "GPS"
msgstr "GPS"
indicator-location-13.10.0+16.04.20160218/po/bs.po 0000644 0000156 0000165 00000002012 12661374651 021372 0 ustar pbuser pbgroup 0000000 0000000 # Bosnian translation for indicator-location
# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
# This file is distributed under the same license as the indicator-location package.
# FIRST AUTHOR , 2014.
#
msgid ""
msgstr ""
"Project-Id-Version: indicator-location\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2014-09-02 19:21+0100\n"
"PO-Revision-Date: 2014-10-20 18:30+0000\n"
"Last-Translator: FULL NAME \n"
"Language-Team: Bosnian \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-10-21 07:48+0000\n"
"X-Generator: Launchpad (build 17203)\n"
#: ../src/phone.cc:81 ../src/phone.cc:84
msgid "Location"
msgstr "Lokacija"
#: ../src/phone.cc:335
msgid "Location detection"
msgstr "Prepoznavanje lokacije"
#: ../src/phone.cc:344
msgid "View HERE terms and conditions"
msgstr "Poglčedajte OVDJE uslove upotrebe"
#: ../src/phone.cc:348
msgid "GPS"
msgstr "GPS"
indicator-location-13.10.0+16.04.20160218/po/pa.po 0000644 0000156 0000165 00000002055 12661374651 021375 0 ustar pbuser pbgroup 0000000 0000000 # Punjabi translation for indicator-location
# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
# This file is distributed under the same license as the indicator-location package.
# FIRST AUTHOR , 2014.
#
msgid ""
msgstr ""
"Project-Id-Version: indicator-location\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2014-09-02 19:21+0100\n"
"PO-Revision-Date: 2014-10-16 03:16+0000\n"
"Last-Translator: FULL NAME \n"
"Language-Team: Punjabi \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-10-17 06:26+0000\n"
"X-Generator: Launchpad (build 17196)\n"
#: ../src/phone.cc:81 ../src/phone.cc:84
msgid "Location"
msgstr "ਟਿਕਾਣਾ"
#: ../src/phone.cc:335
msgid "Location detection"
msgstr "ਟਿਕਾਣਾ ਖੋਜ"
#: ../src/phone.cc:344
msgid "View HERE terms and conditions"
msgstr "HERE ਸ਼ਰਤਾਂ ਤੇ ਨਿਯਮ ਵੇਖੋ"
#: ../src/phone.cc:348
msgid "GPS"
msgstr "GPS"
indicator-location-13.10.0+16.04.20160218/po/update-pot.sh 0000755 0000156 0000165 00000001405 12661374651 023054 0 ustar pbuser pbgroup 0000000 0000000 #!/bin/sh
set -e
cd $(dirname $0)
PO_DIR=$PWD
PKGNAME="indicator-location"
PROGNAME=$(basename $0)
# Create a list of files to scan
GETTEXT_FILES=$(mktemp --tmpdir uitk-unity.lst.XXXXX)
trap 'rm -f "$GETTEXT_FILES"' EXIT
cd ..
find \( -name '*.h' -o -name '*.cpp' -o -name '*.cc' -o -name '*.c' -o -name '*.qml' -o -name '*.js' \) \
-a ! \( -path './debian/*' -o -path './builddir/*' -o -path './build/*' -o -path './.bzr/*' \) | sort \
> $GETTEXT_FILES
cat $GETTEXT_FILES
# Generate pot from our list
xgettext \
--output $PO_DIR/$PKGNAME.pot \
--files-from $GETTEXT_FILES \
--c++ \
--add-comments=TRANSLATORS \
--keyword=_ \
--package-name="$PKGNAME" \
--copyright-holder="Canonical Ltd."
echo "$PROGNAME: $PO_DIR/$PKGNAME.pot updated"
indicator-location-13.10.0+16.04.20160218/po/az.po 0000644 0000156 0000165 00000002056 12661374651 021410 0 ustar pbuser pbgroup 0000000 0000000 # Azerbaijani translation for indicator-location
# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
# This file is distributed under the same license as the indicator-location package.
# FIRST AUTHOR , 2014.
#
msgid ""
msgstr ""
"Project-Id-Version: indicator-location\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2014-09-02 19:21+0100\n"
"PO-Revision-Date: 2014-09-04 10:24+0000\n"
"Last-Translator: Nicat Məmmədov \n"
"Language-Team: Azerbaijani \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-10-15 20:18+0000\n"
"X-Generator: Launchpad (build 17196)\n"
#: ../src/phone.cc:81 ../src/phone.cc:84
msgid "Location"
msgstr "Yerləşmə"
#: ../src/phone.cc:335
msgid "Location detection"
msgstr "Yerlәşmәnin tәyin olunması"
#: ../src/phone.cc:344
msgid "View HERE terms and conditions"
msgstr "BURDAN şərtlər və şəraitə baxın"
#: ../src/phone.cc:348
msgid "GPS"
msgstr "GPS"
indicator-location-13.10.0+16.04.20160218/po/gl.po 0000644 0000156 0000165 00000002022 12661374651 021371 0 ustar pbuser pbgroup 0000000 0000000 # Galician translation for indicator-location
# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
# This file is distributed under the same license as the indicator-location package.
# FIRST AUTHOR , 2014.
#
msgid ""
msgstr ""
"Project-Id-Version: indicator-location\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2014-09-02 19:21+0100\n"
"PO-Revision-Date: 2014-09-04 14:22+0000\n"
"Last-Translator: Marcos Lans \n"
"Language-Team: Galician \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-10-15 20:19+0000\n"
"X-Generator: Launchpad (build 17196)\n"
#: ../src/phone.cc:81 ../src/phone.cc:84
msgid "Location"
msgstr "Localización"
#: ../src/phone.cc:335
msgid "Location detection"
msgstr "Detección da localización"
#: ../src/phone.cc:344
msgid "View HERE terms and conditions"
msgstr "Vexa AQUÍ os termos e condicións"
#: ../src/phone.cc:348
msgid "GPS"
msgstr "GPS"
indicator-location-13.10.0+16.04.20160218/po/nl.po 0000644 0000156 0000165 00000001776 12661374651 021417 0 ustar pbuser pbgroup 0000000 0000000 # Dutch translation for indicator-location
# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
# This file is distributed under the same license as the indicator-location package.
# FIRST AUTHOR , 2014.
#
msgid ""
msgstr ""
"Project-Id-Version: indicator-location\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2014-09-02 19:21+0100\n"
"PO-Revision-Date: 2014-09-04 12:36+0000\n"
"Last-Translator: rob \n"
"Language-Team: Dutch \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-10-15 20:19+0000\n"
"X-Generator: Launchpad (build 17196)\n"
#: ../src/phone.cc:81 ../src/phone.cc:84
msgid "Location"
msgstr "Locatie"
#: ../src/phone.cc:335
msgid "Location detection"
msgstr "Locatiebepaling"
#: ../src/phone.cc:344
msgid "View HERE terms and conditions"
msgstr "Bekijk HIER de algemene voorwaarden"
#: ../src/phone.cc:348
msgid "GPS"
msgstr "GPS"
indicator-location-13.10.0+16.04.20160218/po/ca.po 0000644 0000156 0000165 00000002053 12661374651 021356 0 ustar pbuser pbgroup 0000000 0000000 # Catalan translation for indicator-location
# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
# This file is distributed under the same license as the indicator-location package.
# FIRST AUTHOR , 2014.
#
msgid ""
msgstr ""
"Project-Id-Version: indicator-location\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2014-09-02 19:21+0100\n"
"PO-Revision-Date: 2014-09-07 04:32+0000\n"
"Last-Translator: David Planella \n"
"Language-Team: Catalan \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-10-15 20:18+0000\n"
"X-Generator: Launchpad (build 17196)\n"
#: ../src/phone.cc:81 ../src/phone.cc:84
msgid "Location"
msgstr "Ubicació"
#: ../src/phone.cc:335
msgid "Location detection"
msgstr "Detecció de la ubicació"
#: ../src/phone.cc:344
msgid "View HERE terms and conditions"
msgstr "Mostra les condicions generals del servei HERE"
#: ../src/phone.cc:348
msgid "GPS"
msgstr "GPS"
indicator-location-13.10.0+16.04.20160218/po/zh_TW.po 0000644 0000156 0000165 00000002010 12661374651 022017 0 ustar pbuser pbgroup 0000000 0000000 # Chinese (Traditional) translation for indicator-location
# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
# This file is distributed under the same license as the indicator-location package.
# FIRST AUTHOR , 2014.
#
msgid ""
msgstr ""
"Project-Id-Version: indicator-location\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2014-09-02 19:21+0100\n"
"PO-Revision-Date: 2014-07-15 14:02+0000\n"
"Last-Translator: Cheng-Chia Tseng \n"
"Language-Team: Chinese (Traditional) \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-10-15 20:21+0000\n"
"X-Generator: Launchpad (build 17196)\n"
#: ../src/phone.cc:81 ../src/phone.cc:84
msgid "Location"
msgstr "位置"
#: ../src/phone.cc:335
msgid "Location detection"
msgstr "位置偵測"
#: ../src/phone.cc:344
msgid "View HERE terms and conditions"
msgstr ""
#: ../src/phone.cc:348
msgid "GPS"
msgstr "GPS"
indicator-location-13.10.0+16.04.20160218/po/ca@valencia.po 0000644 0000156 0000165 00000002025 12661374651 023160 0 ustar pbuser pbgroup 0000000 0000000 # Catalan translation for indicator-location
# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
# This file is distributed under the same license as the indicator-location package.
# FIRST AUTHOR , 2014.
#
msgid ""
msgstr ""
"Project-Id-Version: indicator-location\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2014-09-02 19:21+0100\n"
"PO-Revision-Date: 2014-10-15 14:37+0000\n"
"Last-Translator: Pau Iranzo \n"
"Language-Team: Catalan \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-10-16 05:51+0000\n"
"X-Generator: Launchpad (build 17196)\n"
#: ../src/phone.cc:81 ../src/phone.cc:84
msgid "Location"
msgstr "Ubicació"
#: ../src/phone.cc:335
msgid "Location detection"
msgstr "Detecció de la ubicació"
#: ../src/phone.cc:344
msgid "View HERE terms and conditions"
msgstr "Mostra les condicions generals del servei HERE"
#: ../src/phone.cc:348
msgid "GPS"
msgstr "GPS"
indicator-location-13.10.0+16.04.20160218/po/nb.po 0000644 0000156 0000165 00000002006 12661374651 021370 0 ustar pbuser pbgroup 0000000 0000000 # Norwegian Bokmal translation for indicator-location
# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
# This file is distributed under the same license as the indicator-location package.
# FIRST AUTHOR , 2014.
#
msgid ""
msgstr ""
"Project-Id-Version: indicator-location\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2014-09-02 19:21+0100\n"
"PO-Revision-Date: 2014-09-04 12:21+0000\n"
"Last-Translator: Åka Sikrom \n"
"Language-Team: Norwegian Bokmal \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-10-15 20:20+0000\n"
"X-Generator: Launchpad (build 17196)\n"
#: ../src/phone.cc:81 ../src/phone.cc:84
msgid "Location"
msgstr "Plassering"
#: ../src/phone.cc:335
msgid "Location detection"
msgstr "Finn plassering"
#: ../src/phone.cc:344
msgid "View HERE terms and conditions"
msgstr "Vis brukervilkår HER"
#: ../src/phone.cc:348
msgid "GPS"
msgstr "GPS"
indicator-location-13.10.0+16.04.20160218/po/cs.po 0000644 0000156 0000165 00000001733 12661374651 021404 0 ustar pbuser pbgroup 0000000 0000000 # Czech translation for indicator-location
# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
# This file is distributed under the same license as the indicator-location package.
# FIRST AUTHOR , 2014.
#
msgid ""
msgstr ""
"Project-Id-Version: indicator-location\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2014-09-02 19:21+0100\n"
"PO-Revision-Date: 2014-05-26 11:31+0000\n"
"Last-Translator: FULL NAME \n"
"Language-Team: Czech \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-10-15 20:19+0000\n"
"X-Generator: Launchpad (build 17196)\n"
#: ../src/phone.cc:81 ../src/phone.cc:84
msgid "Location"
msgstr "Poloha"
#: ../src/phone.cc:335
msgid "Location detection"
msgstr "Určení polohy"
#: ../src/phone.cc:344
msgid "View HERE terms and conditions"
msgstr ""
#: ../src/phone.cc:348
msgid "GPS"
msgstr "GPS"
indicator-location-13.10.0+16.04.20160218/po/fa.po 0000644 0000156 0000165 00000002101 12661374651 021353 0 ustar pbuser pbgroup 0000000 0000000 # Persian translation for indicator-location
# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
# This file is distributed under the same license as the indicator-location package.
# FIRST AUTHOR , 2014.
#
msgid ""
msgstr ""
"Project-Id-Version: indicator-location\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2014-09-02 19:21+0100\n"
"PO-Revision-Date: 2014-09-10 12:55+0000\n"
"Last-Translator: Danial Behzadi \n"
"Language-Team: Persian \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-10-15 20:20+0000\n"
"X-Generator: Launchpad (build 17196)\n"
#: ../src/phone.cc:81 ../src/phone.cc:84
msgid "Location"
msgstr "موقعیت"
#: ../src/phone.cc:335
msgid "Location detection"
msgstr "تشخیص مکان"
#: ../src/phone.cc:344
msgid "View HERE terms and conditions"
msgstr "شرایط و ضوابط را در اینجا ببینید"
#: ../src/phone.cc:348
msgid "GPS"
msgstr "جیپیاس"
indicator-location-13.10.0+16.04.20160218/po/pt.po 0000644 0000156 0000165 00000002047 12661374651 021421 0 ustar pbuser pbgroup 0000000 0000000 # Portuguese translation for indicator-location
# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
# This file is distributed under the same license as the indicator-location package.
# FIRST AUTHOR , 2014.
#
msgid ""
msgstr ""
"Project-Id-Version: indicator-location\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2014-09-02 19:21+0100\n"
"PO-Revision-Date: 2014-09-04 11:21+0000\n"
"Last-Translator: Ivo Xavier \n"
"Language-Team: Portuguese \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-10-15 20:20+0000\n"
"X-Generator: Launchpad (build 17196)\n"
#: ../src/phone.cc:81 ../src/phone.cc:84
msgid "Location"
msgstr "Localização"
#: ../src/phone.cc:335
msgid "Location detection"
msgstr "Detecção de localização"
#: ../src/phone.cc:344
msgid "View HERE terms and conditions"
msgstr "Ver os termos e condições do HERE"
#: ../src/phone.cc:348
msgid "GPS"
msgstr "GPS"
indicator-location-13.10.0+16.04.20160218/po/en_GB.po 0000644 0000156 0000165 00000002076 12661374651 021752 0 ustar pbuser pbgroup 0000000 0000000 # English (United Kingdom) translation for indicator-location
# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
# This file is distributed under the same license as the indicator-location package.
# FIRST AUTHOR , 2014.
#
msgid ""
msgstr ""
"Project-Id-Version: indicator-location\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2014-09-02 19:21+0100\n"
"PO-Revision-Date: 2014-07-09 16:47+0000\n"
"Last-Translator: Anthony Harrington \n"
"Language-Team: English (United Kingdom) \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-10-15 20:21+0000\n"
"X-Generator: Launchpad (build 17196)\n"
#: ../src/phone.cc:81 ../src/phone.cc:84
msgid "Location"
msgstr "Location"
#: ../src/phone.cc:335
msgid "Location detection"
msgstr "Location detection"
#: ../src/phone.cc:344
msgid "View HERE terms and conditions"
msgstr "View terms and conditions HERE"
#: ../src/phone.cc:348
msgid "GPS"
msgstr "GPS"
indicator-location-13.10.0+16.04.20160218/po/ckb.po 0000644 0000156 0000165 00000002000 12661374651 021522 0 ustar pbuser pbgroup 0000000 0000000 # Kurdish (Sorani) translation for indicator-location
# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
# This file is distributed under the same license as the indicator-location package.
# FIRST AUTHOR , 2014.
#
msgid ""
msgstr ""
"Project-Id-Version: indicator-location\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2014-09-02 19:21+0100\n"
"PO-Revision-Date: 2014-05-26 11:31+0000\n"
"Last-Translator: FULL NAME \n"
"Language-Team: Kurdish (Sorani) \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-10-15 20:21+0000\n"
"X-Generator: Launchpad (build 17196)\n"
#: ../src/phone.cc:81 ../src/phone.cc:84
msgid "Location"
msgstr "شوێن"
#: ../src/phone.cc:335
msgid "Location detection"
msgstr "دۆزەرەوەی شوێن"
#: ../src/phone.cc:344
msgid "View HERE terms and conditions"
msgstr ""
#: ../src/phone.cc:348
msgid "GPS"
msgstr "GPS"
indicator-location-13.10.0+16.04.20160218/po/pt_BR.po 0000644 0000156 0000165 00000002054 12661374651 022002 0 ustar pbuser pbgroup 0000000 0000000 # Brazilian Portuguese translation for indicator-location
# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
# This file is distributed under the same license as the indicator-location package.
# FIRST AUTHOR , 2014.
#
msgid ""
msgstr ""
"Project-Id-Version: indicator-location\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2014-09-02 19:21+0100\n"
"PO-Revision-Date: 2014-09-30 17:31+0000\n"
"Last-Translator: Rafael Neri \n"
"Language-Team: Brazilian Portuguese \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-10-15 20:21+0000\n"
"X-Generator: Launchpad (build 17196)\n"
#: ../src/phone.cc:81 ../src/phone.cc:84
msgid "Location"
msgstr "Localização"
#: ../src/phone.cc:335
msgid "Location detection"
msgstr "Detecção de localização"
#: ../src/phone.cc:344
msgid "View HERE terms and conditions"
msgstr "Veja AQUI os termos e condições"
#: ../src/phone.cc:348
msgid "GPS"
msgstr "GPS"
indicator-location-13.10.0+16.04.20160218/po/oc.po 0000644 0000156 0000165 00000002060 12661374651 021372 0 ustar pbuser pbgroup 0000000 0000000 # Occitan (post 1500) translation for indicator-location
# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
# This file is distributed under the same license as the indicator-location package.
# FIRST AUTHOR , 2014.
#
msgid ""
msgstr ""
"Project-Id-Version: indicator-location\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2014-09-02 19:21+0100\n"
"PO-Revision-Date: 2014-09-21 11:55+0000\n"
"Last-Translator: FULL NAME \n"
"Language-Team: Occitan (post 1500) \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-10-15 20:20+0000\n"
"X-Generator: Launchpad (build 17196)\n"
#: ../src/phone.cc:81 ../src/phone.cc:84
msgid "Location"
msgstr "Emplaçament"
#: ../src/phone.cc:335
msgid "Location detection"
msgstr "Deteccion de la posicion"
#: ../src/phone.cc:344
msgid "View HERE terms and conditions"
msgstr "Veire las condicions d'utilizacion de HERE"
#: ../src/phone.cc:348
msgid "GPS"
msgstr "GPS"
indicator-location-13.10.0+16.04.20160218/po/mk.po 0000644 0000156 0000165 00000001715 12661374651 021406 0 ustar pbuser pbgroup 0000000 0000000 # Macedonian translation for indicator-location
# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
# This file is distributed under the same license as the indicator-location package.
# FIRST AUTHOR , 2014.
#
msgid ""
msgstr ""
"Project-Id-Version: indicator-location\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2014-09-02 19:21+0100\n"
"PO-Revision-Date: 2014-07-16 19:28+0000\n"
"Last-Translator: FULL NAME \n"
"Language-Team: Macedonian \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-10-15 20:20+0000\n"
"X-Generator: Launchpad (build 17196)\n"
#: ../src/phone.cc:81 ../src/phone.cc:84
msgid "Location"
msgstr ""
#: ../src/phone.cc:335
msgid "Location detection"
msgstr ""
#: ../src/phone.cc:344
msgid "View HERE terms and conditions"
msgstr ""
#: ../src/phone.cc:348
msgid "GPS"
msgstr ""
indicator-location-13.10.0+16.04.20160218/po/sv.po 0000644 0000156 0000165 00000002053 12661374651 021423 0 ustar pbuser pbgroup 0000000 0000000 # Swedish translation for indicator-location
# Copyright © 2014 Rosetta Contributors and Canonical Ltd 2014
# This file is distributed under the same license as the indicator-location package.
# Josef Andersson , 2014.
#
msgid ""
msgstr ""
"Project-Id-Version: indicator-location\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2014-09-02 19:21+0100\n"
"PO-Revision-Date: 2014-09-08 18:57+0000\n"
"Last-Translator: Josef Andersson \n"
"Language-Team: Swedish \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-10-15 20:20+0000\n"
"X-Generator: Launchpad (build 17196)\n"
"Language: sv\n"
#: ../src/phone.cc:81 ../src/phone.cc:84
msgid "Location"
msgstr "Plats"
#: ../src/phone.cc:335
msgid "Location detection"
msgstr "Platsbestämning"
#: ../src/phone.cc:344
msgid "View HERE terms and conditions"
msgstr "Visa användarvillkor för HERE"
#: ../src/phone.cc:348
msgid "GPS"
msgstr "GPS"
indicator-location-13.10.0+16.04.20160218/po/lv.po 0000644 0000156 0000165 00000001771 12661374651 021422 0 ustar pbuser pbgroup 0000000 0000000 # Latvian translation for indicator-location
# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
# This file is distributed under the same license as the indicator-location package.
# FIRST AUTHOR , 2014.
#
msgid ""
msgstr ""
"Project-Id-Version: indicator-location\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2014-09-02 19:21+0100\n"
"PO-Revision-Date: 2014-05-26 11:31+0000\n"
"Last-Translator: FULL NAME \n"
"Language-Team: Latvian \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-10-15 20:19+0000\n"
"X-Generator: Launchpad (build 17196)\n"
#: ../src/phone.cc:81 ../src/phone.cc:84
msgid "Location"
msgstr "Atrašanās vieta"
#: ../src/phone.cc:335
msgid "Location detection"
msgstr "Atrašanās vietas noteikšana"
#: ../src/phone.cc:344
msgid "View HERE terms and conditions"
msgstr ""
#: ../src/phone.cc:348
msgid "GPS"
msgstr "GPS"
indicator-location-13.10.0+16.04.20160218/po/id.po 0000644 0000156 0000165 00000002006 12661374651 021365 0 ustar pbuser pbgroup 0000000 0000000 # Indonesian translation for indicator-location
# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
# This file is distributed under the same license as the indicator-location package.
# FIRST AUTHOR , 2014.
#
msgid ""
msgstr ""
"Project-Id-Version: indicator-location\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2014-09-02 19:21+0100\n"
"PO-Revision-Date: 2014-09-03 04:32+0000\n"
"Last-Translator: FULL NAME \n"
"Language-Team: Indonesian \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-10-15 20:19+0000\n"
"X-Generator: Launchpad (build 17196)\n"
#: ../src/phone.cc:81 ../src/phone.cc:84
msgid "Location"
msgstr "Lokasi"
#: ../src/phone.cc:335
msgid "Location detection"
msgstr "Deteksi lokasi"
#: ../src/phone.cc:344
msgid "View HERE terms and conditions"
msgstr "Lihat syarat dan ketentuan DI SINI"
#: ../src/phone.cc:348
msgid "GPS"
msgstr "GPS"
indicator-location-13.10.0+16.04.20160218/po/ar.po 0000644 0000156 0000165 00000002020 12661374651 021367 0 ustar pbuser pbgroup 0000000 0000000 # Arabic translation for indicator-location
# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
# This file is distributed under the same license as the indicator-location package.
# FIRST AUTHOR , 2014.
#
msgid ""
msgstr ""
"Project-Id-Version: indicator-location\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2014-09-02 19:21+0100\n"
"PO-Revision-Date: 2014-05-26 11:31+0000\n"
"Last-Translator: FULL NAME \n"
"Language-Team: Arabic \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-10-15 20:18+0000\n"
"X-Generator: Launchpad (build 17196)\n"
#: ../src/phone.cc:81 ../src/phone.cc:84
msgid "Location"
msgstr "الموقع"
#: ../src/phone.cc:335
msgid "Location detection"
msgstr "تحديد الموقع"
#: ../src/phone.cc:344
msgid "View HERE terms and conditions"
msgstr ""
#: ../src/phone.cc:348
msgid "GPS"
msgstr "نظام تحديد المواقع (GPS)"
indicator-location-13.10.0+16.04.20160218/po/ko.po 0000644 0000156 0000165 00000001755 12661374651 021414 0 ustar pbuser pbgroup 0000000 0000000 # Korean translation for indicator-location
# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
# This file is distributed under the same license as the indicator-location package.
# FIRST AUTHOR , 2014.
#
msgid ""
msgstr ""
"Project-Id-Version: indicator-location\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2014-09-02 19:21+0100\n"
"PO-Revision-Date: 2014-07-15 17:13+0000\n"
"Last-Translator: Bundo \n"
"Language-Team: Korean \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-10-15 20:19+0000\n"
"X-Generator: Launchpad (build 17196)\n"
#: ../src/phone.cc:81 ../src/phone.cc:84
msgid "Location"
msgstr "위치"
#: ../src/phone.cc:335
msgid "Location detection"
msgstr "위치 탐색"
#: ../src/phone.cc:344
msgid "View HERE terms and conditions"
msgstr "사용 약관 보기"
#: ../src/phone.cc:348
msgid "GPS"
msgstr "GPS"
indicator-location-13.10.0+16.04.20160218/po/hu.po 0000644 0000156 0000165 00000002042 12661374651 021405 0 ustar pbuser pbgroup 0000000 0000000 # Hungarian translation for indicator-location
# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
# This file is distributed under the same license as the indicator-location package.
# FIRST AUTHOR , 2014.
#
msgid ""
msgstr ""
"Project-Id-Version: indicator-location\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2014-09-02 19:21+0100\n"
"PO-Revision-Date: 2014-09-04 06:34+0000\n"
"Last-Translator: Richard Somlói \n"
"Language-Team: Hungarian \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-10-15 20:19+0000\n"
"X-Generator: Launchpad (build 17196)\n"
#: ../src/phone.cc:81 ../src/phone.cc:84
msgid "Location"
msgstr "Hely"
#: ../src/phone.cc:335
msgid "Location detection"
msgstr "Helymeghatározás"
#: ../src/phone.cc:344
msgid "View HERE terms and conditions"
msgstr "HERE felhasználás feltételeinek megtekintése"
#: ../src/phone.cc:348
msgid "GPS"
msgstr "GPS"
indicator-location-13.10.0+16.04.20160218/po/br.po 0000644 0000156 0000165 00000002024 12661374651 021374 0 ustar pbuser pbgroup 0000000 0000000 # Breton translation for indicator-location
# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
# This file is distributed under the same license as the indicator-location package.
# FIRST AUTHOR , 2014.
#
msgid ""
msgstr ""
"Project-Id-Version: indicator-location\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2014-09-02 19:21+0100\n"
"PO-Revision-Date: 2014-09-05 06:50+0000\n"
"Last-Translator: Fohanno Thierry \n"
"Language-Team: Breton
\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-10-15 20:18+0000\n"
"X-Generator: Launchpad (build 17196)\n"
#: ../src/phone.cc:81 ../src/phone.cc:84
msgid "Location"
msgstr "Lec'h"
#: ../src/phone.cc:335
msgid "Location detection"
msgstr "Dinoiñ al lec'h"
#: ../src/phone.cc:344
msgid "View HERE terms and conditions"
msgstr "Gwelet AMAÑ an divizoù implijout"
#: ../src/phone.cc:348
msgid "GPS"
msgstr "GPS"
indicator-location-13.10.0+16.04.20160218/po/ne.po 0000644 0000156 0000165 00000002022 12661374651 021371 0 ustar pbuser pbgroup 0000000 0000000 # Nepali translation for indicator-location
# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
# This file is distributed under the same license as the indicator-location package.
# FIRST AUTHOR , 2014.
#
msgid ""
msgstr ""
"Project-Id-Version: indicator-location\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2014-09-02 19:21+0100\n"
"PO-Revision-Date: 2014-07-18 10:24+0000\n"
"Last-Translator: Niroj Bista \n"
"Language-Team: Nepali \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-10-15 20:20+0000\n"
"X-Generator: Launchpad (build 17196)\n"
#: ../src/phone.cc:81 ../src/phone.cc:84
msgid "Location"
msgstr "स्थान"
#: ../src/phone.cc:335
msgid "Location detection"
msgstr "स्थान पत्ता लगाउने"
#: ../src/phone.cc:344
msgid "View HERE terms and conditions"
msgstr ""
#: ../src/phone.cc:348
msgid "GPS"
msgstr "GPS"
indicator-location-13.10.0+16.04.20160218/po/sl.po 0000644 0000156 0000165 00000002014 12661374651 021406 0 ustar pbuser pbgroup 0000000 0000000 # Slovenian translation for indicator-location
# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
# This file is distributed under the same license as the indicator-location package.
# FIRST AUTHOR , 2014.
#
msgid ""
msgstr ""
"Project-Id-Version: indicator-location\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2014-09-02 19:21+0100\n"
"PO-Revision-Date: 2014-09-08 17:18+0000\n"
"Last-Translator: Damir Jerovšek \n"
"Language-Team: Slovenian \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-10-15 20:20+0000\n"
"X-Generator: Launchpad (build 17196)\n"
#: ../src/phone.cc:81 ../src/phone.cc:84
msgid "Location"
msgstr "Položaj"
#: ../src/phone.cc:335
msgid "Location detection"
msgstr "Odkrivanje položaja"
#: ../src/phone.cc:344
msgid "View HERE terms and conditions"
msgstr "Pogoje in pravila si oglejte TUKAJ"
#: ../src/phone.cc:348
msgid "GPS"
msgstr "GPS"
indicator-location-13.10.0+16.04.20160218/po/it.po 0000644 0000156 0000165 00000002046 12661374651 021411 0 ustar pbuser pbgroup 0000000 0000000 # Italian translation for indicator-location
# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
# This file is distributed under the same license as the indicator-location package.
# FIRST AUTHOR , 2014.
#
msgid ""
msgstr ""
"Project-Id-Version: indicator-location\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2014-09-02 19:21+0100\n"
"PO-Revision-Date: 2014-10-21 15:54+0000\n"
"Last-Translator: Marco Trevisan (Treviño) \n"
"Language-Team: Italian \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-10-22 06:37+0000\n"
"X-Generator: Launchpad (build 17203)\n"
#: ../src/phone.cc:81 ../src/phone.cc:84
msgid "Location"
msgstr "Posizione"
#: ../src/phone.cc:335
msgid "Location detection"
msgstr "Rilevamento della posizione"
#: ../src/phone.cc:344
msgid "View HERE terms and conditions"
msgstr "Visualizza termini e condizioni di HERE"
#: ../src/phone.cc:348
msgid "GPS"
msgstr "GPS"
indicator-location-13.10.0+16.04.20160218/po/gd.po 0000644 0000156 0000165 00000002122 12661374651 021362 0 ustar pbuser pbgroup 0000000 0000000 # Gaelic; Scottish translation for indicator-location
# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
# This file is distributed under the same license as the indicator-location package.
# FIRST AUTHOR , 2014.
# GunChleoc , 2014.
msgid ""
msgstr ""
"Project-Id-Version: indicator-location\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2014-09-02 19:21+0100\n"
"PO-Revision-Date: 2014-09-12 15:58+0000\n"
"Last-Translator: GunChleoc \n"
"Language-Team: Fòram na Gàidhlig\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-10-15 20:19+0000\n"
"X-Generator: Launchpad (build 17196)\n"
"Language: gd\n"
#: ../src/phone.cc:81 ../src/phone.cc:84
msgid "Location"
msgstr "Ionad"
#: ../src/phone.cc:335
msgid "Location detection"
msgstr "Mothachadh dha d' ionad"
#: ../src/phone.cc:344
msgid "View HERE terms and conditions"
msgstr "Seall na teirmichean 's cumhaichean aig HERE"
#: ../src/phone.cc:348
msgid "GPS"
msgstr "GPS"
indicator-location-13.10.0+16.04.20160218/po/lt.po 0000644 0000156 0000165 00000001730 12661374651 021413 0 ustar pbuser pbgroup 0000000 0000000 # Lithuanian translation for indicator-location
# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
# This file is distributed under the same license as the indicator-location package.
# FIRST AUTHOR , 2014.
#
msgid ""
msgstr ""
"Project-Id-Version: indicator-location\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2014-09-02 19:21+0100\n"
"PO-Revision-Date: 2014-05-26 11:31+0000\n"
"Last-Translator: FULL NAME \n"
"Language-Team: Lithuanian \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-10-15 20:19+0000\n"
"X-Generator: Launchpad (build 17196)\n"
#: ../src/phone.cc:81 ../src/phone.cc:84
msgid "Location"
msgstr "Vietovė"
#: ../src/phone.cc:335
msgid "Location detection"
msgstr ""
#: ../src/phone.cc:344
msgid "View HERE terms and conditions"
msgstr ""
#: ../src/phone.cc:348
msgid "GPS"
msgstr "GPS"
indicator-location-13.10.0+16.04.20160218/po/indicator-location.pot 0000644 0000156 0000165 00000001443 12661374651 024743 0 ustar pbuser pbgroup 0000000 0000000 # SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR Canonical Ltd.
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR , YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: indicator-location\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-09-02 19:21+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
#: src/phone.cc:83 src/phone.cc:86
msgid "Location"
msgstr ""
#: src/phone.cc:327
msgid "Location detection"
msgstr ""
#: src/phone.cc:336
msgid "View HERE terms and conditions"
msgstr ""
#: src/phone.cc:340
msgid "GPS"
msgstr ""
indicator-location-13.10.0+16.04.20160218/po/km.po 0000644 0000156 0000165 00000002043 12661374651 021401 0 ustar pbuser pbgroup 0000000 0000000 # Khmer translation for indicator-location
# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
# This file is distributed under the same license as the indicator-location package.
# FIRST AUTHOR , 2014.
#
msgid ""
msgstr ""
"Project-Id-Version: indicator-location\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2014-09-02 19:21+0100\n"
"PO-Revision-Date: 2014-08-20 04:48+0000\n"
"Last-Translator: Sophea Sok \n"
"Language-Team: Khmer \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-10-15 20:19+0000\n"
"X-Generator: Launchpad (build 17196)\n"
#: ../src/phone.cc:81 ../src/phone.cc:84
msgid "Location"
msgstr "ទីតាំង"
#: ../src/phone.cc:335
msgid "Location detection"
msgstr "ការរកឃើញទីតាំង"
#: ../src/phone.cc:344
msgid "View HERE terms and conditions"
msgstr ""
#: ../src/phone.cc:348
msgid "GPS"
msgstr "ជីភីអេស"
indicator-location-13.10.0+16.04.20160218/po/el.po 0000644 0000156 0000165 00000002014 12661374651 021370 0 ustar pbuser pbgroup 0000000 0000000 # Greek translation for indicator-location
# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
# This file is distributed under the same license as the indicator-location package.
# FIRST AUTHOR , 2014.
#
msgid ""
msgstr ""
"Project-Id-Version: indicator-location\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2014-09-02 19:21+0100\n"
"PO-Revision-Date: 2014-07-25 19:08+0000\n"
"Last-Translator: George Christofis \n"
"Language-Team: Greek \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-10-15 20:19+0000\n"
"X-Generator: Launchpad (build 17196)\n"
#: ../src/phone.cc:81 ../src/phone.cc:84
msgid "Location"
msgstr "Τοποθεσία"
#: ../src/phone.cc:335
msgid "Location detection"
msgstr "Ανίχνευση τοποθεσίας"
#: ../src/phone.cc:344
msgid "View HERE terms and conditions"
msgstr ""
#: ../src/phone.cc:348
msgid "GPS"
msgstr "GPS"
indicator-location-13.10.0+16.04.20160218/po/sr.po 0000644 0000156 0000165 00000002110 12661374651 021411 0 ustar pbuser pbgroup 0000000 0000000 # Serbian translation for indicator-location
# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
# This file is distributed under the same license as the indicator-location package.
# FIRST AUTHOR , 2014.
#
msgid ""
msgstr ""
"Project-Id-Version: indicator-location\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2014-09-02 19:21+0100\n"
"PO-Revision-Date: 2014-09-05 13:31+0000\n"
"Last-Translator: Данило Шеган \n"
"Language-Team: Serbian \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-10-15 20:20+0000\n"
"X-Generator: Launchpad (build 17196)\n"
#: ../src/phone.cc:81 ../src/phone.cc:84
msgid "Location"
msgstr "Положај"
#: ../src/phone.cc:335
msgid "Location detection"
msgstr "Препознавање положаја"
#: ../src/phone.cc:344
msgid "View HERE terms and conditions"
msgstr "Погледајте правила и услове ОВДЕ"
#: ../src/phone.cc:348
msgid "GPS"
msgstr "ГПС"
indicator-location-13.10.0+16.04.20160218/po/ms.po 0000644 0000156 0000165 00000001773 12661374651 021422 0 ustar pbuser pbgroup 0000000 0000000 # Malay translation for indicator-location
# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
# This file is distributed under the same license as the indicator-location package.
# FIRST AUTHOR , 2014.
#
msgid ""
msgstr ""
"Project-Id-Version: indicator-location\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2014-09-02 19:21+0100\n"
"PO-Revision-Date: 2014-05-26 11:31+0000\n"
"Last-Translator: FULL NAME \n"
"Language-Team: Malay \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-10-15 20:20+0000\n"
"X-Generator: Launchpad (build 17196)\n"
#: ../src/phone.cc:81 ../src/phone.cc:84
msgid "Location"
msgstr "Lokasi"
#: ../src/phone.cc:335
msgid "Location detection"
msgstr "Pengesanan lokasi"
#: ../src/phone.cc:344
msgid "View HERE terms and conditions"
msgstr "Lihat terma dan syarat DI SINI"
#: ../src/phone.cc:348
msgid "GPS"
msgstr "GPS"
indicator-location-13.10.0+16.04.20160218/po/da.po 0000644 0000156 0000165 00000001756 12661374651 021370 0 ustar pbuser pbgroup 0000000 0000000 # Danish translation for indicator-location
# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
# This file is distributed under the same license as the indicator-location package.
# FIRST AUTHOR , 2014.
#
msgid ""
msgstr ""
"Project-Id-Version: indicator-location\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2014-09-02 19:21+0100\n"
"PO-Revision-Date: 2014-07-23 10:11+0000\n"
"Last-Translator: Ask Hjorth Larsen \n"
"Language-Team: Danish \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-10-15 20:19+0000\n"
"X-Generator: Launchpad (build 17196)\n"
#: ../src/phone.cc:81 ../src/phone.cc:84
msgid "Location"
msgstr "Sted"
#: ../src/phone.cc:335
msgid "Location detection"
msgstr "Positionsbestemmelse"
#: ../src/phone.cc:344
msgid "View HERE terms and conditions"
msgstr ""
#: ../src/phone.cc:348
msgid "GPS"
msgstr "GPS"
indicator-location-13.10.0+16.04.20160218/po/eu.po 0000644 0000156 0000165 00000002001 12661374651 021375 0 ustar pbuser pbgroup 0000000 0000000 # Basque translation for indicator-location
# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
# This file is distributed under the same license as the indicator-location package.
# FIRST AUTHOR , 2014.
#
msgid ""
msgstr ""
"Project-Id-Version: indicator-location\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2014-09-02 19:21+0100\n"
"PO-Revision-Date: 2014-09-04 18:32+0000\n"
"Last-Translator: Ibai Oihanguren Sala \n"
"Language-Team: Basque \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-10-15 20:18+0000\n"
"X-Generator: Launchpad (build 17196)\n"
#: ../src/phone.cc:81 ../src/phone.cc:84
msgid "Location"
msgstr "Kokapena"
#: ../src/phone.cc:335
msgid "Location detection"
msgstr "Kokapenaren detekzioa"
#: ../src/phone.cc:344
msgid "View HERE terms and conditions"
msgstr "Ikusi HEMEN baldintzak"
#: ../src/phone.cc:348
msgid "GPS"
msgstr "GPSa"
indicator-location-13.10.0+16.04.20160218/po/tr.po 0000644 0000156 0000165 00000001736 12661374651 021427 0 ustar pbuser pbgroup 0000000 0000000 # Turkish translation for indicator-location
# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
# This file is distributed under the same license as the indicator-location package.
# FIRST AUTHOR , 2014.
#
msgid ""
msgstr ""
"Project-Id-Version: indicator-location\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2014-09-02 19:21+0100\n"
"PO-Revision-Date: 2014-05-26 11:31+0000\n"
"Last-Translator: FULL NAME