Thu, 22 Jul 2021 22:33:54 -0500
Move minidialog stuff from utils to its source file
* Remove minidialog list from utils.
It's supposed to be used to delete them when the connection is dropped, but this list is never added to. And the dialogs are automatically closed when the account disconnects in some other way that I could not find.
Consequently, drop the unused `gc` from `pidgin_make_mini_dialog*`.
* Replace `PidginUtilMiniDialogCallback` by `PidginMiniDialogCallback`.
It is just a wrapper around the latter, with different argument order.
* Move minidialog wrappers from utils to `minidialog.c`. And fix naming/arguments to match the existing functions.
Testing Done:
Compiled, connected an account that had buddy requests, but didn't act on them.
Reviewed at https://reviews.imfreedom.org/r/788/
/* * Release Notification Plugin * * Copyright (C) 2003, Nathan Walp <faceprint@faceprint.com> * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02111-1301, USA. */ #include <glib/gi18n-lib.h> #include <libsoup/soup.h> #include <string.h> #include <purple.h> #include <pidgin.h> static SoupSession *session = NULL; /* 1 day */ #define MIN_CHECK_INTERVAL 60 * 60 * 24 static void release_hide(G_GNUC_UNUSED PidginMiniDialog *mini_dialog, G_GNUC_UNUSED GtkButton *button, G_GNUC_UNUSED gpointer user_data) { /* No-op. We may use this method in the future to avoid showing * the popup twice */ } static void release_show(G_GNUC_UNUSED PidginMiniDialog *mini_dialog, G_GNUC_UNUSED GtkButton *button, G_GNUC_UNUSED gpointer user_data) { purple_notify_uri(NULL, PURPLE_WEBSITE); } static void version_fetch_cb(G_GNUC_UNUSED SoupSession *session, SoupMessage *msg, gpointer user_data) { gchar *cur_ver; const char *changelog; GtkWidget *release_dialog; GString *message; int i = 0; if (!SOUP_STATUS_IS_SUCCESSFUL(msg->status_code)) { return; } changelog = msg->response_body->data; while(changelog[i] && changelog[i] != '\n') i++; /* this basically means the version thing wasn't in the format we were * looking for so sourceforge is probably having web server issues, and * we should try again later */ if(i == 0) return; cur_ver = g_strndup(changelog, i); message = g_string_new(""); g_string_append_printf(message, _("You can upgrade to %s %s today."), PIDGIN_NAME, cur_ver); release_dialog = pidgin_mini_dialog_new_with_buttons( _("New Version Available"), message->str, "dialog-information", NULL, _("Later"), release_hide, _("Download Now"), release_show, NULL); pidgin_blist_add_alert(release_dialog); g_string_free(message, TRUE); g_free(cur_ver); } static void do_check(void) { int last_check = purple_prefs_get_int("/plugins/gtk/relnot/last_check"); if(!last_check || time(NULL) - last_check > MIN_CHECK_INTERVAL) { SoupMessage *msg; purple_debug_info("relnot", "Checking for new version."); msg = soup_form_request_new("GET", "https://pidgin.im/version.php", "version", purple_core_get_version(), "build", #ifdef _WIN32 "purple-win32", #else "purple", #endif NULL); soup_session_queue_message(session, msg, version_fetch_cb, NULL); purple_prefs_set_int("/plugins/gtk/relnot/last_check", time(NULL)); } } static void signed_on_cb(PurpleConnection *gc, void *data) { do_check(); } /************************************************************************** * Plugin stuff **************************************************************************/ static GPluginPluginInfo * relnot_query(GError **error) { const gchar * const authors[] = { "Nathan Walp <faceprint@faceprint.com>", NULL }; return pidgin_plugin_info_new( "id", "gtk-relnot", "name", N_("Release Notification"), "version", DISPLAY_VERSION, "category", N_("Notification"), "summary", N_("Checks periodically for new releases."), "description", N_("Checks periodically for new releases and notifies " "the user with the ChangeLog."), "authors", authors, "website", PURPLE_WEBSITE, "abi-version", PURPLE_ABI_VERSION, NULL ); } static gboolean relnot_load(GPluginPlugin *plugin, GError **error) { purple_prefs_add_none("/plugins/gtk/relnot"); purple_prefs_add_int("/plugins/gtk/relnot/last_check", 0); purple_signal_connect(purple_connections_get_handle(), "signed-on", plugin, PURPLE_CALLBACK(signed_on_cb), NULL); session = soup_session_new(); /* we don't check if we're offline */ if(purple_connections_get_all()) do_check(); return TRUE; } static gboolean relnot_unload(GPluginPlugin *plugin, GError **error) { soup_session_abort(session); g_clear_object(&session); return TRUE; } GPLUGIN_NATIVE_PLUGIN_DECLARE(relnot)