summaryrefslogtreecommitdiff
path: root/libpurple
diff options
context:
space:
mode:
authorGary Kramlich <grim@reaperworld.com>2022-12-12 01:05:05 -0600
committerGary Kramlich <grim@reaperworld.com>2022-12-12 01:05:05 -0600
commit6c17122f4311836c46d8f3bf6e5775d829cf749f (patch)
treed0cc5da784526e920e71bfe97eccdbbd22eda329 /libpurple
parentf2146a02029c2eef40ea42adaae8a2b76148ff91 (diff)
downloadpidgin-6c17122f4311836c46d8f3bf6e5775d829cf749f.tar.gz
Move the PurplePresence::login-time property from time_t to GDateTime
I also removed some API that was related and not being used. Testing Done: Ran the tests, connected an account, tried to verify via the tooltip, but the field wasn't displayed. Reviewed at https://reviews.imfreedom.org/r/2115/
Diffstat (limited to 'libpurple')
-rw-r--r--libpurple/connection.c5
-rw-r--r--libpurple/protocols.c46
-rw-r--r--libpurple/protocols.h25
-rw-r--r--libpurple/purplepresence.c67
-rw-r--r--libpurple/purplepresence.h8
5 files changed, 34 insertions, 117 deletions
diff --git a/libpurple/connection.c b/libpurple/connection.c
index b5e2adf769..ebf89819f1 100644
--- a/libpurple/connection.c
+++ b/libpurple/connection.c
@@ -178,13 +178,16 @@ purple_connection_set_state(PurpleConnection *connection,
if(priv->state == PURPLE_CONNECTION_STATE_CONNECTED) {
PurplePresence *presence;
+ GDateTime *timestamp = NULL;
gboolean emit_online = FALSE;
gpointer handle = NULL;
presence = purple_account_get_presence(priv->account);
/* Set the time the account came online */
- purple_presence_set_login_time(presence, time(NULL));
+ timestamp = g_date_time_new_now_utc();
+ purple_presence_set_login_time(presence, timestamp);
+ g_date_time_unref(timestamp);
if(ops != NULL && ops->connected != NULL) {
ops->connected(connection);
diff --git a/libpurple/protocols.c b/libpurple/protocols.c
index f1ed1f8c78..a1bae2b817 100644
--- a/libpurple/protocols.c
+++ b/libpurple/protocols.c
@@ -53,22 +53,6 @@ purple_protocol_got_account_idle(PurpleAccount *account, gboolean idle,
}
void
-purple_protocol_got_account_login_time(PurpleAccount *account, time_t login_time)
-{
- PurplePresence *presence;
-
- g_return_if_fail(account != NULL);
- g_return_if_fail(purple_account_is_connected(account));
-
- if (login_time == 0)
- login_time = time(NULL);
-
- presence = purple_account_get_presence(account);
-
- purple_presence_set_login_time(presence, login_time);
-}
-
-void
purple_protocol_got_account_status_with_attributes(PurpleAccount *account,
const gchar *status_id,
GHashTable *attributes)
@@ -137,36 +121,6 @@ purple_protocol_got_user_idle(PurpleAccount *account, const char *name,
}
void
-purple_protocol_got_user_login_time(PurpleAccount *account, const char *name,
- time_t login_time)
-{
- GSList *list;
- PurplePresence *presence;
-
- g_return_if_fail(account != NULL);
- g_return_if_fail(name != NULL);
-
- if ((list = purple_blist_find_buddies(account, name)) == NULL)
- return;
-
- if (login_time == 0)
- login_time = time(NULL);
-
- while (list) {
- PurpleBuddy *buddy = list->data;
- presence = purple_buddy_get_presence(buddy);
- list = g_slist_delete_link(list, list);
-
- if (purple_presence_get_login_time(presence) != login_time)
- {
- purple_presence_set_login_time(presence, login_time);
-
- purple_signal_emit(purple_blist_get_handle(), "buddy-got-login-time", buddy);
- }
- }
-}
-
-void
purple_protocol_got_user_status_with_attributes(PurpleAccount *account,
const gchar *name,
const gchar *status_id,
diff --git a/libpurple/protocols.h b/libpurple/protocols.h
index 247a128073..6572d9660c 100644
--- a/libpurple/protocols.h
+++ b/libpurple/protocols.h
@@ -54,18 +54,6 @@ void purple_protocol_got_account_idle(PurpleAccount *account, gboolean idle,
time_t idle_time);
/**
- * purple_protocol_got_account_login_time:
- * @account: The account the user is on.
- * @login_time: The user's log-in time.
- *
- * Notifies Purple of our account's log-in time.
- *
- * This is meant to be called from protocols.
- */
-void purple_protocol_got_account_login_time(PurpleAccount *account,
- time_t login_time);
-
-/**
* purple_protocol_got_account_status:
* @account: The account the user is on.
* @status_id: The status ID.
@@ -126,19 +114,6 @@ void purple_protocol_got_user_idle(PurpleAccount *account, const char *name,
gboolean idle, time_t idle_time);
/**
- * purple_protocol_got_user_login_time:
- * @account: The account the user is on.
- * @name: The name of the buddy.
- * @login_time: The user's log-in time.
- *
- * Notifies Purple of a buddy's log-in time.
- *
- * This is meant to be called from protocols.
- */
-void purple_protocol_got_user_login_time(PurpleAccount *account,
- const char *name, time_t login_time);
-
-/**
* purple_protocol_got_user_status:
* @account: The account the user is on.
* @name: The name of the buddy.
diff --git a/libpurple/purplepresence.c b/libpurple/purplepresence.c
index 25678504b7..f7bcd1c5d6 100644
--- a/libpurple/purplepresence.c
+++ b/libpurple/purplepresence.c
@@ -30,7 +30,7 @@
typedef struct {
gboolean idle;
time_t idle_time;
- time_t login_time;
+ GDateTime *login_time;
GHashTable *status_table;
@@ -89,13 +89,7 @@ purple_presence_set_property(GObject *obj, guint param_id, const GValue *value,
#endif
break;
case PROP_LOGIN_TIME:
-#if SIZEOF_TIME_T == 4
- purple_presence_set_login_time(presence, g_value_get_int(value));
-#elif SIZEOF_TIME_T == 8
- purple_presence_set_login_time(presence, g_value_get_int64(value));
-#else
-#error Unknown size of time_t
-#endif
+ purple_presence_set_login_time(presence, g_value_get_boxed(value));
break;
case PROP_ACTIVE_STATUS:
purple_presence_set_active_status(presence,
@@ -127,13 +121,7 @@ purple_presence_get_property(GObject *obj, guint param_id, GValue *value,
#endif
break;
case PROP_LOGIN_TIME:
-#if SIZEOF_TIME_T == 4
- g_value_set_int(value, purple_presence_get_login_time(presence));
-#elif SIZEOF_TIME_T == 8
- g_value_set_int64(value, purple_presence_get_login_time(presence));
-#else
-#error Unknown size of time_t
-#endif
+ g_value_set_boxed(value, purple_presence_get_login_time(presence));
break;
case PROP_ACTIVE_STATUS:
g_value_set_object(value, purple_presence_get_active_status(presence));
@@ -212,24 +200,11 @@ purple_presence_class_init(PurplePresenceClass *klass) {
*
* The login-time of the presence.
*/
- properties[PROP_LOGIN_TIME] =
-#if SIZEOF_TIME_T == 4
- g_param_spec_int
-#elif SIZEOF_TIME_T == 8
- g_param_spec_int64
-#else
-#error Unknown size of time_t
-#endif
- ("login-time", "Login time",
- "The login time of the presence.",
-#if SIZEOF_TIME_T == 4
- G_MININT, G_MAXINT, 0,
-#elif SIZEOF_TIME_T == 8
- G_MININT64, G_MAXINT64, 0,
-#else
-#error Unknown size of time_t
-#endif
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+ properties[PROP_LOGIN_TIME] = g_param_spec_boxed(
+ "login-time", "Login time",
+ "The login time of the presence.",
+ G_TYPE_DATE_TIME,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
/**
* PurplePresence:active-status:
@@ -316,21 +291,31 @@ purple_presence_set_idle(PurplePresence *presence, gboolean idle,
}
void
-purple_presence_set_login_time(PurplePresence *presence, time_t login_time) {
+purple_presence_set_login_time(PurplePresence *presence, GDateTime *login_time)
+{
PurplePresencePrivate *priv = NULL;
g_return_if_fail(PURPLE_IS_PRESENCE(presence));
priv = purple_presence_get_instance_private(presence);
- if(priv->login_time == login_time) {
- return;
+ if(priv->login_time != NULL && login_time != NULL) {
+ if(g_date_time_equal(priv->login_time, login_time)) {
+ return;
+ }
}
- priv->login_time = login_time;
+ if(priv->login_time != NULL) {
+ g_date_time_unref(priv->login_time);
+ }
+
+ if(login_time != NULL) {
+ priv->login_time = g_date_time_ref(login_time);
+ } else {
+ priv->login_time = NULL;
+ }
- g_object_notify_by_pspec(G_OBJECT(presence),
- properties[PROP_LOGIN_TIME]);
+ g_object_notify_by_pspec(G_OBJECT(presence), properties[PROP_LOGIN_TIME]);
}
GList *
@@ -481,7 +466,7 @@ purple_presence_get_idle_time(PurplePresence *presence) {
return priv->idle_time;
}
-time_t
+GDateTime *
purple_presence_get_login_time(PurplePresence *presence) {
PurplePresencePrivate *priv = NULL;
@@ -489,7 +474,7 @@ purple_presence_get_login_time(PurplePresence *presence) {
priv = purple_presence_get_instance_private(presence);
- return purple_presence_is_online(presence) ? priv->login_time : 0;
+ return priv->login_time;
}
gint
diff --git a/libpurple/purplepresence.h b/libpurple/purplepresence.h
index 521455fcb5..199832fdbe 100644
--- a/libpurple/purplepresence.h
+++ b/libpurple/purplepresence.h
@@ -113,11 +113,11 @@ void purple_presence_set_idle(PurplePresence *presence, gboolean idle, time_t id
/**
* purple_presence_set_login_time:
* @presence: The #PurplePresence instance.
- * @login_time: The login time.
+ * @login_time: (transfer none): The login time.
*
* Sets the login time on a presence.
*/
-void purple_presence_set_login_time(PurplePresence *presence, time_t login_time);
+void purple_presence_set_login_time(PurplePresence *presence, GDateTime *login_time);
/**
* purple_presence_get_statuses:
@@ -227,9 +227,9 @@ time_t purple_presence_get_idle_time(PurplePresence *presence);
*
* Gets the login time of @presence.
*
- * Returns: The login time of @presence.
+ * Returns: (transfer none): The login time of @presence.
*/
-time_t purple_presence_get_login_time(PurplePresence *presence);
+GDateTime *purple_presence_get_login_time(PurplePresence *presence);
/**
* purple_presence_compare: