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

📄 st-session.c

📁 linux下网络收音机的源码
💻 C
字号:
/* * 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 <errno.h>#include <glib.h>#include <sys/types.h>#include <sys/stat.h>#include <unistd.h>#include <glib/gi18n.h>#include <gtk/gtk.h>#include "sg-util.h"#include "st-cache.h"#include "st-config-load.h"#include "st-config-save.h"#include "st-dialog-api.h"#include "st-settings.h"#include "st-preselections.h"#include "st-handlers.h"#include "st-handler.h"#include "st-category-store.h"#include "st-oldcache-load.h"#include "st-util-api.h"/*** function declarations ***************************************************/static gboolean st_session_mkdir (const char *dirname);/*** implementation **********************************************************/voidst_session_load (void){  GError *err = NULL;  GSList *l;    if (g_file_test(st_settings.accels_file, G_FILE_TEST_IS_REGULAR))    gtk_accel_map_load(st_settings.accels_file);  if (g_file_test(st_settings.config_file, G_FILE_TEST_IS_REGULAR))    {      if (! st_config_load(st_settings.config_file, &err))	{	  char *normalized;	  normalized = st_dialog_normalize(err->message);	  st_error_dialog(_("Unable to load configuration"), "%s", normalized);	  g_free(normalized);	  g_clear_error(&err);	}    }  if (g_file_test(st_settings.cache_dir, G_FILE_TEST_IS_REGULAR))    {				/* old cache */      if (! st_oldcache_load(st_settings.cache_dir, &err))	{	  char *normalized;	  normalized = st_dialog_normalize(err->message);	  st_error_dialog(_("Unable to load old cache"), "%s", normalized);	  g_free(normalized);	  g_clear_error(&err);	}    }  else    SG_LIST_FOREACH(l, st_handlers_list)      {	STHandler *handler = l->data;	const char *name;	if (ST_HANDLER_HAS_CATEGORIES(handler) && st_cache_has_categories(handler))	  {	    GNode *categories;	    	    categories = st_cache_load_categories(handler, &err);	    if (categories)	      {		STCategoryStore *category_store;				category_store = st_handler_get_categories(handler);		st_category_store_append_node(category_store, categories);				g_object_unref(category_store);	      }	    else	      {		char *primary;		char *normalized;				primary = g_strdup_printf(_("Unable to load categories of handler \"%s\" from cache"), st_handler_get_label(handler));		normalized = st_dialog_normalize(err->message);				st_error_dialog(primary, "%s", normalized);				g_free(primary);		g_free(normalized);				g_clear_error(&err);	      }	  }		name = st_handler_get_name(handler);	if (! strcmp(name, "bookmarks") || ! strcmp(name, "preselections"))	  {	    if (st_cache_has_streams(handler, ST_CATEGORY_BAG_MAIN))	      {		STStreamStore *streams;				streams = st_cache_load_streams(handler, ST_CATEGORY_BAG_MAIN, NULL, NULL, &err);		if (streams)		  {		    st_handler_set_streams(handler, ST_CATEGORY_BAG_MAIN, streams);		    g_object_unref(streams);		  }		else		  {		    const char *primary;		    char *normalized;		    		    if (! strcmp(name, "bookmarks"))		      primary = _("Unable to load bookmarks from cache");		    else if (! strcmp(name, "preselections"))		      primary = _("Unable to load preselections from cache");		    else		      g_return_if_reached();		    		    normalized = st_dialog_normalize(err->message);		    		    st_error_dialog(primary, "%s", normalized);		    		    g_free(normalized);		    g_clear_error(&err);		  }	      }	  }      }    st_preselections_add_stock();}voidst_session_save (void){  GError *err = NULL;  /* remove old cache if present */  if (g_file_test(st_settings.cache_dir, G_FILE_TEST_IS_REGULAR))    unlink(st_settings.cache_dir);  if (g_file_test(st_settings.images_dir, G_FILE_TEST_IS_DIR))    {      GDir *dir;      dir = g_dir_open(st_settings.images_dir, 0, NULL);      if (dir)	{	  const char *filename;	  while ((filename = g_dir_read_name(dir)))	    {	      char *extension;	      extension = strrchr(filename, '.');	      if (extension && ! strcmp(extension, ".png"))		{		  char *base;		  base = g_strndup(filename, extension - filename);		  if (st_str_like(base, ST_NUMERIC))		    {		      char *pathname;		      pathname = g_build_filename(st_settings.images_dir, filename, NULL);		      unlink(pathname);		      g_free(pathname);		    }		  g_free(base);		}	    }	  g_dir_close(dir);	}      rmdir(st_settings.images_dir);    }    /* create directories */  if (! st_session_mkdir(st_settings.private_dir))    return;  if (! st_session_mkdir(st_settings.cache_dir))    return;  /* save accel map */  gtk_accel_map_save(st_settings.accels_file);  /* save config */  if (! st_config_save(st_settings.config_file, &err))    {      char *normalized;            normalized = st_dialog_normalize(err->message);            st_error_dialog(_("Unable to save configuration"), "%s", normalized);            g_free(normalized);      g_clear_error(&err);    }    /* save cache */  if (! st_cache_save(&err))    {      char *normalized;            normalized = st_dialog_normalize(err->message);            st_error_dialog(_("Unable to save cache"), "%s", normalized);            g_free(normalized);      g_clear_error(&err);    }  /* save status of splash */  if (! st_settings_save_splash_enabled(&err))    {      char *normalized;            normalized = st_dialog_normalize(err->message);            st_error_dialog(_("Unable to save splash screen setting"), "%s", normalized);            g_free(normalized);      g_clear_error(&err);    }  /* save list of disabled plugins */  if (! st_settings_save_disabled_plugins_list(&err))    {      char *normalized;            normalized = st_dialog_normalize(err->message);            st_error_dialog(_("Unable to save list of disabled plugins"), "%s", normalized);            g_free(normalized);      g_clear_error(&err);    }}static gbooleanst_session_mkdir (const char *dirname){  gboolean status = TRUE;  if (! g_file_test(dirname, G_FILE_TEST_IS_DIR))    {      if (mkdir(dirname, 0755) < 0)	{	  char *secondary;	  char *normalized;	  secondary = g_strdup_printf("Unable to create directory %s: %s.",				      dirname, g_strerror(errno));	  normalized = st_dialog_normalize(secondary);	  g_free(secondary);	  st_error_dialog(_("Unable to save session"), "%s", normalized);	  g_free(normalized);	  status = FALSE;	}    }  return status;}

⌨️ 快捷键说明

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