1
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
4
* Copyright (C) Philippe Rouquier 2005-2009 <bonfire-app@wanadoo.fr>
6
* Libbrasero-media is free software; you can redistribute it and/or modify
7
* it under the terms of the GNU General Public License as published by
8
* the Free Software Foundation; either version 2 of the License, or
9
* (at your option) any later version.
11
* The Libbrasero-media authors hereby grant permission for non-GPL compatible
12
* GStreamer plugins to be used and distributed together with GStreamer
13
* and Libbrasero-media. This permission is above and beyond the permissions granted
14
* by the GPL license by which Libbrasero-media is covered. If you modify this code
15
* you may extend this exception to your version of the code, but you are not
16
* obligated to do so. If you do not wish to do so, delete this exception
17
* statement from your version.
19
* Libbrasero-media is distributed in the hope that it will be useful,
20
* but WITHOUT ANY WARRANTY; without even the implied warranty of
21
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22
* GNU Library General Public License for more details.
24
* You should have received a copy of the GNU General Public License
25
* along with this program; if not, write to:
26
* The Free Software Foundation, Inc.,
27
* 51 Franklin Street, Fifth Floor
28
* Boston, MA 02110-1301, USA.
38
#include <glib/gi18n-lib.h>
40
#include "brasero-media.h"
42
static gboolean debug = 0;
44
#define BRASERO_MEDIUM_TRUE_RANDOM_WRITABLE(media) \
45
(BRASERO_MEDIUM_IS (media, BRASERO_MEDIUM_DVDRW_RESTRICTED) || \
46
BRASERO_MEDIUM_IS (media, BRASERO_MEDIUM_DVDRW_PLUS) || \
47
BRASERO_MEDIUM_IS (media, BRASERO_MEDIUM_DVD_RAM) || \
48
BRASERO_MEDIUM_IS (media, BRASERO_MEDIUM_BDRE))
50
static const GOptionEntry options [] = {
51
{ "brasero-media-debug", 0, 0, G_OPTION_ARG_NONE, &debug,
52
N_("Display debug statements on stdout for Brasero media library"),
57
brasero_media_add_to_list (GSList *retval,
60
retval = g_slist_prepend (retval, GINT_TO_POINTER (media));
65
brasero_media_new_status (GSList *retval,
69
if ((type & BRASERO_MEDIUM_BLANK)
70
&& !(media & BRASERO_MEDIUM_ROM)) {
71
/* If media is blank there is no other possible property. */
72
retval = brasero_media_add_to_list (retval,
74
BRASERO_MEDIUM_BLANK);
76
/* NOTE about BR-R they can be "formatted" but they are never
77
* unformatted since by default they'll be used as sequential */
78
if (!(media & BRASERO_MEDIUM_RAM)
79
&& (BRASERO_MEDIUM_IS (media, BRASERO_MEDIUM_DVD|BRASERO_MEDIUM_REWRITABLE)
80
|| BRASERO_MEDIUM_IS (media, BRASERO_MEDIUM_BD|BRASERO_MEDIUM_REWRITABLE))) {
81
if (type & BRASERO_MEDIUM_UNFORMATTED)
82
retval = brasero_media_add_to_list (retval,
85
BRASERO_MEDIUM_UNFORMATTED);
89
if (type & BRASERO_MEDIUM_CLOSED) {
90
if (media & (BRASERO_MEDIUM_DVD|BRASERO_MEDIUM_BD))
91
retval = brasero_media_add_to_list (retval,
93
BRASERO_MEDIUM_CLOSED|
94
(type & BRASERO_MEDIUM_HAS_DATA)|
95
(type & BRASERO_MEDIUM_PROTECTED));
97
if (type & BRASERO_MEDIUM_HAS_AUDIO)
98
retval = brasero_media_add_to_list (retval,
100
BRASERO_MEDIUM_CLOSED|
101
BRASERO_MEDIUM_HAS_AUDIO);
102
if (type & BRASERO_MEDIUM_HAS_DATA)
103
retval = brasero_media_add_to_list (retval,
105
BRASERO_MEDIUM_CLOSED|
106
BRASERO_MEDIUM_HAS_DATA);
107
if (BRASERO_MEDIUM_IS (type, BRASERO_MEDIUM_HAS_AUDIO|BRASERO_MEDIUM_HAS_DATA))
108
retval = brasero_media_add_to_list (retval,
110
BRASERO_MEDIUM_CLOSED|
111
BRASERO_MEDIUM_HAS_DATA|
112
BRASERO_MEDIUM_HAS_AUDIO);
116
if ((type & BRASERO_MEDIUM_APPENDABLE)
117
&& !(media & BRASERO_MEDIUM_ROM)
118
&& !BRASERO_MEDIUM_TRUE_RANDOM_WRITABLE (media)) {
119
if (media & (BRASERO_MEDIUM_BD|BRASERO_MEDIUM_DVD))
120
retval = brasero_media_add_to_list (retval,
122
BRASERO_MEDIUM_APPENDABLE|
123
BRASERO_MEDIUM_HAS_DATA);
125
if (type & BRASERO_MEDIUM_HAS_AUDIO)
126
retval = brasero_media_add_to_list (retval,
128
BRASERO_MEDIUM_APPENDABLE|
129
BRASERO_MEDIUM_HAS_AUDIO);
130
if (type & BRASERO_MEDIUM_HAS_DATA)
131
retval = brasero_media_add_to_list (retval,
133
BRASERO_MEDIUM_APPENDABLE|
134
BRASERO_MEDIUM_HAS_DATA);
135
if (BRASERO_MEDIUM_IS (type, BRASERO_MEDIUM_HAS_AUDIO|BRASERO_MEDIUM_HAS_DATA))
136
retval = brasero_media_add_to_list (retval,
138
BRASERO_MEDIUM_HAS_DATA|
139
BRASERO_MEDIUM_APPENDABLE|
140
BRASERO_MEDIUM_HAS_AUDIO);
148
brasero_media_new_attribute (GSList *retval,
152
/* NOTE: never reached by BDs, ROMs (any) or Restricted Overwrite
153
* and DVD- dual layer */
155
/* NOTE: there is no dual layer DVD-RW */
156
if (type & BRASERO_MEDIUM_REWRITABLE)
157
retval = brasero_media_new_status (retval,
158
media|BRASERO_MEDIUM_REWRITABLE,
161
if (type & BRASERO_MEDIUM_WRITABLE)
162
retval = brasero_media_new_status (retval,
163
media|BRASERO_MEDIUM_WRITABLE,
170
brasero_media_new_subtype (GSList *retval,
174
if (media & BRASERO_MEDIUM_BD) {
175
/* There seems to be Dual layers BDs as well */
177
if (type & BRASERO_MEDIUM_ROM) {
178
retval = brasero_media_new_status (retval,
182
if (type & BRASERO_MEDIUM_DUAL_L)
183
retval = brasero_media_new_status (retval,
186
BRASERO_MEDIUM_DUAL_L,
190
if (type & BRASERO_MEDIUM_RANDOM) {
191
retval = brasero_media_new_status (retval,
193
BRASERO_MEDIUM_RANDOM|
194
BRASERO_MEDIUM_WRITABLE,
196
if (type & BRASERO_MEDIUM_DUAL_L)
197
retval = brasero_media_new_status (retval,
199
BRASERO_MEDIUM_RANDOM|
200
BRASERO_MEDIUM_WRITABLE|
201
BRASERO_MEDIUM_DUAL_L,
205
if (type & BRASERO_MEDIUM_SRM) {
206
retval = brasero_media_new_status (retval,
209
BRASERO_MEDIUM_WRITABLE,
211
if (type & BRASERO_MEDIUM_DUAL_L)
212
retval = brasero_media_new_status (retval,
215
BRASERO_MEDIUM_WRITABLE|
216
BRASERO_MEDIUM_DUAL_L,
220
if (type & BRASERO_MEDIUM_POW) {
221
retval = brasero_media_new_status (retval,
224
BRASERO_MEDIUM_WRITABLE,
226
if (type & BRASERO_MEDIUM_DUAL_L)
227
retval = brasero_media_new_status (retval,
230
BRASERO_MEDIUM_WRITABLE|
231
BRASERO_MEDIUM_DUAL_L,
236
if (type & BRASERO_MEDIUM_REWRITABLE) {
237
retval = brasero_media_new_status (retval,
239
BRASERO_MEDIUM_REWRITABLE,
241
if (type & BRASERO_MEDIUM_DUAL_L)
242
retval = brasero_media_new_status (retval,
244
BRASERO_MEDIUM_REWRITABLE|
245
BRASERO_MEDIUM_DUAL_L,
250
if (media & BRASERO_MEDIUM_DVD) {
251
/* There is no such thing as DVD-RW DL nor DVD-RAM DL*/
253
/* The following is always a DVD-R dual layer */
254
if (type & BRASERO_MEDIUM_JUMP)
255
retval = brasero_media_new_status (retval,
258
BRASERO_MEDIUM_DUAL_L|
259
BRASERO_MEDIUM_WRITABLE,
262
if (type & BRASERO_MEDIUM_SEQUENTIAL) {
263
retval = brasero_media_new_attribute (retval,
265
BRASERO_MEDIUM_SEQUENTIAL,
268
/* This one has to be writable only, no RW */
269
if (type & BRASERO_MEDIUM_DUAL_L)
270
retval = brasero_media_new_status (retval,
272
BRASERO_MEDIUM_SEQUENTIAL|
273
BRASERO_MEDIUM_WRITABLE|
274
BRASERO_MEDIUM_DUAL_L,
278
/* Restricted Overwrite media are always rewritable */
279
if (type & BRASERO_MEDIUM_RESTRICTED)
280
retval = brasero_media_new_status (retval,
282
BRASERO_MEDIUM_RESTRICTED|
283
BRASERO_MEDIUM_REWRITABLE,
286
if (type & BRASERO_MEDIUM_PLUS) {
287
retval = brasero_media_new_attribute (retval,
292
if (type & BRASERO_MEDIUM_DUAL_L)
293
retval = brasero_media_new_attribute (retval,
296
BRASERO_MEDIUM_DUAL_L,
301
if (type & BRASERO_MEDIUM_ROM) {
302
retval = brasero_media_new_status (retval,
307
if (type & BRASERO_MEDIUM_DUAL_L)
308
retval = brasero_media_new_status (retval,
311
BRASERO_MEDIUM_DUAL_L,
315
/* RAM media are always rewritable */
316
if (type & BRASERO_MEDIUM_RAM)
317
retval = brasero_media_new_status (retval,
320
BRASERO_MEDIUM_REWRITABLE,
328
brasero_media_get_all_list (BraseroMedia type)
330
GSList *retval = NULL;
332
if (type & BRASERO_MEDIUM_FILE)
333
retval = brasero_media_add_to_list (retval, BRASERO_MEDIUM_FILE);
335
if (type & BRASERO_MEDIUM_CD) {
336
if (type & BRASERO_MEDIUM_ROM)
337
retval = brasero_media_new_status (retval,
342
retval = brasero_media_new_attribute (retval,
347
if (type & BRASERO_MEDIUM_DVD)
348
retval = brasero_media_new_subtype (retval,
353
if (type & BRASERO_MEDIUM_BD)
354
retval = brasero_media_new_subtype (retval,
362
brasero_media_quark (void)
364
static GQuark quark = 0;
367
quark = g_quark_from_static_string ("BraseroMediaError");
373
brasero_media_to_string (BraseroMedia media,
376
if (media & BRASERO_MEDIUM_FILE)
377
strcat (buffer, "file ");
379
if (media & BRASERO_MEDIUM_CD)
380
strcat (buffer, "CD ");
382
if (media & BRASERO_MEDIUM_DVD)
383
strcat (buffer, "DVD ");
385
if (media & BRASERO_MEDIUM_RAM)
386
strcat (buffer, "RAM ");
388
if (media & BRASERO_MEDIUM_BD)
389
strcat (buffer, "BD ");
391
if (media & BRASERO_MEDIUM_DUAL_L)
392
strcat (buffer, "DL ");
395
if (media & BRASERO_MEDIUM_PLUS)
396
strcat (buffer, "+ ");
398
if (media & BRASERO_MEDIUM_SEQUENTIAL)
399
strcat (buffer, "- (sequential) ");
401
if (media & BRASERO_MEDIUM_RESTRICTED)
402
strcat (buffer, "- (restricted) ");
404
if (media & BRASERO_MEDIUM_JUMP)
405
strcat (buffer, "- (jump) ");
408
if (media & BRASERO_MEDIUM_SRM)
409
strcat (buffer, "SRM ");
411
if (media & BRASERO_MEDIUM_POW)
412
strcat (buffer, "POW ");
414
if (media & BRASERO_MEDIUM_RANDOM)
415
strcat (buffer, "RANDOM ");
417
/* discs attributes */
418
if (media & BRASERO_MEDIUM_REWRITABLE)
419
strcat (buffer, "RW ");
421
if (media & BRASERO_MEDIUM_WRITABLE)
422
strcat (buffer, "W ");
424
if (media & BRASERO_MEDIUM_ROM)
425
strcat (buffer, "ROM ");
427
/* status of the disc */
428
if (media & BRASERO_MEDIUM_CLOSED)
429
strcat (buffer, "closed ");
431
if (media & BRASERO_MEDIUM_BLANK)
432
strcat (buffer, "blank ");
434
if (media & BRASERO_MEDIUM_APPENDABLE)
435
strcat (buffer, "appendable ");
437
if (media & BRASERO_MEDIUM_PROTECTED)
438
strcat (buffer, "protected ");
440
if (media & BRASERO_MEDIUM_HAS_DATA)
441
strcat (buffer, "with data ");
443
if (media & BRASERO_MEDIUM_HAS_AUDIO)
444
strcat (buffer, "with audio ");
446
if (media & BRASERO_MEDIUM_UNFORMATTED)
447
strcat (buffer, "Unformatted ");
450
#define BRASERO_MEDIA_LOG_DOMAIN "BraseroMedia"
453
* brasero_media_get_option_group:
455
* Returns a GOptionGroup for the commandline arguments recognized by libbrasero-media.
456
* You should add this to your GOptionContext if your are using g_option_context_parse ()
457
* to parse your commandline arguments.
459
* Return value: a #GOptionGroup *
462
brasero_media_get_option_group (void)
466
group = g_option_group_new ("brasero-media",
467
N_("Brasero optical media library"),
468
N_("Display options for Brasero-media library"),
471
g_option_group_add_entries (group, options);
476
brasero_media_message (const gchar *location,
486
format_real = g_strdup_printf ("At %s: %s",
490
va_start (arg_list, format);
491
g_logv (BRASERO_MEDIA_LOG_DOMAIN,
497
g_free (format_real);
502
#include "brasero-medium-monitor.h"
504
static BraseroMediumMonitor *default_monitor = NULL;
507
* brasero_media_start:
509
* Initialize the library.
511
* You should call this function before using any other from the library.
515
brasero_media_library_start (void)
517
if (default_monitor) {
518
g_object_ref (default_monitor);
522
/* Initialize i18n */
523
bindtextdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR);
524
bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
526
/* Initialize icon-theme */
527
gtk_icon_theme_append_search_path (gtk_icon_theme_get_default (),
528
BRASERO_DATADIR "/icons");
530
/* Take a reference for the monitoring library */
531
default_monitor = brasero_medium_monitor_get_default ();
535
* brasero_media_stop:
537
* De-initialize the library once you do not need the library anymore.
541
brasero_media_library_stop (void)
543
g_object_unref (default_monitor);
544
default_monitor = NULL;