⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 st-config-load.c

📁 linux下网络收音机的源码
💻 C
📖 第 1 页 / 共 2 页
字号:
/* * Copyright (c) 2002, 2003, 2004 Jean-Yves Lefort * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in the *    documentation and/or other materials provided with the distribution. * 3. Neither the name of Jean-Yves Lefort nor the names of its contributors *    may be used to endorse or promote products derived from this software *    without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */#include "config.h"#include <string.h>#include <stdlib.h>#include <glib/gi18n.h>#include <glib-object.h>#include "sg-parser.h"#include "st-handler.h"#include "st-handler-field.h"#include "st-handlers.h"#include "st-action.h"#include "st-settings.h"#include "st-util.h"/*** type definitions ********************************************************/enum {  STATEMENT_OPTIONS = 1,  STATEMENT_OPTIONS_VIEW_MENUBAR,		/* obsolete */  STATEMENT_OPTIONS_VIEW_TOOLBAR,  STATEMENT_OPTIONS_VIEW_TABS,  STATEMENT_OPTIONS_VIEW_TAB_ICONS,  STATEMENT_OPTIONS_VIEW_STATUSBAR,  STATEMENT_OPTIONS_TOOLBAR_THEME,		/* obsolete */  STATEMENT_OPTIONS_TOOLBAR_STYLE,  STATEMENT_OPTIONS_TOOLBAR_SIZE,  STATEMENT_OPTIONS_SAVE_AUTOMATIC,		/* obsolete */  STATEMENT_OPTIONS_MAIN_WINDOW_WIDTH,  STATEMENT_OPTIONS_MAIN_WINDOW_HEIGHT,  STATEMENT_OPTIONS_MAIN_WINDOW_DIVIDER,	/* deprecated */  STATEMENT_OPTIONS_WINDOW_WIDTH,		/* deprecated */  STATEMENT_OPTIONS_WINDOW_HEIGHT,		/* deprecated */  STATEMENT_OPTIONS_WINDOW_DIVIDER,		/* deprecated */  STATEMENT_OPTIONS_PREFERENCES_WINDOW_WIDTH,  STATEMENT_OPTIONS_PREFERENCES_WINDOW_HEIGHT,  STATEMENT_OPTIONS_PREFERENCES_SELECTED_PAGE,  STATEMENT_OPTIONS_PREFERENCES_PLUGINS_EXPANDED,  STATEMENT_OPTIONS_STREAM_PROPERTIES_WINDOW_WIDTH,  STATEMENT_OPTIONS_STREAM_COLUMNS_WINDOW_WIDTH,  STATEMENT_OPTIONS_STREAM_COLUMNS_WINDOW_HEIGHT,  STATEMENT_OPTIONS_SELECTED_PREFERENCES_PAGE,	/* obsolete */  STATEMENT_OPTIONS_PROXY_ENABLED,  STATEMENT_OPTIONS_PROXY_TYPE,  STATEMENT_OPTIONS_PROXY_URL,			/* deprecated */  STATEMENT_OPTIONS_PROXY_SERVER,  STATEMENT_OPTIONS_PROXY_PORT,  STATEMENT_OPTIONS_PROXY_AUTH_ENABLED,  STATEMENT_OPTIONS_PROXY_AUTH_NAME,  STATEMENT_OPTIONS_PROXY_AUTH_PASSWORD,  STATEMENT_OPTIONS_GALEON_THEMES_ENABLED,	/* obsolete */  STATEMENT_OPTIONS_GALEON_THEMES_SYSTEM_DIR,	/* obsolete */  STATEMENT_OPTIONS_GALEON_THEMES_USER_DIR,	/* obsolete */  STATEMENT_OPTIONS_SELECTED_HANDLER,  STATEMENT_OPTIONS_ALWAYS_REFRESH,		/* deprecated */  STATEMENT_OPTIONS_ALWAYS_RELOAD,  STATEMENT_OPTIONS_FIND_TOKEN,  STATEMENT_OPTIONS_FIND_CASE_SENSITIVE,  STATEMENT_OPTIONS_FIND_WRAP_AROUND,  STATEMENT_OPTIONS_FIND_HISTORY,  STATEMENT_OPTIONS_MUSIC_DIR,  STATEMENT_ACTION,  STATEMENT_ACTION_COMMAND,  STATEMENT_ACTION_PROGRAM,			/* deprecated */  STATEMENT_HANDLER,  STATEMENT_HANDLER_FIELDS_SORT_INDEX,  STATEMENT_HANDLER_FIELDS_SORT_ORDER,  STATEMENT_HANDLER_PANED_POSITION,  STATEMENT_HANDLER_SELECTED_CATEGORY,		/* obsolete */  STATEMENT_HANDLER_SELECTED_STREAM,		/* obsolete */  STATEMENT_HANDLER_FIELDS_WIDTH,		/* deprecated */  STATEMENT_HANDLER_FIELD,  STATEMENT_HANDLER_FIELD_VISIBLE,  STATEMENT_HANDLER_FIELD_WIDTH,  STATEMENT_HANDLER_FIELD_POSITION,  STATEMENT_HANDLER_KEY,  STATEMENT_HANDLER_EXPANDED_CATEGORIES,	/* obsolete */  STATEMENT_HANDLER_SELECTED_STREAMS		/* obsolete */};typedef struct{  SGParser		*parser;  SGParserStatement	*statement;  char			*action;    GSList		*handlers;  STHandler		*handler;  GSList		*handler_field_iter;  STHandlerField	*handler_field;  GParamSpec		*handler_config_pspec;  char			*handler_config_key;  GValueArray		*handler_config_values;} LoadInfo;/*** constant definitions ****************************************************/static SGParserDefinition config_definitions[] = {  {    0,			STATEMENT_OPTIONS,    "options",		TRUE,		G_TYPE_NONE  },  {				/* obsolete */    STATEMENT_OPTIONS,	STATEMENT_OPTIONS_VIEW_MENUBAR,    "view_menubar",	FALSE,		G_TYPE_INT  },  {    STATEMENT_OPTIONS,	STATEMENT_OPTIONS_VIEW_TOOLBAR,    "view_toolbar",	FALSE,		G_TYPE_BOOLEAN  },  {    STATEMENT_OPTIONS,	STATEMENT_OPTIONS_VIEW_TABS,    "view_tabs",	FALSE,		G_TYPE_BOOLEAN  },  {    STATEMENT_OPTIONS,	STATEMENT_OPTIONS_VIEW_TAB_ICONS,    "view_tab_icons",	FALSE,		G_TYPE_BOOLEAN  },  {    STATEMENT_OPTIONS,	STATEMENT_OPTIONS_VIEW_STATUSBAR,    "view_statusbar",	FALSE,		G_TYPE_BOOLEAN  },  {				/* obsolete */    STATEMENT_OPTIONS,	STATEMENT_OPTIONS_TOOLBAR_THEME,    "toolbar_theme",	FALSE,		G_TYPE_STRING  },  {    STATEMENT_OPTIONS,	STATEMENT_OPTIONS_TOOLBAR_STYLE,    "toolbar_style",	FALSE,		G_TYPE_INT  },  {    STATEMENT_OPTIONS,	STATEMENT_OPTIONS_TOOLBAR_SIZE,    "toolbar_size",	FALSE,		G_TYPE_INT  },  {				/* obsolete */    STATEMENT_OPTIONS,	STATEMENT_OPTIONS_SAVE_AUTOMATIC,    "save_automatic",	FALSE,		G_TYPE_BOOLEAN  },  {    STATEMENT_OPTIONS,	STATEMENT_OPTIONS_MAIN_WINDOW_WIDTH,    "main_window_width",	FALSE,	G_TYPE_INT  },  {    STATEMENT_OPTIONS,	STATEMENT_OPTIONS_MAIN_WINDOW_HEIGHT,    "main_window_height",	FALSE,	G_TYPE_INT  },  {    STATEMENT_OPTIONS,	STATEMENT_OPTIONS_MAIN_WINDOW_HEIGHT,    "main_window_height",	FALSE,	G_TYPE_INT  },  {				/* deprecated */    STATEMENT_OPTIONS,	STATEMENT_OPTIONS_MAIN_WINDOW_DIVIDER,    "main_window_divider",	FALSE,	G_TYPE_INT  },  {				/* deprecated */    STATEMENT_OPTIONS,	STATEMENT_OPTIONS_WINDOW_WIDTH,    "window_width",	FALSE,	G_TYPE_INT  },  {				/* deprecated */    STATEMENT_OPTIONS,	STATEMENT_OPTIONS_WINDOW_HEIGHT,    "window_height",	FALSE,	G_TYPE_INT  },  {				/* deprecated */    STATEMENT_OPTIONS,	STATEMENT_OPTIONS_WINDOW_DIVIDER,    "window_divider",	FALSE,	G_TYPE_INT  },  {    STATEMENT_OPTIONS,	STATEMENT_OPTIONS_PREFERENCES_WINDOW_WIDTH,    "preferences_window_width", FALSE,	G_TYPE_INT  },  {    STATEMENT_OPTIONS,	STATEMENT_OPTIONS_PREFERENCES_WINDOW_HEIGHT,    "preferences_window_height", FALSE,	G_TYPE_INT  },  {    STATEMENT_OPTIONS,	STATEMENT_OPTIONS_PREFERENCES_SELECTED_PAGE,    "preferences_selected_page", FALSE,	G_TYPE_STRING  },  {    STATEMENT_OPTIONS,	STATEMENT_OPTIONS_PREFERENCES_PLUGINS_EXPANDED,    "preferences_plugins_expanded", FALSE, G_TYPE_BOOLEAN  },  {    STATEMENT_OPTIONS,	STATEMENT_OPTIONS_STREAM_PROPERTIES_WINDOW_WIDTH,    "stream_properties_window_width", FALSE, G_TYPE_INT  },  {    STATEMENT_OPTIONS,	STATEMENT_OPTIONS_STREAM_COLUMNS_WINDOW_WIDTH,    "stream_columns_window_width", FALSE, G_TYPE_INT  },  {    STATEMENT_OPTIONS,	STATEMENT_OPTIONS_STREAM_COLUMNS_WINDOW_HEIGHT,    "stream_columns_window_height", FALSE, G_TYPE_INT  },  {				/* obsolete */    STATEMENT_OPTIONS,	STATEMENT_OPTIONS_SELECTED_PREFERENCES_PAGE,    "selected_preferences_page", FALSE,	G_TYPE_INT  },  {    STATEMENT_OPTIONS,	STATEMENT_OPTIONS_PROXY_ENABLED,    "proxy_enabled",	FALSE,		G_TYPE_BOOLEAN  },  {    STATEMENT_OPTIONS,	STATEMENT_OPTIONS_PROXY_TYPE,    "proxy_type",	FALSE,		G_TYPE_INT  },  {				/* deprecated */    STATEMENT_OPTIONS,	STATEMENT_OPTIONS_PROXY_URL,    "proxy_url",	FALSE,		G_TYPE_STRING  },  {    STATEMENT_OPTIONS,	STATEMENT_OPTIONS_PROXY_SERVER,    "proxy_server",	FALSE,		G_TYPE_STRING  },  {    STATEMENT_OPTIONS,	STATEMENT_OPTIONS_PROXY_PORT,    "proxy_port",	FALSE,		G_TYPE_INT  },  {    STATEMENT_OPTIONS,	STATEMENT_OPTIONS_PROXY_AUTH_ENABLED,    "proxy_auth_enabled",	FALSE,	G_TYPE_BOOLEAN  },  {    STATEMENT_OPTIONS,	STATEMENT_OPTIONS_PROXY_AUTH_NAME,    "proxy_auth_name",	FALSE,		G_TYPE_STRING  },  {    STATEMENT_OPTIONS,	STATEMENT_OPTIONS_PROXY_AUTH_PASSWORD,    "proxy_auth_password",	FALSE,	G_TYPE_STRING  },  {				/* obsolete */    STATEMENT_OPTIONS,	STATEMENT_OPTIONS_GALEON_THEMES_ENABLED,    "galeon_themes_enabled",	FALSE,	G_TYPE_INT  },  {				/* obsolete */    STATEMENT_OPTIONS,	STATEMENT_OPTIONS_GALEON_THEMES_SYSTEM_DIR,    "galeon_themes_system_dir",	FALSE,	G_TYPE_STRING  },  {				/* obsolete */    STATEMENT_OPTIONS,	STATEMENT_OPTIONS_GALEON_THEMES_USER_DIR,    "galeon_themes_user_dir",	FALSE,	G_TYPE_STRING  },  {    STATEMENT_OPTIONS,	STATEMENT_OPTIONS_SELECTED_HANDLER,    "selected_handler",	FALSE,		G_TYPE_STRING  },   {				/* deprecated */    STATEMENT_OPTIONS,	STATEMENT_OPTIONS_ALWAYS_REFRESH,    "always_refresh",	FALSE,		G_TYPE_BOOLEAN  },   {    STATEMENT_OPTIONS,	STATEMENT_OPTIONS_ALWAYS_RELOAD,    "always_reload",	FALSE,		G_TYPE_BOOLEAN  },   {    STATEMENT_OPTIONS,	STATEMENT_OPTIONS_FIND_TOKEN,    "find_token",	FALSE,		G_TYPE_STRING  },   {    STATEMENT_OPTIONS,	STATEMENT_OPTIONS_FIND_CASE_SENSITIVE,    "find_case_sensitive",	FALSE,	G_TYPE_BOOLEAN  },   {    STATEMENT_OPTIONS,	STATEMENT_OPTIONS_FIND_WRAP_AROUND,    "find_wrap_around",		FALSE,	G_TYPE_BOOLEAN  },   {    STATEMENT_OPTIONS,	STATEMENT_OPTIONS_FIND_HISTORY,    "find_history",	TRUE,		G_TYPE_NONE  },   {    STATEMENT_OPTIONS,	STATEMENT_OPTIONS_MUSIC_DIR,    "music_dir",	FALSE,		G_TYPE_STRING  },   {    0,			STATEMENT_ACTION,    "action",		TRUE,		G_TYPE_STRING  },  {    STATEMENT_ACTION,	STATEMENT_ACTION_COMMAND,    "command",		FALSE,		G_TYPE_STRING  },  {				/* deprecated */    STATEMENT_ACTION,	STATEMENT_ACTION_PROGRAM,    "program",		FALSE,		G_TYPE_STRING  },  {    0,			STATEMENT_HANDLER,    "handler",		TRUE,		G_TYPE_STRING  },  {    STATEMENT_HANDLER,	STATEMENT_HANDLER_FIELDS_SORT_INDEX,    "fields_sort_index",	FALSE,	G_TYPE_INT  },  {    STATEMENT_HANDLER,	STATEMENT_HANDLER_FIELDS_SORT_ORDER,    "fields_sort_order",	FALSE,	G_TYPE_INT  },  {    STATEMENT_HANDLER,	STATEMENT_HANDLER_PANED_POSITION,    "paned_position",		FALSE,	G_TYPE_INT  },  {				/* obsolete */    STATEMENT_HANDLER,	STATEMENT_HANDLER_SELECTED_CATEGORY,    "selected_category",	FALSE,	G_TYPE_STRING  },  {				/* obsolete */    STATEMENT_HANDLER,	STATEMENT_HANDLER_SELECTED_STREAM,    "selected_stream",	FALSE,		G_TYPE_STRING  },  {				/* deprecated */    STATEMENT_HANDLER,	STATEMENT_HANDLER_FIELDS_WIDTH,    "fields_width",	TRUE,		G_TYPE_NONE  },  {    STATEMENT_HANDLER,	STATEMENT_HANDLER_FIELD,    "field",		TRUE,		G_TYPE_NONE  },  {    STATEMENT_HANDLER_FIELD,	STATEMENT_HANDLER_FIELD_VISIBLE,    "visible",		FALSE,		G_TYPE_BOOLEAN  },  {    STATEMENT_HANDLER_FIELD,	STATEMENT_HANDLER_FIELD_WIDTH,    "width",		FALSE,		G_TYPE_INT  },  {    STATEMENT_HANDLER_FIELD,	STATEMENT_HANDLER_FIELD_POSITION,    "position",		FALSE,		G_TYPE_INT  },  {    STATEMENT_HANDLER,	STATEMENT_HANDLER_KEY,    "key",		TRUE,		G_TYPE_STRING  },  {				/* obsolete */    STATEMENT_HANDLER,	STATEMENT_HANDLER_EXPANDED_CATEGORIES,    "expanded_categories",	TRUE,	G_TYPE_NONE  },  {				/* obsolete */    STATEMENT_HANDLER,	STATEMENT_HANDLER_SELECTED_STREAMS,    "selected_streams",	TRUE,		G_TYPE_NONE  },  { 0, 0, NULL, 0, 0 }};  /*** function declarations ***************************************************/static void st_config_load_find_history              (LoadInfo *info);static void st_config_load_handler_begin	     (LoadInfo *info);static void st_config_load_handler_end		     (LoadInfo *info);static void st_config_load_handler_field_begin	     (LoadInfo *info);static void st_config_load_handler_field_end	     (LoadInfo *info);static void st_config_load_command		     (LoadInfo *info);static void st_config_load_program		     (LoadInfo *info);static void st_config_load_handler_field_width	     (LoadInfo *info);static void st_config_load_handler_key_begin         (LoadInfo *info);static void st_config_load_handler_key_value         (LoadInfo *info);static void st_config_load_handler_key_end           (LoadInfo *info);/*** implementation **********************************************************/gbooleanst_config_load (const char *filename, GError **err){   LoadInfo info = { NULL, };  g_return_val_if_fail(filename != NULL, FALSE);  info.parser = sg_parser_new(filename, err);  if (! info.parser)    return FALSE;    info.parser->scanner->msg_handler = st_parser_msg_cb;  sg_parser_definev(info.parser, config_definitions);  while ((info.statement = sg_parser_get_statement(info.parser)))    {      if (SG_PARSER_STATEMENT_IS_END(info.statement))	{	  switch (SG_PARSER_SCOPE(info.parser))	    {	    case STATEMENT_HANDLER:	      st_config_load_handler_end(&info);	      break;	    case STATEMENT_HANDLER_FIELD:	      st_config_load_handler_field_end(&info);	      break;	    case STATEMENT_HANDLER_KEY:	      st_config_load_handler_key_end(&info);	      break;	    }	}          if (info.statement->definition)	{	  switch (info.statement->definition->id)	    {	    case STATEMENT_OPTIONS_VIEW_TOOLBAR:	      st_settings.view_toolbar = g_value_get_boolean(&info.statement->value);	      break;		    case STATEMENT_OPTIONS_VIEW_TABS:	      st_settings.view_tabs = g_value_get_boolean(&info.statement->value);	      break;	    case STATEMENT_OPTIONS_VIEW_TAB_ICONS:	      st_settings.view_tab_icons = g_value_get_boolean(&info.statement->value);	      break;	    case STATEMENT_OPTIONS_VIEW_STATUSBAR:	      st_settings.view_statusbar = g_value_get_boolean(&info.statement->value);	      break;	      	    case STATEMENT_OPTIONS_TOOLBAR_STYLE:	      st_settings.toolbar_style = g_value_get_int(&info.statement->value);	      break;	      	    case STATEMENT_OPTIONS_TOOLBAR_SIZE:	      st_settings.toolbar_size = g_value_get_int(&info.statement->value);	      break;	    case STATEMENT_OPTIONS_WINDOW_WIDTH:	/* deprecated */	    case STATEMENT_OPTIONS_MAIN_WINDOW_WIDTH:	      st_settings.main_window_width = g_value_get_int(&info.statement->value);	      break;	      	    case STATEMENT_OPTIONS_WINDOW_HEIGHT:	/* deprecated */	    case STATEMENT_OPTIONS_MAIN_WINDOW_HEIGHT:	      st_settings.main_window_height = g_value_get_int(&info.statement->value);	      break;	    case STATEMENT_OPTIONS_PREFERENCES_WINDOW_WIDTH:	      st_settings.preferences_window_width = g_value_get_int(&info.statement->value);	      break;	      	    case STATEMENT_OPTIONS_PREFERENCES_WINDOW_HEIGHT:	      st_settings.preferences_window_height = g_value_get_int(&info.statement->value);	      break;	    case STATEMENT_OPTIONS_PREFERENCES_SELECTED_PAGE:	      st_settings.preferences_selected_page = g_value_dup_string(&info.statement->value);	      break;	    case STATEMENT_OPTIONS_PREFERENCES_PLUGINS_EXPANDED:	      st_settings.preferences_plugins_expanded = g_value_get_boolean(&info.statement->value);	      break;	    case STATEMENT_OPTIONS_STREAM_PROPERTIES_WINDOW_WIDTH:	      st_settings.stream_properties_window_width = g_value_get_int(&info.statement->value);	      break;	    case STATEMENT_OPTIONS_STREAM_COLUMNS_WINDOW_WIDTH:	      st_settings.stream_columns_window_width = g_value_get_int(&info.statement->value);	      break;	    case STATEMENT_OPTIONS_STREAM_COLUMNS_WINDOW_HEIGHT:	      st_settings.stream_columns_window_height = g_value_get_int(&info.statement->value);	      break;	    case STATEMENT_OPTIONS_PROXY_ENABLED:	      st_settings.proxy_enabled = g_value_get_boolean(&info.statement->value);	      break;	      	    case STATEMENT_OPTIONS_PROXY_TYPE:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -