Mercurial > mplayer.hg
annotate gui/cfg.c @ 34592:ddf8f24a93a6
Show option save error in message box.
The user probably won't notice otherwise.
author | ib |
---|---|
date | Fri, 10 Feb 2012 14:13:14 +0000 |
parents | 73348cfa22e2 |
children | 83f7a2f8af3b |
rev | line source |
---|---|
26458 | 1 /* |
2 * This file is part of MPlayer. | |
3 * | |
4 * MPlayer is free software; you can redistribute it and/or modify | |
5 * it under the terms of the GNU General Public License as published by | |
6 * the Free Software Foundation; either version 2 of the License, or | |
7 * (at your option) any later version. | |
8 * | |
9 * MPlayer is distributed in the hope that it will be useful, | |
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 * GNU General Public License for more details. | |
13 * | |
14 * You should have received a copy of the GNU General Public License along | |
15 * with MPlayer; if not, write to the Free Software Foundation, Inc., | |
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | |
17 */ | |
23077 | 18 |
34562 | 19 #include <stdio.h> |
23077 | 20 #include <stdlib.h> |
21 #include <string.h> | |
22 | |
33179 | 23 #include "cfg.h" |
24 #include "interface.h" | |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33737
diff
changeset
|
25 #include "util/list.h" |
33737 | 26 #include "util/string.h" |
33179 | 27 |
23077 | 28 #include "config.h" |
29 #include "help_mp.h" | |
34586 | 30 #include "libavutil/common.h" |
30653
3d23e24c5c60
Declare externally used variables from vd.c as extern in vd.h.
diego
parents:
30633
diff
changeset
|
31 #include "libmpcodecs/vd.h" |
34562 | 32 #include "libmpdemux/demuxer.h" |
23077 | 33 #include "libvo/video_out.h" |
31385
f2aebe1309b2
Declare stop_xscreensaver extern in x11_common.h instead of all over the code.
diego
parents:
30901
diff
changeset
|
34 #include "libvo/x11_common.h" |
33179 | 35 #include "mixer.h" |
33768 | 36 #include "mp_core.h" |
33179 | 37 #include "mp_msg.h" |
38 #include "mpcommon.h" | |
39 #include "mplayer.h" | |
40 #include "parser-cfg.h" | |
41 #include "path.h" | |
34562 | 42 #include "stream/stream.h" |
43 #include "sub/ass_mp.h" | |
32981 | 44 #include "sub/font_load.h" |
33179 | 45 #include "sub/sub.h" |
23077 | 46 |
34576 | 47 #define GUI_CONFIGURATION "gui.conf" |
48 #define GUI_HISTORY "gui.history" | |
49 #define GUI_PLAYLIST "gui.pl" | |
50 #define GUI_URLLIST "gui.url" | |
51 | |
33265 | 52 m_config_t *gui_conf; |
53 | |
33220 | 54 int gtkCacheOn; |
33180 | 55 int gtkCacheSize = 2048; |
56 | |
33220 | 57 int gtkVfPP; |
23077 | 58 |
33249 | 59 int gtkVfLAVC; |
33180 | 60 char *gtkDXR3Device; |
61 | |
33220 | 62 int gtkAutoSyncOn; |
63 int gtkAutoSync; | |
23077 | 64 |
33220 | 65 int gtkAONorm; |
66 int gtkAOSurround; | |
67 int gtkAOExtraStereo; | |
33221 | 68 float gtkAOExtraStereoMul = 1.0f; |
33180 | 69 |
33179 | 70 char *gtkAOALSAMixer; |
71 char *gtkAOALSAMixerChannel; | |
72 char *gtkAOALSADevice; | |
33180 | 73 |
74 char *gtkAOOSSMixer; | |
75 char *gtkAOOSSMixerChannel; | |
76 char *gtkAOOSSDevice; | |
77 | |
33179 | 78 char *gtkAOESDDevice; |
23077 | 79 |
33180 | 80 char *gtkAOSDLDriver; |
23077 | 81 |
33220 | 82 int gtkEnableAudioEqualizer; |
33747 | 83 float gtkEquChannels[6][10]; |
23077 | 84 |
33220 | 85 int gtkSubDumpMPSub; |
86 int gtkSubDumpSrt; | |
23077 | 87 |
33180 | 88 gtkASS_t gtkASS; |
89 | |
33220 | 90 int gtkEnablePlayBar = 1; |
91 int gtkLoadFullscreen; | |
33179 | 92 int gtkShowVideoWindow = 1; |
23077 | 93 |
33179 | 94 int gui_save_pos = 1; |
33218
f0c2a62e3e89
Position windows initially at coordinates given in skin file.
ib
parents:
33180
diff
changeset
|
95 int gui_main_pos_x = -3; |
f0c2a62e3e89
Position windows initially at coordinates given in skin file.
ib
parents:
33180
diff
changeset
|
96 int gui_main_pos_y = -3; |
f0c2a62e3e89
Position windows initially at coordinates given in skin file.
ib
parents:
33180
diff
changeset
|
97 int gui_sub_pos_x = -3; |
f0c2a62e3e89
Position windows initially at coordinates given in skin file.
ib
parents:
33180
diff
changeset
|
98 int gui_sub_pos_y = -3; |
23077 | 99 |
33747 | 100 int guiWinID = -1; |
101 | |
102 char *skinName; | |
103 | |
33751
c28c967e40e9
Replace numeric constant fsPersistant_MaxPos for fsHistory array size.
ib
parents:
33750
diff
changeset
|
104 char *fsHistory[5]; |
33750
8b5898908212
Remove variable holding history of selected files from interface.[ch].
ib
parents:
33748
diff
changeset
|
105 |
33179 | 106 static const m_option_t gui_opts[] = { |
33478 | 107 { "cache", >kCacheOn, CONF_TYPE_FLAG, 0, 0, 1, NULL }, |
108 { "cache_size", >kCacheSize, CONF_TYPE_INT, CONF_RANGE, 32, 1048576, NULL }, | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28051
diff
changeset
|
109 |
33478 | 110 { "vf_pp", >kVfPP, CONF_TYPE_FLAG, 0, 0, 1, NULL }, |
33223 | 111 |
27370
14c5017f40d2
Change a bunch of video/audio-output-specific preprocessor directives from
diego
parents:
27359
diff
changeset
|
112 #ifdef CONFIG_DXR3 |
33478 | 113 { "vf_lavc", >kVfLAVC, CONF_TYPE_FLAG, 0, 0, 1, NULL }, |
114 { "vo_dxr3_device", >kDXR3Device, CONF_TYPE_STRING, 0, 0, 0, NULL }, | |
23077 | 115 #endif |
116 | |
33478 | 117 { "autosync", >kAutoSyncOn, CONF_TYPE_FLAG, 0, 0, 1, NULL }, |
118 { "autosync_size", >kAutoSync, CONF_TYPE_INT, CONF_RANGE, 0, 10000, NULL }, | |
23077 | 119 |
33478 | 120 { "ao_volnorm", >kAONorm, CONF_TYPE_FLAG, 0, 0, 1, NULL }, |
121 { "ao_surround", >kAOSurround, CONF_TYPE_FLAG, 0, 0, 1, NULL }, | |
122 { "ao_extra_stereo", >kAOExtraStereo, CONF_TYPE_FLAG, 0, 0, 1, NULL }, | |
123 { "ao_extra_stereo_coefficient", >kAOExtraStereoMul, CONF_TYPE_FLOAT, CONF_RANGE, -10.0, 10.0, NULL }, | |
33223 | 124 |
27390
9d95dc936e66
Introduce CONFIG_ALSA preprocessor directive for ALSA 0.9 and 1.x.
diego
parents:
27387
diff
changeset
|
125 #ifdef CONFIG_ALSA |
33478 | 126 { "ao_alsa_mixer", >kAOALSAMixer, CONF_TYPE_STRING, 0, 0, 0, NULL }, |
127 { "ao_alsa_mixer_channel", >kAOALSAMixerChannel, CONF_TYPE_STRING, 0, 0, 0, NULL }, | |
128 { "ao_alsa_device", >kAOALSADevice, CONF_TYPE_STRING, 0, 0, 0, NULL }, | |
23077 | 129 #endif |
33223 | 130 |
131 #ifdef CONFIG_OSS_AUDIO | |
33478 | 132 { "ao_oss_mixer", >kAOOSSMixer, CONF_TYPE_STRING, 0, 0, 0, NULL }, |
133 { "ao_oss_mixer_channel", >kAOOSSMixerChannel, CONF_TYPE_STRING, 0, 0, 0, NULL }, | |
134 { "ao_oss_device", >kAOOSSDevice, CONF_TYPE_STRING, 0, 0, 0, NULL }, | |
23077 | 135 #endif |
33223 | 136 |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
26458
diff
changeset
|
137 #ifdef CONFIG_ESD |
33478 | 138 { "ao_esd_device", >kAOESDDevice, CONF_TYPE_STRING, 0, 0, 0, NULL }, |
23077 | 139 #endif |
140 | |
33223 | 141 #ifdef CONFIG_SDL |
33478 | 142 { "ao_sdl_subdriver", >kAOSDLDriver, CONF_TYPE_STRING, 0, 0, 0, NULL }, |
23077 | 143 #endif |
144 | |
33478 | 145 { "enable_audio_equ", >kEnableAudioEqualizer, CONF_TYPE_FLAG, 0, 0, 1, NULL }, |
23077 | 146 |
33478 | 147 { "equ_channel_1", >kEquChannel1, CONF_TYPE_STRING, 0, 0, 0, NULL }, |
148 { "equ_channel_2", >kEquChannel2, CONF_TYPE_STRING, 0, 0, 0, NULL }, | |
149 { "equ_channel_3", >kEquChannel3, CONF_TYPE_STRING, 0, 0, 0, NULL }, | |
150 { "equ_channel_4", >kEquChannel4, CONF_TYPE_STRING, 0, 0, 0, NULL }, | |
151 { "equ_channel_5", >kEquChannel5, CONF_TYPE_STRING, 0, 0, 0, NULL }, | |
152 { "equ_channel_6", >kEquChannel6, CONF_TYPE_STRING, 0, 0, 0, NULL }, | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28051
diff
changeset
|
153 |
33223 | 154 #define audio_equ_row(i, j) \ |
33478 | 155 { "equ_band_" # i # j, >kEquChannels[i][j], CONF_TYPE_FLOAT, CONF_RANGE, -15.0, 15.0, NULL } |
33289 | 156 audio_equ_row(0, 0), audio_equ_row(0, 1), audio_equ_row(0, 2), audio_equ_row(0, 3), audio_equ_row(0, 4), audio_equ_row(0, 5), audio_equ_row(0, 6), audio_equ_row(0, 7), audio_equ_row(0, 8), audio_equ_row(0, 9), |
157 audio_equ_row(1, 0), audio_equ_row(1, 1), audio_equ_row(1, 2), audio_equ_row(1, 3), audio_equ_row(1, 4), audio_equ_row(1, 5), audio_equ_row(1, 6), audio_equ_row(1, 7), audio_equ_row(1, 8), audio_equ_row(1, 9), | |
158 audio_equ_row(2, 0), audio_equ_row(2, 1), audio_equ_row(2, 2), audio_equ_row(2, 3), audio_equ_row(2, 4), audio_equ_row(2, 5), audio_equ_row(2, 6), audio_equ_row(2, 7), audio_equ_row(2, 8), audio_equ_row(2, 9), | |
159 audio_equ_row(3, 0), audio_equ_row(3, 1), audio_equ_row(3, 2), audio_equ_row(3, 3), audio_equ_row(3, 4), audio_equ_row(3, 5), audio_equ_row(3, 6), audio_equ_row(3, 7), audio_equ_row(3, 8), audio_equ_row(3, 9), | |
160 audio_equ_row(4, 0), audio_equ_row(4, 1), audio_equ_row(4, 2), audio_equ_row(4, 3), audio_equ_row(4, 4), audio_equ_row(4, 5), audio_equ_row(4, 6), audio_equ_row(4, 7), audio_equ_row(4, 8), audio_equ_row(4, 9), | |
161 audio_equ_row(5, 0), audio_equ_row(5, 1), audio_equ_row(5, 2), audio_equ_row(5, 3), audio_equ_row(5, 4), audio_equ_row(5, 5), audio_equ_row(5, 6), audio_equ_row(5, 7), audio_equ_row(5, 8), audio_equ_row(5, 9), | |
23077 | 162 #undef audio_equ_row |
163 | |
33478 | 164 { "playbar", >kEnablePlayBar, CONF_TYPE_FLAG, 0, 0, 1, NULL }, |
165 { "load_fullscreen", >kLoadFullscreen, CONF_TYPE_FLAG, 0, 0, 1, NULL }, | |
166 { "show_videowin", >kShowVideoWindow, CONF_TYPE_FLAG, 0, 0, 1, NULL }, | |
33223 | 167 |
33478 | 168 { "gui_save_pos", &gui_save_pos, CONF_TYPE_FLAG, 0, 0, 1, NULL }, |
169 { "gui_main_pos_x", &gui_main_pos_x, CONF_TYPE_INT, 0, 0, 0, NULL }, | |
170 { "gui_main_pos_y", &gui_main_pos_y, CONF_TYPE_INT, 0, 0, 0, NULL }, | |
171 { "gui_video_out_pos_x", &gui_sub_pos_x, CONF_TYPE_INT, 0, 0, 0, NULL }, | |
172 { "gui_video_out_pos_y", &gui_sub_pos_y, CONF_TYPE_INT, 0, 0, 0, NULL }, | |
33223 | 173 |
33477 | 174 { "idle", &player_idle_mode, CONF_TYPE_FLAG, CONF_GLOBAL, 0, 1, NULL }, |
175 | |
33223 | 176 // NOTE TO MYSELF: Do we really need all/any non-gtkOptions, i.e. override mplayer options? |
177 | |
33478 | 178 { "gui_skin", &skinName, CONF_TYPE_STRING, 0, 0, 0, NULL }, |
33223 | 179 |
33478 | 180 { "stopxscreensaver", &stop_xscreensaver, CONF_TYPE_FLAG, 0, 0, 1, NULL }, |
33223 | 181 |
33478 | 182 { "cdrom_device", &cdrom_device, CONF_TYPE_STRING, 0, 0, 0, NULL }, |
183 { "dvd_device", &dvd_device, CONF_TYPE_STRING, 0, 0, 0, NULL }, | |
33223 | 184 |
33478 | 185 { "osd_level", &osd_level, CONF_TYPE_INT, CONF_RANGE, 0, 3, NULL }, |
33223 | 186 |
33478 | 187 { "vo_driver", &video_driver_list, CONF_TYPE_STRING_LIST, 0, 0, 0, NULL }, |
188 { "v_vfm", &video_fm_list, CONF_TYPE_STRING_LIST, 0, 0, 0, NULL }, | |
33223 | 189 |
33478 | 190 { "vf_autoq", &auto_quality, CONF_TYPE_INT, CONF_RANGE, 0, 100, NULL }, |
191 { "vo_direct_render", &vo_directrendering, CONF_TYPE_FLAG, 0, 0, 1, NULL }, | |
192 { "vo_doublebuffering", &vo_doublebuffering, CONF_TYPE_FLAG, 0, 0, 1, NULL }, | |
193 { "vo_panscan", &vo_panscan, CONF_TYPE_FLOAT, CONF_RANGE, 0.0, 1.0, NULL }, | |
33223 | 194 |
33478 | 195 { "v_flip", &flip, CONF_TYPE_INT, CONF_RANGE, -1, 1, NULL }, |
196 { "v_framedrop", &frame_dropping, CONF_TYPE_INT, CONF_RANGE, 0, 2, NULL }, | |
197 { "v_idx", &index_mode, CONF_TYPE_INT, CONF_RANGE, -1, 2, NULL }, | |
198 { "v_ni", &force_ni, CONF_TYPE_FLAG, 0, 0, 1, NULL }, | |
33223 | 199 |
33478 | 200 { "ao_driver", &audio_driver_list, CONF_TYPE_STRING_LIST, 0, 0, 0, NULL }, |
201 { "a_afm", &audio_fm_list, CONF_TYPE_STRING_LIST, 0, 0, 0, NULL }, | |
33223 | 202 |
33478 | 203 { "softvol", &soft_vol, CONF_TYPE_FLAG, 0, 0, 1, NULL }, |
33223 | 204 |
33478 | 205 { "sub_auto_load", &sub_auto, CONF_TYPE_FLAG, 0, 0, 1, NULL }, |
33223 | 206 #ifdef CONFIG_ICONV |
33478 | 207 { "sub_cp", &sub_cp, CONF_TYPE_STRING, 0, 0, 0, NULL }, |
33223 | 208 #endif |
33478 | 209 { "sub_overlap", &suboverlap_enabled, CONF_TYPE_FLAG, 0, 0, 0, NULL }, |
210 { "sub_pos", &sub_pos, CONF_TYPE_INT, CONF_RANGE, 0, 200, NULL }, | |
211 { "sub_unicode", &sub_unicode, CONF_TYPE_FLAG, 0, 0, 1, NULL }, | |
33223 | 212 |
33478 | 213 { "font_factor", &font_factor, CONF_TYPE_FLOAT, CONF_RANGE, 0.0, 10.0, NULL }, |
214 { "font_name", &font_name, CONF_TYPE_STRING, 0, 0, 0, NULL }, | |
33223 | 215 |
216 #ifdef CONFIG_FREETYPE | |
33478 | 217 { "font_encoding", &subtitle_font_encoding, CONF_TYPE_STRING, 0, 0, 0, NULL }, |
218 { "font_text_scale", &text_font_scale_factor, CONF_TYPE_FLOAT, CONF_RANGE, 0.0, 100.0, NULL }, | |
219 { "font_osd_scale", &osd_font_scale_factor, CONF_TYPE_FLOAT, CONF_RANGE, 0.0, 100.0, NULL }, | |
220 { "font_blur", &subtitle_font_radius, CONF_TYPE_FLOAT, CONF_RANGE, 0.0, 8.0, NULL }, | |
221 { "font_outline", &subtitle_font_thickness, CONF_TYPE_FLOAT, CONF_RANGE, 0.0, 8.0, NULL }, | |
222 { "font_autoscale", &subtitle_autoscale, CONF_TYPE_INT, CONF_RANGE, 0, 3, NULL }, | |
33223 | 223 #endif |
224 | |
225 #ifdef CONFIG_ASS | |
33478 | 226 { "ass_enabled", &ass_enabled, CONF_TYPE_FLAG, 0, 0, 1, NULL }, |
227 { "ass_use_margins", &ass_use_margins, CONF_TYPE_FLAG, 0, 0, 1, NULL }, | |
228 { "ass_top_margin", &ass_top_margin, CONF_TYPE_INT, CONF_RANGE, 0, 512, NULL }, | |
229 { "ass_bottom_margin", &ass_bottom_margin, CONF_TYPE_INT, CONF_RANGE, 0, 512, NULL }, | |
33223 | 230 #endif |
231 | |
33478 | 232 { NULL, NULL, 0, 0, 0, 0, NULL } |
23077 | 233 }; |
234 | |
33565
9c4163ef54e4
Add const to string pointer argument that will not be modified.
reimar
parents:
33555
diff
changeset
|
235 int cfg_gui_include(m_option_t *conf, const char *filename) |
33470 | 236 { |
237 (void)conf; | |
238 | |
34172 | 239 return m_config_parse_config_file(gui_conf, filename, 0); |
33470 | 240 } |
241 | |
34561 | 242 void cfg_read(void) |
23077 | 243 { |
34580 | 244 char *fname, line[512]; |
34578 | 245 FILE *file; |
33179 | 246 |
33476 | 247 player_idle_mode = 1; // GUI is in idle mode by default |
248 | |
33179 | 249 // configuration |
250 | |
34578 | 251 fname = get_path(GUI_CONFIGURATION); |
33179 | 252 |
34578 | 253 mp_msg(MSGT_GPLAYER, MSGL_DBG2, "[cfg] file: %s\n", fname); |
33179 | 254 |
255 gui_conf = m_config_new(); | |
33480 | 256 |
257 if (!gui_conf) { | |
258 gmp_msg(MSGT_GPLAYER, MSGL_FATAL, MSGTR_MemAllocFailed); | |
33768 | 259 mplayer(MPLAYER_EXIT_GUI, EXIT_ERROR, 0); |
33480 | 260 } |
261 | |
33179 | 262 m_config_register_options(gui_conf, gui_opts); |
263 | |
34578 | 264 if (!disable_gui_conf && (m_config_parse_config_file(gui_conf, fname, 1) < 0)) { |
34577
22887c794c02
In case of a GUI config error, exit MPlayer with error.
ib
parents:
34576
diff
changeset
|
265 gmp_msg(MSGT_GPLAYER, MSGL_ERR, MSGTR_ConfigFileError "\n"); |
22887c794c02
In case of a GUI config error, exit MPlayer with error.
ib
parents:
34576
diff
changeset
|
266 mplayer(MPLAYER_EXIT_GUI, EXIT_ERROR, 0); |
33179 | 267 } |
268 | |
34578 | 269 free(fname); |
23077 | 270 |
33179 | 271 // playlist |
272 | |
34578 | 273 fname = get_path(GUI_PLAYLIST); |
274 file = fopen(fname, "rt"); | |
33179 | 275 |
34578 | 276 if (file) { |
34581 | 277 while (fgetstr(line, sizeof(line), file)) { |
33179 | 278 plItem *item; |
23077 | 279 |
34588 | 280 if (!*line) |
281 continue; | |
282 | |
34583 | 283 item = calloc(1, sizeof(plItem)); |
34582 | 284 |
285 if (!item) { | |
286 gmp_msg(MSGT_GPLAYER, MSGL_FATAL, MSGTR_MemAllocFailed); | |
287 mplayer(MPLAYER_EXIT_GUI, EXIT_ERROR, 0); | |
288 } | |
289 | |
34580 | 290 item->path = strdup(line); |
34584 | 291 |
34588 | 292 if (fgetstr(line, sizeof(line), file) && *line) { |
34585 | 293 item->name = strdup(line); |
294 listSet(gtkAddPlItem, item); | |
34584 | 295 } else { |
296 free(item->path); | |
297 free(item); | |
298 } | |
33179 | 299 } |
300 | |
34578 | 301 fclose(file); |
23077 | 302 } |
33179 | 303 |
34578 | 304 free(fname); |
33179 | 305 |
306 // URL list | |
307 | |
34578 | 308 fname = get_path(GUI_URLLIST); |
309 file = fopen(fname, "rt"); | |
23077 | 310 |
34578 | 311 if (file) { |
34581 | 312 while (fgetstr(line, sizeof(line), file)) { |
33555 | 313 urlItem *item; |
33179 | 314 |
34588 | 315 if (!*line) |
316 continue; | |
317 | |
34583 | 318 item = calloc(1, sizeof(urlItem)); |
34582 | 319 |
320 if (!item) { | |
321 gmp_msg(MSGT_GPLAYER, MSGL_FATAL, MSGTR_MemAllocFailed); | |
322 mplayer(MPLAYER_EXIT_GUI, EXIT_ERROR, 0); | |
323 } | |
324 | |
34580 | 325 item->url = strdup(line); |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33737
diff
changeset
|
326 listSet(gtkAddURLItem, item); |
33179 | 327 } |
328 | |
34578 | 329 fclose(file); |
23077 | 330 } |
33179 | 331 |
34578 | 332 free(fname); |
33179 | 333 |
334 // directory history | |
335 | |
34578 | 336 fname = get_path(GUI_HISTORY); |
34579 | 337 file = fopen(fname, "rt"); |
33179 | 338 |
34578 | 339 if (file) { |
34586 | 340 unsigned int i = 0; |
23077 | 341 |
34581 | 342 while (fgetstr(line, sizeof(line), file)) |
34588 | 343 if (*line && (i < FF_ARRAY_ELEMS(fsHistory))) |
34589 | 344 fsHistory[i++] = strdup(line); |
33179 | 345 |
34578 | 346 fclose(file); |
23077 | 347 } |
348 | |
34578 | 349 free(fname); |
23077 | 350 } |
351 | |
34561 | 352 void cfg_write(void) |
23077 | 353 { |
34578 | 354 char *fname; |
355 FILE *file; | |
34591
73348cfa22e2
Use macro FF_ARRAY_ELEMS() instead of numeric constant.
ib
parents:
34590
diff
changeset
|
356 unsigned int i; |
33179 | 357 |
358 // configuration | |
359 | |
34578 | 360 fname = get_path(GUI_CONFIGURATION); |
361 file = fopen(fname, "wt+"); | |
33179 | 362 |
34578 | 363 if (file) { |
33179 | 364 for (i = 0; gui_opts[i].name; i++) { |
34578 | 365 char *val = m_option_print(&gui_opts[i], gui_opts[i].p); |
33179 | 366 |
34578 | 367 if (val == (char *)-1) { |
34592 | 368 gmp_msg(MSGT_GPLAYER, MSGL_WARN, MSGTR_UnableToSaveOption, gui_opts[i].name); |
34578 | 369 val = NULL; |
33179 | 370 } |
23077 | 371 |
34578 | 372 if (val) { |
373 fprintf(file, "%s = \"%s\"\n", gui_opts[i].name, val); | |
374 free(val); | |
33179 | 375 } |
376 } | |
377 | |
34578 | 378 fclose(file); |
23077 | 379 } |
33179 | 380 |
34578 | 381 free(fname); |
33179 | 382 |
383 // playlist | |
384 | |
34578 | 385 fname = get_path(GUI_PLAYLIST); |
386 file = fopen(fname, "wt+"); | |
33179 | 387 |
34578 | 388 if (file) { |
33179 | 389 plCurrent = plList; |
390 | |
391 while (plCurrent) { | |
392 if (plCurrent->path && plCurrent->name) { | |
34578 | 393 fprintf(file, "%s\n", plCurrent->path); |
394 fprintf(file, "%s\n", plCurrent->name); | |
33179 | 395 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28051
diff
changeset
|
396 |
33179 | 397 plCurrent = plCurrent->next; |
398 } | |
399 | |
34578 | 400 fclose(file); |
23077 | 401 } |
33179 | 402 |
34578 | 403 free(fname); |
33179 | 404 |
405 // URL list | |
406 | |
34578 | 407 fname = get_path(GUI_URLLIST); |
408 file = fopen(fname, "wt+"); | |
33179 | 409 |
34578 | 410 if (file) { |
33748 | 411 while (urlList) { |
412 if (urlList->url) | |
34578 | 413 fprintf(file, "%s\n", urlList->url); |
33179 | 414 |
33748 | 415 urlList = urlList->next; |
33179 | 416 } |
23077 | 417 |
34578 | 418 fclose(file); |
23077 | 419 } |
33179 | 420 |
34578 | 421 free(fname); |
33179 | 422 |
423 // directory history | |
424 | |
34578 | 425 fname = get_path(GUI_HISTORY); |
426 file = fopen(fname, "wt+"); | |
33179 | 427 |
34578 | 428 if (file) { |
34591
73348cfa22e2
Use macro FF_ARRAY_ELEMS() instead of numeric constant.
ib
parents:
34590
diff
changeset
|
429 for (i = 0; i < FF_ARRAY_ELEMS(fsHistory); i++) |
33179 | 430 if (fsHistory[i]) |
34578 | 431 fprintf(file, "%s\n", fsHistory[i]); |
23077 | 432 |
34578 | 433 fclose(file); |
33179 | 434 } |
435 | |
34578 | 436 free(fname); |
23077 | 437 } |