feedback-profile: Allow to update profiles
Allow to add feedbacks from a profile to another one
This commit is contained in:
@@ -341,3 +341,33 @@ fbd_feedback_profile_level_to_string (FbdFeedbackProfileLevel level)
|
|||||||
return "full";
|
return "full";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fbd_profile_update:
|
||||||
|
* @self: The profile that should be updated
|
||||||
|
* @new: The profile theme we want to take new feedbacks from
|
||||||
|
*
|
||||||
|
* Updates a profile. Feedbacks are read from the `new` profile. If
|
||||||
|
* feedback already exists in `self` it is overwritten with the feedback
|
||||||
|
* from `new`.
|
||||||
|
*
|
||||||
|
* It is not allowed to update a profile with a profile of a different name.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
fbd_feedback_profile_update (FbdFeedbackProfile *self, FbdFeedbackProfile *new)
|
||||||
|
{
|
||||||
|
GHashTableIter iter;
|
||||||
|
const char *event_name;
|
||||||
|
FbdFeedbackBase *fb;
|
||||||
|
|
||||||
|
g_return_if_fail (FBD_IS_FEEDBACK_PROFILE (self));
|
||||||
|
g_return_if_fail (FBD_IS_FEEDBACK_PROFILE (new));
|
||||||
|
|
||||||
|
g_return_if_fail (g_str_equal (fbd_feedback_profile_get_name (self),
|
||||||
|
fbd_feedback_profile_get_name (new)));
|
||||||
|
|
||||||
|
g_hash_table_iter_init (&iter, new->feedbacks);
|
||||||
|
while (g_hash_table_iter_next (&iter, (gpointer)&event_name, (gpointer)&fb)) {
|
||||||
|
g_hash_table_insert (self->feedbacks, g_strdup (event_name), g_object_ref (fb));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -24,6 +24,8 @@ typedef enum _FbdFeedbackProfileLevel {
|
|||||||
G_DECLARE_FINAL_TYPE (FbdFeedbackProfile, fbd_feedback_profile, FBD, FEEDBACK_PROFILE, GObject);
|
G_DECLARE_FINAL_TYPE (FbdFeedbackProfile, fbd_feedback_profile, FBD, FEEDBACK_PROFILE, GObject);
|
||||||
|
|
||||||
FbdFeedbackProfile *fbd_feedback_profile_new (const gchar *name);
|
FbdFeedbackProfile *fbd_feedback_profile_new (const gchar *name);
|
||||||
|
void fbd_feedback_profile_update (FbdFeedbackProfile *self,
|
||||||
|
FbdFeedbackProfile *new);
|
||||||
const gchar *fbd_feedback_profile_get_name (FbdFeedbackProfile *self);
|
const gchar *fbd_feedback_profile_get_name (FbdFeedbackProfile *self);
|
||||||
void fbd_feedback_profile_add_feedback (FbdFeedbackProfile *self,
|
void fbd_feedback_profile_add_feedback (FbdFeedbackProfile *self,
|
||||||
FbdFeedbackBase *feedback);
|
FbdFeedbackBase *feedback);
|
||||||
|
|||||||
@@ -81,6 +81,49 @@ test_fbd_feedback_profile_parse (void)
|
|||||||
g_assert_true (FBD_IS_FEEDBACK_VIBRA(fb));
|
g_assert_true (FBD_IS_FEEDBACK_VIBRA(fb));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_fbd_feedback_profile_update (void)
|
||||||
|
{
|
||||||
|
FbdFeedbackBase *fb;
|
||||||
|
FbdFeedbackProfile *a = fbd_feedback_profile_new (PROFILE_NAME);
|
||||||
|
FbdFeedbackProfile *b = fbd_feedback_profile_new (PROFILE_NAME);
|
||||||
|
|
||||||
|
g_autoptr (FbdFeedbackDummy) fb_a_1 = g_object_new (FBD_TYPE_FEEDBACK_DUMMY,
|
||||||
|
"event-name", "a-1",
|
||||||
|
NULL);
|
||||||
|
g_autoptr (FbdFeedbackDummy) fb_a_2 = g_object_new (FBD_TYPE_FEEDBACK_DUMMY,
|
||||||
|
"event-name", "a-2",
|
||||||
|
NULL);
|
||||||
|
/* New event */
|
||||||
|
g_autoptr (FbdFeedbackDummy) fb_b_1 = g_object_new (FBD_TYPE_FEEDBACK_DUMMY,
|
||||||
|
"event-name", "b-1",
|
||||||
|
NULL);
|
||||||
|
/* overwrite existing event */
|
||||||
|
g_autoptr (FbdFeedbackDummy) fb_b_2 = g_object_new (FBD_TYPE_FEEDBACK_VIBRA,
|
||||||
|
"event-name", "a-2",
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
fbd_feedback_profile_add_feedback (a, FBD_FEEDBACK_BASE(fb_a_1));
|
||||||
|
fbd_feedback_profile_add_feedback (a, FBD_FEEDBACK_BASE(fb_a_2));
|
||||||
|
|
||||||
|
fbd_feedback_profile_add_feedback (b, FBD_FEEDBACK_BASE(fb_b_1));
|
||||||
|
fbd_feedback_profile_add_feedback (b, FBD_FEEDBACK_BASE(fb_b_2));
|
||||||
|
|
||||||
|
fbd_feedback_profile_update (a,b);
|
||||||
|
|
||||||
|
fb = fbd_feedback_profile_get_feedback (a, "a-1");
|
||||||
|
g_assert_true (FBD_IS_FEEDBACK_DUMMY(fb));
|
||||||
|
fb = fbd_feedback_profile_get_feedback (a, "a-2");
|
||||||
|
g_assert_true (FBD_IS_FEEDBACK_VIBRA(fb));
|
||||||
|
fb = fbd_feedback_profile_get_feedback (a, "b-1");
|
||||||
|
g_assert_true (FBD_IS_FEEDBACK_DUMMY(fb));
|
||||||
|
|
||||||
|
g_assert_finalize_object (b);
|
||||||
|
g_assert_finalize_object (a);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
gint
|
gint
|
||||||
main (gint argc, gchar *argv[])
|
main (gint argc, gchar *argv[])
|
||||||
{
|
{
|
||||||
@@ -89,6 +132,7 @@ main (gint argc, gchar *argv[])
|
|||||||
g_test_add_func("/feedbackd/fbd/feedback-profile/name", test_fbd_feedback_profile_name);
|
g_test_add_func("/feedbackd/fbd/feedback-profile/name", test_fbd_feedback_profile_name);
|
||||||
g_test_add_func("/feedbackd/fbd/feedback-profile/feedbacks", test_fbd_feedback_profile_feedbacks);
|
g_test_add_func("/feedbackd/fbd/feedback-profile/feedbacks", test_fbd_feedback_profile_feedbacks);
|
||||||
g_test_add_func("/feedbackd/fbd/feedback-profile/parse", test_fbd_feedback_profile_parse);
|
g_test_add_func("/feedbackd/fbd/feedback-profile/parse", test_fbd_feedback_profile_parse);
|
||||||
|
g_test_add_func("/feedbackd/fbd/feedback-profile/update", test_fbd_feedback_profile_update);
|
||||||
|
|
||||||
return g_test_run();
|
return g_test_run();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user