talons

Fork of Claws Mail https://www.claws-mail
Log | Files | Refs | README | LICENSE

commit 8dc0092094239d785c272cfbbf5a74b7035a183d
parent 86e01da0f3528e992f1a6e0874f0a64a81972312
Author: Holger Berndt <berndth@gmx.de>
Date:   Wed, 28 Sep 2016 22:44:00 +0200

GData plugin: Refresh auth token periodically

Fixes bug #3638

Diffstat:
Msrc/plugins/gdata/cm_gdata_contacts.c | 26+++++++++++++++++++++++++-
1 file changed, 25 insertions(+), 1 deletion(-)

diff --git a/src/plugins/gdata/cm_gdata_contacts.c b/src/plugins/gdata/cm_gdata_contacts.c @@ -48,6 +48,8 @@ #define GDATA_C2 "QYjIgZblg/4RMCnEqNQypcHZba9ePqAN" #define GDATA_C3 "XHEZEgO06YbWfQWOyYhE/ny5Q10aNOZlkQ==" +#define REFRESH_TIMEOUT_MINUTES 45.0 + typedef struct { @@ -68,6 +70,7 @@ static gboolean cm_gdata_contacts_query_running = FALSE; static gchar *contacts_group_id = NULL; static GDataOAuth2Authorizer *authorizer = NULL; static GDataContactsService *service = NULL; +static GTimer *refresh_timer = NULL; static void protect_fields_against_NULL(Contact *contact) @@ -503,6 +506,8 @@ static void cm_gdata_refresh_ready(GDataOAuth2Authorizer *auth, GAsyncResult *re log_message(LOG_PROTOCOL, _("GData plugin: Authorization refresh successful\n")); + g_timer_start(refresh_timer); + query_after_auth(); } #endif @@ -523,6 +528,7 @@ static guchar* decode(const gchar *in) static void query() { gchar *token; + int elapsed_time_min; if(cm_gdata_contacts_query_running) { @@ -550,7 +556,19 @@ static void query() } g_return_if_fail(service); - if(!gdata_service_is_authorized(GDATA_SERVICE(service))) + if(!refresh_timer) + { + refresh_timer = g_timer_new(); + } + g_return_if_fail(refresh_timer); + + elapsed_time_min = (int)((g_timer_elapsed(refresh_timer, NULL)/60.0)+0.5); + if(elapsed_time_min > REFRESH_TIMEOUT_MINUTES) + { + log_message(LOG_PROTOCOL, _("GData plugin: Elapsed time since last refresh: %d minutes, refreshing now\n"), elapsed_time_min); + gdata_authorizer_refresh_authorization_async(GDATA_AUTHORIZER(authorizer), NULL, (GAsyncReadyCallback)cm_gdata_refresh_ready, NULL); + } + else if(!gdata_service_is_authorized(GDATA_SERVICE(service))) { #if GDATA_CHECK_VERSION(0,17,2) /* Try to restore from saved refresh token.*/ @@ -654,6 +672,12 @@ void cm_gdata_contacts_done(void) g_object_unref(G_OBJECT(service)); service = NULL; } + + if(refresh_timer) + { + g_timer_destroy(refresh_timer); + refresh_timer = NULL; + } } void cm_gdata_load_contacts_cache_from_file(void)