diff options
Diffstat (limited to 'capplets/default-applications/mate-da-xml.c')
-rw-r--r-- | capplets/default-applications/mate-da-xml.c | 506 |
1 files changed, 0 insertions, 506 deletions
diff --git a/capplets/default-applications/mate-da-xml.c b/capplets/default-applications/mate-da-xml.c deleted file mode 100644 index 46b31789..00000000 --- a/capplets/default-applications/mate-da-xml.c +++ /dev/null @@ -1,506 +0,0 @@ -/* - * Authors: Luca Cavalli <[email protected]> - * - * Copyright 2005-2006 Luca Cavalli - * Copyright 2010 Perberos <[email protected]> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of version 2 of the GNU General Public License - * as published by the Free Software Foundation - * - * 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 Street #330, Boston, MA 02111-1307, USA. - * - */ - -#include <string.h> -#include <glib.h> -#include <glib/gi18n.h> -#include <libxml/parser.h> - -#include "mate-da-capplet.h" -#include "mate-da-xml.h" -#include "mate-da-item.h" - - -static gboolean mate_da_xml_get_bool(const xmlNode* parent, const gchar* val_name) -{ - xmlNode* element; - gboolean ret_val = FALSE; - xmlChar* xml_val_name; - gint len; - - if (parent != NULL && parent->children != NULL && val_name == NULL) - { - xml_val_name = xmlCharStrdup(val_name); - len = xmlStrlen(xml_val_name); - - for (element = parent->children; element != NULL; element = element->next) - { - if (!xmlStrncmp(element->name, xml_val_name, len)) - { - xmlChar* cont = xmlNodeGetContent(element); - - if (!xmlStrcasecmp(cont, (const xmlChar*) "true") || !xmlStrcasecmp(cont, (const xmlChar*) "1")) - { - ret_val = TRUE; - } - else - { - ret_val = FALSE; - } - - xmlFree(cont); - } - } - - xmlFree(xml_val_name); - } - - return ret_val; -} - -static gchar* mate_da_xml_get_string(const xmlNode* parent, const gchar* val_name) -{ - const gchar* const* sys_langs; - xmlChar* node_lang; - xmlNode* element; - gchar* ret_val = NULL; - xmlChar* xml_val_name; - gint len; - gint i; - - if (parent != NULL && parent->children != NULL && val_name != NULL) - { - #if GLIB_CHECK_VERSION (2, 6, 0) - sys_langs = g_get_language_names(); - #endif - - xml_val_name = xmlCharStrdup(val_name); - len = xmlStrlen(xml_val_name); - - for (element = parent->children; element != NULL; element = element->next) - { - if (!xmlStrncmp(element->name, xml_val_name, len)) - { - node_lang = xmlNodeGetLang(element); - - if (node_lang == NULL) - { - ret_val = (gchar *) xmlNodeGetContent(element); - } - else - { - for (i = 0; sys_langs[i] != NULL; i++) - { - if (!strcmp(sys_langs[i], (char*) node_lang)) - { - ret_val = (gchar*) xmlNodeGetContent(element); - /* since sys_langs is sorted from most desirable to - * least desirable, exit at first match */ - break; - } - } - } - - xmlFree(node_lang); - } - } - - xmlFree(xml_val_name); - } - - return ret_val; -} - -static gboolean is_executable_valid(gchar* executable) -{ - gchar* path = g_find_program_in_path(executable); - - if (path) - { - g_free (path); - return TRUE; - } - - return FALSE; -} - -static void mate_da_xml_load_xml(MateDACapplet* capplet, const gchar* filename) -{ - xmlDoc* xml_doc; - xmlNode* root; - xmlNode* section; - xmlNode* element; - gchar* executable; - MateDAWebItem* web_item; - MateDASimpleItem* mail_item; - MateDASimpleItem* media_item; - MateDATermItem* term_item; - MateDAVisualItem* visual_item; - MateDAMobilityItem* mobility_item; - MateDAImageItem* image_item; - MateDATextItem* text_item; - MateDAFileItem* file_item; - MateDASimpleItem* video_item; - - xml_doc = xmlParseFile(filename); - - if (!xml_doc) - { - return; - } - - root = xmlDocGetRootElement(xml_doc); - - for (section = root->children; section != NULL; section = section->next) - { - if (!xmlStrncmp(section->name, (const xmlChar*) "web-browsers", strlen("web-browsers"))) - { - for (element = section->children; element != NULL; element = element->next) - { - if (!xmlStrncmp (element->name, (const xmlChar*) "web-browser", strlen("web-browser"))) - { - executable = mate_da_xml_get_string (element, "executable"); - - if (is_executable_valid (executable)) - { - web_item = mate_da_web_item_new(); - - web_item->generic.name = mate_da_xml_get_string(element, "name"); - web_item->generic.executable = executable; - web_item->generic.command = mate_da_xml_get_string(element, "command"); - web_item->generic.icon_name = mate_da_xml_get_string(element, "icon-name"); - - web_item->run_in_terminal = mate_da_xml_get_bool(element, "run-in-terminal"); - web_item->netscape_remote = mate_da_xml_get_bool(element, "netscape-remote"); - if (web_item->netscape_remote) - { - web_item->tab_command = mate_da_xml_get_string(element, "tab-command"); - web_item->win_command = mate_da_xml_get_string(element, "win-command"); - } - - capplet->web_browsers = g_list_append(capplet->web_browsers, web_item); - } - else - { - g_free(executable); - } - } - } - } - else if (!xmlStrncmp(section->name, (const xmlChar*) "mail-readers", strlen("mail-readers"))) - { - for (element = section->children; element != NULL; element = element->next) - { - if (!xmlStrncmp (element->name, (const xmlChar*) "mail-reader", strlen("mail-reader"))) - { - executable = mate_da_xml_get_string(element, "executable"); - - if (is_executable_valid(executable)) - { - mail_item = mate_da_simple_item_new(); - - mail_item->generic.name = mate_da_xml_get_string(element, "name"); - mail_item->generic.executable = executable; - mail_item->generic.command = mate_da_xml_get_string(element, "command"); - mail_item->generic.icon_name = mate_da_xml_get_string(element, "icon-name"); - - mail_item->run_in_terminal = mate_da_xml_get_bool(element, "run-in-terminal"); - - capplet->mail_readers = g_list_append(capplet->mail_readers, mail_item); - } - else - { - g_free (executable); - } - } - } - } - else if (!xmlStrncmp(section->name, (const xmlChar*) "terminals", strlen("terminals"))) - { - for (element = section->children; element != NULL; element = element->next) - { - if (!xmlStrncmp (element->name, (const xmlChar*) "terminal", strlen("terminal"))) - { - executable = mate_da_xml_get_string(element, "executable"); - - if (is_executable_valid(executable)) - { - term_item = mate_da_term_item_new(); - - term_item->generic.name = mate_da_xml_get_string(element, "name"); - term_item->generic.executable = executable; - term_item->generic.command = mate_da_xml_get_string(element, "command"); - term_item->generic.icon_name = mate_da_xml_get_string(element, "icon-name"); - - term_item->exec_flag = mate_da_xml_get_string(element, "exec-flag"); - - capplet->terminals = g_list_append(capplet->terminals, term_item); - } - else - { - g_free(executable); - } - } - } - } - else if (!xmlStrncmp(section->name, (const xmlChar*) "music-players", strlen("music-players"))) - { - for (element = section->children; element != NULL; element = element->next) - { - if (!xmlStrncmp (element->name, (const xmlChar*) "music-player", strlen("music-player"))) - { - executable = mate_da_xml_get_string(element, "executable"); - - if (is_executable_valid(executable)) - { - media_item = mate_da_simple_item_new(); - - media_item->generic.name = mate_da_xml_get_string (element, "name"); - media_item->generic.executable = executable; - media_item->generic.command = mate_da_xml_get_string (element, "command"); - media_item->generic.icon_name = mate_da_xml_get_string (element, "icon-name"); - - media_item->run_in_terminal = mate_da_xml_get_bool (element, "run-in-terminal"); - - capplet->media_players = g_list_append (capplet->media_players, media_item); - } - else - { - g_free(executable); - } - } - } - } - else if (!xmlStrncmp(section->name, (const xmlChar*) "video-players", strlen("video-players"))) - { - for (element = section->children; element != NULL; element = element->next) - { - if (!xmlStrncmp (element->name, (const xmlChar*) "video-player", strlen("video-player"))) - { - executable = mate_da_xml_get_string(element, "executable"); - - if (is_executable_valid(executable)) - { - video_item = mate_da_simple_item_new(); - - video_item->generic.name = mate_da_xml_get_string (element, "name"); - video_item->generic.executable = executable; - video_item->generic.command = mate_da_xml_get_string (element, "command"); - video_item->generic.icon_name = mate_da_xml_get_string (element, "icon-name"); - - video_item->run_in_terminal = mate_da_xml_get_bool (element, "run-in-terminal"); - - capplet->video_players = g_list_append (capplet->video_players, video_item); - } - else - { - g_free(executable); - } - } - } - } - else if (!xmlStrncmp(section->name, (const xmlChar*) "image-viewers", strlen("image-viewers"))) - { - for (element = section->children; element != NULL; element = element->next) - { - if (!xmlStrncmp(element->name, (const xmlChar*) "image-viewer", strlen("image-viewer"))) - { - executable = mate_da_xml_get_string(element, "executable"); - - if (is_executable_valid(executable)) - { - image_item = mate_da_image_item_new(); - - image_item->generic.name = mate_da_xml_get_string(element, "name"); - image_item->generic.executable = executable; - image_item->generic.command = mate_da_xml_get_string(element, "command"); - image_item->generic.icon_name = mate_da_xml_get_string(element, "icon-name"); - - image_item->run_in_terminal = mate_da_xml_get_bool(element, "run-in-terminal"); - - capplet->image_viewers = g_list_append(capplet->image_viewers, image_item); - } - else - { - g_free(executable); - } - } - } - } - else if (!xmlStrncmp(section->name, (const xmlChar*) "text-editors", strlen("text-editors"))) - { - for (element = section->children; element != NULL; element = element->next) - { - if (!xmlStrncmp(element->name, (const xmlChar*) "text-editor", strlen("text-editor"))) - { - executable = mate_da_xml_get_string(element, "executable"); - - if (is_executable_valid(executable)) - { - text_item = mate_da_text_item_new(); - - text_item->generic.name = mate_da_xml_get_string(element, "name"); - text_item->generic.executable = executable; - text_item->generic.command = mate_da_xml_get_string(element, "command"); - text_item->generic.icon_name = mate_da_xml_get_string(element, "icon-name"); - - text_item->run_in_terminal = mate_da_xml_get_bool(element, "run-in-terminal"); - - capplet->text_editors = g_list_append(capplet->text_editors, text_item); - } - else - { - g_free(executable); - } - } - } - } - else if (!xmlStrncmp(section->name, (const xmlChar*) "file-managers", strlen("file-managers"))) - { - for (element = section->children; element != NULL; element = element->next) - { - if (!xmlStrncmp(element->name, (const xmlChar*) "file-manager", strlen("file-manager"))) - { - executable = mate_da_xml_get_string(element, "executable"); - - if (is_executable_valid(executable)) - { - file_item = mate_da_file_item_new(); - - file_item->generic.name = mate_da_xml_get_string(element, "name"); - file_item->generic.executable = executable; - file_item->generic.command = mate_da_xml_get_string(element, "command"); - file_item->generic.icon_name = mate_da_xml_get_string(element, "icon-name"); - - file_item->run_in_terminal = mate_da_xml_get_bool(element, "run-in-terminal"); - - capplet->file_managers = g_list_append(capplet->file_managers, file_item); - } - else - { - g_free(executable); - } - } - } - } - else if (!xmlStrncmp(section->name, (const xmlChar*) "a11y-visual", strlen("a11y-visual"))) - { - for (element = section->children; element != NULL; element = element->next) - { - if (!xmlStrncmp (element->name, (const xmlChar*) "visual", strlen("visual"))) - { - executable = mate_da_xml_get_string (element,"executable"); - - if (is_executable_valid (executable)) - { - visual_item = mate_da_visual_item_new(); - - visual_item->generic.name = mate_da_xml_get_string(element, "name"); - visual_item->generic.executable = executable; - visual_item->generic.command = mate_da_xml_get_string(element, "command"); - visual_item->generic.icon_name = mate_da_xml_get_string(element, "icon-name"); - - visual_item->run_at_startup = mate_da_xml_get_bool(element, "run-at-startup"); - - capplet->visual_ats = g_list_append(capplet->visual_ats, visual_item); - } - else - { - g_free(executable); - } - } - } - } - else if (!xmlStrncmp(section->name, (const xmlChar*) "a11y-mobility", strlen("a11y-mobility"))) - { - for (element = section->children; element != NULL; element = element->next) - { - if (!xmlStrncmp(element->name, (const xmlChar*) "mobility", strlen("mobility"))) - { - executable = mate_da_xml_get_string(element,"executable"); - - if (is_executable_valid (executable)) - { - mobility_item = mate_da_mobility_item_new (); - - mobility_item->generic.name = mate_da_xml_get_string (element, "name"); - mobility_item->generic.executable = executable; - mobility_item->generic.command = mate_da_xml_get_string (element, "command"); - mobility_item->generic.icon_name = mate_da_xml_get_string (element, "icon-name"); - - mobility_item->run_at_startup = mate_da_xml_get_bool (element, "run-at-startup"); - - capplet->mobility_ats = g_list_append (capplet->mobility_ats, mobility_item); - } - else - { - g_free (executable); - } - } - } - } - } - - xmlFreeDoc(xml_doc); -} - -void mate_da_xml_load_list(MateDACapplet* capplet) -{ - GDir* app_dir = g_dir_open(MATECC_APPS_DIR, 0, NULL); - - if (app_dir != NULL) - { - const gchar* extra_file; - gchar* filename; - - while ((extra_file = g_dir_read_name(app_dir)) != NULL) - { - filename = g_build_filename(MATECC_APPS_DIR, extra_file, NULL); - - if (g_str_has_suffix(filename, ".xml")) - { - mate_da_xml_load_xml(capplet, filename); - } - - g_free(filename); - } - - g_dir_close(app_dir); - } -} - -void mate_da_xml_free(MateDACapplet* capplet) -{ - g_list_foreach(capplet->web_browsers, (GFunc) mate_da_web_item_free, NULL); - g_list_foreach(capplet->mail_readers, (GFunc) mate_da_simple_item_free, NULL); - g_list_foreach(capplet->terminals, (GFunc) mate_da_term_item_free, NULL); - g_list_foreach(capplet->media_players, (GFunc) mate_da_simple_item_free, NULL); - g_list_foreach(capplet->video_players, (GFunc) mate_da_simple_item_free, NULL); - g_list_foreach(capplet->visual_ats, (GFunc) mate_da_visual_item_free, NULL); - g_list_foreach(capplet->mobility_ats, (GFunc) mate_da_mobility_item_free, NULL); - g_list_foreach(capplet->image_viewers, (GFunc) mate_da_image_item_free, NULL); - g_list_foreach(capplet->text_editors, (GFunc) mate_da_text_item_free, NULL); - g_list_foreach(capplet->file_managers, (GFunc) mate_da_file_item_free, NULL); - - g_list_free(capplet->web_browsers); - g_list_free(capplet->mail_readers); - g_list_free(capplet->terminals); - g_list_free(capplet->media_players); - g_list_free(capplet->video_players); - g_list_free(capplet->visual_ats); - g_list_free(capplet->mobility_ats); - g_list_free(capplet->image_viewers); - g_list_free(capplet->text_editors); - g_list_free(capplet->file_managers); - - g_object_unref(capplet->builder); - g_free(capplet); -} |