aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRenato Araujo Oliveira Filho <renato.filho@canonical.com>2016-03-21 14:32:39 -0300
committerRobert Tari <robert@tari.in>2021-07-05 00:44:12 +0200
commitd1935f872fe600f224aa89eff3ab70a48d52c16d (patch)
treec29a046d47f09fc434b08e3c9f0aedb4cc700c65
parentbf7746273c111b004c56a0868bb1702d96ecb67f (diff)
downloadayatana-indicator-datetime-d1935f872fe600f224aa89eff3ab70a48d52c16d.tar.gz
ayatana-indicator-datetime-d1935f872fe600f224aa89eff3ab70a48d52c16d.tar.bz2
ayatana-indicator-datetime-d1935f872fe600f224aa89eff3ab70a48d52c16d.zip
Make sure that the ocurrence time is used to build the url to launch external application.
-rw-r--r--include/datetime/actions-live.h4
-rw-r--r--include/datetime/actions.h4
-rw-r--r--src/actions-live.cpp8
-rw-r--r--src/actions.cpp29
-rw-r--r--src/menu.cpp7
-rw-r--r--tests/actions-mock.h6
-rw-r--r--tests/test-actions.cpp4
-rw-r--r--tests/test-live-actions.cpp11
8 files changed, 40 insertions, 33 deletions
diff --git a/include/datetime/actions-live.h b/include/datetime/actions-live.h
index 2c348c6..1f84659 100644
--- a/include/datetime/actions-live.h
+++ b/include/datetime/actions-live.h
@@ -41,12 +41,12 @@ public:
bool desktop_has_calendar_app() const override;
void desktop_open_alarm_app() override;
- void desktop_open_appointment(const Appointment&) override;
+ void desktop_open_appointment(const Appointment&, const DateTime&) override;
void desktop_open_calendar_app(const DateTime&) override;
void desktop_open_settings_app() override;
void phone_open_alarm_app() override;
- void phone_open_appointment(const Appointment&) override;
+ void phone_open_appointment(const Appointment&, const DateTime &) override;
void phone_open_calendar_app(const DateTime&) override;
void phone_open_settings_app() override;
diff --git a/include/datetime/actions.h b/include/datetime/actions.h
index 47931ac..ea163e4 100644
--- a/include/datetime/actions.h
+++ b/include/datetime/actions.h
@@ -45,12 +45,12 @@ public:
virtual bool desktop_has_calendar_app() const =0;
virtual void desktop_open_alarm_app() =0;
- virtual void desktop_open_appointment(const Appointment&) =0;
+ virtual void desktop_open_appointment(const Appointment&, const DateTime&) =0;
virtual void desktop_open_calendar_app(const DateTime&) =0;
virtual void desktop_open_settings_app() =0;
virtual void phone_open_alarm_app() =0;
- virtual void phone_open_appointment(const Appointment&) =0;
+ virtual void phone_open_appointment(const Appointment&, const DateTime&) =0;
virtual void phone_open_calendar_app(const DateTime&) =0;
virtual void phone_open_settings_app() =0;
diff --git a/src/actions-live.cpp b/src/actions-live.cpp
index 4fe2f39..231fb33 100644
--- a/src/actions-live.cpp
+++ b/src/actions-live.cpp
@@ -127,9 +127,9 @@ void LiveActions::desktop_open_alarm_app()
execute_command("evolution -c calendar");
}
-void LiveActions::desktop_open_appointment(const Appointment& appt)
+void LiveActions::desktop_open_appointment(const Appointment&, const DateTime& date)
{
- desktop_open_calendar_app(appt.begin);
+ desktop_open_calendar_app(date);
}
void LiveActions::desktop_open_calendar_app(const DateTime& dt)
@@ -148,7 +148,7 @@ void LiveActions::phone_open_alarm_app()
dispatch_url("appid://com.ubuntu.clock/clock/current-user-version");
}
-void LiveActions::phone_open_appointment(const Appointment& appt)
+void LiveActions::phone_open_appointment(const Appointment& appt, const DateTime& date)
{
if (!appt.activation_url.empty())
@@ -163,7 +163,7 @@ void LiveActions::phone_open_appointment(const Appointment& appt)
case Appointment::EVENT:
default:
- phone_open_calendar_app(appt.begin);
+ phone_open_calendar_app(date);
break;
}
}
diff --git a/src/actions.cpp b/src/actions.cpp
index 93629a0..ea68d3e 100644
--- a/src/actions.cpp
+++ b/src/actions.cpp
@@ -48,13 +48,8 @@ DateTime datetime_from_timet_variant(GVariant* v)
return DateTime::NowLocal();
}
-bool lookup_appointment_by_uid_variant(const std::shared_ptr<State>& state, GVariant* vuid, Appointment& setme)
+bool lookup_appointment_by_uid(const std::shared_ptr<State>& state, const gchar* uid, Appointment& setme)
{
- g_return_val_if_fail(vuid != nullptr, false);
- g_return_val_if_fail(g_variant_type_equal(G_VARIANT_TYPE_STRING,g_variant_get_type(vuid)), false);
- const auto uid = g_variant_get_string(vuid, nullptr);
- g_return_val_if_fail(uid && *uid, false);
-
for(const auto& appt : state->calendar_upcoming->appointments().get())
{
if (appt.uid == uid)
@@ -67,12 +62,15 @@ bool lookup_appointment_by_uid_variant(const std::shared_ptr<State>& state, GVar
return false;
}
-void on_desktop_appointment_activated (GSimpleAction*, GVariant *vuid, gpointer gself)
+void on_desktop_appointment_activated (GSimpleAction*, GVariant *vdata, gpointer gself)
{
auto self = static_cast<Actions*>(gself);
Appointment appt;
- if (lookup_appointment_by_uid_variant(self->state(), vuid, appt))
- self->desktop_open_appointment(appt);
+ const gchar* uid = nullptr;
+ gint64 time = 0;
+ g_variant_get(vdata, "(&sx)", &uid, &time);
+ if (lookup_appointment_by_uid(self->state(), uid, appt))
+ self->desktop_open_appointment(appt, DateTime::Local(time));
}
void on_desktop_alarm_activated (GSimpleAction*, GVariant*, gpointer gself)
{
@@ -88,12 +86,15 @@ void on_desktop_settings_activated (GSimpleAction*, GVariant*, gpointer gself)
static_cast<Actions*>(gself)->desktop_open_settings_app();
}
-void on_phone_appointment_activated (GSimpleAction*, GVariant *vuid, gpointer gself)
+void on_phone_appointment_activated (GSimpleAction*, GVariant *vdata, gpointer gself)
{
auto self = static_cast<Actions*>(gself);
Appointment appt;
- if (lookup_appointment_by_uid_variant(self->state(), vuid, appt))
- self->phone_open_appointment(appt);
+ const gchar* uid = nullptr;
+ gint64 time = 0;
+ g_variant_get(vdata, "(&sx)", &uid, &time);
+ if (lookup_appointment_by_uid(self->state(), uid, appt))
+ self->phone_open_appointment(appt, DateTime::Local(time));
}
void on_phone_alarm_activated (GSimpleAction*, GVariant*, gpointer gself)
{
@@ -198,12 +199,12 @@ Actions::Actions(const std::shared_ptr<State>& state):
{
GActionEntry entries[] = {
- { "desktop.open-appointment", on_desktop_appointment_activated, "s", nullptr },
+ { "desktop.open-appointment", on_desktop_appointment_activated, "(sx)", nullptr },
{ "desktop.open-alarm-app", on_desktop_alarm_activated },
{ "desktop.open-calendar-app", on_desktop_calendar_activated, "x", nullptr },
{ "desktop.open-settings-app", on_desktop_settings_activated },
- { "phone.open-appointment", on_phone_appointment_activated, "s", nullptr },
+ { "phone.open-appointment", on_phone_appointment_activated, "(sx)", nullptr },
{ "phone.open-alarm-app", on_phone_alarm_activated },
{ "phone.open-calendar-app", on_phone_calendar_activated, "x", nullptr },
{ "phone.open-settings-app", on_phone_settings_activated },
diff --git a/src/menu.cpp b/src/menu.cpp
index 0cd3f9b..b1ac75c 100644
--- a/src/menu.cpp
+++ b/src/menu.cpp
@@ -414,9 +414,12 @@ private:
if (!appt.color.empty())
g_menu_item_set_attribute (menu_item, "x-ayatana-color", "s", appt.color.c_str());
- if (action_name != nullptr)
+ if (action_name != nullptr) {
g_menu_item_set_action_and_target_value (menu_item, action_name,
- g_variant_new_string (appt.uid.c_str()));
+ g_variant_new ("(sx)",
+ appt.uid.c_str(),
+ unix_time));
+ }
g_menu_append_item (menu, menu_item);
g_object_unref (menu_item);
diff --git a/tests/actions-mock.h b/tests/actions-mock.h
index 59a0912..346a8f6 100644
--- a/tests/actions-mock.h
+++ b/tests/actions-mock.h
@@ -57,8 +57,9 @@ public:
void desktop_open_alarm_app() {
m_history.push_back(DesktopOpenAlarmApp);
}
- void desktop_open_appointment(const Appointment& appt) {
+ void desktop_open_appointment(const Appointment& appt, const DateTime& dt) {
m_appt = appt;
+ m_date_time = dt;
m_history.push_back(DesktopOpenAppt);
}
void desktop_open_calendar_app(const DateTime& dt) {
@@ -72,8 +73,9 @@ public:
void phone_open_alarm_app() {
m_history.push_back(PhoneOpenAlarmApp);
}
- void phone_open_appointment(const Appointment& appt) {
+ void phone_open_appointment(const Appointment& appt, const DateTime& dt) {
m_appt = appt;
+ m_date_time = dt;
m_history.push_back(PhoneOpenAppt);
}
void phone_open_calendar_app(const DateTime& dt) {
diff --git a/tests/test-actions.cpp b/tests/test-actions.cpp
index aa608a8..96da7cc 100644
--- a/tests/test-actions.cpp
+++ b/tests/test-actions.cpp
@@ -116,7 +116,7 @@ protected:
m_mock_state->mock_range_planner->appointments().set(appointments);
// activate the action
- auto v = g_variant_new_string(appointments[0].uid.c_str());
+ auto v = g_variant_new("(sx)", appointments[0].uid.c_str(), 0);
g_action_group_activate_action(action_group, action_name, v);
// test the results
@@ -134,7 +134,7 @@ protected:
EXPECT_TRUE(m_mock_actions->history().empty());
// activate the action
- v = g_variant_new_string("this-uid-is-not-one-that-we-have");
+ v = g_variant_new("(sx)", "this-uid-is-not-one-that-we-have", 0);
g_action_group_activate_action(action_group, action_name, v);
// test the results
diff --git a/tests/test-live-actions.cpp b/tests/test-live-actions.cpp
index 3f79d7d..e7cb1a2 100644
--- a/tests/test-live-actions.cpp
+++ b/tests/test-live-actions.cpp
@@ -64,7 +64,7 @@ TEST_F(TimedateFixture, DesktopOpenAppointment)
Appointment a;
a.uid = "some-uid";
a.begin = DateTime::NowLocal();
- m_actions->desktop_open_appointment(a);
+ m_actions->desktop_open_appointment(a, a.begin);
const std::string expected_substr = "evolution \"calendar:///?startdate=";
EXPECT_NE(m_live_actions->last_cmd.find(expected_substr), std::string::npos);
}
@@ -106,12 +106,13 @@ TEST_F(TimedateFixture, PhoneOpenAppointment)
a.source_uid = "source-uid";
a.begin = DateTime::NowLocal();
a.type = Appointment::EVENT;
- m_actions->phone_open_appointment(a);
- const std::string appointment_app_url = "calendar://eventid=source-uid/event-uid";
+ auto ocurrenceDate = DateTime::Local(2014, 1, 1, 0, 0, 0);
+ m_actions->phone_open_appointment(a, ocurrenceDate);
+ const std::string appointment_app_url = ocurrenceDate.to_timezone("UTC").format("calendar://startdate=%Y-%m-%dT%H:%M:%S+00:00");
EXPECT_EQ(appointment_app_url, m_live_actions->last_url);
a.type = Appointment::UBUNTU_ALARM;
- m_actions->phone_open_appointment(a);
+ m_actions->phone_open_appointment(a, a.begin);
EXPECT_EQ(clock_app_url, m_live_actions->last_url);
}
@@ -119,7 +120,7 @@ TEST_F(TimedateFixture, PhoneOpenCalendarApp)
{
auto now = DateTime::NowLocal();
m_actions->phone_open_calendar_app(now);
- const std::string expected = now.format("calendar:///?startdate=%Y%m%dT%H%M%SZ");
+ const std::string expected = now.to_timezone("UTC").format("calendar://startdate=%Y-%m-%dT%H:%M:%S+00:00");
EXPECT_EQ(expected, m_live_actions->last_url);
}