Initial commit
[fillmore] / src / fillmore / fillmore / audio_project.c
diff --git a/src/fillmore/fillmore/audio_project.c b/src/fillmore/fillmore/audio_project.c
new file mode 100644 (file)
index 0000000..6f8dd49
--- /dev/null
@@ -0,0 +1,786 @@
+/* audio_project.c generated by valac, the Vala compiler
+ * generated from audio_project.vala, do not modify */
+
+/* Copyright 2009-2010 Yorba Foundation
+ *
+ * This software is licensed under the GNU Lesser General Public License
+ * (version 2.1 or later).  See the COPYING file in this distribution. 
+ */
+
+#include <glib.h>
+#include <glib-object.h>
+#include <marina.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include <gee.h>
+#include <glib/gstdio.h>
+
+
+#define MODEL_TYPE_RECORD_FETCHER_COMPLETION (model_record_fetcher_completion_get_type ())
+#define MODEL_RECORD_FETCHER_COMPLETION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_RECORD_FETCHER_COMPLETION, ModelRecordFetcherCompletion))
+#define MODEL_RECORD_FETCHER_COMPLETION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_RECORD_FETCHER_COMPLETION, ModelRecordFetcherCompletionClass))
+#define MODEL_IS_RECORD_FETCHER_COMPLETION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_RECORD_FETCHER_COMPLETION))
+#define MODEL_IS_RECORD_FETCHER_COMPLETION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_RECORD_FETCHER_COMPLETION))
+#define MODEL_RECORD_FETCHER_COMPLETION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_RECORD_FETCHER_COMPLETION, ModelRecordFetcherCompletionClass))
+
+typedef struct _ModelRecordFetcherCompletion ModelRecordFetcherCompletion;
+typedef struct _ModelRecordFetcherCompletionClass ModelRecordFetcherCompletionClass;
+typedef struct _ModelRecordFetcherCompletionPrivate ModelRecordFetcherCompletionPrivate;
+#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
+#define _g_free0(var) (var = (g_free (var), NULL))
+
+#define MODEL_TYPE_AUDIO_PROJECT (model_audio_project_get_type ())
+#define MODEL_AUDIO_PROJECT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_AUDIO_PROJECT, ModelAudioProject))
+#define MODEL_AUDIO_PROJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_AUDIO_PROJECT, ModelAudioProjectClass))
+#define MODEL_IS_AUDIO_PROJECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_AUDIO_PROJECT))
+#define MODEL_IS_AUDIO_PROJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_AUDIO_PROJECT))
+#define MODEL_AUDIO_PROJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_AUDIO_PROJECT, ModelAudioProjectClass))
+
+typedef struct _ModelAudioProject ModelAudioProject;
+typedef struct _ModelAudioProjectClass ModelAudioProjectClass;
+typedef struct _ModelAudioProjectPrivate ModelAudioProjectPrivate;
+#define _g_regex_unref0(var) ((var == NULL) ? NULL : (var = (g_regex_unref (var), NULL)))
+#define _g_error_free0(var) ((var == NULL) ? NULL : (var = (g_error_free (var), NULL)))
+#define _model_fetcher_completion_unref0(var) ((var == NULL) ? NULL : (var = (model_fetcher_completion_unref (var), NULL)))
+#define _g_dir_close0(var) ((var == NULL) ? NULL : (var = (g_dir_close (var), NULL)))
+
+struct _ModelRecordFetcherCompletion {
+       ModelFetcherCompletion parent_instance;
+       ModelRecordFetcherCompletionPrivate * priv;
+};
+
+struct _ModelRecordFetcherCompletionClass {
+       ModelFetcherCompletionClass parent_class;
+};
+
+struct _ModelRecordFetcherCompletionPrivate {
+       ModelTrack* track;
+       ModelProject* project;
+       gint64 position;
+};
+
+struct _ModelAudioProject {
+       ModelProject parent_instance;
+       ModelAudioProjectPrivate * priv;
+};
+
+struct _ModelAudioProjectClass {
+       ModelProjectClass parent_class;
+};
+
+struct _ModelAudioProjectPrivate {
+       gboolean has_been_saved;
+};
+
+
+static gpointer model_record_fetcher_completion_parent_class = NULL;
+static gpointer model_audio_project_parent_class = NULL;
+
+GType model_record_fetcher_completion_get_type (void);
+#define MODEL_RECORD_FETCHER_COMPLETION_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), MODEL_TYPE_RECORD_FETCHER_COMPLETION, ModelRecordFetcherCompletionPrivate))
+enum  {
+       MODEL_RECORD_FETCHER_COMPLETION_DUMMY_PROPERTY
+};
+ModelRecordFetcherCompletion* model_record_fetcher_completion_new (ModelProject* project, ModelTrack* track, gint64 position);
+ModelRecordFetcherCompletion* model_record_fetcher_completion_construct (GType object_type, ModelProject* project, ModelTrack* track, gint64 position);
+static void model_record_fetcher_completion_real_complete (ModelFetcherCompletion* base, ModelFetcher* fetch);
+static void model_record_fetcher_completion_finalize (ModelFetcherCompletion* obj);
+GType model_audio_project_get_type (void);
+#define MODEL_AUDIO_PROJECT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), MODEL_TYPE_AUDIO_PROJECT, ModelAudioProjectPrivate))
+enum  {
+       MODEL_AUDIO_PROJECT_DUMMY_PROPERTY
+};
+static char* model_audio_project_generate_filename (ModelAudioProject* self);
+static void _view_media_engine_on_callback_pulse_view_media_engine_callback_pulse (ViewMediaEngine* _sender, gpointer self);
+void model_audio_project_on_record_completed (ModelAudioProject* self);
+static void _model_audio_project_on_record_completed_view_media_engine_record_completed (ViewMediaEngine* _sender, gpointer self);
+ModelAudioProject* model_audio_project_new (const char* filename, GError** error);
+ModelAudioProject* model_audio_project_construct (GType object_type, const char* filename, GError** error);
+static void model_audio_project_real_get_clip_time (ModelProject* base, ModelClipFile* f, TimeCode* result);
+static char* model_audio_project_real_get_project_file (ModelProject* base);
+#define RECORDER_NAME "Fillmore"
+static char* model_audio_project_real_get_app_name (ModelProject* base);
+static void model_audio_project_real_add_track (ModelProject* base, ModelTrack* track);
+void model_audio_project_record (ModelAudioProject* self, ModelAudioTrack* track);
+static void model_audio_project_real_load (ModelProject* base, const char* filename);
+static void model_audio_project_move_audio_files (ModelAudioProject* self, const char* filename);
+static void model_audio_project_real_save (ModelProject* base, const char* filename);
+static void model_audio_project_finalize (GObject* obj);
+static int _vala_strcmp0 (const char * str1, const char * str2);
+
+
+
+static gpointer _g_object_ref0 (gpointer self) {
+       return self ? g_object_ref (self) : NULL;
+}
+
+
+#line 15 "audio_project.vala"
+ModelRecordFetcherCompletion* model_record_fetcher_completion_construct (GType object_type, ModelProject* project, ModelTrack* track, gint64 position) {
+#line 122 "audio_project.c"
+       ModelRecordFetcherCompletion* self;
+       ModelTrack* _tmp0_;
+       ModelProject* _tmp1_;
+#line 15 "audio_project.vala"
+       g_return_val_if_fail (MODEL_IS_PROJECT (project), NULL);
+#line 15 "audio_project.vala"
+       g_return_val_if_fail (MODEL_IS_TRACK (track), NULL);
+#line 16 "audio_project.vala"
+       self = (ModelRecordFetcherCompletion*) model_fetcher_completion_construct (object_type);
+#line 17 "audio_project.vala"
+       self->priv->track = (_tmp0_ = _g_object_ref0 (track), _g_object_unref0 (self->priv->track), _tmp0_);
+#line 18 "audio_project.vala"
+       self->priv->project = (_tmp1_ = _g_object_ref0 (project), _g_object_unref0 (self->priv->project), _tmp1_);
+#line 19 "audio_project.vala"
+       self->priv->position = position;
+#line 138 "audio_project.c"
+       return self;
+}
+
+
+#line 15 "audio_project.vala"
+ModelRecordFetcherCompletion* model_record_fetcher_completion_new (ModelProject* project, ModelTrack* track, gint64 position) {
+#line 15 "audio_project.vala"
+       return model_record_fetcher_completion_construct (MODEL_TYPE_RECORD_FETCHER_COMPLETION, project, track, position);
+#line 147 "audio_project.c"
+}
+
+
+#line 22 "audio_project.vala"
+static void model_record_fetcher_completion_real_complete (ModelFetcherCompletion* base, ModelFetcher* fetch) {
+#line 153 "audio_project.c"
+       ModelRecordFetcherCompletion * self;
+       char* _tmp0_;
+       ModelClip* _tmp1_;
+       ModelClip* the_clip;
+       self = MODEL_RECORD_FETCHER_COMPLETION (base);
+#line 22 "audio_project.vala"
+       g_return_if_fail (MODEL_IS_FETCHER (fetch));
+#line 23 "audio_project.vala"
+       MODEL_FETCHER_COMPLETION_CLASS (model_record_fetcher_completion_parent_class)->complete (MODEL_FETCHER_COMPLETION (self), fetch);
+#line 24 "audio_project.vala"
+       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_);
+#line 26 "audio_project.vala"
+       model_undo_manager_start_transaction (self->priv->project->undo_manager, "Record");
+#line 27 "audio_project.vala"
+       model_track_append_at_time (self->priv->track, the_clip, self->priv->position, TRUE);
+#line 28 "audio_project.vala"
+       model_undo_manager_end_transaction (self->priv->project->undo_manager, "Record");
+#line 171 "audio_project.c"
+       _g_object_unref0 (the_clip);
+}
+
+
+static void model_record_fetcher_completion_class_init (ModelRecordFetcherCompletionClass * klass) {
+       model_record_fetcher_completion_parent_class = g_type_class_peek_parent (klass);
+       MODEL_FETCHER_COMPLETION_CLASS (klass)->finalize = model_record_fetcher_completion_finalize;
+       g_type_class_add_private (klass, sizeof (ModelRecordFetcherCompletionPrivate));
+       MODEL_FETCHER_COMPLETION_CLASS (klass)->complete = model_record_fetcher_completion_real_complete;
+}
+
+
+static void model_record_fetcher_completion_instance_init (ModelRecordFetcherCompletion * self) {
+       self->priv = MODEL_RECORD_FETCHER_COMPLETION_GET_PRIVATE (self);
+}
+
+
+static void model_record_fetcher_completion_finalize (ModelFetcherCompletion* obj) {
+       ModelRecordFetcherCompletion * self;
+       self = MODEL_RECORD_FETCHER_COMPLETION (obj);
+       _g_object_unref0 (self->priv->track);
+       _g_object_unref0 (self->priv->project);
+       MODEL_FETCHER_COMPLETION_CLASS (model_record_fetcher_completion_parent_class)->finalize (obj);
+}
+
+
+GType model_record_fetcher_completion_get_type (void) {
+       static volatile gsize model_record_fetcher_completion_type_id__volatile = 0;
+       if (g_once_init_enter (&model_record_fetcher_completion_type_id__volatile)) {
+               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 };
+               GType model_record_fetcher_completion_type_id;
+               model_record_fetcher_completion_type_id = g_type_register_static (MODEL_TYPE_FETCHER_COMPLETION, "ModelRecordFetcherCompletion", &g_define_type_info, 0);
+               g_once_init_leave (&model_record_fetcher_completion_type_id__volatile, model_record_fetcher_completion_type_id);
+       }
+       return model_record_fetcher_completion_type_id__volatile;
+}
+
+
+#line 75 "marina.vapi"
+static void _view_media_engine_on_callback_pulse_view_media_engine_callback_pulse (ViewMediaEngine* _sender, gpointer self) {
+#line 212 "audio_project.c"
+       view_media_engine_on_callback_pulse (self);
+}
+
+
+#line 92 "audio_project.vala"
+static void _model_audio_project_on_record_completed_view_media_engine_record_completed (ViewMediaEngine* _sender, gpointer self) {
+#line 219 "audio_project.c"
+       model_audio_project_on_record_completed (self);
+}
+
+
+#line 35 "audio_project.vala"
+ModelAudioProject* model_audio_project_construct (GType object_type, const char* filename, GError** error) {
+#line 226 "audio_project.c"
+       ModelAudioProject * self;
+#line 36 "audio_project.vala"
+       self = (ModelAudioProject*) model_project_construct (object_type, filename, FALSE, error);
+#line 38 "audio_project.vala"
+       if (self != NULL) {
+#line 39 "audio_project.vala"
+               self->priv->has_been_saved = filename != NULL;
+#line 40 "audio_project.vala"
+               if (!self->priv->has_been_saved) {
+#line 236 "audio_project.c"
+                       char* _tmp1_;
+                       char* *_tmp0_;
+#line 41 "audio_project.vala"
+                       _tmp0_ = &MODEL_PROJECT (self)->project_file;
+#line 41 "audio_project.vala"
+                       (*_tmp0_) = (_tmp1_ = model_audio_project_generate_filename (self), _g_free0 ((*_tmp0_)), _tmp1_);
+#line 243 "audio_project.c"
+               }
+#line 43 "audio_project.vala"
+               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);
+#line 44 "audio_project.vala"
+               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);
+#line 249 "audio_project.c"
+       }
+       return self;
+}
+
+
+#line 35 "audio_project.vala"
+ModelAudioProject* model_audio_project_new (const char* filename, GError** error) {
+#line 35 "audio_project.vala"
+       return model_audio_project_construct (MODEL_TYPE_AUDIO_PROJECT, filename, error);
+#line 259 "audio_project.c"
+}
+
+
+#line 48 "audio_project.vala"
+static void model_audio_project_real_get_clip_time (ModelProject* base, ModelClipFile* f, TimeCode* result) {
+#line 265 "audio_project.c"
+       ModelAudioProject * self;
+       TimeCode _tmp0_ = {0};
+       TimeCode t;
+       self = MODEL_AUDIO_PROJECT (base);
+#line 48 "audio_project.vala"
+       g_return_if_fail (MODEL_IS_CLIP_FILE (f));
+#line 49 "audio_project.vala"
+       t = (_tmp0_);
+#line 51 "audio_project.vala"
+       time_code_get_from_length (&t, model_clip_file_get_length (f));
+#line 276 "audio_project.c"
+       *result = t;
+#line 52 "audio_project.vala"
+       return;
+#line 280 "audio_project.c"
+}
+
+
+#line 55 "audio_project.vala"
+static char* model_audio_project_real_get_project_file (ModelProject* base) {
+#line 286 "audio_project.c"
+       ModelAudioProject * self;
+       char* result = NULL;
+       self = MODEL_AUDIO_PROJECT (base);
+#line 56 "audio_project.vala"
+       if (!self->priv->has_been_saved) {
+#line 292 "audio_project.c"
+               result = NULL;
+#line 57 "audio_project.vala"
+               return result;
+#line 296 "audio_project.c"
+       } else {
+               result = MODEL_PROJECT_CLASS (model_audio_project_parent_class)->get_project_file (MODEL_PROJECT (self));
+#line 59 "audio_project.vala"
+               return result;
+#line 301 "audio_project.c"
+       }
+}
+
+
+#line 2153 "glib-2.0.vapi"
+static void g_time_local (time_t time, struct tm* result) {
+#line 308 "audio_project.c"
+       struct tm _result_ = {0};
+#line 2155 "glib-2.0.vapi"
+       localtime_r (&time, &_result_);
+#line 312 "audio_project.c"
+       *result = _result_;
+#line 2156 "glib-2.0.vapi"
+       return;
+#line 316 "audio_project.c"
+}
+
+
+#line 2159 "glib-2.0.vapi"
+static char* g_time_to_string (struct tm *self) {
+#line 322 "audio_project.c"
+       char* result = NULL;
+       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);
+#line 2160 "glib-2.0.vapi"
+       return result;
+#line 327 "audio_project.c"
+}
+
+
+#line 1148 "glib-2.0.vapi"
+static char* string_replace (const char* self, const char* old, const char* replacement) {
+#line 333 "audio_project.c"
+       char* result = NULL;
+       GError * _inner_error_;
+#line 1148 "glib-2.0.vapi"
+       g_return_val_if_fail (self != NULL, NULL);
+#line 1148 "glib-2.0.vapi"
+       g_return_val_if_fail (old != NULL, NULL);
+#line 1148 "glib-2.0.vapi"
+       g_return_val_if_fail (replacement != NULL, NULL);
+#line 342 "audio_project.c"
+       _inner_error_ = NULL;
+       {
+               char* _tmp0_;
+               GRegex* _tmp1_;
+               GRegex* regex;
+               char* _tmp2_;
+#line 1150 "glib-2.0.vapi"
+               regex = (_tmp1_ = g_regex_new (_tmp0_ = g_regex_escape_string (old, -1), 0, 0, &_inner_error_), _g_free0 (_tmp0_), _tmp1_);
+#line 351 "audio_project.c"
+               if (_inner_error_ != NULL) {
+                       if (_inner_error_->domain == G_REGEX_ERROR) {
+                               goto __catch0_g_regex_error;
+                       }
+                       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);
+                       g_clear_error (&_inner_error_);
+                       return NULL;
+               }
+#line 1151 "glib-2.0.vapi"
+               _tmp2_ = g_regex_replace_literal (regex, self, (gssize) (-1), 0, replacement, 0, &_inner_error_);
+#line 362 "audio_project.c"
+               if (_inner_error_ != NULL) {
+                       _g_regex_unref0 (regex);
+                       if (_inner_error_->domain == G_REGEX_ERROR) {
+                               goto __catch0_g_regex_error;
+                       }
+                       _g_regex_unref0 (regex);
+                       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);
+                       g_clear_error (&_inner_error_);
+                       return NULL;
+               }
+               result = _tmp2_;
+               _g_regex_unref0 (regex);
+#line 1151 "glib-2.0.vapi"
+               return result;
+#line 377 "audio_project.c"
+       }
+       goto __finally0;
+       __catch0_g_regex_error:
+       {
+               GError * e;
+               e = _inner_error_;
+               _inner_error_ = NULL;
+               {
+#line 1153 "glib-2.0.vapi"
+                       g_assert_not_reached ();
+#line 388 "audio_project.c"
+                       _g_error_free0 (e);
+               }
+       }
+       __finally0:
+       if (_inner_error_ != NULL) {
+               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);
+               g_clear_error (&_inner_error_);
+               return NULL;
+       }
+}
+
+
+#line 63 "audio_project.vala"
+static char* model_audio_project_generate_filename (ModelAudioProject* self) {
+#line 403 "audio_project.c"
+       char* result = NULL;
+       struct tm _tmp0_ = {0};
+       struct tm now;
+       char* timestring;
+       char* _tmp1_;
+       char* pathname;
+       char* filename;
+#line 63 "audio_project.vala"
+       g_return_val_if_fail (MODEL_IS_AUDIO_PROJECT (self), NULL);
+#line 64 "audio_project.vala"
+       now = (g_time_local (time (NULL), &_tmp0_), _tmp0_);
+#line 65 "audio_project.vala"
+       timestring = g_time_to_string (&now);
+#line 66 "audio_project.vala"
+       timestring = (_tmp1_ = string_replace (timestring, ":", "_"), _g_free0 (timestring), _tmp1_);
+#line 67 "audio_project.vala"
+       pathname = g_build_filename (g_get_home_dir (), ".fillmore", timestring, NULL);
+#line 69 "audio_project.vala"
+       g_mkdir (pathname, 0777);
+#line 70 "audio_project.vala"
+       filename = g_strdup_printf ("%s.%s", timestring, "fill");
+#line 425 "audio_project.c"
+       result = g_build_filename (pathname, filename, NULL);
+       _g_free0 (timestring);
+       _g_free0 (pathname);
+       _g_free0 (filename);
+#line 71 "audio_project.vala"
+       return result;
+#line 432 "audio_project.c"
+}
+
+
+#line 74 "audio_project.vala"
+static char* model_audio_project_real_get_app_name (ModelProject* base) {
+#line 438 "audio_project.c"
+       ModelAudioProject * self;
+       char* result = NULL;
+       self = MODEL_AUDIO_PROJECT (base);
+       result = g_strdup (RECORDER_NAME);
+#line 75 "audio_project.vala"
+       return result;
+#line 445 "audio_project.c"
+}
+
+
+#line 78 "audio_project.vala"
+static void model_audio_project_real_add_track (ModelProject* base, ModelTrack* track) {
+#line 451 "audio_project.c"
+       ModelAudioProject * self;
+       self = MODEL_AUDIO_PROJECT (base);
+#line 78 "audio_project.vala"
+       g_return_if_fail (MODEL_IS_TRACK (track));
+#line 79 "audio_project.vala"
+       if (model_track_media_type (track) == MODEL_MEDIA_TYPE_VIDEO) {
+#line 80 "audio_project.vala"
+               model_track_hide (track);
+#line 81 "audio_project.vala"
+               gee_abstract_collection_add (GEE_ABSTRACT_COLLECTION (MODEL_PROJECT (self)->inactive_tracks), track);
+#line 82 "audio_project.vala"
+               return;
+#line 464 "audio_project.c"
+       }
+#line 85 "audio_project.vala"
+       MODEL_PROJECT_CLASS (model_audio_project_parent_class)->add_track (MODEL_PROJECT (self), track);
+#line 468 "audio_project.c"
+}
+
+
+#line 88 "audio_project.vala"
+void model_audio_project_record (ModelAudioProject* self, ModelAudioTrack* track) {
+#line 88 "audio_project.vala"
+       g_return_if_fail (MODEL_IS_AUDIO_PROJECT (self));
+#line 88 "audio_project.vala"
+       g_return_if_fail (MODEL_IS_AUDIO_TRACK (track));
+#line 89 "audio_project.vala"
+       view_media_engine_record (MODEL_PROJECT (self)->media_engine, track);
+#line 480 "audio_project.c"
+}
+
+
+#line 92 "audio_project.vala"
+void model_audio_project_on_record_completed (ModelAudioProject* self) {
+#line 486 "audio_project.c"
+       GError * _inner_error_;
+#line 92 "audio_project.vala"
+       g_return_if_fail (MODEL_IS_AUDIO_PROJECT (self));
+#line 490 "audio_project.c"
+       _inner_error_ = NULL;
+#line 93 "audio_project.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_record_completed");
+#line 494 "audio_project.c"
+       {
+               ModelRecordFetcherCompletion* _tmp0_;
+#line 95 "audio_project.vala"
+               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_);
+#line 499 "audio_project.c"
+               _model_fetcher_completion_unref0 (_tmp0_);
+               if (_inner_error_ != NULL) {
+                       goto __catch1_g_error;
+               }
+       }
+       goto __finally1;
+       __catch1_g_error:
+       {
+               GError * e;
+               e = _inner_error_;
+               _inner_error_ = NULL;
+               {
+#line 98 "audio_project.vala"
+                       g_signal_emit_by_name (MODEL_PROJECT (self), "error-occurred", "Could not complete recording", e->message);
+#line 514 "audio_project.c"
+                       _g_error_free0 (e);
+               }
+       }
+       __finally1:
+       if (_inner_error_ != NULL) {
+               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);
+               g_clear_error (&_inner_error_);
+               return;
+       }
+}
+
+
+#line 102 "audio_project.vala"
+static void model_audio_project_real_load (ModelProject* base, const char* filename) {
+#line 529 "audio_project.c"
+       ModelAudioProject * self;
+       self = MODEL_AUDIO_PROJECT (base);
+#line 103 "audio_project.vala"
+       self->priv->has_been_saved = filename != NULL;
+#line 104 "audio_project.vala"
+       if (!self->priv->has_been_saved) {
+#line 536 "audio_project.c"
+               char* _tmp1_;
+               char* *_tmp0_;
+#line 105 "audio_project.vala"
+               _tmp0_ = &MODEL_PROJECT (self)->project_file;
+#line 105 "audio_project.vala"
+               (*_tmp0_) = (_tmp1_ = model_audio_project_generate_filename (self), _g_free0 ((*_tmp0_)), _tmp1_);
+#line 543 "audio_project.c"
+       }
+#line 107 "audio_project.vala"
+       MODEL_PROJECT_CLASS (model_audio_project_parent_class)->load (MODEL_PROJECT (self), filename);
+#line 547 "audio_project.c"
+}
+
+
+#line 110 "audio_project.vala"
+static void model_audio_project_real_save (ModelProject* base, const char* filename) {
+#line 553 "audio_project.c"
+       ModelAudioProject * self;
+       gboolean _tmp0_ = FALSE;
+       self = MODEL_AUDIO_PROJECT (base);
+#line 111 "audio_project.vala"
+       if (!self->priv->has_been_saved) {
+#line 111 "audio_project.vala"
+               _tmp0_ = filename != NULL;
+#line 561 "audio_project.c"
+       } else {
+#line 111 "audio_project.vala"
+               _tmp0_ = FALSE;
+#line 565 "audio_project.c"
+       }
+#line 111 "audio_project.vala"
+       if (_tmp0_) {
+#line 569 "audio_project.c"
+               char* _tmp1_;
+#line 112 "audio_project.vala"
+               model_audio_project_move_audio_files (self, filename);
+#line 113 "audio_project.vala"
+               g_remove (MODEL_PROJECT (self)->project_file);
+#line 114 "audio_project.vala"
+               g_rmdir (_tmp1_ = g_path_get_dirname (MODEL_PROJECT (self)->project_file));
+#line 577 "audio_project.c"
+               _g_free0 (_tmp1_);
+       }
+#line 117 "audio_project.vala"
+       MODEL_PROJECT_CLASS (model_audio_project_parent_class)->save (MODEL_PROJECT (self), filename);
+#line 118 "audio_project.vala"
+       self->priv->has_been_saved = TRUE;
+#line 584 "audio_project.c"
+}
+
+
+#line 121 "audio_project.vala"
+static void model_audio_project_move_audio_files (ModelAudioProject* self, const char* filename) {
+#line 590 "audio_project.c"
+       GError * _inner_error_;
+       char* audio_path;
+       char* _tmp0_;
+       char* _tmp1_;
+       char* destination_path;
+       GDir* dir;
+       const char* base_name;
+#line 121 "audio_project.vala"
+       g_return_if_fail (MODEL_IS_AUDIO_PROJECT (self));
+#line 121 "audio_project.vala"
+       g_return_if_fail (filename != NULL);
+#line 602 "audio_project.c"
+       _inner_error_ = NULL;
+#line 122 "audio_project.vala"
+       audio_path = model_project_get_audio_path (MODEL_PROJECT (self));
+#line 123 "audio_project.vala"
+       destination_path = (_tmp1_ = g_build_filename (_tmp0_ = g_path_get_dirname (filename), "audio files", NULL), _g_free0 (_tmp0_), _tmp1_);
+#line 124 "audio_project.vala"
+       g_mkdir (destination_path, 0777);
+#line 610 "audio_project.c"
+       dir = NULL;
+       {
+               GDir* _tmp2_;
+               GDir* _tmp3_;
+#line 127 "audio_project.vala"
+               _tmp2_ = g_dir_open (audio_path, 0, &_inner_error_);
+#line 617 "audio_project.c"
+               if (_inner_error_ != NULL) {
+                       if (_inner_error_->domain == G_FILE_ERROR) {
+                               goto __catch2_g_file_error;
+                       }
+                       _g_free0 (audio_path);
+                       _g_free0 (destination_path);
+                       _g_dir_close0 (dir);
+                       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);
+                       g_clear_error (&_inner_error_);
+                       return;
+               }
+#line 127 "audio_project.vala"
+               dir = (_tmp3_ = _tmp2_, _g_dir_close0 (dir), _tmp3_);
+#line 631 "audio_project.c"
+       }
+       goto __finally2;
+       __catch2_g_file_error:
+       {
+               GError * e;
+               e = _inner_error_;
+               _inner_error_ = NULL;
+               {
+                       _g_error_free0 (e);
+                       _g_free0 (audio_path);
+                       _g_free0 (destination_path);
+                       _g_dir_close0 (dir);
+#line 129 "audio_project.vala"
+                       return;
+#line 646 "audio_project.c"
+               }
+       }
+       __finally2:
+       if (_inner_error_ != NULL) {
+               _g_free0 (audio_path);
+               _g_free0 (destination_path);
+               _g_dir_close0 (dir);
+               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);
+               g_clear_error (&_inner_error_);
+               return;
+       }
+#line 133 "audio_project.vala"
+       base_name = NULL;
+#line 660 "audio_project.c"
+       {
+               gboolean _tmp4_;
+#line 134 "audio_project.vala"
+               _tmp4_ = TRUE;
+#line 134 "audio_project.vala"
+               while (TRUE) {
+#line 667 "audio_project.c"
+                       char* destination;
+                       char* _tmp5_;
+#line 134 "audio_project.vala"
+                       if (!_tmp4_) {
+#line 138 "audio_project.vala"
+                               if (!(base_name != NULL)) {
+#line 138 "audio_project.vala"
+                                       break;
+#line 676 "audio_project.c"
+                               }
+                       }
+#line 134 "audio_project.vala"
+                       _tmp4_ = FALSE;
+#line 135 "audio_project.vala"
+                       base_name = g_dir_read_name (dir);
+#line 136 "audio_project.vala"
+                       destination = g_build_filename (destination_path, base_name, NULL);
+#line 137 "audio_project.vala"
+                       g_rename (_tmp5_ = g_build_filename (audio_path, base_name, NULL), destination);
+#line 687 "audio_project.c"
+                       _g_free0 (_tmp5_);
+                       _g_free0 (destination);
+               }
+       }
+       {
+               GeeIterator* _clip_file_it;
+               _clip_file_it = gee_abstract_collection_iterator (GEE_ABSTRACT_COLLECTION (MODEL_PROJECT (self)->clipfiles));
+#line 141 "audio_project.vala"
+               while (TRUE) {
+#line 697 "audio_project.c"
+                       ModelClipFile* clip_file;
+                       char* _tmp6_;
+                       gboolean _tmp7_;
+#line 141 "audio_project.vala"
+                       if (!gee_iterator_next (_clip_file_it)) {
+#line 141 "audio_project.vala"
+                               break;
+#line 705 "audio_project.c"
+                       }
+#line 141 "audio_project.vala"
+                       clip_file = (ModelClipFile*) gee_iterator_get (_clip_file_it);
+#line 142 "audio_project.vala"
+                       if ((_tmp7_ = _vala_strcmp0 (_tmp6_ = g_path_get_dirname (clip_file->filename), audio_path) == 0, _g_free0 (_tmp6_), _tmp7_)) {
+#line 711 "audio_project.c"
+                               char* file_name;
+                               char* destination;
+                               char* _tmp8_;
+#line 143 "audio_project.vala"
+                               file_name = g_path_get_basename (clip_file->filename);
+#line 144 "audio_project.vala"
+                               destination = g_build_filename (destination_path, file_name, NULL);
+#line 145 "audio_project.vala"
+                               clip_file->filename = (_tmp8_ = g_strdup (destination), _g_free0 (clip_file->filename), _tmp8_);
+#line 721 "audio_project.c"
+                               _g_free0 (file_name);
+                               _g_free0 (destination);
+                       }
+                       _g_object_unref0 (clip_file);
+               }
+               _g_object_unref0 (_clip_file_it);
+       }
+#line 149 "audio_project.vala"
+       g_rmdir (audio_path);
+#line 731 "audio_project.c"
+       _g_free0 (audio_path);
+       _g_free0 (destination_path);
+       _g_dir_close0 (dir);
+}
+
+
+static void model_audio_project_class_init (ModelAudioProjectClass * klass) {
+       model_audio_project_parent_class = g_type_class_peek_parent (klass);
+       g_type_class_add_private (klass, sizeof (ModelAudioProjectPrivate));
+       MODEL_PROJECT_CLASS (klass)->get_clip_time = model_audio_project_real_get_clip_time;
+       MODEL_PROJECT_CLASS (klass)->get_project_file = model_audio_project_real_get_project_file;
+       MODEL_PROJECT_CLASS (klass)->get_app_name = model_audio_project_real_get_app_name;
+       MODEL_PROJECT_CLASS (klass)->add_track = model_audio_project_real_add_track;
+       MODEL_PROJECT_CLASS (klass)->load = model_audio_project_real_load;
+       MODEL_PROJECT_CLASS (klass)->save = model_audio_project_real_save;
+       G_OBJECT_CLASS (klass)->finalize = model_audio_project_finalize;
+}
+
+
+static void model_audio_project_instance_init (ModelAudioProject * self) {
+       self->priv = MODEL_AUDIO_PROJECT_GET_PRIVATE (self);
+}
+
+
+static void model_audio_project_finalize (GObject* obj) {
+       ModelAudioProject * self;
+       self = MODEL_AUDIO_PROJECT (obj);
+       G_OBJECT_CLASS (model_audio_project_parent_class)->finalize (obj);
+}
+
+
+GType model_audio_project_get_type (void) {
+       static volatile gsize model_audio_project_type_id__volatile = 0;
+       if (g_once_init_enter (&model_audio_project_type_id__volatile)) {
+               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 };
+               GType model_audio_project_type_id;
+               model_audio_project_type_id = g_type_register_static (MODEL_TYPE_PROJECT, "ModelAudioProject", &g_define_type_info, 0);
+               g_once_init_leave (&model_audio_project_type_id__volatile, model_audio_project_type_id);
+       }
+       return model_audio_project_type_id__volatile;
+}
+
+
+static int _vala_strcmp0 (const char * str1, const char * str2) {
+       if (str1 == NULL) {
+               return -(str1 != str2);
+       }
+       if (str2 == NULL) {
+               return str1 != str2;
+       }
+       return strcmp (str1, str2);
+}
+
+
+
+