* 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>
#include "pidginplugininfo.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);