--- a/libpurple/purplesavedpresence.c Fri Jan 26 02:53:42 2024 -0600
+++ b/libpurple/purplesavedpresence.c Thu Feb 01 22:21:42 2024 -0600
@@ -634,3 +634,28 @@
+purple_saved_presence_matches(PurpleSavedPresence *presence, + g_return_val_if_fail(PURPLE_IS_SAVED_PRESENCE(presence), FALSE); + if(purple_strempty(needle)) { + if(purple_strmatches(needle, presence->name)) { + if(purple_strmatches(needle, presence->message)) { + if(purple_strequal(needle, presence->emoji)) { --- a/libpurple/purplesavedpresence.h Fri Jan 26 02:53:42 2024 -0600
+++ b/libpurple/purplesavedpresence.h Thu Feb 01 22:21:42 2024 -0600
@@ -247,6 +247,24 @@
gboolean purple_saved_presence_equal(PurpleSavedPresence *a, PurpleSavedPresence *b);
+ * purple_saved_presence_matches: + * @presence: The instance. + * @needle: (nullable): The string to match on. + * Checks if @needle matches the [property@SavedPresence:name], + * [property@SavedPresence:message], or [property@SavedPresence:emoji] of + * If @needle is %NULL or empty string, %TRUE will be returned. + * Returns: %TRUE if @presence matches @needle in any way, otherwise %FALSE. +gboolean purple_saved_presence_matches(PurpleSavedPresence *presence, const char *needle); #endif /* PURPLE_SAVED_PRESENCE_H */
--- a/libpurple/tests/test_saved_presence.c Fri Jan 26 02:53:42 2024 -0600
+++ b/libpurple/tests/test_saved_presence.c Thu Feb 01 22:21:42 2024 -0600
@@ -400,6 +400,75 @@
+test_purple_saved_presence_matches_accepts_null(void) { + PurpleSavedPresence *presence = NULL; + presence = g_object_new(PURPLE_TYPE_SAVED_PRESENCE, NULL); + g_assert_true(purple_saved_presence_matches(presence, NULL)); + g_assert_finalize_object(presence); +test_purple_saved_presence_matches_empty_string(void) { + PurpleSavedPresence *presence = NULL; + presence = g_object_new(PURPLE_TYPE_SAVED_PRESENCE, NULL); + g_assert_true(purple_saved_presence_matches(presence, "")); + g_assert_finalize_object(presence); +test_purple_saved_presence_matches_name(void) { + PurpleSavedPresence *presence = NULL; + presence = g_object_new(PURPLE_TYPE_SAVED_PRESENCE, + "name", "getting pidgy with it", + g_assert_true(purple_saved_presence_matches(presence, "pidgy")); + g_assert_finalize_object(presence); +test_purple_saved_presence_matches_message(void) { + PurpleSavedPresence *presence = NULL; + /* This message came from a Twitch viewer while I was writing this code. + * Previously I typoed purple as purpel and started making jokes with it. + presence = g_object_new(PURPLE_TYPE_SAVED_PRESENCE, + "message", "Uro666: purpelling to new heights", + g_assert_true(purple_saved_presence_matches(presence, "purpel")); + g_assert_finalize_object(presence); +test_purple_saved_presence_matches_emoji(void) { + PurpleSavedPresence *presence = NULL; + presence = g_object_new(PURPLE_TYPE_SAVED_PRESENCE, + g_assert_true(purple_saved_presence_matches(presence, "😴")); + g_assert_finalize_object(presence); +test_purple_saved_presence_matches_none(void) { + PurpleSavedPresence *presence = NULL; + presence = g_object_new(PURPLE_TYPE_SAVED_PRESENCE, NULL); + g_assert_false(purple_saved_presence_matches(presence, "away")); + g_assert_finalize_object(presence); /******************************************************************************
*****************************************************************************/
@@ -440,5 +509,18 @@
g_test_add_func("/saved-presence/equal/emoji",
test_purple_saved_presence_equal_emoji);
+ g_test_add_func("/saved-presence/matches/accepts_null", + test_purple_saved_presence_matches_accepts_null); + g_test_add_func("/saved-presence/matches/empty_string", + test_purple_saved_presence_matches_empty_string); + g_test_add_func("/saved-presence/matches/name", + test_purple_saved_presence_matches_name); + g_test_add_func("/saved-presence/matches/message", + test_purple_saved_presence_matches_message); + g_test_add_func("/saved-presence/matches/emoji", + test_purple_saved_presence_matches_emoji); + g_test_add_func("/saved-presence/matches/none", + test_purple_saved_presence_matches_none);