1 /* audio_project.c generated by valac, the Vala compiler
2 * generated from audio_project.vala, do not modify */
4 /* Copyright 2009-2010 Yorba Foundation
6 * This software is licensed under the GNU Lesser General Public License
7 * (version 2.1 or later). See the COPYING file in this distribution.
11 #include <glib-object.h>
17 #include <glib/gstdio.h>
20 #define MODEL_TYPE_RECORD_FETCHER_COMPLETION (model_record_fetcher_completion_get_type ())
21 #define MODEL_RECORD_FETCHER_COMPLETION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_RECORD_FETCHER_COMPLETION, ModelRecordFetcherCompletion))
22 #define MODEL_RECORD_FETCHER_COMPLETION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_RECORD_FETCHER_COMPLETION, ModelRecordFetcherCompletionClass))
23 #define MODEL_IS_RECORD_FETCHER_COMPLETION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_RECORD_FETCHER_COMPLETION))
24 #define MODEL_IS_RECORD_FETCHER_COMPLETION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_RECORD_FETCHER_COMPLETION))
25 #define MODEL_RECORD_FETCHER_COMPLETION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_RECORD_FETCHER_COMPLETION, ModelRecordFetcherCompletionClass))
27 typedef struct _ModelRecordFetcherCompletion ModelRecordFetcherCompletion;
28 typedef struct _ModelRecordFetcherCompletionClass ModelRecordFetcherCompletionClass;
29 typedef struct _ModelRecordFetcherCompletionPrivate ModelRecordFetcherCompletionPrivate;
30 #define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
31 #define _g_free0(var) (var = (g_free (var), NULL))
33 #define MODEL_TYPE_AUDIO_PROJECT (model_audio_project_get_type ())
34 #define MODEL_AUDIO_PROJECT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_AUDIO_PROJECT, ModelAudioProject))
35 #define MODEL_AUDIO_PROJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_AUDIO_PROJECT, ModelAudioProjectClass))
36 #define MODEL_IS_AUDIO_PROJECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_AUDIO_PROJECT))
37 #define MODEL_IS_AUDIO_PROJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_AUDIO_PROJECT))
38 #define MODEL_AUDIO_PROJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_AUDIO_PROJECT, ModelAudioProjectClass))
40 typedef struct _ModelAudioProject ModelAudioProject;
41 typedef struct _ModelAudioProjectClass ModelAudioProjectClass;
42 typedef struct _ModelAudioProjectPrivate ModelAudioProjectPrivate;
43 #define _g_regex_unref0(var) ((var == NULL) ? NULL : (var = (g_regex_unref (var), NULL)))
44 #define _g_error_free0(var) ((var == NULL) ? NULL : (var = (g_error_free (var), NULL)))
45 #define _model_fetcher_completion_unref0(var) ((var == NULL) ? NULL : (var = (model_fetcher_completion_unref (var), NULL)))
46 #define _g_dir_close0(var) ((var == NULL) ? NULL : (var = (g_dir_close (var), NULL)))
48 struct _ModelRecordFetcherCompletion {
49 ModelFetcherCompletion parent_instance;
50 ModelRecordFetcherCompletionPrivate * priv;
53 struct _ModelRecordFetcherCompletionClass {
54 ModelFetcherCompletionClass parent_class;
57 struct _ModelRecordFetcherCompletionPrivate {
59 ModelProject* project;
63 struct _ModelAudioProject {
64 ModelProject parent_instance;
65 ModelAudioProjectPrivate * priv;
68 struct _ModelAudioProjectClass {
69 ModelProjectClass parent_class;
72 struct _ModelAudioProjectPrivate {
73 gboolean has_been_saved;
77 static gpointer model_record_fetcher_completion_parent_class = NULL;
78 static gpointer model_audio_project_parent_class = NULL;
80 GType model_record_fetcher_completion_get_type (void);
81 #define MODEL_RECORD_FETCHER_COMPLETION_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), MODEL_TYPE_RECORD_FETCHER_COMPLETION, ModelRecordFetcherCompletionPrivate))
83 MODEL_RECORD_FETCHER_COMPLETION_DUMMY_PROPERTY
85 ModelRecordFetcherCompletion* model_record_fetcher_completion_new (ModelProject* project, ModelTrack* track, gint64 position);
86 ModelRecordFetcherCompletion* model_record_fetcher_completion_construct (GType object_type, ModelProject* project, ModelTrack* track, gint64 position);
87 static void model_record_fetcher_completion_real_complete (ModelFetcherCompletion* base, ModelFetcher* fetch);
88 static void model_record_fetcher_completion_finalize (ModelFetcherCompletion* obj);
89 GType model_audio_project_get_type (void);
90 #define MODEL_AUDIO_PROJECT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), MODEL_TYPE_AUDIO_PROJECT, ModelAudioProjectPrivate))
92 MODEL_AUDIO_PROJECT_DUMMY_PROPERTY
94 static char* model_audio_project_generate_filename (ModelAudioProject* self);
95 static void _view_media_engine_on_callback_pulse_view_media_engine_callback_pulse (ViewMediaEngine* _sender, gpointer self);
96 void model_audio_project_on_record_completed (ModelAudioProject* self);
97 static void _model_audio_project_on_record_completed_view_media_engine_record_completed (ViewMediaEngine* _sender, gpointer self);
98 ModelAudioProject* model_audio_project_new (const char* filename, GError** error);
99 ModelAudioProject* model_audio_project_construct (GType object_type, const char* filename, GError** error);
100 static void model_audio_project_real_get_clip_time (ModelProject* base, ModelClipFile* f, TimeCode* result);
101 static char* model_audio_project_real_get_project_file (ModelProject* base);
102 #define RECORDER_NAME "Fillmore"
103 static char* model_audio_project_real_get_app_name (ModelProject* base);
104 static void model_audio_project_real_add_track (ModelProject* base, ModelTrack* track);
105 void model_audio_project_record (ModelAudioProject* self, ModelAudioTrack* track);
106 static void model_audio_project_real_load (ModelProject* base, const char* filename);
107 static void model_audio_project_move_audio_files (ModelAudioProject* self, const char* filename);
108 static void model_audio_project_real_save (ModelProject* base, const char* filename);
109 static void model_audio_project_finalize (GObject* obj);
110 static int _vala_strcmp0 (const char * str1, const char * str2);
114 static gpointer _g_object_ref0 (gpointer self) {
115 return self ? g_object_ref (self) : NULL;
119 #line 15 "audio_project.vala"
120 ModelRecordFetcherCompletion* model_record_fetcher_completion_construct (GType object_type, ModelProject* project, ModelTrack* track, gint64 position) {
121 #line 122 "audio_project.c"
122 ModelRecordFetcherCompletion* self;
124 ModelProject* _tmp1_;
125 #line 15 "audio_project.vala"
126 g_return_val_if_fail (MODEL_IS_PROJECT (project), NULL);
127 #line 15 "audio_project.vala"
128 g_return_val_if_fail (MODEL_IS_TRACK (track), NULL);
129 #line 16 "audio_project.vala"
130 self = (ModelRecordFetcherCompletion*) model_fetcher_completion_construct (object_type);
131 #line 17 "audio_project.vala"
132 self->priv->track = (_tmp0_ = _g_object_ref0 (track), _g_object_unref0 (self->priv->track), _tmp0_);
133 #line 18 "audio_project.vala"
134 self->priv->project = (_tmp1_ = _g_object_ref0 (project), _g_object_unref0 (self->priv->project), _tmp1_);
135 #line 19 "audio_project.vala"
136 self->priv->position = position;
137 #line 138 "audio_project.c"
142 #line 15 "audio_project.vala"
143 ModelRecordFetcherCompletion* model_record_fetcher_completion_new (ModelProject* project, ModelTrack* track, gint64 position) {
144 #line 15 "audio_project.vala"
145 return model_record_fetcher_completion_construct (MODEL_TYPE_RECORD_FETCHER_COMPLETION, project, track, position);
146 #line 147 "audio_project.c"
150 #line 22 "audio_project.vala"
151 static void model_record_fetcher_completion_real_complete (ModelFetcherCompletion* base, ModelFetcher* fetch) {
152 #line 153 "audio_project.c"
153 ModelRecordFetcherCompletion * self;
157 self = MODEL_RECORD_FETCHER_COMPLETION (base);
158 #line 22 "audio_project.vala"
159 g_return_if_fail (MODEL_IS_FETCHER (fetch));
160 #line 23 "audio_project.vala"
161 MODEL_FETCHER_COMPLETION_CLASS (model_record_fetcher_completion_parent_class)->complete (MODEL_FETCHER_COMPLETION (self), fetch);
162 #line 24 "audio_project.vala"
163 the_clip = (_tmp1_ = model_clip_new (fetch->clipfile, MODEL_MEDIA_TYPE_AUDIO, _tmp0_ = isolate_filename (fetch->clipfile->filename), (gint64) 0, (gint64) 0, model_clip_file_get_length (fetch->clipfile), FALSE), _g_free0 (_tmp0_), _tmp1_);
164 #line 26 "audio_project.vala"
165 model_undo_manager_start_transaction (self->priv->project->undo_manager, "Record");
166 #line 27 "audio_project.vala"
167 model_track_append_at_time (self->priv->track, the_clip, self->priv->position, TRUE);
168 #line 28 "audio_project.vala"
169 model_undo_manager_end_transaction (self->priv->project->undo_manager, "Record");
170 #line 171 "audio_project.c"
171 _g_object_unref0 (the_clip);
175 static void model_record_fetcher_completion_class_init (ModelRecordFetcherCompletionClass * klass) {
176 model_record_fetcher_completion_parent_class = g_type_class_peek_parent (klass);
177 MODEL_FETCHER_COMPLETION_CLASS (klass)->finalize = model_record_fetcher_completion_finalize;
178 g_type_class_add_private (klass, sizeof (ModelRecordFetcherCompletionPrivate));
179 MODEL_FETCHER_COMPLETION_CLASS (klass)->complete = model_record_fetcher_completion_real_complete;
183 static void model_record_fetcher_completion_instance_init (ModelRecordFetcherCompletion * self) {
184 self->priv = MODEL_RECORD_FETCHER_COMPLETION_GET_PRIVATE (self);
188 static void model_record_fetcher_completion_finalize (ModelFetcherCompletion* obj) {
189 ModelRecordFetcherCompletion * self;
190 self = MODEL_RECORD_FETCHER_COMPLETION (obj);
191 _g_object_unref0 (self->priv->track);
192 _g_object_unref0 (self->priv->project);
193 MODEL_FETCHER_COMPLETION_CLASS (model_record_fetcher_completion_parent_class)->finalize (obj);
197 GType model_record_fetcher_completion_get_type (void) {
198 static volatile gsize model_record_fetcher_completion_type_id__volatile = 0;
199 if (g_once_init_enter (&model_record_fetcher_completion_type_id__volatile)) {
200 static const GTypeInfo g_define_type_info = { sizeof (ModelRecordFetcherCompletionClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) model_record_fetcher_completion_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ModelRecordFetcherCompletion), 0, (GInstanceInitFunc) model_record_fetcher_completion_instance_init, NULL };
201 GType model_record_fetcher_completion_type_id;
202 model_record_fetcher_completion_type_id = g_type_register_static (MODEL_TYPE_FETCHER_COMPLETION, "ModelRecordFetcherCompletion", &g_define_type_info, 0);
203 g_once_init_leave (&model_record_fetcher_completion_type_id__volatile, model_record_fetcher_completion_type_id);
205 return model_record_fetcher_completion_type_id__volatile;
209 #line 75 "marina.vapi"
210 static void _view_media_engine_on_callback_pulse_view_media_engine_callback_pulse (ViewMediaEngine* _sender, gpointer self) {
211 #line 212 "audio_project.c"
212 view_media_engine_on_callback_pulse (self);
216 #line 92 "audio_project.vala"
217 static void _model_audio_project_on_record_completed_view_media_engine_record_completed (ViewMediaEngine* _sender, gpointer self) {
218 #line 219 "audio_project.c"
219 model_audio_project_on_record_completed (self);
223 #line 35 "audio_project.vala"
224 ModelAudioProject* model_audio_project_construct (GType object_type, const char* filename, GError** error) {
225 #line 226 "audio_project.c"
226 ModelAudioProject * self;
227 #line 36 "audio_project.vala"
228 self = (ModelAudioProject*) model_project_construct (object_type, filename, FALSE, error);
229 #line 38 "audio_project.vala"
231 #line 39 "audio_project.vala"
232 self->priv->has_been_saved = filename != NULL;
233 #line 40 "audio_project.vala"
234 if (!self->priv->has_been_saved) {
235 #line 236 "audio_project.c"
238 #line 41 "audio_project.vala"
239 _tmp0_ = &MODEL_PROJECT (self)->project_file;
240 #line 41 "audio_project.vala"
241 (*_tmp0_) = (_tmp1_ = model_audio_project_generate_filename (self), _g_free0 ((*_tmp0_)), _tmp1_);
242 #line 243 "audio_project.c"
244 #line 43 "audio_project.vala"
245 g_signal_connect_object (MODEL_PROJECT (self)->media_engine, "callback-pulse", (GCallback) _view_media_engine_on_callback_pulse_view_media_engine_callback_pulse, MODEL_PROJECT (self)->media_engine, 0);
246 #line 44 "audio_project.vala"
247 g_signal_connect_object (MODEL_PROJECT (self)->media_engine, "record-completed", (GCallback) _model_audio_project_on_record_completed_view_media_engine_record_completed, self, 0);
248 #line 249 "audio_project.c"
254 #line 35 "audio_project.vala"
255 ModelAudioProject* model_audio_project_new (const char* filename, GError** error) {
256 #line 35 "audio_project.vala"
257 return model_audio_project_construct (MODEL_TYPE_AUDIO_PROJECT, filename, error);
258 #line 259 "audio_project.c"
262 #line 48 "audio_project.vala"
263 static void model_audio_project_real_get_clip_time (ModelProject* base, ModelClipFile* f, TimeCode* result) {
264 #line 265 "audio_project.c"
265 ModelAudioProject * self;
266 TimeCode _tmp0_ = {0};
268 self = MODEL_AUDIO_PROJECT (base);
269 #line 48 "audio_project.vala"
270 g_return_if_fail (MODEL_IS_CLIP_FILE (f));
271 #line 49 "audio_project.vala"
273 #line 51 "audio_project.vala"
274 time_code_get_from_length (&t, model_clip_file_get_length (f));
275 #line 276 "audio_project.c"
277 #line 52 "audio_project.vala"
279 #line 280 "audio_project.c"
283 #line 55 "audio_project.vala"
284 static char* model_audio_project_real_get_project_file (ModelProject* base) {
285 #line 286 "audio_project.c"
286 ModelAudioProject * self;
288 self = MODEL_AUDIO_PROJECT (base);
289 #line 56 "audio_project.vala"
290 if (!self->priv->has_been_saved) {
291 #line 292 "audio_project.c"
293 #line 57 "audio_project.vala"
295 #line 296 "audio_project.c"
297 result = MODEL_PROJECT_CLASS (model_audio_project_parent_class)->get_project_file (MODEL_PROJECT (self));
298 #line 59 "audio_project.vala"
300 #line 301 "audio_project.c"
305 #line 2153 "glib-2.0.vapi"
306 static void g_time_local (time_t time, struct tm* result) {
307 #line 308 "audio_project.c"
308 struct tm _result_ = {0};
309 #line 2155 "glib-2.0.vapi"
310 localtime_r (&time, &_result_);
311 #line 312 "audio_project.c"
313 #line 2156 "glib-2.0.vapi"
315 #line 316 "audio_project.c"
319 #line 2159 "glib-2.0.vapi"
320 static char* g_time_to_string (struct tm *self) {
321 #line 322 "audio_project.c"
323 result = g_strdup_printf ("%04d-%02d-%02d %02d:%02d:%02d", (*self).tm_year + 1900, (*self).tm_mon + 1, (*self).tm_mday, (*self).tm_hour, (*self).tm_min, (*self).tm_sec);
324 #line 2160 "glib-2.0.vapi"
326 #line 327 "audio_project.c"
330 #line 1148 "glib-2.0.vapi"
331 static char* string_replace (const char* self, const char* old, const char* replacement) {
332 #line 333 "audio_project.c"
334 GError * _inner_error_;
335 #line 1148 "glib-2.0.vapi"
336 g_return_val_if_fail (self != NULL, NULL);
337 #line 1148 "glib-2.0.vapi"
338 g_return_val_if_fail (old != NULL, NULL);
339 #line 1148 "glib-2.0.vapi"
340 g_return_val_if_fail (replacement != NULL, NULL);
341 #line 342 "audio_project.c"
342 _inner_error_ = NULL;
348 #line 1150 "glib-2.0.vapi"
349 regex = (_tmp1_ = g_regex_new (_tmp0_ = g_regex_escape_string (old, -1), 0, 0, &_inner_error_), _g_free0 (_tmp0_), _tmp1_);
350 #line 351 "audio_project.c"
351 if (_inner_error_ != NULL) {
352 if (_inner_error_->domain == G_REGEX_ERROR) {
353 goto __catch0_g_regex_error;
355 g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
356 g_clear_error (&_inner_error_);
359 #line 1151 "glib-2.0.vapi"
360 _tmp2_ = g_regex_replace_literal (regex, self, (gssize) (-1), 0, replacement, 0, &_inner_error_);
361 #line 362 "audio_project.c"
362 if (_inner_error_ != NULL) {
363 _g_regex_unref0 (regex);
364 if (_inner_error_->domain == G_REGEX_ERROR) {
365 goto __catch0_g_regex_error;
367 _g_regex_unref0 (regex);
368 g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
369 g_clear_error (&_inner_error_);
373 _g_regex_unref0 (regex);
374 #line 1151 "glib-2.0.vapi"
376 #line 377 "audio_project.c"
379 __catch0_g_regex_error:
383 _inner_error_ = NULL;
385 #line 1153 "glib-2.0.vapi"
386 g_assert_not_reached ();
387 #line 388 "audio_project.c"
392 if (_inner_error_ != NULL) {
393 g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
394 g_clear_error (&_inner_error_);
400 #line 63 "audio_project.vala"
401 static char* model_audio_project_generate_filename (ModelAudioProject* self) {
402 #line 403 "audio_project.c"
404 struct tm _tmp0_ = {0};
410 #line 63 "audio_project.vala"
411 g_return_val_if_fail (MODEL_IS_AUDIO_PROJECT (self), NULL);
412 #line 64 "audio_project.vala"
413 now = (g_time_local (time (NULL), &_tmp0_), _tmp0_);
414 #line 65 "audio_project.vala"
415 timestring = g_time_to_string (&now);
416 #line 66 "audio_project.vala"
417 timestring = (_tmp1_ = string_replace (timestring, ":", "_"), _g_free0 (timestring), _tmp1_);
418 #line 67 "audio_project.vala"
419 pathname = g_build_filename (g_get_home_dir (), ".fillmore", timestring, NULL);
420 #line 69 "audio_project.vala"
421 g_mkdir (pathname, 0777);
422 #line 70 "audio_project.vala"
423 filename = g_strdup_printf ("%s.%s", timestring, "fill");
424 #line 425 "audio_project.c"
425 result = g_build_filename (pathname, filename, NULL);
426 _g_free0 (timestring);
429 #line 71 "audio_project.vala"
431 #line 432 "audio_project.c"
435 #line 74 "audio_project.vala"
436 static char* model_audio_project_real_get_app_name (ModelProject* base) {
437 #line 438 "audio_project.c"
438 ModelAudioProject * self;
440 self = MODEL_AUDIO_PROJECT (base);
441 result = g_strdup (RECORDER_NAME);
442 #line 75 "audio_project.vala"
444 #line 445 "audio_project.c"
448 #line 78 "audio_project.vala"
449 static void model_audio_project_real_add_track (ModelProject* base, ModelTrack* track) {
450 #line 451 "audio_project.c"
451 ModelAudioProject * self;
452 self = MODEL_AUDIO_PROJECT (base);
453 #line 78 "audio_project.vala"
454 g_return_if_fail (MODEL_IS_TRACK (track));
455 #line 79 "audio_project.vala"
456 if (model_track_media_type (track) == MODEL_MEDIA_TYPE_VIDEO) {
457 #line 80 "audio_project.vala"
458 model_track_hide (track);
459 #line 81 "audio_project.vala"
460 gee_abstract_collection_add (GEE_ABSTRACT_COLLECTION (MODEL_PROJECT (self)->inactive_tracks), track);
461 #line 82 "audio_project.vala"
463 #line 464 "audio_project.c"
465 #line 85 "audio_project.vala"
466 MODEL_PROJECT_CLASS (model_audio_project_parent_class)->add_track (MODEL_PROJECT (self), track);
467 #line 468 "audio_project.c"
471 #line 88 "audio_project.vala"
472 void model_audio_project_record (ModelAudioProject* self, ModelAudioTrack* track) {
473 #line 88 "audio_project.vala"
474 g_return_if_fail (MODEL_IS_AUDIO_PROJECT (self));
475 #line 88 "audio_project.vala"
476 g_return_if_fail (MODEL_IS_AUDIO_TRACK (track));
477 #line 89 "audio_project.vala"
478 view_media_engine_record (MODEL_PROJECT (self)->media_engine, track);
479 #line 480 "audio_project.c"
483 #line 92 "audio_project.vala"
484 void model_audio_project_on_record_completed (ModelAudioProject* self) {
485 #line 486 "audio_project.c"
486 GError * _inner_error_;
487 #line 92 "audio_project.vala"
488 g_return_if_fail (MODEL_IS_AUDIO_PROJECT (self));
489 #line 490 "audio_project.c"
490 _inner_error_ = NULL;
491 #line 93 "audio_project.vala"
492 logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_record_completed");
493 #line 494 "audio_project.c"
495 ModelRecordFetcherCompletion* _tmp0_;
496 #line 95 "audio_project.vala"
497 model_project_create_clip_fetcher (MODEL_PROJECT (self), MODEL_FETCHER_COMPLETION (_tmp0_ = model_record_fetcher_completion_new (MODEL_PROJECT (self), MODEL_TRACK (MODEL_PROJECT (self)->media_engine->record_track), model_clip_get_start (MODEL_PROJECT (self)->media_engine->record_region))), MODEL_PROJECT (self)->media_engine->record_region->clipfile->filename, &_inner_error_);
498 #line 499 "audio_project.c"
499 _model_fetcher_completion_unref0 (_tmp0_);
500 if (_inner_error_ != NULL) {
501 goto __catch1_g_error;
509 _inner_error_ = NULL;
511 #line 98 "audio_project.vala"
512 g_signal_emit_by_name (MODEL_PROJECT (self), "error-occurred", "Could not complete recording", e->message);
513 #line 514 "audio_project.c"
518 if (_inner_error_ != NULL) {
519 g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
520 g_clear_error (&_inner_error_);
526 #line 102 "audio_project.vala"
527 static void model_audio_project_real_load (ModelProject* base, const char* filename) {
528 #line 529 "audio_project.c"
529 ModelAudioProject * self;
530 self = MODEL_AUDIO_PROJECT (base);
531 #line 103 "audio_project.vala"
532 self->priv->has_been_saved = filename != NULL;
533 #line 104 "audio_project.vala"
534 if (!self->priv->has_been_saved) {
535 #line 536 "audio_project.c"
538 #line 105 "audio_project.vala"
539 _tmp0_ = &MODEL_PROJECT (self)->project_file;
540 #line 105 "audio_project.vala"
541 (*_tmp0_) = (_tmp1_ = model_audio_project_generate_filename (self), _g_free0 ((*_tmp0_)), _tmp1_);
542 #line 543 "audio_project.c"
544 #line 107 "audio_project.vala"
545 MODEL_PROJECT_CLASS (model_audio_project_parent_class)->load (MODEL_PROJECT (self), filename);
546 #line 547 "audio_project.c"
550 #line 110 "audio_project.vala"
551 static void model_audio_project_real_save (ModelProject* base, const char* filename) {
552 #line 553 "audio_project.c"
553 ModelAudioProject * self;
554 gboolean _tmp0_ = FALSE;
555 self = MODEL_AUDIO_PROJECT (base);
556 #line 111 "audio_project.vala"
557 if (!self->priv->has_been_saved) {
558 #line 111 "audio_project.vala"
559 _tmp0_ = filename != NULL;
560 #line 561 "audio_project.c"
562 #line 111 "audio_project.vala"
564 #line 565 "audio_project.c"
566 #line 111 "audio_project.vala"
568 #line 569 "audio_project.c"
570 #line 112 "audio_project.vala"
571 model_audio_project_move_audio_files (self, filename);
572 #line 113 "audio_project.vala"
573 g_remove (MODEL_PROJECT (self)->project_file);
574 #line 114 "audio_project.vala"
575 g_rmdir (_tmp1_ = g_path_get_dirname (MODEL_PROJECT (self)->project_file));
576 #line 577 "audio_project.c"
579 #line 117 "audio_project.vala"
580 MODEL_PROJECT_CLASS (model_audio_project_parent_class)->save (MODEL_PROJECT (self), filename);
581 #line 118 "audio_project.vala"
582 self->priv->has_been_saved = TRUE;
583 #line 584 "audio_project.c"
587 #line 121 "audio_project.vala"
588 static void model_audio_project_move_audio_files (ModelAudioProject* self, const char* filename) {
589 #line 590 "audio_project.c"
590 GError * _inner_error_;
594 char* destination_path;
596 const char* base_name;
597 #line 121 "audio_project.vala"
598 g_return_if_fail (MODEL_IS_AUDIO_PROJECT (self));
599 #line 121 "audio_project.vala"
600 g_return_if_fail (filename != NULL);
601 #line 602 "audio_project.c"
602 _inner_error_ = NULL;
603 #line 122 "audio_project.vala"
604 audio_path = model_project_get_audio_path (MODEL_PROJECT (self));
605 #line 123 "audio_project.vala"
606 destination_path = (_tmp1_ = g_build_filename (_tmp0_ = g_path_get_dirname (filename), "audio files", NULL), _g_free0 (_tmp0_), _tmp1_);
607 #line 124 "audio_project.vala"
608 g_mkdir (destination_path, 0777);
609 #line 610 "audio_project.c"
614 #line 127 "audio_project.vala"
615 _tmp2_ = g_dir_open (audio_path, 0, &_inner_error_);
616 #line 617 "audio_project.c"
617 if (_inner_error_ != NULL) {
618 if (_inner_error_->domain == G_FILE_ERROR) {
619 goto __catch2_g_file_error;
621 _g_free0 (audio_path);
622 _g_free0 (destination_path);
624 g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
625 g_clear_error (&_inner_error_);
628 #line 127 "audio_project.vala"
629 dir = (_tmp3_ = _tmp2_, _g_dir_close0 (dir), _tmp3_);
630 #line 631 "audio_project.c"
633 __catch2_g_file_error:
637 _inner_error_ = NULL;
640 _g_free0 (audio_path);
641 _g_free0 (destination_path);
643 #line 129 "audio_project.vala"
645 #line 646 "audio_project.c"
649 if (_inner_error_ != NULL) {
650 _g_free0 (audio_path);
651 _g_free0 (destination_path);
653 g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
654 g_clear_error (&_inner_error_);
657 #line 133 "audio_project.vala"
659 #line 660 "audio_project.c"
662 #line 134 "audio_project.vala"
664 #line 134 "audio_project.vala"
666 #line 667 "audio_project.c"
669 #line 134 "audio_project.vala"
671 #line 138 "audio_project.vala"
672 if (!(base_name != NULL)) {
673 #line 138 "audio_project.vala"
675 #line 676 "audio_project.c"
678 #line 134 "audio_project.vala"
680 #line 135 "audio_project.vala"
681 base_name = g_dir_read_name (dir);
682 #line 136 "audio_project.vala"
683 destination = g_build_filename (destination_path, base_name, NULL);
684 #line 137 "audio_project.vala"
685 g_rename (_tmp5_ = g_build_filename (audio_path, base_name, NULL), destination);
686 #line 687 "audio_project.c"
688 _g_free0 (destination);
692 GeeIterator* _clip_file_it;
693 _clip_file_it = gee_abstract_collection_iterator (GEE_ABSTRACT_COLLECTION (MODEL_PROJECT (self)->clipfiles));
694 #line 141 "audio_project.vala"
696 #line 697 "audio_project.c"
697 ModelClipFile* clip_file;
700 #line 141 "audio_project.vala"
701 if (!gee_iterator_next (_clip_file_it)) {
702 #line 141 "audio_project.vala"
704 #line 705 "audio_project.c"
706 #line 141 "audio_project.vala"
707 clip_file = (ModelClipFile*) gee_iterator_get (_clip_file_it);
708 #line 142 "audio_project.vala"
709 if ((_tmp7_ = _vala_strcmp0 (_tmp6_ = g_path_get_dirname (clip_file->filename), audio_path) == 0, _g_free0 (_tmp6_), _tmp7_)) {
710 #line 711 "audio_project.c"
714 #line 143 "audio_project.vala"
715 file_name = g_path_get_basename (clip_file->filename);
716 #line 144 "audio_project.vala"
717 destination = g_build_filename (destination_path, file_name, NULL);
718 #line 145 "audio_project.vala"
719 clip_file->filename = (_tmp8_ = g_strdup (destination), _g_free0 (clip_file->filename), _tmp8_);
720 #line 721 "audio_project.c"
721 _g_free0 (file_name);
722 _g_free0 (destination);
724 _g_object_unref0 (clip_file);
726 _g_object_unref0 (_clip_file_it);
728 #line 149 "audio_project.vala"
729 g_rmdir (audio_path);
730 #line 731 "audio_project.c"
731 _g_free0 (audio_path);
732 _g_free0 (destination_path);
737 static void model_audio_project_class_init (ModelAudioProjectClass * klass) {
738 model_audio_project_parent_class = g_type_class_peek_parent (klass);
739 g_type_class_add_private (klass, sizeof (ModelAudioProjectPrivate));
740 MODEL_PROJECT_CLASS (klass)->get_clip_time = model_audio_project_real_get_clip_time;
741 MODEL_PROJECT_CLASS (klass)->get_project_file = model_audio_project_real_get_project_file;
742 MODEL_PROJECT_CLASS (klass)->get_app_name = model_audio_project_real_get_app_name;
743 MODEL_PROJECT_CLASS (klass)->add_track = model_audio_project_real_add_track;
744 MODEL_PROJECT_CLASS (klass)->load = model_audio_project_real_load;
745 MODEL_PROJECT_CLASS (klass)->save = model_audio_project_real_save;
746 G_OBJECT_CLASS (klass)->finalize = model_audio_project_finalize;
750 static void model_audio_project_instance_init (ModelAudioProject * self) {
751 self->priv = MODEL_AUDIO_PROJECT_GET_PRIVATE (self);
755 static void model_audio_project_finalize (GObject* obj) {
756 ModelAudioProject * self;
757 self = MODEL_AUDIO_PROJECT (obj);
758 G_OBJECT_CLASS (model_audio_project_parent_class)->finalize (obj);
762 GType model_audio_project_get_type (void) {
763 static volatile gsize model_audio_project_type_id__volatile = 0;
764 if (g_once_init_enter (&model_audio_project_type_id__volatile)) {
765 static const GTypeInfo g_define_type_info = { sizeof (ModelAudioProjectClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) model_audio_project_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ModelAudioProject), 0, (GInstanceInitFunc) model_audio_project_instance_init, NULL };
766 GType model_audio_project_type_id;
767 model_audio_project_type_id = g_type_register_static (MODEL_TYPE_PROJECT, "ModelAudioProject", &g_define_type_info, 0);
768 g_once_init_leave (&model_audio_project_type_id__volatile, model_audio_project_type_id);
770 return model_audio_project_type_id__volatile;
774 static int _vala_strcmp0 (const char * str1, const char * str2) {
776 return -(str1 != str2);
781 return strcmp (str1, str2);