Welcome, guest! Login / Register - Why register?
Psst.. new poll here.
[email protected] webmail now available. Want one? Go here.
Cannot use outlook/hotmail/live here to register as they blocking our mail servers. #microsoftdeez
Obey the Epel!

Paste

Pasted as C by hidefromkgb ( 14 years ago )
/*
 * Led-notification
 * Copyright (C) 2006  Simo Mattila
 *
 * 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  02110-1301, USA.
 *
 * Simo Mattila <[email protected]>
 *
 * set ts=4 ;)
 */

#define PURPLE_PLUGINS

#define VERSION "0.1"

#include <glib.h>
#include <string.h>
#include <stdio.h>

#include "notify.h"
#include "plugin.h"
#include "version.h"
#include "debug.h"
#include "cmds.h"
#include "gtkconv.h"
#include "prefs.h"
#include "gtkprefs.h"
#include "gtkutils.h"
#include "gtkplugin.h"
#include "gtkblist.h"

int execute(char *cmd, char *result, int rlen)
{
 FILE *pp;
 int i=0, status;
 char ch;

 pp = popen(cmd, "r");
 
 if(pp == NULL) return -1;
 while(i < (rlen-1) && (ch=fgetc(pp))!=EOF) result[i++]= (ch=='\r' || ch=='\n') ? ' ':ch;
 result[i]=0;
 
 status = pclose(pp);

 if(status==-1) return -1;
 if(WIFEXITED(status)) return (WEXITSTATUS(status));
 else return -1;
}

void led_set(gboolean state) {
 char rtn[20];
 const char *filename=purple_prefs_get_string(
                                  "/plugins/gtk/gtk-simom-lednot/filename");
 char *test=strdup(filename);

 if(state) {
  test=strcat(test, " 1");
 } else {
  test=strcat(test, " 0");
 }

execute(test, rtn, 20);
free(test);
}

GList *get_pending_list(guint max) {
 const char *im=purple_prefs_get_string("/plugins/gtk/gtk-simom-lednot/im");
 const char *chat=purple_prefs_get_string(
                                      "/plugins/gtk/gtk-simom-lednot/chat");
 GList *l_im = NULL;
 GList *l_chat = NULL;

 
 if (im != NULL && strcmp(im, "always") == 0) {
  l_im = pidgin_conversations_find_unseen_list(PURPLE_CONV_TYPE_IM,
                                               PIDGIN_UNSEEN_TEXT,
                                               FALSE, max);
 } else if (im != NULL && strcmp(im, "hidden") == 0) {
  l_im = pidgin_conversations_find_unseen_list(PURPLE_CONV_TYPE_IM,
                                               PIDGIN_UNSEEN_TEXT,
                                               TRUE, max);
 }

 if (chat != NULL && strcmp(chat, "always") == 0) {
  l_chat = pidgin_conversations_find_unseen_list(PURPLE_CONV_TYPE_CHAT,
                                                 PIDGIN_UNSEEN_TEXT,
                                                 FALSE, max);
 } else if (chat != NULL && strcmp(chat, "nick") == 0) {
  l_chat = pidgin_conversations_find_unseen_list(PURPLE_CONV_TYPE_CHAT,
                                                 PIDGIN_UNSEEN_NICK,
                                                 FALSE, max);
 }

 if (l_im != NULL && l_chat != NULL)
  return g_list_concat(l_im, l_chat);
 else if (l_im != NULL)
  return l_im;
 else
  return l_chat;
}

static void lednot_conversation_updated(PurpleConversation *conv, 
                                        PurpleConvUpdateType type) {
 GList *list;

 if( type != PURPLE_CONV_UPDATE_UNSEEN ) {
  return;
 }

#if 0
 purple_debug_info("Led-notification", "Change in unseen conversations\n");
#endif

 list=get_pending_list(1);

 if(list==NULL) {
  led_set(FALSE);
 } else if(list!=NULL) {
  led_set(TRUE);
 }
 g_list_free(list);
}

static GtkWidget *plugin_config_frame(PurplePlugin *plugin) {
 GtkWidget *frame;
 GtkWidget *vbox;
 GtkWidget *vbox2;
 GtkSizeGroup *sg;
 GtkWidget *dd;
 GtkWidget *ent;

 frame = gtk_vbox_new(FALSE, 18);
 gtk_container_set_border_width(GTK_CONTAINER(frame), 12);

 vbox = pidgin_make_frame(frame, "Inform about unread...");
 vbox2 = pidgin_make_frame(frame, "Hardware setup:");
 sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);

 dd = pidgin_prefs_dropdown(vbox, "Instant Messages:",
                            PURPLE_PREF_STRING,
                            "/plugins/gtk/gtk-simom-lednot/im",
                            "Never", "never",
                            "In hidden conversations", "hidden",
                            "Always", "always",
                            NULL);
 gtk_size_group_add_widget(sg, dd);

 dd = pidgin_prefs_dropdown(vbox, "Chat Messages:",
                         PURPLE_PREF_STRING,
                         "/plugins/gtk/gtk-simom-lednot/chat",
                         "Never", "never",
                         "When my nick is said", "nick",
                         "Always", "always",
                         NULL);
 gtk_size_group_add_widget(sg, dd);

 ent=pidgin_prefs_labeled_entry(vbox2,"Script to control led:",
                               "/plugins/gtk/gtk-simom-lednot/filename",sg);

 gtk_widget_show_all(frame);
 return frame;
}

static void init_plugin(PurplePlugin *plugin) {
 purple_prefs_add_none("/plugins/gtk/gtk-simom-lednot");
 purple_prefs_add_string("/plugins/gtk/gtk-simom-lednot/im", "always");
 purple_prefs_add_string("/plugins/gtk/gtk-simom-lednot/chat", "nick");
 purple_prefs_add_string("/plugins/gtk/gtk-simom-lednot/filename", "");
}

static gboolean plugin_load(PurplePlugin *plugin) {
 purple_signal_connect(purple_conversations_get_handle(),
                       "conversation-updated", plugin,
                       PURPLE_CALLBACK(lednot_conversation_updated), NULL);
 return TRUE;
}

static gboolean plugin_unload(PurplePlugin *plugin) {
 led_set(FALSE); /* Turn the led off */
 purple_signal_disconnect(purple_conversations_get_handle(),
                          "conversation-updated", plugin,
                          PURPLE_CALLBACK(lednot_conversation_updated));
    return TRUE;
}

static PidginPluginUiInfo ui_info = {
 plugin_config_frame,
 0 /* page_num (Reserved) */
};

static PurplePluginInfo info = {
    PURPLE_PLUGIN_MAGIC,
    PURPLE_MAJOR_VERSION,
    PURPLE_MINOR_VERSION,
    PURPLE_PLUGIN_STANDARD,
    PIDGIN_PLUGIN_TYPE,
    0,
    NULL,
    PURPLE_PRIORITY_DEFAULT,

    "gtk-simom-lednot",
    "Led-notification",
    VERSION,

    "Led notification on laptops",
    "Informs for new messages with your laptops led",
    "Simo Mattila <[email protected]>",
    "http://koti.mbnet.fi/simom/",

    plugin_load,   /* load */
    plugin_unload, /* unload */
    NULL,          /* destroy */

    &ui;_info,
    NULL,
    NULL,
    NULL
};

PURPLE_INIT_PLUGIN(lednot, init_plugin, info);

 

Revise this Paste

Your Name: Code Language: