Mercurial > audlegacy
diff src/audacious/main.c @ 4352:ac1f6d211223
Split BmpConfig from main.c and main.h; move around some other stuff too
author | mf0102 <0102@gmx.at> |
---|---|
date | Sun, 16 Mar 2008 22:23:59 +0100 |
parents | 8071e599916d |
children | 3aeb45aeeaed |
line wrap: on
line diff
--- a/src/audacious/main.c Sun Mar 16 19:03:24 2008 +0100 +++ b/src/audacious/main.c Sun Mar 16 22:23:59 2008 +0100 @@ -62,8 +62,6 @@ #include "auddrct.h" #include "build_stamp.h" #include "dnd.h" -#include "effect.h" -#include "general.h" #include "hints.h" #include "input.h" #include "logger.h" @@ -79,10 +77,8 @@ #include "ui_manager.h" #include "ui_playlist.h" #include "ui_preferences.h" -#include "ui_skinned_window.h" #include "ui_skinselector.h" #include "util.h" -#include "visualization.h" #include "libSAD.h" #include "eggsmclient.h" @@ -114,159 +110,6 @@ BmpConfig cfg; -BmpConfig bmp_default_config = { - MAINWIN_DEFAULT_POS_X, /* mainwin x position */ - MAINWIN_DEFAULT_POS_Y, /* mainwin y position */ - EQUALIZER_DEFAULT_POS_X, /* equalizer x position */ - EQUALIZER_DEFAULT_POS_Y, /* equalizer y position */ - PLAYLISTWIN_DEFAULT_POS_X, /* playlistwin x position */ - PLAYLISTWIN_DEFAULT_POS_Y, /* playlistwin y position */ - PLAYLISTWIN_DEFAULT_WIDTH, /* playlistwin width */ - PLAYLISTWIN_DEFAULT_HEIGHT, /* playlistwin height */ - 10, /* snap distance */ - FALSE, /* real-time priority */ - FALSE, FALSE, /* shuffle, repeat */ - FALSE, /* scaling */ - TRUE, /* autoscroll */ - TRUE, /* analyzer peaks */ - FALSE, /* equalizer autoload */ - FALSE, /* easy move */ - FALSE, /* equalizer active */ - FALSE, /* playlistwin visible */ - FALSE, /* equalizer visible */ - TRUE, /* player visible */ - FALSE, /* player shaded */ - FALSE, /* playlistwin shaded */ - FALSE, /* equalizer shaded */ - FALSE, /* allow multiple instances */ - TRUE, /* always show cb */ - TRUE, TRUE, TRUE, /* convert '_', %20 and '\' */ - TRUE, /* show numbers in playlist */ - TRUE, /* snap windows */ - TRUE, /* save window positions */ - TRUE, /* dim titlebar */ - FALSE, /* get playlist info on load */ - TRUE, /* get playlist info on demand */ - TRUE, /* equalizer scale linked */ - FALSE, /* sort jump to file */ - FALSE, /* use effect plugins */ - FALSE, /* always on top */ - FALSE, /* sticky */ - FALSE, /* no playlist advance */ - FALSE, /* stop after current song */ - TRUE, /* refresh file list */ - TRUE, /* UNUSED (smooth title scrolling) */ - TRUE, /* use playlist metadata */ - TRUE, /* deprecated */ - TRUE, /* warn about windows visibility */ - FALSE, /* use \ as directory delimiter */ - FALSE, /* random skin on play */ - FALSE, /* use fontsets */ - TRUE, /* use bitmap font for mainwin */ - TRUE, /* use custom cursors */ - TRUE, /* close dialog on open */ - TRUE, /* close dialog on add */ - 0.0, /* equalizer preamp */ - {0.0, 0.0, 0.0, 0.0, 0.0, /* equalizer bands */ - 0.0, 0.0, 0.0, 0.0, 0.0}, - 1.2, /* GUI scale factor, hardcoded for testing purposes --majeru */ - NULL, /* skin */ - NULL, /* output plugin */ - NULL, /* file selector path */ - NULL, /* playlist path */ - NULL, /* playlist font */ - NULL, /* mainwin font */ - NULL, /* disabled input plugins */ - NULL, /* enabled general plugins */ - NULL, /* enabled visualization plugins */ - NULL, /* enabled effect plugins */ - NULL, /* enabled discovery plugins */ - NULL, /* equalizer preset default file */ - NULL, /* equalizer preset extension */ - NULL, /* URL history */ - 0, /* timer mode */ - VIS_ANALYZER, /* visualizer type */ - ANALYZER_NORMAL, /* analyzer mode */ - ANALYZER_BARS, /* analyzer type */ - SCOPE_DOT, /* scope mode */ - VOICEPRINT_NORMAL, /* voiceprint mode */ - VU_SMOOTH, /* VU mode */ - REFRESH_FULL, /* visualizer refresh rate */ - FALLOFF_FAST, /* analyzer fall off rate */ - FALLOFF_SLOW, /* peaks fall off rate */ - 0, /* playlist position */ - 2, /* pause between songs time */ - FALSE, /* pause between songs */ - FALSE, /* show window decorations */ - 8, /* mouse wheel scroll step */ - FALSE, /* playlist transparent */ - 2, /* 3rd preset (ARTIST - ALBUM - TITLE) */ - NULL, /* title format */ - FALSE, /* software volume control enabled */ - TRUE, /* UNUSED (XMMS compatibility mode) */ - TRUE, /* extra eq filtering */ - 3, /* scroll pl by */ - FALSE, /* resume playback on startup */ - -1, /* resume playback on startup time */ - TRUE, /* show seperators in pl */ - NULL, /* chardet_detector */ - NULL, /* chardet_fallback */ - 500, /* audio buffer size */ - TRUE, /* whether or not to postpone format detection on initial add */ - TRUE, /* show filepopup for tuple */ - NULL, /* words identifying covers */ - NULL, /* words that might not show up in cover names */ - FALSE, - 0, - NULL, /* default session uri base (non-NULL = custom session uri base) */ - 150, /* short side length of the picture in the filepopup */ - 20, /* delay until the filepopup comes up */ - FALSE, /* use filename.jpg for coverart */ - FALSE, /* use XMMS-style file selection */ - TRUE, /* use extension probing */ - 255, 255, 255, /* colorize r, g, b */ - FALSE, /* internal: whether or not to terminate */ - TRUE, /* whether show progress bar in filepopup or not */ - TRUE, /* close jtf dialog on jump */ - TRUE, /* use back and forth scroll */ - FALSE, /* use software volume control */ - .warn_about_broken_gtk_engines = TRUE, /* warn about broken gtk themes */ - FALSE, /* disable inline themes */ - TRUE, /* remember jtf text entry */ - 16, /* output bit depth */ - TRUE, /* enable replay gain */ - TRUE, /* enable clipping prevention */ - TRUE, /* track mode */ - FALSE, /* album mode */ - FALSE, /* enable adaptive scaler */ - 0.0, /* preamp */ - -9.0, /* default gain */ -#ifdef USE_SRC - FALSE, /* enable resampling */ - 48000, /* samplerate */ - SRC_SINC_BEST_QUALITY, /* default interpolation method */ -#endif - FALSE, /* bypass dsp */ -}; - -typedef struct bmp_cfg_boolent_t { - char const *be_vname; - gboolean *be_vloc; - gboolean be_wrt; -} bmp_cfg_boolent; - -typedef struct bmp_cfg_nument_t { - char const *ie_vname; - gint *ie_vloc; - gboolean ie_wrt; -} bmp_cfg_nument; - -typedef struct bmp_cfg_strent_t { - char const *se_vname; - char **se_vloc; - gboolean se_wrt; -} bmp_cfg_strent; - const gchar *bmp_titlestring_presets[] = { "${title}", "${?artist:${artist} - }${title}", @@ -295,162 +138,10 @@ }; const guint n_chardet_detector_presets = G_N_ELEMENTS(chardet_detector_presets); - -static bmp_cfg_boolent bmp_boolents[] = { - {"allow_multiple_instances", &cfg.allow_multiple_instances, TRUE}, - {"use_realtime", &cfg.use_realtime, TRUE}, - {"always_show_cb", &cfg.always_show_cb, TRUE}, - {"convert_underscore", &cfg.convert_underscore, TRUE}, - {"convert_twenty", &cfg.convert_twenty, TRUE}, - {"convert_slash", &cfg.convert_slash, TRUE }, - {"show_numbers_in_pl", &cfg.show_numbers_in_pl, TRUE}, - {"show_separator_in_pl", &cfg.show_separator_in_pl, TRUE}, - {"snap_windows", &cfg.snap_windows, TRUE}, - {"save_window_positions", &cfg.save_window_position, TRUE}, - {"dim_titlebar", &cfg.dim_titlebar, TRUE}, - {"get_info_on_load", &cfg.get_info_on_load, TRUE}, - {"get_info_on_demand", &cfg.get_info_on_demand, TRUE}, - {"eq_scaled_linked", &cfg.eq_scaled_linked, TRUE}, - {"no_playlist_advance", &cfg.no_playlist_advance, TRUE}, - {"refresh_file_list", &cfg.refresh_file_list, TRUE}, - {"sort_jump_to_file", &cfg.sort_jump_to_file, TRUE}, - {"use_pl_metadata", &cfg.use_pl_metadata, TRUE}, - {"warn_about_win_visibility", &cfg.warn_about_win_visibility, TRUE}, - {"use_backslash_as_dir_delimiter", &cfg.use_backslash_as_dir_delimiter, TRUE}, - {"player_shaded", &cfg.player_shaded, TRUE}, - {"player_visible", &cfg.player_visible, TRUE}, - {"shuffle", &cfg.shuffle, TRUE}, - {"repeat", &cfg.repeat, TRUE}, - {"scaled", &cfg.scaled, TRUE}, /* toggles custom scale */ - {"autoscroll_songname", &cfg.autoscroll, TRUE}, - {"stop_after_current_song", &cfg.stopaftersong, TRUE}, - {"playlist_shaded", &cfg.playlist_shaded, TRUE}, - {"playlist_visible", &cfg.playlist_visible, TRUE}, - {"use_fontsets", &cfg.use_fontsets, TRUE}, - {"mainwin_use_bitmapfont", &cfg.mainwin_use_bitmapfont, TRUE}, - {"equalizer_visible", &cfg.equalizer_visible, TRUE}, - {"equalizer_active", &cfg.equalizer_active, TRUE}, - {"equalizer_shaded", &cfg.equalizer_shaded, TRUE}, - {"equalizer_autoload", &cfg.equalizer_autoload, TRUE}, - {"easy_move", &cfg.easy_move, TRUE}, - {"use_eplugins", &cfg.use_eplugins, TRUE}, - {"always_on_top", &cfg.always_on_top, TRUE}, - {"sticky", &cfg.sticky, TRUE}, - {"random_skin_on_play", &cfg.random_skin_on_play, TRUE}, - {"pause_between_songs", &cfg.pause_between_songs, TRUE}, - {"show_wm_decorations", &cfg.show_wm_decorations, TRUE}, - {"eq_extra_filtering", &cfg.eq_extra_filtering, TRUE}, - {"analyzer_peaks", &cfg.analyzer_peaks, TRUE}, - {"custom_cursors", &cfg.custom_cursors, TRUE}, - {"close_dialog_open", &cfg.close_dialog_open, TRUE}, - {"close_dialog_add", &cfg.close_dialog_add, TRUE}, - {"resume_playback_on_startup", &cfg.resume_playback_on_startup, TRUE}, - {"playlist_detect", &cfg.playlist_detect, TRUE}, - {"show_filepopup_for_tuple", &cfg.show_filepopup_for_tuple, TRUE}, - {"recurse_for_cover", &cfg.recurse_for_cover, TRUE}, - {"use_file_cover", &cfg.use_file_cover, TRUE}, - {"use_xmms_style_fileselector", &cfg.use_xmms_style_fileselector, TRUE}, - {"use_extension_probing", &cfg.use_extension_probing, TRUE}, - {"filepopup_showprogressbar", &cfg.filepopup_showprogressbar, TRUE}, - {"close_jtf_dialog", &cfg.close_jtf_dialog, TRUE}, - {"twoway_scroll", &cfg.twoway_scroll, TRUE}, - {"software_volume_control", &cfg.software_volume_control, TRUE}, - {"warn_about_broken_gtk_engines", &cfg.warn_about_broken_gtk_engines, TRUE}, - {"disable_inline_gtk", &cfg.disable_inline_gtk, TRUE}, - {"remember_jtf_entry", &cfg.remember_jtf_entry, TRUE}, - {"enable_replay_gain", &cfg.enable_replay_gain, TRUE}, - {"enable_clipping_prevention", &cfg.enable_clipping_prevention, TRUE}, - {"replay_gain_track", &cfg.replay_gain_track, TRUE}, - {"replay_gain_album", &cfg.replay_gain_album, TRUE}, - {"enable_adaptive_scaler", &cfg.enable_adaptive_scaler, TRUE}, -#ifdef USE_SRC - {"enable_src", &cfg.enable_src, TRUE}, -#endif - {"bypass_dsp", &cfg.bypass_dsp, TRUE}, -}; - -static gint ncfgbent = G_N_ELEMENTS(bmp_boolents); - -static bmp_cfg_nument bmp_numents[] = { - {"player_x", &cfg.player_x, TRUE}, - {"player_y", &cfg.player_y, TRUE}, - {"timer_mode", &cfg.timer_mode, TRUE}, - {"vis_type", &cfg.vis_type, TRUE}, - {"analyzer_mode", &cfg.analyzer_mode, TRUE}, - {"analyzer_type", &cfg.analyzer_type, TRUE}, - {"scope_mode", &cfg.scope_mode, TRUE}, - {"vu_mode", &cfg.vu_mode, TRUE}, - {"voiceprint_mode", &cfg.voiceprint_mode, TRUE}, - {"vis_refresh_rate", &cfg.vis_refresh, TRUE}, - {"analyzer_falloff", &cfg.analyzer_falloff, TRUE}, - {"peaks_falloff", &cfg.peaks_falloff, TRUE}, - {"playlist_x", &cfg.playlist_x, TRUE}, - {"playlist_y", &cfg.playlist_y, TRUE}, - {"playlist_width", &cfg.playlist_width, TRUE}, - {"playlist_height", &cfg.playlist_height, TRUE}, - {"playlist_position", &cfg.playlist_position, TRUE}, - {"equalizer_x", &cfg.equalizer_x, TRUE}, - {"equalizer_y", &cfg.equalizer_y, TRUE}, - {"snap_distance", &cfg.snap_distance, TRUE}, - {"pause_between_songs_time", &cfg.pause_between_songs_time, TRUE}, - {"mouse_wheel_change", &cfg.mouse_change, TRUE}, - {"scroll_pl_by", &cfg.scroll_pl_by, TRUE}, - {"titlestring_preset", &cfg.titlestring_preset, TRUE}, - {"resume_playback_on_startup_time", &cfg.resume_playback_on_startup_time, TRUE}, - {"output_buffer_size", &cfg.output_buffer_size, TRUE}, - {"recurse_for_cover_depth", &cfg.recurse_for_cover_depth, TRUE}, - {"filepopup_pixelsize", &cfg.filepopup_pixelsize, TRUE}, - {"filepopup_delay", &cfg.filepopup_delay, TRUE}, - {"colorize_r", &cfg.colorize_r, TRUE}, - {"colorize_g", &cfg.colorize_g, TRUE}, - {"colorize_b", &cfg.colorize_b, TRUE}, - {"output_bit_depth", &cfg.output_bit_depth, TRUE}, -#ifdef USE_SRC - {"src_rate", &cfg.src_rate, TRUE}, - {"src_type", &cfg.src_type, TRUE}, -#endif -}; - -static gint ncfgient = G_N_ELEMENTS(bmp_numents); - -static bmp_cfg_strent bmp_strents[] = { - {"playlist_font", &cfg.playlist_font, TRUE}, - {"mainwin_font", &cfg.mainwin_font, TRUE}, - {"eqpreset_default_file", &cfg.eqpreset_default_file, TRUE}, - {"eqpreset_extension", &cfg.eqpreset_extension, TRUE}, - {"skin", &cfg.skin, FALSE}, - {"output_plugin", &cfg.outputplugin, FALSE}, - {"disabled_iplugins", &cfg.disabled_iplugins, TRUE}, - {"enabled_gplugins", &cfg.enabled_gplugins, FALSE}, - {"enabled_vplugins", &cfg.enabled_vplugins, FALSE}, - {"enabled_eplugins", &cfg.enabled_eplugins, FALSE}, - {"filesel_path", &cfg.filesel_path, FALSE}, - {"playlist_path", &cfg.playlist_path, FALSE}, - {"generic_title_format", &cfg.gentitle_format, TRUE}, - {"chardet_detector", &cfg.chardet_detector, TRUE}, - {"chardet_fallback", &cfg.chardet_fallback, TRUE}, - {"cover_name_include", &cfg.cover_name_include, TRUE}, - {"cover_name_exclude", &cfg.cover_name_exclude, TRUE}, - {"session_uri_base", &cfg.session_uri_base, TRUE} -}; - -static gint ncfgsent = G_N_ELEMENTS(bmp_strents); - gchar *bmp_paths[BMP_PATH_COUNT] = {}; GList *dock_window_list = NULL; -/* XXX: case-sensitivity is bad for lazy nenolods. :( -nenolod */ -static gchar *pl_candidates[] = { - PLUGIN_FILENAME("ALSA"), - PLUGIN_FILENAME("coreaudio"), - PLUGIN_FILENAME("OSS"), - PLUGIN_FILENAME("sun"), - PLUGIN_FILENAME("ESD"), - PLUGIN_FILENAME("pulse_audio"), - PLUGIN_FILENAME("disk_writer"), - NULL -}; GCond *cond_scan; GMutex *mutex_scan; @@ -506,16 +197,6 @@ return cfg.gentitle_format; } -void -make_directory(const gchar * path, mode_t mode) -{ - if (g_mkdir_with_parents(path, mode) == 0) - return; - - g_printerr(_("Could not create directory (%s): %s\n"), path, - g_strerror(errno)); -} - static void bmp_make_user_dir(void) { @@ -596,415 +277,6 @@ g_atexit(bmp_free_paths); } -void -bmp_config_free(void) -{ - gint i; - for (i = 0; i < ncfgsent; ++i) { - if ( *(bmp_strents[i].se_vloc) != NULL ) - { - g_free( *(bmp_strents[i].se_vloc) ); - *(bmp_strents[i].se_vloc) = NULL; - } - } -} - -void -bmp_config_load(void) -{ - ConfigDb *db; - gint i, length; - - memcpy(&cfg, &bmp_default_config, sizeof(BmpConfig)); - - db = cfg_db_open(); - for (i = 0; i < ncfgbent; ++i) { - cfg_db_get_bool(db, NULL, - bmp_boolents[i].be_vname, - bmp_boolents[i].be_vloc); - } - - for (i = 0; i < ncfgient; ++i) { - cfg_db_get_int(db, NULL, - bmp_numents[i].ie_vname, - bmp_numents[i].ie_vloc); - } - - for (i = 0; i < ncfgsent; ++i) { - cfg_db_get_string(db, NULL, - bmp_strents[i].se_vname, - bmp_strents[i].se_vloc); - } - - /* Preset */ - cfg_db_get_float(db, NULL, "equalizer_preamp", &cfg.equalizer_preamp); - for (i = 0; i < 10; i++) { - gchar eqtext[18]; - - g_snprintf(eqtext, sizeof(eqtext), "equalizer_band%d", i); - cfg_db_get_float(db, NULL, eqtext, &cfg.equalizer_bands[i]); - } - - /* custom scale factor */ - cfg_db_get_float(db, NULL, "scale_factor", &cfg.scale_factor); - - /* History */ - if (cfg_db_get_int(db, NULL, "url_history_length", &length)) { - for (i = 1; i <= length; i++) { - gchar str[19], *tmp; - - g_snprintf(str, sizeof(str), "url_history%d", i); - if (cfg_db_get_string(db, NULL, str, &tmp)) - cfg.url_history = g_list_append(cfg.url_history, tmp); - } - } - - /* RG settings */ - cfg_db_get_float(db, NULL, "replay_gain_preamp", &cfg.replay_gain_preamp); - cfg_db_get_float(db, NULL, "default_gain", &cfg.default_gain); - - cfg_db_close(db); - - - if (cfg.playlist_font && strlen(cfg.playlist_font) == 0) { - g_free(cfg.playlist_font); - cfg.playlist_font = NULL; - } - - if (cfg.mainwin_font && strlen(cfg.mainwin_font) == 0) { - g_free(cfg.mainwin_font); - cfg.mainwin_font = NULL; - } - - if (!cfg.playlist_font) - cfg.playlist_font = g_strdup(PLAYLISTWIN_DEFAULT_FONT); - - if (!cfg.mainwin_font) - cfg.mainwin_font = g_strdup(MAINWIN_DEFAULT_FONT); - - if (!cfg.gentitle_format) - cfg.gentitle_format = g_strdup("${?artist:${artist} - }${?album:${album} - }${title}"); - - if (!cfg.outputplugin) { - gint iter; - gchar *pl_path = g_build_filename(PLUGIN_DIR, plugin_dir_list[0], NULL); - - for (iter = 0; pl_candidates[iter] != NULL && cfg.outputplugin == NULL; iter++) - { - cfg.outputplugin = find_file_recursively(pl_path, pl_candidates[iter]); - } - - g_free(pl_path); - } - - if (!cfg.eqpreset_default_file) - cfg.eqpreset_default_file = g_strdup(EQUALIZER_DEFAULT_DIR_PRESET); - - if (!cfg.eqpreset_extension) - cfg.eqpreset_extension = g_strdup(EQUALIZER_DEFAULT_PRESET_EXT); - - if (!cfg.chardet_detector) - cfg.chardet_detector = g_strdup(""); - - if (!cfg.chardet_fallback) - cfg.chardet_fallback = g_strdup(""); - - if (!cfg.cover_name_include) - cfg.cover_name_include = g_strdup(""); - - if (!cfg.cover_name_exclude) - cfg.cover_name_exclude = g_strdup("back"); - - if (!cfg.session_uri_base) - cfg.session_uri_base = g_strdup(""); - - /* at least one of these should be true */ - if ((!cfg.get_info_on_demand) && (!cfg.get_info_on_load)) - cfg.get_info_on_demand = TRUE; - - /* playlist width and height can't be smaller than minimum */ - cfg.playlist_width = MAX(cfg.playlist_width, PLAYLISTWIN_MIN_WIDTH); - cfg.playlist_height = MAX(cfg.playlist_height, PLAYLISTWIN_MIN_HEIGHT); -} - -static gboolean -save_extra_playlist(const gchar * path, const gchar * basename, - gpointer savedlist) -{ - GList *playlists, *iter; - GList **saved; - Playlist *playlist; - int found; - gchar *filename; - - playlists = playlist_get_playlists(); - saved = (GList **) savedlist; - - found = 0; - for (iter = playlists; iter; iter = iter->next) { - playlist = (Playlist *) iter->data; - if (g_list_find(*saved, playlist)) continue; - filename = playlist_filename_get(playlist); - if (!filename) continue; - if (strcmp(filename, path) == 0) { - /* Save playlist */ - playlist_save(playlist, path); - *saved = g_list_prepend(*saved, playlist); - found = 1; - g_free(filename); - break; - } - g_free(filename); - } - - if(!found) { - /* Remove playlist */ - unlink(path); - } - - return FALSE; /* process other playlists */ -} - -static void -save_other_playlists(GList *saved) -{ - GList *playlists, *iter; - Playlist *playlist; - gchar *pos, *ext, *basename, *filename, *newbasename; - int i, num, isdigits; - - playlists = playlist_get_playlists(); - for(iter = playlists; iter; iter = iter->next) { - playlist = (Playlist *) iter->data; - if (g_list_find(saved, playlist)) continue; - filename = playlist_filename_get(playlist); - if (!filename || !filename[0] - || g_file_test(filename, G_FILE_TEST_IS_DIR)) { - /* default basename */ -#ifdef HAVE_XSPF_PLAYLIST - basename = g_strdup("playlist_01.xspf"); -#else - basename = g_strdup("playlist_01.m3u"); -#endif - } else { - basename = g_path_get_basename(filename); - } - g_free(filename); - if ((pos = strrchr(basename, '.'))) { - *pos = '\0'; - } -#ifdef HAVE_XSPF_PLAYLIST - ext = ".xspf"; -#else - ext = ".m3u"; -#endif - num = -1; - if ((pos = strrchr(basename, '_'))) { - isdigits = 0; - for (i=1; pos[i]; i++) { - if (!g_ascii_isdigit(pos[i])) { - isdigits = 0; - break; - } - isdigits = 1; - } - if (isdigits) { - num = atoi(pos+1) + 1; - *pos = '\0'; - } - } - /* attempt to generate unique filename */ - filename = NULL; - do { - g_free(filename); - if (num < 0) { - /* try saving without number first */ - newbasename = g_strdup_printf("%s%s", basename, ext); - num = 1; - } else { - newbasename = g_strdup_printf("%s_%02d%s", basename, num, ext); - num++; - if (num < 0) { - g_warning("Playlist number in filename overflowed." - " Not saving playlist.\n"); - goto cleanup; - } - } - filename = g_build_filename(bmp_paths[BMP_PATH_PLAYLISTS_DIR], - newbasename, NULL); - g_free(newbasename); - } while (g_file_test(filename, G_FILE_TEST_EXISTS)); - - playlist_save(playlist, filename); -cleanup: - g_free(filename); - g_free(basename); - } -} - -void -bmp_config_save(void) -{ - GList *node; - gchar *str; - gint i, cur_pb_time; - ConfigDb *db; - GList *saved; - Playlist *playlist = playlist_get_active(); - - cfg.disabled_iplugins = input_stringify_disabled_list(); - - - db = cfg_db_open(); - - for (i = 0; i < ncfgbent; ++i) - if (bmp_boolents[i].be_wrt) - cfg_db_set_bool(db, NULL, - bmp_boolents[i].be_vname, - *bmp_boolents[i].be_vloc); - - for (i = 0; i < ncfgient; ++i) - if (bmp_numents[i].ie_wrt) - cfg_db_set_int(db, NULL, - bmp_numents[i].ie_vname, - *bmp_numents[i].ie_vloc); - - /* This is a bit lame .. it'll end up being written twice, - * could do with being done a bit neater. -larne */ - cfg_db_set_int(db, NULL, "playlist_position", - playlist_get_position(playlist)); - - /* FIXME: we're looking up SkinnedWindow::x &c ourselves here. - * this isn't exactly right. -nenolod - */ - if ( SKINNED_WINDOW(playlistwin)->x != -1 && - SKINNED_WINDOW(playlistwin)->y != -1 ) - { - cfg_db_set_int(db, NULL, "playlist_x", - SKINNED_WINDOW(playlistwin)->x); - cfg_db_set_int(db, NULL, "playlist_y", - SKINNED_WINDOW(playlistwin)->y); - } - - if ( SKINNED_WINDOW(mainwin)->x != -1 && - SKINNED_WINDOW(mainwin)->y != -1 ) - { - cfg_db_set_int(db, NULL, "player_x", - SKINNED_WINDOW(mainwin)->x); - cfg_db_set_int(db, NULL, "player_y", - SKINNED_WINDOW(mainwin)->y); - } - - if ( SKINNED_WINDOW(equalizerwin)->x != -1 && - SKINNED_WINDOW(equalizerwin)->y != -1 ) - { - cfg_db_set_int(db, NULL, "equalizer_x", - SKINNED_WINDOW(equalizerwin)->x); - cfg_db_set_int(db, NULL, "equalizer_y", - SKINNED_WINDOW(equalizerwin)->y); - } - - cfg_db_set_bool(db, NULL, "mainwin_use_bitmapfont", - cfg.mainwin_use_bitmapfont); - - for (i = 0; i < ncfgsent; ++i) { - if (bmp_strents[i].se_wrt) - cfg_db_set_string(db, NULL, - bmp_strents[i].se_vname, - *bmp_strents[i].se_vloc); - } - - cfg_db_set_float(db, NULL, "equalizer_preamp", cfg.equalizer_preamp); - - /* RG settings */ - cfg_db_set_float(db, NULL, "replay_gain_preamp", cfg.replay_gain_preamp); - cfg_db_set_float(db, NULL, "default_gain", cfg.default_gain); - - for (i = 0; i < 10; i++) { - str = g_strdup_printf("equalizer_band%d", i); - cfg_db_set_float(db, NULL, str, cfg.equalizer_bands[i]); - g_free(str); - } - - cfg_db_set_float(db, NULL, "scale_factor", cfg.scale_factor); - - if (bmp_active_skin != NULL) - { - if (bmp_active_skin->path) - cfg_db_set_string(db, NULL, "skin", bmp_active_skin->path); - else - cfg_db_unset_key(db, NULL, "skin"); - } - - if (get_current_output_plugin()) - cfg_db_set_string(db, NULL, "output_plugin", - get_current_output_plugin()->filename); - else - cfg_db_unset_key(db, NULL, "output_plugin"); - - str = general_stringify_enabled_list(); - if (str) { - cfg_db_set_string(db, NULL, "enabled_gplugins", str); - g_free(str); - } - else - cfg_db_unset_key(db, NULL, "enabled_gplugins"); - - str = vis_stringify_enabled_list(); - if (str) { - cfg_db_set_string(db, NULL, "enabled_vplugins", str); - g_free(str); - } - else - cfg_db_unset_key(db, NULL, "enabled_vplugins"); - - str = effect_stringify_enabled_list(); - if (str) { - cfg_db_set_string(db, NULL, "enabled_eplugins", str); - g_free(str); - } - else - cfg_db_unset_key(db, NULL, "enabled_eplugins"); - - if (cfg.filesel_path) - cfg_db_set_string(db, NULL, "filesel_path", cfg.filesel_path); - - if (cfg.playlist_path) - cfg_db_set_string(db, NULL, "playlist_path", cfg.playlist_path); - - cfg_db_set_int(db, NULL, "url_history_length", - g_list_length(cfg.url_history)); - - for (node = cfg.url_history, i = 1; node; node = g_list_next(node), i++) { - str = g_strdup_printf("url_history%d", i); - cfg_db_set_string(db, NULL, str, node->data); - g_free(str); - } - - if (playback_get_playing()) { - cur_pb_time = playback_get_time(); - } else - cur_pb_time = -1; - cfg.resume_playback_on_startup_time = cur_pb_time; - cfg_db_set_int(db, NULL, "resume_playback_on_startup_time", - cfg.resume_playback_on_startup_time); - - cfg_db_close(db); - - playlist_save(playlist, bmp_paths[BMP_PATH_PLAYLIST_FILE]); - - /* Save extra playlists that were loaded from PLAYLISTS_DIR */ - saved = NULL; - saved = g_list_prepend(saved, playlist); /* don't save default again */ - if(!dir_foreach(bmp_paths[BMP_PATH_PLAYLISTS_DIR], save_extra_playlist, - &saved, NULL)) { - g_warning("Could not save extra playlists\n"); - } - - /* Save other playlists to PLAYLISTS_DIR */ - save_other_playlists(saved); - g_list_free(saved); -} static void bmp_set_default_icon(void)