* 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 #include <libsoup/soup.h> static SoupSession *session = NULL; #define MIN_CHECK_INTERVAL 60 * 60 * 24 /* No-op. We may use this method in the future to avoid showing purple_notify_uri(NULL, PURPLE_WEBSITE); version_fetch_cb(G_GNUC_UNUSED SoupSession *session, SoupMessage *msg, GtkWidget *release_dialog; if (!SOUP_STATUS_IS_SUCCESSFUL(msg->status_code)) { 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 */ cur_ver = g_strndup(changelog, i); message = g_string_new(""); g_string_append_printf(message, _("You can upgrade to %s %s today."), release_dialog = pidgin_make_mini_dialog( NULL, "dialog-information", _("New Version Available"), _("Later"), PURPLE_CALLBACK(release_hide), _("Download Now"), PURPLE_CALLBACK(release_show), pidgin_blist_add_alert(release_dialog); g_string_free(message, TRUE); int last_check = purple_prefs_get_int("/plugins/gtk/relnot/last_check"); if(!last_check || time(NULL) - last_check > MIN_CHECK_INTERVAL) { purple_debug_info("relnot", "Checking for new version."); msg = soup_form_request_new("GET", "https://pidgin.im/version.php", "version", purple_core_get_version(), soup_session_queue_message(session, msg, version_fetch_cb, NULL); purple_prefs_set_int("/plugins/gtk/relnot/last_check", time(NULL)); signed_on_cb(PurpleConnection *gc, void *data) { /************************************************************************** **************************************************************************/ static PidginPluginInfo * plugin_query(GError **error) const gchar * const authors[] = { "Nathan Walp <faceprint@faceprint.com>", return pidgin_plugin_info_new( "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."), "website", PURPLE_WEBSITE, "abi-version", PURPLE_ABI_VERSION, plugin_load(PurplePlugin *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()) plugin_unload(PurplePlugin *plugin, GError **error) soup_session_abort(session); g_clear_object(&session); PURPLE_PLUGIN_INIT(relnot, plugin_query, plugin_load, plugin_unload);