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-burn 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-burn authors hereby grant permission for non-GPL compatible
12
* GStreamer plugins to be used and distributed together with GStreamer
13
* and Libbrasero-burn. This permission is above and beyond the permissions granted
14
* by the GPL license by which Libbrasero-burn 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-burn 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.
36
#include <glib/gstdio.h>
37
#include <glib/gi18n-lib.h>
39
#include "brasero-track-data.h"
40
#include "burn-mkisofs-base.h"
42
typedef struct _BraseroTrackDataPrivate BraseroTrackDataPrivate;
43
struct _BraseroTrackDataPrivate
45
BraseroImageFS fs_type;
53
#define BRASERO_TRACK_DATA_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), BRASERO_TYPE_TRACK_DATA, BraseroTrackDataPrivate))
55
G_DEFINE_TYPE (BraseroTrackData, brasero_track_data, BRASERO_TYPE_TRACK);
59
brasero_graft_point_free (BraseroGraftPt *graft)
69
brasero_graft_point_copy (BraseroGraftPt *graft)
71
BraseroGraftPt *newgraft;
73
g_return_val_if_fail (graft != NULL, NULL);
75
newgraft = g_new0 (BraseroGraftPt, 1);
76
newgraft->path = g_strdup (graft->path);
78
newgraft->uri = g_strdup (graft->uri);
84
brasero_track_data_set_source_real (BraseroTrackData *track,
88
BraseroTrackDataPrivate *priv;
90
g_return_val_if_fail (BRASERO_IS_TRACK_DATA (track), BRASERO_BURN_NOT_SUPPORTED);
92
priv = BRASERO_TRACK_DATA_PRIVATE (track);
95
g_slist_foreach (priv->grafts, (GFunc) brasero_graft_point_free, NULL);
96
g_slist_free (priv->grafts);
100
g_slist_foreach (priv->excluded, (GFunc) g_free, NULL);
101
g_slist_free (priv->excluded);
104
priv->grafts = grafts;
105
priv->excluded = unreadable;
106
brasero_track_changed (BRASERO_TRACK (track));
108
return BRASERO_BURN_OK;
112
brasero_track_data_set_source (BraseroTrackData *track,
116
BraseroTrackDataClass *klass;
118
g_return_val_if_fail (BRASERO_IS_TRACK_DATA (track), BRASERO_BURN_ERR);
120
klass = BRASERO_TRACK_DATA_GET_CLASS (track);
121
return klass->set_source (track, grafts, unreadable);
124
static BraseroBurnResult
125
brasero_track_data_add_fs_real (BraseroTrackData *track,
126
BraseroImageFS fstype)
128
BraseroTrackDataPrivate *priv;
130
priv = BRASERO_TRACK_DATA_PRIVATE (track);
131
priv->fs_type |= fstype;
132
return BRASERO_BURN_OK;
136
brasero_track_data_add_fs (BraseroTrackData *track,
137
BraseroImageFS fstype)
139
BraseroTrackDataClass *klass;
140
BraseroImageFS fs_before;
141
BraseroBurnResult result;
143
g_return_val_if_fail (BRASERO_IS_TRACK_DATA (track), BRASERO_BURN_NOT_SUPPORTED);
145
fs_before = brasero_track_data_get_fs (track);
146
klass = BRASERO_TRACK_DATA_GET_CLASS (track);
148
return BRASERO_BURN_NOT_SUPPORTED;
150
result = klass->add_fs (track, fstype);
151
if (result != BRASERO_BURN_OK)
154
if (fs_before != brasero_track_data_get_fs (track))
155
brasero_track_changed (BRASERO_TRACK (track));
157
return BRASERO_BURN_OK;
160
static BraseroBurnResult
161
brasero_track_data_rm_fs_real (BraseroTrackData *track,
162
BraseroImageFS fstype)
164
BraseroTrackDataPrivate *priv;
166
priv = BRASERO_TRACK_DATA_PRIVATE (track);
167
priv->fs_type &= ~(fstype);
168
return BRASERO_BURN_OK;
172
brasero_track_data_rm_fs (BraseroTrackData *track,
173
BraseroImageFS fstype)
175
BraseroTrackDataClass *klass;
176
BraseroImageFS fs_before;
177
BraseroBurnResult result;
179
g_return_val_if_fail (BRASERO_IS_TRACK_DATA (track), BRASERO_BURN_NOT_SUPPORTED);
181
fs_before = brasero_track_data_get_fs (track);
182
klass = BRASERO_TRACK_DATA_GET_CLASS (track);
184
return BRASERO_BURN_NOT_SUPPORTED;
186
result = klass->rm_fs (track, fstype);
187
if (result != BRASERO_BURN_OK)
190
if (fs_before != brasero_track_data_get_fs (track))
191
brasero_track_changed (BRASERO_TRACK (track));
193
return BRASERO_BURN_OK;
197
brasero_track_data_set_data_blocks (BraseroTrackData *track,
200
BraseroTrackDataPrivate *priv;
202
g_return_val_if_fail (BRASERO_IS_TRACK_DATA (track), BRASERO_BURN_NOT_SUPPORTED);
204
priv = BRASERO_TRACK_DATA_PRIVATE (track);
205
priv->data_blocks = blocks;
207
return BRASERO_BURN_OK;
211
brasero_track_data_set_file_num (BraseroTrackData *track,
214
BraseroTrackDataPrivate *priv;
216
g_return_val_if_fail (BRASERO_IS_TRACK_DATA (track), BRASERO_BURN_NOT_SUPPORTED);
218
priv = BRASERO_TRACK_DATA_PRIVATE (track);
220
priv->file_num = number;
221
return BRASERO_BURN_OK;
225
brasero_track_data_get_fs (BraseroTrackData *track)
227
BraseroTrackDataClass *klass;
229
g_return_val_if_fail (BRASERO_IS_TRACK_DATA (track), BRASERO_IMAGE_FS_NONE);
231
klass = BRASERO_TRACK_DATA_GET_CLASS (track);
232
return klass->get_fs (track);
236
brasero_track_data_get_fs_real (BraseroTrackData *track)
238
BraseroTrackDataPrivate *priv;
240
priv = BRASERO_TRACK_DATA_PRIVATE (track);
241
return priv->fs_type;
245
brasero_track_data_get_grafts (BraseroTrackData *track)
247
BraseroTrackDataClass *klass;
249
g_return_val_if_fail (BRASERO_IS_TRACK_DATA (track), NULL);
251
klass = BRASERO_TRACK_DATA_GET_CLASS (track);
252
return klass->get_grafts (track);
256
brasero_track_data_get_grafts_real (BraseroTrackData *track)
258
BraseroTrackDataPrivate *priv;
260
priv = BRASERO_TRACK_DATA_PRIVATE (track);
265
brasero_track_data_get_excluded (BraseroTrackData *track,
268
BraseroTrackDataClass *klass;
269
GSList *retval = NULL;
273
g_return_val_if_fail (BRASERO_IS_TRACK_DATA (track), NULL);
275
klass = BRASERO_TRACK_DATA_GET_CLASS (track);
276
excluded = klass->get_excluded (track);
280
for (iter = excluded; iter; iter = iter->next) {
284
retval = g_slist_prepend (retval, g_strdup (uri));
291
brasero_track_data_get_excluded_real (BraseroTrackData *track)
293
BraseroTrackDataPrivate *priv;
295
priv = BRASERO_TRACK_DATA_PRIVATE (track);
296
return priv->excluded;
300
brasero_track_data_get_paths (BraseroTrackData *track,
302
const gchar *grafts_path,
303
const gchar *excluded_path,
304
const gchar *emptydir,
305
const gchar *videodir,
310
BraseroBurnResult result;
311
BraseroTrackDataClass *klass;
313
g_return_val_if_fail (BRASERO_IS_TRACK_DATA (track), BRASERO_BURN_NOT_SUPPORTED);
315
klass = BRASERO_TRACK_DATA_GET_CLASS (track);
316
grafts = klass->get_grafts (track);
317
excluded = klass->get_excluded (track);
319
result = brasero_mkisofs_base_write_to_files (grafts,
331
brasero_track_data_get_file_num (BraseroTrackData *track,
334
BraseroTrackDataClass *klass;
336
g_return_val_if_fail (BRASERO_IS_TRACK_DATA (track), 0);
338
klass = BRASERO_TRACK_DATA_GET_CLASS (track);
340
*file_num = klass->get_file_num (track);
342
return BRASERO_BURN_OK;
346
brasero_track_data_get_file_num_real (BraseroTrackData *track)
348
BraseroTrackDataPrivate *priv;
350
priv = BRASERO_TRACK_DATA_PRIVATE (track);
351
return priv->file_num;
354
static BraseroBurnResult
355
brasero_track_data_get_size (BraseroTrack *track,
359
BraseroTrackDataPrivate *priv;
361
priv = BRASERO_TRACK_DATA_PRIVATE (track);
367
*blocks = priv->data_blocks;
369
return BRASERO_BURN_OK;
372
static BraseroTrackDataType
373
brasero_track_data_get_track_type (BraseroTrack *track,
374
BraseroTrackType *type)
376
BraseroTrackDataPrivate *priv;
378
priv = BRASERO_TRACK_DATA_PRIVATE (track);
381
return BRASERO_TRACK_TYPE_DATA;
383
brasero_track_type_set_has_data (type);
384
brasero_track_type_set_data_fs (type, priv->fs_type);
386
return BRASERO_TRACK_TYPE_DATA;
389
static BraseroBurnResult
390
brasero_track_data_get_status (BraseroTrack *track,
391
BraseroStatus *status)
393
BraseroTrackDataPrivate *priv;
395
priv = BRASERO_TRACK_DATA_PRIVATE (track);
399
brasero_status_set_error (status,
400
g_error_new (BRASERO_BURN_ERROR,
401
BRASERO_BURN_ERROR_EMPTY,
402
_("The project is empty")));
403
return BRASERO_BURN_ERR;
406
return BRASERO_BURN_OK;
410
brasero_track_data_init (BraseroTrackData *object)
414
brasero_track_data_finalize (GObject *object)
416
G_OBJECT_CLASS (brasero_track_data_parent_class)->finalize (object);
420
brasero_track_data_class_init (BraseroTrackDataClass *klass)
422
GObjectClass *object_class = G_OBJECT_CLASS (klass);
423
BraseroTrackClass *track_class = BRASERO_TRACK_CLASS (klass);
424
BraseroTrackDataClass *track_data_class = BRASERO_TRACK_DATA_CLASS (klass);
426
g_type_class_add_private (klass, sizeof (BraseroTrackDataPrivate));
428
object_class->finalize = brasero_track_data_finalize;
430
track_class->get_type = brasero_track_data_get_track_type;
431
track_class->get_status = brasero_track_data_get_status;
432
track_class->get_size = brasero_track_data_get_size;
434
track_data_class->set_source = brasero_track_data_set_source_real;
435
track_data_class->add_fs = brasero_track_data_add_fs_real;
436
track_data_class->rm_fs = brasero_track_data_rm_fs_real;
438
track_data_class->get_fs = brasero_track_data_get_fs_real;
439
track_data_class->get_grafts = brasero_track_data_get_grafts_real;
440
track_data_class->get_excluded = brasero_track_data_get_excluded_real;
441
track_data_class->get_file_num = brasero_track_data_get_file_num_real;
445
brasero_track_data_new (void)
447
return g_object_new (BRASERO_TYPE_TRACK_DATA, NULL);