mp3splt-gtk 0.9.2
Loading...
Searching...
No Matches
options_manager.c
Go to the documentation of this file.
1/**********************************************************
2 *
3 * mp3splt-gtk -- utility based on mp3splt,
4 * for mp3/ogg splitting without decoding
5 *
6 * Copyright: (C) 2005-2014 Alexandru Munteanu
7 * Contact: m@ioalex.net
8 *
9 * http://mp3splt.sourceforge.net/
10 *
11 *********************************************************/
12
13/**********************************************************
14 *
15 * This program is free software; you can redistribute it and/or
16 * modify it under the terms of the GNU General Public License
17 * as published by the Free Software Foundation; either version 2
18 * of the License, or (at your option) any later version.
19 *
20 * This program is distributed in the hope that it will be useful,
21 * but WITHOUT ANY WARRANTY; without even the implied warranty of
22 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23 * GNU General Public License for more details.
24 *
25 * You should have received a copy of the GNU General Public License
26 * along with this program; if not, write to the Free Software
27 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
28 * USA.
29 *
30 *********************************************************/
31
32/*!********************************************************
33 * \file
34 * Get the current state of all GUI buttons
35 *
36 * The code contained in this file reads out the current
37 * state of all GUI buttons and saves it into the structure
38 * ui->mp3splt_state.
39 ********************************************************/
40
41#include "options_manager.h"
42
50void update_output_options(ui_state *ui, gboolean is_checked_output_radio_box, gchar *output_format)
51{
52 if (!is_checked_output_radio_box)
53 {
54 mp3splt_set_int_option(ui->mp3splt_state, SPLT_OPT_OUTPUT_FILENAMES, SPLT_OUTPUT_FORMAT);
55 gint error = mp3splt_set_oformat(ui->mp3splt_state, output_format);
56 print_status_bar_confirmation_in_idle(error, ui);
57 }
58 else
59 {
60 mp3splt_set_int_option(ui->mp3splt_state, SPLT_OPT_OUTPUT_FILENAMES, SPLT_OUTPUT_DEFAULT);
61 }
62}
63
64ui_for_split *build_ui_for_split(ui_state *ui)
65{
66 gui_state *gui = ui->gui;
67
68 ui_for_split *ui_fs = g_malloc0(sizeof(ui_for_split));
69 ui_fs->ui = ui;
70
71 ui_fs->frame_mode = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gui->frame_mode));
72 ui_fs->bit_reservoir_mode =
73 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gui->bit_reservoir_mode));
74
75 ui_fs->adjust_mode = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gui->adjust_mode));
76 ui_fs->adjust_offset = gtk_spin_button_get_value(GTK_SPIN_BUTTON(gui->spinner_adjust_offset));
77 ui_fs->adjust_gap = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(gui->spinner_adjust_gap));
78 ui_fs->adjust_threshold =
79 gtk_spin_button_get_value(GTK_SPIN_BUTTON(gui->spinner_adjust_threshold));
80 ui_fs->adjust_min = gtk_spin_button_get_value(GTK_SPIN_BUTTON(gui->spinner_adjust_min));
81
82 ui_fs->split_file_mode = get_split_file_mode(ui);
83
84 ui_fs->selected_split_mode = get_selected_split_mode(ui);
85
86 ui_fs->time_split_value = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(gui->spinner_time));
87 ui_fs->equal_tracks_value =
88 gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(gui->spinner_equal_tracks));
89
90 ui_fs->silence_threshold =
91 gtk_spin_button_get_value(GTK_SPIN_BUTTON(gui->all_spinner_silence_threshold));
92 ui_fs->silence_offset =
93 gtk_spin_button_get_value(GTK_SPIN_BUTTON(gui->all_spinner_silence_offset));
94 ui_fs->silence_number =
95 gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(gui->all_spinner_silence_number_tracks));
96 ui_fs->silence_minimum_length =
97 gtk_spin_button_get_value(GTK_SPIN_BUTTON(gui->all_spinner_silence_minimum));
98 ui_fs->silence_minimum_track_length =
99 gtk_spin_button_get_value(GTK_SPIN_BUTTON(gui->all_spinner_track_minimum));
100 ui_fs->silence_remove =
101 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gui->all_silence_remove_silence));
102
103 ui_fs->trim_silence_threshold =
104 gtk_spin_button_get_value(GTK_SPIN_BUTTON(gui->all_spinner_trim_silence_threshold));
105
106 ui_fs->single_silence_threshold = ui->infos->silence_threshold_value;
107 ui_fs->single_silence_offset = ui->infos->silence_offset_value;
108 ui_fs->single_silence_number = ui->infos->silence_number_of_tracks;
109 ui_fs->single_silence_minimum_length = ui->infos->silence_minimum_length;
110 ui_fs->single_silence_minimum_track_length = ui->infos->silence_minimum_track_length;
111 ui_fs->single_silence_remove = ui->infos->silence_remove_silence_between_tracks;
112
113 ui_fs->selected_tags_value = rh_get_active_value(gui->tags_radio);
114 ui_fs->tags_version = get_checked_tags_version_radio_box(gui);
115
116 ui_fs->create_dirs_from_filenames =
117 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gui->create_dirs_from_output_files));
118
119 ui_fs->regex_replace_underscores =
120 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gui->replace_underscore_by_space_check_box));
121 ui_fs->regex_artist_tag_format = ch_get_active_value(gui->artist_text_properties_combo);
122 ui_fs->regex_album_tag_format = ch_get_active_value(gui->album_text_properties_combo);
123 ui_fs->regex_title_tag_format = ch_get_active_value(gui->title_text_properties_combo);
124 ui_fs->regex_comment_tag_format = ch_get_active_value(gui->comment_text_properties_combo);
125
126 const gchar *regex = gtk_entry_get_text(GTK_ENTRY(gui->regex_entry));
127 if (regex != NULL)
128 {
129 ui_fs->regex = g_strdup(regex);
130 }
131
132 const gchar *regex_default_comment = gtk_entry_get_text(GTK_ENTRY(gui->comment_tag_entry));
133 if (regex_default_comment != NULL)
134 {
135 ui_fs->regex_default_comment = g_strdup(regex_default_comment);
136 }
137
138 const gchar *regex_default_genre = ch_get_active_str_value(gui->genre_combo);
139 if (regex_default_genre != NULL)
140 {
141 ui_fs->regex_default_genre = g_strdup(regex_default_genre);
142 }
143
144 const gchar *output_format = gtk_entry_get_text(GTK_ENTRY(ui->gui->output_entry));
145 if (output_format != NULL)
146 {
147 ui_fs->output_format = g_strdup(output_format);
148 }
149
150 const gchar *output_directory = get_output_directory(ui);
151 if (output_directory != NULL)
152 {
153 ui_fs->output_directory = g_strdup(output_directory);
154 }
155
156 ui_fs->is_checked_output_radio_box = get_checked_output_radio_box(ui);
157
158 return ui_fs;
159}
160
161void free_ui_for_split(ui_for_split *ui_fs)
162{
163 if (ui_fs->pat)
164 {
165 free_points_and_tags(&ui_fs->pat);
166 }
167
168 if (ui_fs->regex) { g_free(ui_fs->regex); }
169 if (ui_fs->regex_default_comment) { g_free(ui_fs->regex_default_comment); }
170 if (ui_fs->regex_default_genre) { g_free(ui_fs->regex_default_genre); }
171 if (ui_fs->output_format) { g_free(ui_fs->output_format); }
172 if (ui_fs->output_directory) { g_free(ui_fs->output_directory); }
173 if (ui_fs->test_regex_filename) { g_free(ui_fs->test_regex_filename); }
174
175 g_free(ui_fs);
176}
177
186{
187 ui_state *ui = ui_fs->ui;
188
189 if (ui_fs->frame_mode)
190 {
191 mp3splt_set_int_option(ui->mp3splt_state, SPLT_OPT_FRAME_MODE, SPLT_TRUE);
192 }
193 else
194 {
195 mp3splt_set_int_option(ui->mp3splt_state, SPLT_OPT_FRAME_MODE, SPLT_FALSE);
196 }
197
198 mp3splt_set_int_option(ui->mp3splt_state, SPLT_OPT_HANDLE_BIT_RESERVOIR,
199 ui_fs->bit_reservoir_mode);
200
201 if (ui_fs->adjust_mode)
202 {
203 mp3splt_set_int_option(ui->mp3splt_state, SPLT_OPT_AUTO_ADJUST, SPLT_TRUE);
204 mp3splt_set_float_option(ui->mp3splt_state, SPLT_OPT_PARAM_OFFSET, ui_fs->adjust_offset);
205 mp3splt_set_int_option(ui->mp3splt_state, SPLT_OPT_PARAM_GAP, ui_fs->adjust_gap);
206 mp3splt_set_float_option(ui->mp3splt_state, SPLT_OPT_PARAM_THRESHOLD, ui_fs->adjust_threshold);
207 mp3splt_set_float_option(ui->mp3splt_state, SPLT_OPT_PARAM_MIN_LENGTH, ui_fs->adjust_min);
208 }
209 else
210 {
211 mp3splt_set_int_option(ui->mp3splt_state, SPLT_OPT_AUTO_ADJUST, SPLT_FALSE);
212 }
213
214 mp3splt_set_int_option(ui->mp3splt_state, SPLT_OPT_INPUT_NOT_SEEKABLE, SPLT_FALSE);
215 mp3splt_set_int_option(ui->mp3splt_state, SPLT_OPT_SPLIT_MODE, SPLT_OPTION_NORMAL_MODE);
216
217 if (ui_fs->split_file_mode == FILE_MODE_SINGLE)
218 {
219 mp3splt_set_int_option(ui->mp3splt_state, SPLT_OPT_SPLIT_MODE, SPLT_OPTION_NORMAL_MODE);
220 }
221 else
222 {
223 switch (ui_fs->selected_split_mode)
224 {
225 case SELECTED_SPLIT_NORMAL:
226 mp3splt_set_int_option(ui->mp3splt_state, SPLT_OPT_SPLIT_MODE, SPLT_OPTION_NORMAL_MODE);
227 break;
228 case SELECTED_SPLIT_WRAP:
229 mp3splt_set_int_option(ui->mp3splt_state, SPLT_OPT_SPLIT_MODE, SPLT_OPTION_WRAP_MODE);
230 break;
231 case SELECTED_SPLIT_TIME:
232 mp3splt_set_int_option(ui->mp3splt_state, SPLT_OPT_SPLIT_MODE, SPLT_OPTION_TIME_MODE);
233 mp3splt_set_long_option(ui->mp3splt_state, SPLT_OPT_SPLIT_TIME,
234 ui_fs->time_split_value * 100);
235 break;
236 case SELECTED_SPLIT_EQUAL_TIME_TRACKS:
237 mp3splt_set_int_option(ui->mp3splt_state, SPLT_OPT_SPLIT_MODE, SPLT_OPTION_LENGTH_MODE);
238 mp3splt_set_int_option(ui->mp3splt_state, SPLT_OPT_LENGTH_SPLIT_FILE_NUMBER,
239 ui_fs->equal_tracks_value);
240 break;
241 case SELECTED_SPLIT_SILENCE:
242 mp3splt_set_int_option(ui->mp3splt_state, SPLT_OPT_SPLIT_MODE, SPLT_OPTION_SILENCE_MODE);
243 mp3splt_set_float_option(ui->mp3splt_state, SPLT_OPT_PARAM_THRESHOLD,
244 ui_fs->silence_threshold);
245 mp3splt_set_float_option(ui->mp3splt_state, SPLT_OPT_PARAM_OFFSET, ui_fs->silence_offset);
246 mp3splt_set_int_option(ui->mp3splt_state, SPLT_OPT_PARAM_NUMBER_TRACKS,
247 ui_fs->silence_number);
248 mp3splt_set_float_option(ui->mp3splt_state, SPLT_OPT_PARAM_MIN_LENGTH,
249 ui_fs->silence_minimum_length);
250 mp3splt_set_float_option(ui->mp3splt_state, SPLT_OPT_PARAM_MIN_TRACK_LENGTH,
251 ui_fs->silence_minimum_track_length);
252 if (ui_fs->silence_remove)
253 {
254 mp3splt_set_int_option(ui->mp3splt_state, SPLT_OPT_PARAM_REMOVE_SILENCE, SPLT_TRUE);
255 }
256 else
257 {
258 mp3splt_set_int_option(ui->mp3splt_state, SPLT_OPT_PARAM_REMOVE_SILENCE, SPLT_FALSE);
259 }
260 break;
261 case SELECTED_SPLIT_TRIM_SILENCE:
262 mp3splt_set_int_option(ui->mp3splt_state, SPLT_OPT_SPLIT_MODE, SPLT_OPTION_TRIM_SILENCE_MODE);
263 mp3splt_set_float_option(ui->mp3splt_state, SPLT_OPT_PARAM_THRESHOLD, ui_fs->trim_silence_threshold);
264 break;
265 case SELECTED_SPLIT_ERROR:
266 mp3splt_set_int_option(ui->mp3splt_state, SPLT_OPT_SPLIT_MODE, SPLT_OPTION_ERROR_MODE);
267 break;
268 default:
269 break;
270 }
271 }
272
273 int selected_tags_value = ui_fs->selected_tags_value;;
274 if (selected_tags_value == NO_TAGS)
275 {
276 mp3splt_set_int_option(ui->mp3splt_state, SPLT_OPT_TAGS, SPLT_NO_TAGS);
277 }
278 else if (selected_tags_value == DEFAULT_TAGS)
279 {
280 mp3splt_set_int_option(ui->mp3splt_state, SPLT_OPT_TAGS, SPLT_CURRENT_TAGS);
281 }
282 else if (selected_tags_value == ORIGINAL_FILE_TAGS)
283 {
284 mp3splt_set_int_option(ui->mp3splt_state, SPLT_OPT_TAGS, SPLT_TAGS_ORIGINAL_FILE);
285 }
286 else if (selected_tags_value == TAGS_FROM_FILENAME)
287 {
288 put_tags_from_filename_regex_options(ui_fs);
289 }
290
291 int tags_radio_choice = ui_fs->tags_version;
292 if (tags_radio_choice == 0)
293 {
294 mp3splt_set_int_option(ui->mp3splt_state, SPLT_OPT_FORCE_TAGS_VERSION, 0);
295 }
296 else if (tags_radio_choice == 1)
297 {
298 mp3splt_set_int_option(ui->mp3splt_state, SPLT_OPT_FORCE_TAGS_VERSION, 1);
299 }
300 else if (tags_radio_choice == 2)
301 {
302 mp3splt_set_int_option(ui->mp3splt_state, SPLT_OPT_FORCE_TAGS_VERSION, 2);
303 }
304 else if (tags_radio_choice == 3)
305 {
306 mp3splt_set_int_option(ui->mp3splt_state, SPLT_OPT_FORCE_TAGS_VERSION, 12);
307 }
308
309 mp3splt_set_int_option(ui->mp3splt_state, SPLT_OPT_CREATE_DIRS_FROM_FILENAMES,
310 ui_fs->create_dirs_from_filenames);
311}
312
313void put_tags_from_filename_regex_options(ui_for_split *ui_fs)
314{
315 ui_state *ui = ui_fs->ui;
316
317 mp3splt_set_int_option(ui->mp3splt_state, SPLT_OPT_TAGS, SPLT_TAGS_FROM_FILENAME_REGEX);
318
319 int underscores = ui_fs->regex_replace_underscores;
320 mp3splt_set_int_option(ui->mp3splt_state, SPLT_OPT_REPLACE_UNDERSCORES_TAG_FORMAT, underscores);
321
322 mp3splt_set_int_option(ui->mp3splt_state, SPLT_OPT_ARTIST_TAG_FORMAT,
323 ui_fs->regex_artist_tag_format);
324 mp3splt_set_int_option(ui->mp3splt_state, SPLT_OPT_ALBUM_TAG_FORMAT,
325 ui_fs->regex_album_tag_format);
326 mp3splt_set_int_option(ui->mp3splt_state, SPLT_OPT_TITLE_TAG_FORMAT,
327 ui_fs->regex_title_tag_format);
328 mp3splt_set_int_option(ui->mp3splt_state, SPLT_OPT_COMMENT_TAG_FORMAT,
329 ui_fs->regex_comment_tag_format);
330
331 mp3splt_set_input_filename_regex(ui->mp3splt_state, ui_fs->regex);
332
333 const gchar *default_comment = ui_fs->regex_default_comment;
334 if (strlen(default_comment) == 0)
335 {
336 default_comment = NULL;
337 }
338 mp3splt_set_default_comment_tag(ui->mp3splt_state, default_comment);
339
340 mp3splt_set_default_genre_tag(ui->mp3splt_state, ui_fs->regex_default_genre);
341}
342
void update_output_options(ui_state *ui, gboolean is_checked_output_radio_box, gchar *output_format)
Update the output options.
void put_options_from_preferences(ui_for_split *ui_fs)
Update the ui->mp3splt_state structure.
gchar * get_output_directory(ui_state *ui)
Get the name of the output directory.
gboolean get_checked_output_radio_box(ui_state *ui)
returns the checked output radio box
gint get_checked_tags_version_radio_box(gui_state *gui)
returns the checked tags radio box