diff options
author | Xavier Claessens <xclaesse@src.gnome.org> | 2008-01-21 22:12:26 +0800 |
---|---|---|
committer | Xavier Claessens <xclaesse@src.gnome.org> | 2008-01-21 22:12:26 +0800 |
commit | 544f36035197498a61382036ee75b9310f1b0e83 (patch) | |
tree | aafd5ff3345d3808c2d6b9e3eddab6acdc263952 /libempathy-gtk | |
parent | bccdb33f3070d7ab027b41ebce27e6d1f5850ecc (diff) | |
download | gsoc2013-empathy-544f36035197498a61382036ee75b9310f1b0e83.tar gsoc2013-empathy-544f36035197498a61382036ee75b9310f1b0e83.tar.gz gsoc2013-empathy-544f36035197498a61382036ee75b9310f1b0e83.tar.bz2 gsoc2013-empathy-544f36035197498a61382036ee75b9310f1b0e83.tar.lz gsoc2013-empathy-544f36035197498a61382036ee75b9310f1b0e83.tar.xz gsoc2013-empathy-544f36035197498a61382036ee75b9310f1b0e83.tar.zst gsoc2013-empathy-544f36035197498a61382036ee75b9310f1b0e83.zip |
Move empathy-status-presets to libempathy, nothing to do with GTK
svn path=/trunk/; revision=591
Diffstat (limited to 'libempathy-gtk')
-rw-r--r-- | libempathy-gtk/Makefile.am | 3 | ||||
-rw-r--r-- | libempathy-gtk/empathy-main-window.c | 2 | ||||
-rw-r--r-- | libempathy-gtk/empathy-presence-chooser.c | 2 | ||||
-rw-r--r-- | libempathy-gtk/empathy-status-presets.c | 408 | ||||
-rw-r--r-- | libempathy-gtk/empathy-status-presets.dtd | 14 | ||||
-rw-r--r-- | libempathy-gtk/empathy-status-presets.h | 46 |
6 files changed, 2 insertions, 473 deletions
diff --git a/libempathy-gtk/Makefile.am b/libempathy-gtk/Makefile.am index 07336f55c..002762138 100644 --- a/libempathy-gtk/Makefile.am +++ b/libempathy-gtk/Makefile.am @@ -43,7 +43,6 @@ libempathy_gtk_la_SOURCES = \ empathy-private-chat.c \ empathy-group-chat.c \ empathy-geometry.c \ - empathy-status-presets.c \ empathy-presence-chooser.c \ empathy-about-dialog.c \ empathy-account-chooser.c \ @@ -99,7 +98,6 @@ libempathy_gtk_headers = \ empathy-private-chat.h \ empathy-group-chat.h \ empathy-geometry.h \ - empathy-status-presets.h \ empathy-presence-chooser.h \ empathy-about-dialog.h \ empathy-account-chooser.h \ @@ -178,7 +176,6 @@ empathy-gtk-enum-types.c: Makefile $(libempathy_gtk_headers) dtddir = $(datadir)/empathy dtd_DATA = \ - empathy-status-presets.dtd \ empathy-contact-groups.dtd pkgconfigdir = $(libdir)/pkgconfig diff --git a/libempathy-gtk/empathy-main-window.c b/libempathy-gtk/empathy-main-window.c index d0353419a..7970cb1f9 100644 --- a/libempathy-gtk/empathy-main-window.c +++ b/libempathy-gtk/empathy-main-window.c @@ -37,6 +37,7 @@ #include <libempathy/empathy-contact-list.h> #include <libempathy/empathy-contact-manager.h> #include <libempathy/empathy-contact-factory.h> +#include <libempathy/empathy-status-presets.h> #include "empathy-main-window.h" #include "empathy-contact-dialogs.h" @@ -45,7 +46,6 @@ #include "empathy-contact-list-view.h" #include "empathy-presence-chooser.h" #include "empathy-ui-utils.h" -#include "empathy-status-presets.h" #include "empathy-geometry.h" #include "empathy-preferences.h" #include "empathy-accounts-dialog.h" diff --git a/libempathy-gtk/empathy-presence-chooser.c b/libempathy-gtk/empathy-presence-chooser.c index 17a627389..c64962afa 100644 --- a/libempathy-gtk/empathy-presence-chooser.c +++ b/libempathy-gtk/empathy-presence-chooser.c @@ -38,11 +38,11 @@ #include <libempathy/empathy-utils.h> #include <libempathy/empathy-debug.h> #include <libempathy/empathy-marshal.h> +#include <libempathy/empathy-status-presets.h> #include "empathy-ui-utils.h" #include "empathy-images.h" #include "empathy-presence-chooser.h" -#include "empathy-status-presets.h" #define GET_PRIV(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), EMPATHY_TYPE_PRESENCE_CHOOSER, EmpathyPresenceChooserPriv)) diff --git a/libempathy-gtk/empathy-status-presets.c b/libempathy-gtk/empathy-status-presets.c deleted file mode 100644 index 13b71bc75..000000000 --- a/libempathy-gtk/empathy-status-presets.c +++ /dev/null @@ -1,408 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * Copyright (C) 2005-2007 Imendio AB - * - * 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., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Martyn Russell <martyn@imendio.com> - */ - -#include "config.h" - -#include <sys/types.h> -#include <sys/stat.h> -#include <string.h> - -#include <glib.h> -#include <glib/gi18n.h> - -#include <libxml/parser.h> -#include <libxml/tree.h> - -#include <telepathy-glib/util.h> - -#include <libempathy/empathy-debug.h> -#include <libempathy/empathy-utils.h> - -#include "empathy-status-presets.h" - -#define DEBUG_DOMAIN "StatusPresets" - -#define STATUS_PRESETS_XML_FILENAME "status-presets.xml" -#define STATUS_PRESETS_DTD_FILENAME "empathy-status-presets.dtd" -#define STATUS_PRESETS_MAX_EACH 15 - -typedef struct { - gchar *status; - McPresence state; -} StatusPreset; - -static StatusPreset *status_preset_new (McPresence state, - const gchar *status); -static void status_preset_free (StatusPreset *status); -static void status_presets_file_parse (const gchar *filename); -const gchar * status_presets_get_state_as_str (McPresence state); -static gboolean status_presets_file_save (void); -static void status_presets_set_default (McPresence state, - const gchar *status); - -static GList *presets = NULL; -static StatusPreset *default_preset = NULL; - -static StatusPreset * -status_preset_new (McPresence state, - const gchar *status) -{ - StatusPreset *preset; - - preset = g_new0 (StatusPreset, 1); - - preset->status = g_strdup (status); - preset->state = state; - - return preset; -} - -static void -status_preset_free (StatusPreset *preset) -{ - g_free (preset->status); - g_free (preset); -} - -static void -status_presets_file_parse (const gchar *filename) -{ - xmlParserCtxtPtr ctxt; - xmlDocPtr doc; - xmlNodePtr presets_node; - xmlNodePtr node; - - empathy_debug (DEBUG_DOMAIN, "Attempting to parse file:'%s'...", filename); - - ctxt = xmlNewParserCtxt (); - - /* Parse and validate the file. */ - doc = xmlCtxtReadFile (ctxt, filename, NULL, 0); - if (!doc) { - g_warning ("Failed to parse file:'%s'", filename); - xmlFreeParserCtxt (ctxt); - return; - } - - if (!empathy_xml_validate (doc, STATUS_PRESETS_DTD_FILENAME)) { - g_warning ("Failed to validate file:'%s'", filename); - xmlFreeDoc(doc); - xmlFreeParserCtxt (ctxt); - return; - } - - /* The root node, presets. */ - presets_node = xmlDocGetRootElement (doc); - - node = presets_node->children; - while (node) { - if (strcmp ((gchar *) node->name, "status") == 0 || - strcmp ((gchar *) node->name, "default") == 0) { - McPresence state; - gchar *status; - gchar *state_str; - StatusPreset *preset; - gboolean is_default = FALSE; - - if (strcmp ((gchar *) node->name, "default") == 0) { - is_default = TRUE; - } - - status = (gchar *) xmlNodeGetContent (node); - state_str = (gchar *) xmlGetProp (node, "presence"); - - if (state_str) { - state = empathy_presence_state_from_str (state_str); - - if (is_default) { - empathy_debug (DEBUG_DOMAIN, - "Default status preset state is:'%s', status:'%s'", - state_str, status); - - status_presets_set_default (state, status); - } else { - preset = status_preset_new (state, status); - presets = g_list_append (presets, preset); - } - } - - xmlFree (status); - xmlFree (state_str); - } - - node = node->next; - } - - /* Use the default if not set */ - if (!default_preset) { - status_presets_set_default (MC_PRESENCE_OFFLINE, NULL); - } - - empathy_debug (DEBUG_DOMAIN, "Parsed %d status presets", g_list_length (presets)); - - xmlFreeDoc (doc); - xmlFreeParserCtxt (ctxt); -} - -void -empathy_status_presets_get_all (void) -{ - gchar *dir; - gchar *file_with_path; - - /* If already set up clean up first. */ - if (presets) { - g_list_foreach (presets, (GFunc) status_preset_free, NULL); - g_list_free (presets); - presets = NULL; - } - - dir = g_build_filename (g_get_home_dir (), ".gnome2", PACKAGE_NAME, NULL); - g_mkdir_with_parents (dir, S_IRUSR | S_IWUSR | S_IXUSR); - file_with_path = g_build_filename (dir, STATUS_PRESETS_XML_FILENAME, NULL); - g_free (dir); - - if (g_file_test (file_with_path, G_FILE_TEST_EXISTS)) { - status_presets_file_parse (file_with_path); - } - - g_free (file_with_path); -} - -static gboolean -status_presets_file_save (void) -{ - xmlDocPtr doc; - xmlNodePtr root; - GList *l; - gchar *dir; - gchar *file; - gint count[LAST_MC_PRESENCE]; - gint i; - - for (i = 0; i < LAST_MC_PRESENCE; i++) { - count[i] = 0; - } - - dir = g_build_filename (g_get_home_dir (), ".gnome2", PACKAGE_NAME, NULL); - g_mkdir_with_parents (dir, S_IRUSR | S_IWUSR | S_IXUSR); - file = g_build_filename (dir, STATUS_PRESETS_XML_FILENAME, NULL); - g_free (dir); - - doc = xmlNewDoc ("1.0"); - root = xmlNewNode (NULL, "presets"); - xmlDocSetRootElement (doc, root); - - if (default_preset) { - xmlNodePtr subnode; - xmlChar *state; - - state = (gchar*) empathy_presence_state_to_str (default_preset->state); - - subnode = xmlNewTextChild (root, NULL, "default", - default_preset->status); - xmlNewProp (subnode, "presence", state); - } - - for (l = presets; l; l = l->next) { - StatusPreset *sp; - xmlNodePtr subnode; - xmlChar *state; - - sp = l->data; - state = (gchar*) empathy_presence_state_to_str (sp->state); - - count[sp->state]++; - if (count[sp->state] > STATUS_PRESETS_MAX_EACH) { - continue; - } - - subnode = xmlNewTextChild (root, NULL, - "status", sp->status); - xmlNewProp (subnode, "presence", state); - } - - /* Make sure the XML is indented properly */ - xmlIndentTreeOutput = 1; - - empathy_debug (DEBUG_DOMAIN, "Saving file:'%s'", file); - xmlSaveFormatFileEnc (file, doc, "utf-8", 1); - xmlFreeDoc (doc); - - g_free (file); - - return TRUE; -} - -GList * -empathy_status_presets_get (McPresence state, - gint max_number) -{ - GList *list = NULL; - GList *l; - gint i; - - i = 0; - for (l = presets; l; l = l->next) { - StatusPreset *sp; - - sp = l->data; - - if (sp->state != state) { - continue; - } - - list = g_list_append (list, sp->status); - i++; - - if (max_number != -1 && i >= max_number) { - break; - } - } - - return list; -} - -void -empathy_status_presets_set_last (McPresence state, - const gchar *status) -{ - GList *l; - StatusPreset *preset; - gint num; - - /* Check if duplicate */ - for (l = presets; l; l = l->next) { - preset = l->data; - - if (state == preset->state && - !tp_strdiff (status, preset->status)) { - return; - } - } - - preset = status_preset_new (state, status); - presets = g_list_prepend (presets, preset); - - num = 0; - for (l = presets; l; l = l->next) { - preset = l->data; - - if (state != preset->state) { - continue; - } - - num++; - - if (num > STATUS_PRESETS_MAX_EACH) { - status_preset_free (preset); - presets = g_list_delete_link (presets, l); - break; - } - } - - status_presets_file_save (); -} - -void -empathy_status_presets_remove (McPresence state, - const gchar *status) -{ - StatusPreset *preset; - GList *l; - - for (l = presets; l; l = l->next) { - preset = l->data; - - if (state == preset->state && - !tp_strdiff (status, preset->status)) { - status_preset_free (preset); - presets = g_list_delete_link (presets, l); - status_presets_file_save (); - break; - } - } -} - -void -empathy_status_presets_reset (void) -{ - g_list_foreach (presets, (GFunc) status_preset_free, NULL); - g_list_free (presets); - - presets = NULL; - - status_presets_set_default (MC_PRESENCE_AVAILABLE, NULL); - - status_presets_file_save (); -} - -McPresence -empathy_status_presets_get_default_state (void) -{ - if (!default_preset) { - return MC_PRESENCE_OFFLINE; - } - - return default_preset->state; -} - -const gchar * -empathy_status_presets_get_default_status (void) -{ - if (!default_preset || - !default_preset->status) { - return NULL; - } - - return default_preset->status; -} - -static void -status_presets_set_default (McPresence state, - const gchar *status) -{ - if (default_preset) { - status_preset_free (default_preset); - } - - default_preset = status_preset_new (state, status); -} - -void -empathy_status_presets_set_default (McPresence state, - const gchar *status) -{ - status_presets_set_default (state, status); - status_presets_file_save (); -} - -void -empathy_status_presets_clear_default (void) -{ - if (default_preset) { - status_preset_free (default_preset); - default_preset = NULL; - } - - status_presets_file_save (); -} diff --git a/libempathy-gtk/empathy-status-presets.dtd b/libempathy-gtk/empathy-status-presets.dtd deleted file mode 100644 index 872be6b4e..000000000 --- a/libempathy-gtk/empathy-status-presets.dtd +++ /dev/null @@ -1,14 +0,0 @@ -<!-- - DTD for Empathys status presets. - by Martyn Russell <martyn@imendio.com> ---> - -<!-- Root element. --> -<!ELEMENT presets ((default?),status*)> - -<!ELEMENT default (#PCDATA)> -<!ATTLIST default presence CDATA #REQUIRED> - -<!ELEMENT status (#PCDATA)> -<!ATTLIST status presence CDATA #REQUIRED> - diff --git a/libempathy-gtk/empathy-status-presets.h b/libempathy-gtk/empathy-status-presets.h deleted file mode 100644 index 8a4564f00..000000000 --- a/libempathy-gtk/empathy-status-presets.h +++ /dev/null @@ -1,46 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * Copyright (C) 2005-2007 Imendio AB - * - * 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., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Martyn Russell <martyn@imendio.com> - */ - -#ifndef __EMPATHY_STATUS_PRESETS_H__ -#define __EMPATHY_STATUS_PRESETS_H__ - -#include <libempathy/empathy-presence.h> - -G_BEGIN_DECLS - -void empathy_status_presets_get_all (void); -GList * empathy_status_presets_get (McPresence state, - gint max_number); -void empathy_status_presets_set_last (McPresence state, - const gchar *status); -void empathy_status_presets_remove (McPresence state, - const gchar *status); -void empathy_status_presets_reset (void); -McPresence empathy_status_presets_get_default_state (void); -const gchar * empathy_status_presets_get_default_status (void); -void empathy_status_presets_set_default (McPresence state, - const gchar *status); -void empathy_status_presets_clear_default (void); - -G_END_DECLS - -#endif /* __EMPATHY_STATUS_PRESETS_H__ */ |