From d1935f872fe600f224aa89eff3ab70a48d52c16d Mon Sep 17 00:00:00 2001 From: Renato Araujo Oliveira Filho Date: Mon, 21 Mar 2016 14:32:39 -0300 Subject: Make sure that the ocurrence time is used to build the url to launch external application. --- include/datetime/actions-live.h | 4 ++-- include/datetime/actions.h | 4 ++-- src/actions-live.cpp | 8 ++++---- src/actions.cpp | 29 +++++++++++++++-------------- src/menu.cpp | 7 +++++-- tests/actions-mock.h | 6 ++++-- tests/test-actions.cpp | 4 ++-- tests/test-live-actions.cpp | 11 ++++++----- 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, GVariant* vuid, Appointment& setme) +bool lookup_appointment_by_uid(const std::shared_ptr& 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, 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(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(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(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): { 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); } -- cgit v1.2.3