Initial commit
[fillmore] / src / marina / marina / import.c
diff --git a/src/marina/marina/import.c b/src/marina/marina/import.c
new file mode 100644 (file)
index 0000000..3798054
--- /dev/null
@@ -0,0 +1,1919 @@
+/* import.c generated by valac, the Vala compiler
+ * generated from import.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 <stdlib.h>
+#include <string.h>
+#include <gst/gst.h>
+#include <gee.h>
+#include <float.h>
+#include <math.h>
+#include <gdk-pixbuf/gdk-pixdata.h>
+#include <glib/gstdio.h>
+
+
+#define TYPE_MULTI_FILE_PROGRESS_INTERFACE (multi_file_progress_interface_get_type ())
+#define MULTI_FILE_PROGRESS_INTERFACE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_MULTI_FILE_PROGRESS_INTERFACE, MultiFileProgressInterface))
+#define IS_MULTI_FILE_PROGRESS_INTERFACE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_MULTI_FILE_PROGRESS_INTERFACE))
+#define MULTI_FILE_PROGRESS_INTERFACE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), TYPE_MULTI_FILE_PROGRESS_INTERFACE, MultiFileProgressInterfaceIface))
+
+typedef struct _MultiFileProgressInterface MultiFileProgressInterface;
+typedef struct _MultiFileProgressInterfaceIface MultiFileProgressInterfaceIface;
+
+#define MODEL_TYPE_CLIP_IMPORTER (model_clip_importer_get_type ())
+#define MODEL_CLIP_IMPORTER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_CLIP_IMPORTER, ModelClipImporter))
+#define MODEL_CLIP_IMPORTER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_CLIP_IMPORTER, ModelClipImporterClass))
+#define MODEL_IS_CLIP_IMPORTER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_CLIP_IMPORTER))
+#define MODEL_IS_CLIP_IMPORTER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_CLIP_IMPORTER))
+#define MODEL_CLIP_IMPORTER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_CLIP_IMPORTER, ModelClipImporterClass))
+
+typedef struct _ModelClipImporter ModelClipImporter;
+typedef struct _ModelClipImporterClass ModelClipImporterClass;
+typedef struct _ModelClipImporterPrivate ModelClipImporterPrivate;
+
+#define MODEL_CLIP_IMPORTER_TYPE_IMPORT_STATE (model_clip_importer_import_state_get_type ())
+
+#define MODEL_TYPE_FETCHER (model_fetcher_get_type ())
+#define MODEL_FETCHER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_FETCHER, ModelFetcher))
+#define MODEL_FETCHER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_FETCHER, ModelFetcherClass))
+#define MODEL_IS_FETCHER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_FETCHER))
+#define MODEL_IS_FETCHER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_FETCHER))
+#define MODEL_FETCHER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_FETCHER, ModelFetcherClass))
+
+typedef struct _ModelFetcher ModelFetcher;
+typedef struct _ModelFetcherClass ModelFetcherClass;
+
+#define MODEL_TYPE_CLIP_FETCHER (model_clip_fetcher_get_type ())
+#define MODEL_CLIP_FETCHER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_CLIP_FETCHER, ModelClipFetcher))
+#define MODEL_CLIP_FETCHER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_CLIP_FETCHER, ModelClipFetcherClass))
+#define MODEL_IS_CLIP_FETCHER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_CLIP_FETCHER))
+#define MODEL_IS_CLIP_FETCHER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_CLIP_FETCHER))
+#define MODEL_CLIP_FETCHER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_CLIP_FETCHER, ModelClipFetcherClass))
+
+typedef struct _ModelClipFetcher ModelClipFetcher;
+typedef struct _ModelClipFetcherClass ModelClipFetcherClass;
+#define _g_free0(var) (var = (g_free (var), NULL))
+#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
+#define _gst_object_unref0(var) ((var == NULL) ? NULL : (var = (gst_object_unref (var), NULL)))
+
+#define LOGGING_TYPE_FACILITY (logging_facility_get_type ())
+
+#define LOGGING_TYPE_LEVEL (logging_level_get_type ())
+typedef struct _ModelFetcherPrivate ModelFetcherPrivate;
+
+#define MODEL_TYPE_CLIP_FILE (model_clip_file_get_type ())
+#define MODEL_CLIP_FILE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_CLIP_FILE, ModelClipFile))
+#define MODEL_CLIP_FILE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_CLIP_FILE, ModelClipFileClass))
+#define MODEL_IS_CLIP_FILE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_CLIP_FILE))
+#define MODEL_IS_CLIP_FILE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_CLIP_FILE))
+#define MODEL_CLIP_FILE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_CLIP_FILE, ModelClipFileClass))
+
+typedef struct _ModelClipFile ModelClipFile;
+typedef struct _ModelClipFileClass ModelClipFileClass;
+typedef struct _ModelClipFilePrivate ModelClipFilePrivate;
+#define _g_error_free0(var) ((var == NULL) ? NULL : (var = (g_error_free (var), NULL)))
+
+#define MODEL_TYPE_MEDIA_TYPE (model_media_type_get_type ())
+
+#define TYPE_SINGLE_DECODE_BIN (single_decode_bin_get_type ())
+#define SINGLE_DECODE_BIN(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_SINGLE_DECODE_BIN, SingleDecodeBin))
+#define SINGLE_DECODE_BIN_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_SINGLE_DECODE_BIN, SingleDecodeBinClass))
+#define IS_SINGLE_DECODE_BIN(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_SINGLE_DECODE_BIN))
+#define IS_SINGLE_DECODE_BIN_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_SINGLE_DECODE_BIN))
+#define SINGLE_DECODE_BIN_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_SINGLE_DECODE_BIN, SingleDecodeBinClass))
+
+typedef struct _SingleDecodeBin SingleDecodeBin;
+typedef struct _SingleDecodeBinClass SingleDecodeBinClass;
+#define _gst_caps_unref0(var) ((var == NULL) ? NULL : (var = (gst_caps_unref (var), NULL)))
+
+#define MODEL_TYPE_LIBRARY_IMPORTER (model_library_importer_get_type ())
+#define MODEL_LIBRARY_IMPORTER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_LIBRARY_IMPORTER, ModelLibraryImporter))
+#define MODEL_LIBRARY_IMPORTER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_LIBRARY_IMPORTER, ModelLibraryImporterClass))
+#define MODEL_IS_LIBRARY_IMPORTER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_LIBRARY_IMPORTER))
+#define MODEL_IS_LIBRARY_IMPORTER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_LIBRARY_IMPORTER))
+#define MODEL_LIBRARY_IMPORTER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_LIBRARY_IMPORTER, ModelLibraryImporterClass))
+
+typedef struct _ModelLibraryImporter ModelLibraryImporter;
+typedef struct _ModelLibraryImporterClass ModelLibraryImporterClass;
+typedef struct _ModelLibraryImporterPrivate ModelLibraryImporterPrivate;
+
+#define MODEL_TYPE_PROJECT (model_project_get_type ())
+#define MODEL_PROJECT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_PROJECT, ModelProject))
+#define MODEL_PROJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_PROJECT, ModelProjectClass))
+#define MODEL_IS_PROJECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_PROJECT))
+#define MODEL_IS_PROJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_PROJECT))
+#define MODEL_PROJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_PROJECT, ModelProjectClass))
+
+typedef struct _ModelProject ModelProject;
+typedef struct _ModelProjectClass ModelProjectClass;
+
+#define MODEL_TYPE_TIMELINE_IMPORTER (model_timeline_importer_get_type ())
+#define MODEL_TIMELINE_IMPORTER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_TIMELINE_IMPORTER, ModelTimelineImporter))
+#define MODEL_TIMELINE_IMPORTER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_TIMELINE_IMPORTER, ModelTimelineImporterClass))
+#define MODEL_IS_TIMELINE_IMPORTER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_TIMELINE_IMPORTER))
+#define MODEL_IS_TIMELINE_IMPORTER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_TIMELINE_IMPORTER))
+#define MODEL_TIMELINE_IMPORTER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_TIMELINE_IMPORTER, ModelTimelineImporterClass))
+
+typedef struct _ModelTimelineImporter ModelTimelineImporter;
+typedef struct _ModelTimelineImporterClass ModelTimelineImporterClass;
+typedef struct _ModelTimelineImporterPrivate ModelTimelineImporterPrivate;
+
+#define MODEL_TYPE_TRACK (model_track_get_type ())
+#define MODEL_TRACK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_TRACK, ModelTrack))
+#define MODEL_TRACK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_TRACK, ModelTrackClass))
+#define MODEL_IS_TRACK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_TRACK))
+#define MODEL_IS_TRACK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_TRACK))
+#define MODEL_TRACK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_TRACK, ModelTrackClass))
+
+typedef struct _ModelTrack ModelTrack;
+typedef struct _ModelTrackClass ModelTrackClass;
+
+#define MODEL_TYPE_VIDEO_TRACK (model_video_track_get_type ())
+#define MODEL_VIDEO_TRACK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_VIDEO_TRACK, ModelVideoTrack))
+#define MODEL_VIDEO_TRACK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_VIDEO_TRACK, ModelVideoTrackClass))
+#define MODEL_IS_VIDEO_TRACK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_VIDEO_TRACK))
+#define MODEL_IS_VIDEO_TRACK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_VIDEO_TRACK))
+#define MODEL_VIDEO_TRACK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_VIDEO_TRACK, ModelVideoTrackClass))
+
+typedef struct _ModelVideoTrack ModelVideoTrack;
+typedef struct _ModelVideoTrackClass ModelVideoTrackClass;
+
+#define MODEL_TYPE_AUDIO_TRACK (model_audio_track_get_type ())
+#define MODEL_AUDIO_TRACK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_AUDIO_TRACK, ModelAudioTrack))
+#define MODEL_AUDIO_TRACK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_AUDIO_TRACK, ModelAudioTrackClass))
+#define MODEL_IS_AUDIO_TRACK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_AUDIO_TRACK))
+#define MODEL_IS_AUDIO_TRACK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_AUDIO_TRACK))
+#define MODEL_AUDIO_TRACK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_AUDIO_TRACK, ModelAudioTrackClass))
+
+typedef struct _ModelAudioTrack ModelAudioTrack;
+typedef struct _ModelAudioTrackClass ModelAudioTrackClass;
+
+#define MODEL_TYPE_TEMPO_INFORMATION (model_tempo_information_get_type ())
+#define MODEL_TEMPO_INFORMATION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_TEMPO_INFORMATION, ModelTempoInformation))
+#define MODEL_IS_TEMPO_INFORMATION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_TEMPO_INFORMATION))
+#define MODEL_TEMPO_INFORMATION_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), MODEL_TYPE_TEMPO_INFORMATION, ModelTempoInformationIface))
+
+typedef struct _ModelTempoInformation ModelTempoInformation;
+typedef struct _ModelTempoInformationIface ModelTempoInformationIface;
+
+#define TYPE_FRACTION (fraction_get_type ())
+typedef struct _Fraction Fraction;
+typedef struct _ModelProjectPrivate ModelProjectPrivate;
+
+#define TYPE_TIME_CODE (time_code_get_type ())
+typedef struct _TimeCode TimeCode;
+
+#define VIEW_TYPE_MEDIA_ENGINE (view_media_engine_get_type ())
+#define VIEW_MEDIA_ENGINE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VIEW_TYPE_MEDIA_ENGINE, ViewMediaEngine))
+#define VIEW_MEDIA_ENGINE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VIEW_TYPE_MEDIA_ENGINE, ViewMediaEngineClass))
+#define VIEW_IS_MEDIA_ENGINE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VIEW_TYPE_MEDIA_ENGINE))
+#define VIEW_IS_MEDIA_ENGINE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VIEW_TYPE_MEDIA_ENGINE))
+#define VIEW_MEDIA_ENGINE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VIEW_TYPE_MEDIA_ENGINE, ViewMediaEngineClass))
+
+typedef struct _ViewMediaEngine ViewMediaEngine;
+typedef struct _ViewMediaEngineClass ViewMediaEngineClass;
+
+#define MODEL_TYPE_PROJECT_LOADER (model_project_loader_get_type ())
+#define MODEL_PROJECT_LOADER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_PROJECT_LOADER, ModelProjectLoader))
+#define MODEL_PROJECT_LOADER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_PROJECT_LOADER, ModelProjectLoaderClass))
+#define MODEL_IS_PROJECT_LOADER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_PROJECT_LOADER))
+#define MODEL_IS_PROJECT_LOADER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_PROJECT_LOADER))
+#define MODEL_PROJECT_LOADER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_PROJECT_LOADER, ModelProjectLoaderClass))
+
+typedef struct _ModelProjectLoader ModelProjectLoader;
+typedef struct _ModelProjectLoaderClass ModelProjectLoaderClass;
+
+#define MODEL_TYPE_UNDO_MANAGER (model_undo_manager_get_type ())
+#define MODEL_UNDO_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_UNDO_MANAGER, ModelUndoManager))
+#define MODEL_UNDO_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_UNDO_MANAGER, ModelUndoManagerClass))
+#define MODEL_IS_UNDO_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_UNDO_MANAGER))
+#define MODEL_IS_UNDO_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_UNDO_MANAGER))
+#define MODEL_UNDO_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_UNDO_MANAGER, ModelUndoManagerClass))
+
+typedef struct _ModelUndoManager ModelUndoManager;
+typedef struct _ModelUndoManagerClass ModelUndoManagerClass;
+
+struct _MultiFileProgressInterfaceIface {
+       GTypeInterface parent_iface;
+       void (*cancel) (MultiFileProgressInterface* self);
+       void (*complete) (MultiFileProgressInterface* self);
+};
+
+struct _ModelClipImporter {
+       GObject parent_instance;
+       ModelClipImporterPrivate * priv;
+};
+
+struct _ModelClipImporterClass {
+       GObjectClass parent_class;
+};
+
+typedef enum  {
+       MODEL_CLIP_IMPORTER_IMPORT_STATE_FETCHING,
+       MODEL_CLIP_IMPORTER_IMPORT_STATE_IMPORTING,
+       MODEL_CLIP_IMPORTER_IMPORT_STATE_CANCELLED
+} ModelClipImporterImportState;
+
+struct _ModelClipImporterPrivate {
+       char* import_directory;
+       ModelClipImporterImportState import_state;
+       gboolean import_done;
+       gboolean all_done;
+       ModelClipFetcher* our_fetcher;
+       GstPad* video_pad;
+       GstPad* audio_pad;
+       GstPipeline* pipeline;
+       GstElement* filesink;
+       GstElement* video_convert;
+       GstElement* audio_convert;
+       GstElement* mux;
+       GstBin* video_decoder;
+       GstBin* audio_decoder;
+       gint current_file_importing;
+       gint64 current_time;
+       gint64 total_time;
+       gint64 previous_time;
+       GeeArrayList* filenames;
+       GeeArrayList* queued_fetchers;
+       GeeArrayList* queued_filenames;
+       GeeArrayList* no_import_formats;
+};
+
+typedef enum  {
+       LOGGING_FACILITY_SIGNAL_HANDLERS,
+       LOGGING_FACILITY_DEVELOPER_WARNINGS,
+       LOGGING_FACILITY_GRAPH,
+       LOGGING_FACILITY_LOADING,
+       LOGGING_FACILITY_IMPORT,
+       LOGGING_FACILITY_SINGLEDECODEBIN
+} LoggingFacility;
+
+typedef enum  {
+       LOGGING_LEVEL_CRITICAL,
+       LOGGING_LEVEL_HIGH,
+       LOGGING_LEVEL_MEDIUM,
+       LOGGING_LEVEL_LOW,
+       LOGGING_LEVEL_INFO,
+       LOGGING_LEVEL_VERBOSE
+} LoggingLevel;
+
+struct _ModelFetcher {
+       GObject parent_instance;
+       ModelFetcherPrivate * priv;
+       GstElement* filesrc;
+       GstElement* decodebin;
+       GstPipeline* pipeline;
+       ModelClipFile* clipfile;
+       char* error_string;
+};
+
+struct _ModelFetcherClass {
+       GObjectClass parent_class;
+       void (*on_pad_added) (ModelFetcher* self, GstPad* pad);
+       void (*on_state_change) (ModelFetcher* self, GstBus* bus, GstMessage* message);
+};
+
+struct _ModelClipFile {
+       GObject parent_instance;
+       ModelClipFilePrivate * priv;
+       char* filename;
+       GstCaps* video_caps;
+       GstCaps* audio_caps;
+       GdkPixbuf* thumbnail;
+};
+
+struct _ModelClipFileClass {
+       GObjectClass parent_class;
+};
+
+typedef enum  {
+       MODEL_MEDIA_TYPE_AUDIO,
+       MODEL_MEDIA_TYPE_VIDEO
+} ModelMediaType;
+
+struct _ModelLibraryImporter {
+       GObject parent_instance;
+       ModelLibraryImporterPrivate * priv;
+       ModelProject* project;
+       ModelClipImporter* importer;
+};
+
+struct _ModelLibraryImporterClass {
+       GObjectClass parent_class;
+       void (*append_existing_clipfile) (ModelLibraryImporter* self, ModelClipFile* f);
+       void (*on_clip_complete) (ModelLibraryImporter* self, ModelClipFile* f);
+};
+
+struct _ModelTimelineImporter {
+       ModelLibraryImporter parent_instance;
+       ModelTimelineImporterPrivate * priv;
+};
+
+struct _ModelTimelineImporterClass {
+       ModelLibraryImporterClass parent_class;
+};
+
+struct _ModelTimelineImporterPrivate {
+       ModelTrack* track;
+       gint64 time_to_add;
+       gboolean both_tracks;
+};
+
+struct _Fraction {
+       gint numerator;
+       gint denominator;
+};
+
+struct _ModelTempoInformationIface {
+       GTypeInterface parent_iface;
+       void (*get_time_signature) (ModelTempoInformation* self, Fraction* result);
+       gint (*get_bpm) (ModelTempoInformation* self);
+};
+
+struct _TimeCode {
+       gint hour;
+       gint minute;
+       gint second;
+       gint frame;
+       gboolean drop_code;
+};
+
+struct _ModelProject {
+       GObject parent_instance;
+       ModelProjectPrivate * priv;
+       GeeArrayList* tracks;
+       GeeArrayList* inactive_tracks;
+       GeeArrayList* clipfiles;
+       ViewMediaEngine* media_engine;
+       char* project_file;
+       ModelProjectLoader* loader;
+       ModelUndoManager* undo_manager;
+       ModelLibraryImporter* importer;
+       Fraction default_framerate;
+       gboolean click_during_play;
+       gboolean click_during_record;
+       double click_volume;
+       gboolean library_visible;
+       gint library_width;
+       gboolean snap_to_clip;
+};
+
+struct _ModelProjectClass {
+       GObjectClass parent_class;
+       void (*get_clip_time) (ModelProject* self, ModelClipFile* f, TimeCode* result);
+       char* (*get_project_file) (ModelProject* self);
+       void (*do_append) (ModelProject* self, ModelTrack* track, ModelClipFile* clipfile, const char* name, gint64 insert_time);
+       void (*add_track) (ModelProject* self, ModelTrack* track);
+       void (*insert_track) (ModelProject* self, gint index, ModelTrack* track);
+       void (*load) (ModelProject* self, const char* fname);
+       void (*save) (ModelProject* self, const char* filename);
+       char* (*get_app_name) (ModelProject* self);
+       void (*load_complete) (ModelProject* self);
+};
+
+
+static gpointer model_clip_importer_parent_class = NULL;
+static MultiFileProgressInterfaceIface* model_clip_importer_multi_file_progress_interface_parent_iface = NULL;
+static gpointer model_library_importer_parent_class = NULL;
+static gpointer model_timeline_importer_parent_class = NULL;
+
+GType multi_file_progress_interface_get_type (void);
+GType model_clip_importer_get_type (void);
+static GType model_clip_importer_import_state_get_type (void) G_GNUC_UNUSED;
+GType model_fetcher_get_type (void);
+GType model_clip_fetcher_get_type (void);
+#define MODEL_CLIP_IMPORTER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), MODEL_TYPE_CLIP_IMPORTER, ModelClipImporterPrivate))
+enum  {
+       MODEL_CLIP_IMPORTER_DUMMY_PROPERTY
+};
+ModelClipImporter* model_clip_importer_new (void);
+ModelClipImporter* model_clip_importer_construct (GType object_type);
+void model_clip_importer_add_filename (ModelClipImporter* self, const char* filename);
+static gboolean model_clip_importer_on_timer_callback (ModelClipImporter* self);
+static gboolean _model_clip_importer_on_timer_callback_gsource_func (gpointer self);
+static void model_clip_importer_start_import (ModelClipImporter* self);
+static void model_clip_importer_real_cancel (MultiFileProgressInterface* base);
+static void model_clip_importer_process_curr_file (ModelClipImporter* self, GError** error);
+void model_clip_importer_start (ModelClipImporter* self, GError** error);
+GType logging_facility_get_type (void);
+GType logging_level_get_type (void);
+void logging_emit (GObject* object, LoggingFacility facility, LoggingLevel level, const char* message);
+ModelClipFetcher* model_clip_fetcher_new (const char* filename, GError** error);
+ModelClipFetcher* model_clip_fetcher_construct (GType object_type, const char* filename, GError** error);
+static void model_clip_importer_on_fetcher_ready (ModelClipImporter* self, ModelFetcher* f);
+static void _model_clip_importer_on_fetcher_ready_model_fetcher_ready (ModelFetcher* _sender, ModelFetcher* fetcher, gpointer self);
+static void model_clip_importer_do_import (ModelClipImporter* self, ModelClipFetcher* f, GError** error);
+static void model_clip_importer_real_complete (MultiFileProgressInterface* base);
+char* append_extension (const char* path, const char* extension);
+GType model_clip_file_get_type (void);
+gint64 model_clip_file_get_length (ModelClipFile* self);
+static void model_clip_importer_do_import_complete (ModelClipImporter* self, GError** error);
+static gboolean model_clip_importer_need_to_import (ModelClipImporter* self, ModelFetcher* f);
+gboolean md5_checksum_on_file (const char* filename, char** checksum);
+char* isolate_filename (const char* path);
+gboolean get_file_md5_checksum (const char* filename, char** checksum);
+void save_file_md5_checksum (const char* filename, const char* checksum);
+static void model_clip_importer_on_state_changed (ModelClipImporter* self, GstBus* b, GstMessage* m);
+static void _model_clip_importer_on_state_changed_gst_bus_message (GstBus* _sender, GstMessage* message, gpointer self);
+static void model_clip_importer_on_eos (ModelClipImporter* self);
+static void _model_clip_importer_on_eos_gst_bus_message (GstBus* _sender, GstMessage* message, gpointer self);
+static void model_clip_importer_on_error (ModelClipImporter* self, GstBus* bus, GstMessage* message);
+static void _model_clip_importer_on_error_gst_bus_message (GstBus* _sender, GstMessage* message, gpointer self);
+static void model_clip_importer_on_warning (ModelClipImporter* self, GstBus* bus, GstMessage* message);
+static void _model_clip_importer_on_warning_gst_bus_message (GstBus* _sender, GstMessage* message, gpointer self);
+GstElement* make_element (const char* name, GError** error);
+GType model_media_type_get_type (void);
+gboolean model_clip_file_is_of_type (ModelClipFile* self, ModelMediaType t);
+SingleDecodeBin* single_decode_bin_new (GstCaps* caps, const char* name, const char* uri, GError** error);
+SingleDecodeBin* single_decode_bin_construct (GType object_type, GstCaps* caps, const char* name, const char* uri, GError** error);
+GType single_decode_bin_get_type (void);
+static void model_clip_importer_on_pad_added (ModelClipImporter* self, GstPad* p);
+static void _model_clip_importer_on_pad_added_gst_element_pad_added (GstElement* _sender, GstPad* pad, gpointer self);
+static void model_clip_importer_finalize (GObject* obj);
+GType model_library_importer_get_type (void);
+GType model_project_get_type (void);
+enum  {
+       MODEL_LIBRARY_IMPORTER_DUMMY_PROPERTY
+};
+void model_library_importer_on_clip_complete (ModelLibraryImporter* self, ModelClipFile* f);
+static void _model_library_importer_on_clip_complete_model_clip_importer_clip_complete (ModelClipImporter* _sender, ModelClipFile* f, gpointer self);
+static void model_library_importer_on_error_occurred (ModelLibraryImporter* self, const char* _error_);
+static void _model_library_importer_on_error_occurred_model_clip_importer_error_occurred (ModelClipImporter* _sender, const char* _error_, gpointer self);
+static void model_library_importer_on_importer_started (ModelLibraryImporter* self, ModelClipImporter* i, gint num);
+static void _model_library_importer_on_importer_started_model_clip_importer_importing_started (ModelClipImporter* _sender, gint num_clips, gpointer self);
+ModelLibraryImporter* model_library_importer_new (ModelProject* p);
+ModelLibraryImporter* model_library_importer_construct (GType object_type, ModelProject* p);
+void model_library_importer_append_existing_clipfile (ModelLibraryImporter* self, ModelClipFile* f);
+static void model_library_importer_real_append_existing_clipfile (ModelLibraryImporter* self, ModelClipFile* f);
+ModelClipFile* model_project_find_clipfile (ModelProject* self, const char* filename);
+void model_project_add_clipfile (ModelProject* self, ModelClipFile* clipfile);
+static void model_library_importer_real_on_clip_complete (ModelLibraryImporter* self, ModelClipFile* f);
+void model_library_importer_add_file (ModelLibraryImporter* self, const char* filename, GError** error);
+void model_library_importer_start (ModelLibraryImporter* self, GError** error);
+static void model_library_importer_finalize (GObject* obj);
+GType model_timeline_importer_get_type (void);
+GType model_track_get_type (void);
+#define MODEL_TIMELINE_IMPORTER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), MODEL_TYPE_TIMELINE_IMPORTER, ModelTimelineImporterPrivate))
+enum  {
+       MODEL_TIMELINE_IMPORTER_DUMMY_PROPERTY
+};
+ModelTimelineImporter* model_timeline_importer_new (ModelTrack* track, ModelProject* p, gint64 time_to_add, gboolean both_tracks);
+ModelTimelineImporter* model_timeline_importer_construct (GType object_type, ModelTrack* track, ModelProject* p, gint64 time_to_add, gboolean both_tracks);
+GType model_video_track_get_type (void);
+GType model_audio_track_get_type (void);
+ModelAudioTrack* model_project_find_audio_track (ModelProject* self);
+ModelVideoTrack* model_project_find_video_track (ModelProject* self);
+void model_project_add (ModelProject* self, ModelTrack* track, ModelClipFile* clipfile, gint64 time);
+static void model_timeline_importer_add_to_both (ModelTimelineImporter* self, ModelClipFile* clip_file);
+GType fraction_get_type (void);
+Fraction* fraction_dup (const Fraction* self);
+void fraction_free (Fraction* self);
+GType model_tempo_information_get_type (void);
+GType time_code_get_type (void);
+TimeCode* time_code_dup (const TimeCode* self);
+void time_code_free (TimeCode* self);
+GType view_media_engine_get_type (void);
+GType model_project_loader_get_type (void);
+gpointer model_undo_manager_ref (gpointer instance);
+void model_undo_manager_unref (gpointer instance);
+GParamSpec* model_param_spec_undo_manager (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void model_value_set_undo_manager (GValue* value, gpointer v_object);
+void model_value_take_undo_manager (GValue* value, gpointer v_object);
+gpointer model_value_get_undo_manager (const GValue* value);
+GType model_undo_manager_get_type (void);
+void model_undo_manager_start_transaction (ModelUndoManager* self, const char* description);
+void model_undo_manager_end_transaction (ModelUndoManager* self, const char* description);
+static void model_timeline_importer_real_append_existing_clipfile (ModelLibraryImporter* base, ModelClipFile* f);
+static void model_timeline_importer_real_on_clip_complete (ModelLibraryImporter* base, ModelClipFile* f);
+static void model_timeline_importer_finalize (GObject* obj);
+static int _vala_strcmp0 (const char * str1, const char * str2);
+
+
+static void g_cclosure_user_marshal_VOID__OBJECT_INT (GClosure * closure, GValue * return_value, guint n_param_values, const GValue * param_values, gpointer invocation_hint, gpointer marshal_data);
+
+static GType model_clip_importer_import_state_get_type (void) {
+       static volatile gsize model_clip_importer_import_state_type_id__volatile = 0;
+       if (g_once_init_enter (&model_clip_importer_import_state_type_id__volatile)) {
+               static const GEnumValue values[] = {{MODEL_CLIP_IMPORTER_IMPORT_STATE_FETCHING, "MODEL_CLIP_IMPORTER_IMPORT_STATE_FETCHING", "fetching"}, {MODEL_CLIP_IMPORTER_IMPORT_STATE_IMPORTING, "MODEL_CLIP_IMPORTER_IMPORT_STATE_IMPORTING", "importing"}, {MODEL_CLIP_IMPORTER_IMPORT_STATE_CANCELLED, "MODEL_CLIP_IMPORTER_IMPORT_STATE_CANCELLED", "cancelled"}, {0, NULL, NULL}};
+               GType model_clip_importer_import_state_type_id;
+               model_clip_importer_import_state_type_id = g_enum_register_static ("ModelClipImporterImportState", values);
+               g_once_init_leave (&model_clip_importer_import_state_type_id__volatile, model_clip_importer_import_state_type_id);
+       }
+       return model_clip_importer_import_state_type_id__volatile;
+}
+
+
+#line 52 "import.vala"
+ModelClipImporter* model_clip_importer_construct (GType object_type) {
+#line 516 "import.c"
+       ModelClipImporter * self;
+       char* _tmp0_;
+       char* _tmp1_;
+#line 52 "import.vala"
+       self = (ModelClipImporter*) g_object_new (object_type, NULL);
+#line 53 "import.vala"
+       self->priv->import_directory = (_tmp0_ = g_strdup (g_get_home_dir ()), _g_free0 (self->priv->import_directory), _tmp0_);
+#line 54 "import.vala"
+       self->priv->import_directory = (_tmp1_ = g_strconcat (self->priv->import_directory, "/.lombard_fillmore_import/", NULL), _g_free0 (self->priv->import_directory), _tmp1_);
+#line 56 "import.vala"
+       g_mkdir (self->priv->import_directory, 0777);
+#line 58 "import.vala"
+       gee_abstract_collection_add (GEE_ABSTRACT_COLLECTION (self->priv->no_import_formats), "YUY2");
+#line 59 "import.vala"
+       gee_abstract_collection_add (GEE_ABSTRACT_COLLECTION (self->priv->no_import_formats), "Y41B");
+#line 61 "import.vala"
+       self->priv->import_state = MODEL_CLIP_IMPORTER_IMPORT_STATE_FETCHING;
+#line 534 "import.c"
+       return self;
+}
+
+
+#line 52 "import.vala"
+ModelClipImporter* model_clip_importer_new (void) {
+#line 52 "import.vala"
+       return model_clip_importer_construct (MODEL_TYPE_CLIP_IMPORTER);
+#line 543 "import.c"
+}
+
+
+#line 64 "import.vala"
+void model_clip_importer_add_filename (ModelClipImporter* self, const char* filename) {
+#line 64 "import.vala"
+       g_return_if_fail (MODEL_IS_CLIP_IMPORTER (self));
+#line 64 "import.vala"
+       g_return_if_fail (filename != NULL);
+#line 65 "import.vala"
+       gee_abstract_collection_add (GEE_ABSTRACT_COLLECTION (self->priv->filenames), filename);
+#line 555 "import.c"
+}
+
+
+#line 68 "import.vala"
+static gboolean model_clip_importer_on_timer_callback (ModelClipImporter* self) {
+#line 561 "import.c"
+       gboolean result = FALSE;
+       gint64 time = 0LL;
+       GstFormat format;
+       gboolean _tmp0_ = FALSE;
+#line 68 "import.vala"
+       g_return_val_if_fail (MODEL_IS_CLIP_IMPORTER (self), FALSE);
+#line 70 "import.vala"
+       format = GST_FORMAT_TIME;
+#line 72 "import.vala"
+       if (self->priv->all_done) {
+#line 572 "import.c"
+               result = FALSE;
+#line 73 "import.vala"
+               return result;
+#line 576 "import.c"
+       }
+#line 75 "import.vala"
+       if (gst_element_query_position (GST_ELEMENT (self->priv->pipeline), &format, &time)) {
+#line 76 "import.vala"
+               _tmp0_ = format == GST_FORMAT_TIME;
+#line 582 "import.c"
+       } else {
+#line 75 "import.vala"
+               _tmp0_ = FALSE;
+#line 586 "import.c"
+       }
+#line 75 "import.vala"
+       if (_tmp0_) {
+#line 77 "import.vala"
+               if (time > self->priv->previous_time) {
+#line 78 "import.vala"
+                       self->priv->current_time = self->priv->current_time + (time - self->priv->previous_time);
+#line 594 "import.c"
+               }
+#line 79 "import.vala"
+               self->priv->previous_time = time;
+#line 80 "import.vala"
+               if (self->priv->current_time >= self->priv->total_time) {
+#line 81 "import.vala"
+                       g_signal_emit_by_name (MULTI_FILE_PROGRESS_INTERFACE (self), "fraction-updated", 1.0);
+#line 602 "import.c"
+                       result = FALSE;
+#line 82 "import.vala"
+                       return result;
+#line 606 "import.c"
+               } else {
+#line 84 "import.vala"
+                       g_signal_emit_by_name (MULTI_FILE_PROGRESS_INTERFACE (self), "fraction-updated", self->priv->current_time / ((double) self->priv->total_time));
+#line 610 "import.c"
+               }
+       }
+       result = TRUE;
+#line 86 "import.vala"
+       return result;
+#line 616 "import.c"
+}
+
+
+#line 68 "import.vala"
+static gboolean _model_clip_importer_on_timer_callback_gsource_func (gpointer self) {
+#line 622 "import.c"
+       gboolean result;
+       result = model_clip_importer_on_timer_callback (self);
+       return result;
+}
+
+
+#line 89 "import.vala"
+static void model_clip_importer_start_import (ModelClipImporter* self) {
+#line 89 "import.vala"
+       g_return_if_fail (MODEL_IS_CLIP_IMPORTER (self));
+#line 90 "import.vala"
+       self->priv->import_state = MODEL_CLIP_IMPORTER_IMPORT_STATE_IMPORTING;
+#line 91 "import.vala"
+       self->priv->current_file_importing = 0;
+#line 92 "import.vala"
+       g_signal_emit_by_name (self, "importing-started", gee_collection_get_size (GEE_COLLECTION (self->priv->queued_fetchers)));
+#line 93 "import.vala"
+       g_timeout_add_full (G_PRIORITY_DEFAULT, (guint) 50, _model_clip_importer_on_timer_callback_gsource_func, g_object_ref (self), g_object_unref);
+#line 641 "import.c"
+}
+
+
+#line 96 "import.vala"
+static void model_clip_importer_real_cancel (MultiFileProgressInterface* base) {
+#line 647 "import.c"
+       ModelClipImporter * self;
+       self = MODEL_CLIP_IMPORTER (base);
+#line 97 "import.vala"
+       self->priv->all_done = TRUE;
+#line 98 "import.vala"
+       self->priv->import_state = MODEL_CLIP_IMPORTER_IMPORT_STATE_CANCELLED;
+#line 99 "import.vala"
+       if (self->priv->pipeline != NULL) {
+#line 100 "import.vala"
+               gst_element_set_state (GST_ELEMENT (self->priv->pipeline), GST_STATE_NULL);
+#line 658 "import.c"
+       }
+}
+
+
+#line 104 "import.vala"
+void model_clip_importer_start (ModelClipImporter* self, GError** error) {
+#line 665 "import.c"
+       GError * _inner_error_;
+#line 104 "import.vala"
+       g_return_if_fail (MODEL_IS_CLIP_IMPORTER (self));
+#line 669 "import.c"
+       _inner_error_ = NULL;
+#line 105 "import.vala"
+       model_clip_importer_process_curr_file (self, &_inner_error_);
+#line 673 "import.c"
+       if (_inner_error_ != NULL) {
+               g_propagate_error (error, _inner_error_);
+               return;
+       }
+}
+
+
+#line 173 "import.vala"
+static void _model_clip_importer_on_fetcher_ready_model_fetcher_ready (ModelFetcher* _sender, ModelFetcher* fetcher, gpointer self) {
+#line 683 "import.c"
+       model_clip_importer_on_fetcher_ready (self, fetcher);
+}
+
+
+#line 108 "import.vala"
+static void model_clip_importer_process_curr_file (ModelClipImporter* self, GError** error) {
+#line 690 "import.c"
+       GError * _inner_error_;
+#line 108 "import.vala"
+       g_return_if_fail (MODEL_IS_CLIP_IMPORTER (self));
+#line 694 "import.c"
+       _inner_error_ = NULL;
+#line 109 "import.vala"
+       if (self->priv->import_state == MODEL_CLIP_IMPORTER_IMPORT_STATE_FETCHING) {
+#line 110 "import.vala"
+               if (self->priv->current_file_importing == gee_collection_get_size (GEE_COLLECTION (self->priv->filenames))) {
+#line 111 "import.vala"
+                       if (gee_collection_get_size (GEE_COLLECTION (self->priv->queued_fetchers)) == 0) {
+#line 112 "import.vala"
+                               g_signal_emit_by_name (MULTI_FILE_PROGRESS_INTERFACE (self), "done");
+#line 704 "import.c"
+                       } else {
+#line 114 "import.vala"
+                               model_clip_importer_start_import (self);
+#line 708 "import.c"
+                       }
+               } else {
+                       char* _tmp1_;
+                       char* _tmp0_;
+                       char* _tmp2_;
+                       ModelClipFetcher* _tmp3_;
+                       ModelClipFetcher* _tmp4_;
+                       ModelClipFetcher* _tmp5_;
+#line 116 "import.vala"
+                       logging_emit (G_OBJECT (self), LOGGING_FACILITY_IMPORT, LOGGING_LEVEL_VERBOSE, _tmp1_ = g_strdup_printf ("fetching %s", _tmp0_ = (char*) gee_abstract_list_get (GEE_ABSTRACT_LIST (self->priv->filenames), self->priv->current_file_importing)));
+#line 719 "import.c"
+                       _g_free0 (_tmp1_);
+                       _g_free0 (_tmp0_);
+#line 118 "import.vala"
+                       _tmp4_ = (_tmp3_ = model_clip_fetcher_new (_tmp2_ = (char*) gee_abstract_list_get (GEE_ABSTRACT_LIST (self->priv->filenames), self->priv->current_file_importing), &_inner_error_), _g_free0 (_tmp2_), _tmp3_);
+#line 724 "import.c"
+                       if (_inner_error_ != NULL) {
+                               g_propagate_error (error, _inner_error_);
+                               return;
+                       }
+#line 118 "import.vala"
+                       self->priv->our_fetcher = (_tmp5_ = _tmp4_, _g_object_unref0 (self->priv->our_fetcher), _tmp5_);
+#line 119 "import.vala"
+                       g_signal_connect_object (MODEL_FETCHER (self->priv->our_fetcher), "ready", (GCallback) _model_clip_importer_on_fetcher_ready_model_fetcher_ready, self, 0);
+#line 733 "import.c"
+               }
+       }
+#line 123 "import.vala"
+       if (self->priv->import_state == MODEL_CLIP_IMPORTER_IMPORT_STATE_IMPORTING) {
+#line 124 "import.vala"
+               if (self->priv->current_file_importing == gee_collection_get_size (GEE_COLLECTION (self->priv->queued_fetchers))) {
+#line 125 "import.vala"
+                       g_signal_emit_by_name (MULTI_FILE_PROGRESS_INTERFACE (self), "fraction-updated", 1.0);
+#line 126 "import.vala"
+                       self->priv->all_done = TRUE;
+#line 744 "import.c"
+               } else {
+                       ModelClipFetcher* _tmp6_;
+#line 128 "import.vala"
+                       model_clip_importer_do_import (self, _tmp6_ = (ModelClipFetcher*) gee_abstract_list_get (GEE_ABSTRACT_LIST (self->priv->queued_fetchers), self->priv->current_file_importing), &_inner_error_);
+#line 749 "import.c"
+                       _g_object_unref0 (_tmp6_);
+                       if (_inner_error_ != NULL) {
+                               g_propagate_error (error, _inner_error_);
+                               return;
+                       }
+               }
+       }
+}
+
+
+#line 133 "import.vala"
+static void model_clip_importer_real_complete (MultiFileProgressInterface* base) {
+#line 762 "import.c"
+       ModelClipImporter * self;
+       self = MODEL_CLIP_IMPORTER (base);
+#line 134 "import.vala"
+       self->priv->all_done = TRUE;
+#line 767 "import.c"
+}
+
+
+#line 137 "import.vala"
+static void model_clip_importer_do_import_complete (ModelClipImporter* self, GError** error) {
+#line 773 "import.c"
+       GError * _inner_error_;
+#line 137 "import.vala"
+       g_return_if_fail (MODEL_IS_CLIP_IMPORTER (self));
+#line 777 "import.c"
+       _inner_error_ = NULL;
+#line 138 "import.vala"
+       if (self->priv->import_state == MODEL_CLIP_IMPORTER_IMPORT_STATE_IMPORTING) {
+#line 781 "import.c"
+               char* _tmp2_;
+               char* *_tmp1_;
+               char* _tmp0_;
+#line 139 "import.vala"
+               _tmp1_ = &MODEL_FETCHER (self->priv->our_fetcher)->clipfile->filename;
+#line 139 "import.vala"
+               (*_tmp1_) = (_tmp2_ = append_extension (_tmp0_ = (char*) gee_abstract_list_get (GEE_ABSTRACT_LIST (self->priv->queued_filenames), self->priv->current_file_importing), "mov"), _g_free0 ((*_tmp1_)), _tmp2_);
+#line 789 "import.c"
+               _g_free0 (_tmp0_);
+#line 141 "import.vala"
+               g_signal_emit_by_name (self, "clip-complete", MODEL_FETCHER (self->priv->our_fetcher)->clipfile);
+#line 793 "import.c"
+       } else {
+#line 143 "import.vala"
+               self->priv->total_time = self->priv->total_time + model_clip_file_get_length (MODEL_FETCHER (self->priv->our_fetcher)->clipfile);
+#line 797 "import.c"
+       }
+#line 145 "import.vala"
+       self->priv->current_file_importing++;
+#line 147 "import.vala"
+       if (self->priv->current_file_importing <= gee_collection_get_size (GEE_COLLECTION (self->priv->filenames))) {
+#line 148 "import.vala"
+               model_clip_importer_process_curr_file (self, &_inner_error_);
+#line 805 "import.c"
+               if (_inner_error_ != NULL) {
+                       g_propagate_error (error, _inner_error_);
+                       return;
+               }
+       } else {
+               char* _tmp3_;
+#line 150 "import.vala"
+               g_warning ("import.vala:150: %s", _tmp3_ = g_strdup_printf ("do_import_complete: current_file_importing out of bounds! %d %d", self->priv->current_file_importing, gee_collection_get_size (GEE_COLLECTION (self->priv->filenames))));
+#line 814 "import.c"
+               _g_free0 (_tmp3_);
+       }
+}
+
+
+#line 154 "import.vala"
+static gboolean model_clip_importer_need_to_import (ModelClipImporter* self, ModelFetcher* f) {
+#line 822 "import.c"
+       gboolean result = FALSE;
+#line 154 "import.vala"
+       g_return_val_if_fail (MODEL_IS_CLIP_IMPORTER (self), FALSE);
+#line 154 "import.vala"
+       g_return_val_if_fail (MODEL_IS_FETCHER (f), FALSE);
+#line 828 "import.c"
+       result = FALSE;
+#line 156 "import.vala"
+       return result;
+#line 832 "import.c"
+}
+
+
+#line 173 "import.vala"
+static void model_clip_importer_on_fetcher_ready (ModelClipImporter* self, ModelFetcher* f) {
+#line 838 "import.c"
+       GError * _inner_error_;
+#line 173 "import.vala"
+       g_return_if_fail (MODEL_IS_CLIP_IMPORTER (self));
+#line 173 "import.vala"
+       g_return_if_fail (MODEL_IS_FETCHER (f));
+#line 844 "import.c"
+       _inner_error_ = NULL;
+#line 174 "import.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_fetcher_ready");
+#line 848 "import.c"
+       {
+#line 176 "import.vala"
+               if (f->error_string != NULL) {
+#line 177 "import.vala"
+                       g_signal_emit_by_name (self, "error-occurred", f->error_string);
+#line 178 "import.vala"
+                       model_clip_importer_do_import_complete (self, &_inner_error_);
+#line 856 "import.c"
+                       if (_inner_error_ != NULL) {
+                               goto __catch7_g_error;
+                       }
+#line 179 "import.vala"
+                       return;
+#line 862 "import.c"
+               }
+#line 182 "import.vala"
+               if (model_clip_importer_need_to_import (self, f)) {
+#line 866 "import.c"
+                       char* checksum;
+                       char* _tmp2_;
+                       gboolean _tmp1_;
+                       char* _tmp0_ = NULL;
+                       checksum = NULL;
+#line 184 "import.vala"
+                       if ((_tmp1_ = md5_checksum_on_file (f->clipfile->filename, &_tmp0_), checksum = (_tmp2_ = _tmp0_, _g_free0 (checksum), _tmp2_), _tmp1_)) {
+#line 874 "import.c"
+                               char* _tmp3_;
+                               char* _tmp4_;
+                               char* base_filename;
+                               gint index;
+                               char* new_filename;
+#line 185 "import.vala"
+                               base_filename = (_tmp4_ = g_strconcat (self->priv->import_directory, _tmp3_ = isolate_filename (f->clipfile->filename), NULL), _g_free0 (_tmp3_), _tmp4_);
+#line 187 "import.vala"
+                               index = 0;
+#line 188 "import.vala"
+                               new_filename = g_strdup (base_filename);
+#line 189 "import.vala"
+                               while (TRUE) {
+#line 888 "import.c"
+                                       char* existing_checksum;
+                                       char* _tmp7_;
+                                       gboolean _tmp6_;
+                                       char* _tmp5_ = NULL;
+                                       existing_checksum = NULL;
+#line 191 "import.vala"
+                                       if ((_tmp6_ = get_file_md5_checksum (new_filename, &_tmp5_), existing_checksum = (_tmp7_ = _tmp5_, _g_free0 (existing_checksum), _tmp7_), _tmp6_)) {
+#line 896 "import.c"
+                                               char* _tmp10_;
+                                               char* _tmp9_;
+#line 192 "import.vala"
+                                               if (_vala_strcmp0 (checksum, existing_checksum) == 0) {
+#line 901 "import.c"
+                                                       char* _tmp8_;
+#line 194 "import.vala"
+                                                       gee_abstract_list_set (GEE_ABSTRACT_LIST (self->priv->filenames), self->priv->current_file_importing, _tmp8_ = append_extension (new_filename, "mov"));
+#line 905 "import.c"
+                                                       _g_free0 (_tmp8_);
+#line 196 "import.vala"
+                                                       self->priv->current_file_importing--;
+#line 197 "import.vala"
+                                                       self->priv->total_time = self->priv->total_time - model_clip_file_get_length (f->clipfile);
+#line 911 "import.c"
+                                                       _g_free0 (existing_checksum);
+#line 198 "import.vala"
+                                                       break;
+#line 915 "import.c"
+                                               }
+#line 200 "import.vala"
+                                               index++;
+#line 201 "import.vala"
+                                               new_filename = (_tmp10_ = g_strconcat (base_filename, _tmp9_ = g_strdup_printf ("%i", index), NULL), _g_free0 (new_filename), _tmp10_);
+#line 921 "import.c"
+                                               _g_free0 (_tmp9_);
+                                       } else {
+                                               ModelFetcher* _tmp11_;
+#line 204 "import.vala"
+                                               save_file_md5_checksum (new_filename, checksum);
+#line 205 "import.vala"
+                                               gee_abstract_collection_add (GEE_ABSTRACT_COLLECTION (self->priv->queued_filenames), new_filename);
+#line 206 "import.vala"
+                                               gee_abstract_collection_add (GEE_ABSTRACT_COLLECTION (self->priv->queued_fetchers), (_tmp11_ = f, MODEL_IS_CLIP_FETCHER (_tmp11_) ? ((ModelClipFetcher*) _tmp11_) : NULL));
+#line 931 "import.c"
+                                               _g_free0 (existing_checksum);
+#line 207 "import.vala"
+                                               break;
+#line 935 "import.c"
+                                       }
+                                       _g_free0 (existing_checksum);
+                               }
+                               _g_free0 (base_filename);
+                               _g_free0 (new_filename);
+                       } else {
+#line 211 "import.vala"
+                               g_error ("import.vala:211: Cannot get md5 checksum for file %s!", f->clipfile->filename);
+#line 944 "import.c"
+                       }
+                       _g_free0 (checksum);
+               } else {
+#line 213 "import.vala"
+                       g_signal_emit_by_name (self, "clip-complete", f->clipfile);
+#line 950 "import.c"
+               }
+#line 215 "import.vala"
+               model_clip_importer_do_import_complete (self, &_inner_error_);
+#line 954 "import.c"
+               if (_inner_error_ != NULL) {
+                       goto __catch7_g_error;
+               }
+       }
+       goto __finally7;
+       __catch7_g_error:
+       {
+               GError * e;
+               e = _inner_error_;
+               _inner_error_ = NULL;
+               {
+#line 217 "import.vala"
+                       g_signal_emit_by_name (self, "error-occurred", e->message);
+#line 968 "import.c"
+                       _g_error_free0 (e);
+               }
+       }
+       __finally7:
+       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;
+       }
+}
+
+
+static gpointer _g_object_ref0 (gpointer self) {
+       return self ? g_object_ref (self) : NULL;
+}
+
+
+#line 325 "import.vala"
+static void _model_clip_importer_on_state_changed_gst_bus_message (GstBus* _sender, GstMessage* message, gpointer self) {
+#line 988 "import.c"
+       model_clip_importer_on_state_changed (self, _sender, message);
+}
+
+
+#line 369 "import.vala"
+static void _model_clip_importer_on_eos_gst_bus_message (GstBus* _sender, GstMessage* message, gpointer self) {
+#line 995 "import.c"
+       model_clip_importer_on_eos (self);
+}
+
+
+#line 308 "import.vala"
+static void _model_clip_importer_on_error_gst_bus_message (GstBus* _sender, GstMessage* message, gpointer self) {
+#line 1002 "import.c"
+       model_clip_importer_on_error (self, _sender, message);
+}
+
+
+#line 317 "import.vala"
+static void _model_clip_importer_on_warning_gst_bus_message (GstBus* _sender, GstMessage* message, gpointer self) {
+#line 1009 "import.c"
+       model_clip_importer_on_warning (self, _sender, message);
+}
+
+
+static gpointer _gst_object_ref0 (gpointer self) {
+       return self ? gst_object_ref (self) : NULL;
+}
+
+
+#line 285 "import.vala"
+static void _model_clip_importer_on_pad_added_gst_element_pad_added (GstElement* _sender, GstPad* pad, gpointer self) {
+#line 1021 "import.c"
+       model_clip_importer_on_pad_added (self, pad);
+}
+
+
+#line 221 "import.vala"
+static void model_clip_importer_do_import (ModelClipImporter* self, ModelClipFetcher* f, GError** error) {
+#line 1028 "import.c"
+       GError * _inner_error_;
+       ModelClipFetcher* _tmp0_;
+       GstPipeline* _tmp1_;
+       GstBus* bus;
+       GstElement* _tmp2_;
+       GstElement* _tmp3_;
+       GstElement* _tmp4_;
+       GstElement* _tmp5_;
+       char* _tmp7_;
+       char* _tmp6_;
+       char* _tmp21_;
+       char* _tmp20_;
+#line 221 "import.vala"
+       g_return_if_fail (MODEL_IS_CLIP_IMPORTER (self));
+#line 221 "import.vala"
+       g_return_if_fail (MODEL_IS_CLIP_FETCHER (f));
+#line 1045 "import.c"
+       _inner_error_ = NULL;
+#line 222 "import.vala"
+       g_signal_emit_by_name (MULTI_FILE_PROGRESS_INTERFACE (self), "file-updated", MODEL_FETCHER (f)->clipfile->filename, self->priv->current_file_importing);
+#line 223 "import.vala"
+       self->priv->previous_time = (gint64) 0;
+#line 225 "import.vala"
+       self->priv->our_fetcher = (_tmp0_ = _g_object_ref0 (f), _g_object_unref0 (self->priv->our_fetcher), _tmp0_);
+#line 226 "import.vala"
+       self->priv->import_done = FALSE;
+#line 227 "import.vala"
+       self->priv->pipeline = (_tmp1_ = (GstPipeline*) gst_pipeline_new ("pipeline"), _gst_object_unref0 (self->priv->pipeline), _tmp1_);
+#line 228 "import.vala"
+       gst_pipeline_set_auto_flush_bus (self->priv->pipeline, FALSE);
+#line 230 "import.vala"
+       bus = gst_pipeline_get_bus (self->priv->pipeline);
+#line 231 "import.vala"
+       gst_bus_add_signal_watch (bus);
+#line 233 "import.vala"
+       g_signal_connect_object (bus, "message::state-changed", (GCallback) _model_clip_importer_on_state_changed_gst_bus_message, self, 0);
+#line 234 "import.vala"
+       g_signal_connect_object (bus, "message::eos", (GCallback) _model_clip_importer_on_eos_gst_bus_message, self, 0);
+#line 235 "import.vala"
+       g_signal_connect_object (bus, "message::error", (GCallback) _model_clip_importer_on_error_gst_bus_message, self, 0);
+#line 236 "import.vala"
+       g_signal_connect_object (bus, "message::warning", (GCallback) _model_clip_importer_on_warning_gst_bus_message, self, 0);
+#line 238 "import.vala"
+       _tmp2_ = make_element ("qtmux", &_inner_error_);
+#line 1073 "import.c"
+       if (_inner_error_ != NULL) {
+               g_propagate_error (error, _inner_error_);
+               _gst_object_unref0 (bus);
+               return;
+       }
+#line 238 "import.vala"
+       self->priv->mux = (_tmp3_ = _tmp2_, _gst_object_unref0 (self->priv->mux), _tmp3_);
+#line 240 "import.vala"
+       _tmp4_ = make_element ("filesink", &_inner_error_);
+#line 1083 "import.c"
+       if (_inner_error_ != NULL) {
+               g_propagate_error (error, _inner_error_);
+               _gst_object_unref0 (bus);
+               return;
+       }
+#line 240 "import.vala"
+       self->priv->filesink = (_tmp5_ = _tmp4_, _gst_object_unref0 (self->priv->filesink), _tmp5_);
+#line 241 "import.vala"
+       g_object_set (G_OBJECT (self->priv->filesink), "location", _tmp7_ = append_extension (_tmp6_ = (char*) gee_abstract_list_get (GEE_ABSTRACT_LIST (self->priv->queued_filenames), self->priv->current_file_importing), "mov"), NULL);
+#line 1093 "import.c"
+       _g_free0 (_tmp7_);
+       _g_free0 (_tmp6_);
+#line 243 "import.vala"
+       gst_bin_add_many (GST_BIN (self->priv->pipeline), _gst_object_ref0 (self->priv->mux), _gst_object_ref0 (self->priv->filesink), NULL);
+#line 245 "import.vala"
+       if (model_clip_file_is_of_type (MODEL_FETCHER (f)->clipfile, MODEL_MEDIA_TYPE_VIDEO)) {
+#line 1100 "import.c"
+               GstElement* _tmp8_;
+               GstElement* _tmp9_;
+               GstCaps* _tmp10_;
+               SingleDecodeBin* _tmp11_;
+               SingleDecodeBin* _tmp12_;
+               GstBin* _tmp13_;
+#line 246 "import.vala"
+               _tmp8_ = make_element ("ffmpegcolorspace", &_inner_error_);
+#line 1109 "import.c"
+               if (_inner_error_ != NULL) {
+                       g_propagate_error (error, _inner_error_);
+                       _gst_object_unref0 (bus);
+                       return;
+               }
+#line 246 "import.vala"
+               self->priv->video_convert = (_tmp9_ = _tmp8_, _gst_object_unref0 (self->priv->video_convert), _tmp9_);
+#line 247 "import.vala"
+               gst_bin_add (GST_BIN (self->priv->pipeline), _gst_object_ref0 (self->priv->video_convert));
+#line 249 "import.vala"
+               _tmp12_ = (_tmp11_ = single_decode_bin_new (_tmp10_ = gst_caps_from_string ("video/x-raw-yuv"), "videodecodebin", MODEL_FETCHER (f)->clipfile->filename, &_inner_error_), _gst_caps_unref0 (_tmp10_), _tmp11_);
+#line 1121 "import.c"
+               if (_inner_error_ != NULL) {
+                       g_propagate_error (error, _inner_error_);
+                       _gst_object_unref0 (bus);
+                       return;
+               }
+#line 249 "import.vala"
+               self->priv->video_decoder = (_tmp13_ = GST_BIN (_tmp12_), _gst_object_unref0 (self->priv->video_decoder), _tmp13_);
+#line 253 "import.vala"
+               g_signal_connect_object (GST_ELEMENT (self->priv->video_decoder), "pad-added", (GCallback) _model_clip_importer_on_pad_added_gst_element_pad_added, self, 0);
+#line 255 "import.vala"
+               gst_bin_add (GST_BIN (self->priv->pipeline), _gst_object_ref0 (GST_ELEMENT (self->priv->video_decoder)));
+#line 257 "import.vala"
+               if (!gst_element_link (self->priv->video_convert, self->priv->mux)) {
+#line 258 "import.vala"
+                       g_error ("import.vala:258: do_import: Cannot link video converter to mux!");
+#line 1137 "import.c"
+               }
+       }
+#line 260 "import.vala"
+       if (model_clip_file_is_of_type (MODEL_FETCHER (f)->clipfile, MODEL_MEDIA_TYPE_AUDIO)) {
+#line 1142 "import.c"
+               GstElement* _tmp14_;
+               GstElement* _tmp15_;
+               GstCaps* _tmp16_;
+               SingleDecodeBin* _tmp17_;
+               SingleDecodeBin* _tmp18_;
+               GstBin* _tmp19_;
+#line 261 "import.vala"
+               _tmp14_ = make_element ("audioconvert", &_inner_error_);
+#line 1151 "import.c"
+               if (_inner_error_ != NULL) {
+                       g_propagate_error (error, _inner_error_);
+                       _gst_object_unref0 (bus);
+                       return;
+               }
+#line 261 "import.vala"
+               self->priv->audio_convert = (_tmp15_ = _tmp14_, _gst_object_unref0 (self->priv->audio_convert), _tmp15_);
+#line 262 "import.vala"
+               gst_bin_add (GST_BIN (self->priv->pipeline), _gst_object_ref0 (self->priv->audio_convert));
+#line 266 "import.vala"
+               _tmp18_ = (_tmp17_ = single_decode_bin_new (_tmp16_ = gst_caps_from_string ("audio/x-raw-int"), "audiodecodebin", MODEL_FETCHER (f)->clipfile->filename, &_inner_error_), _gst_caps_unref0 (_tmp16_), _tmp17_);
+#line 1163 "import.c"
+               if (_inner_error_ != NULL) {
+                       g_propagate_error (error, _inner_error_);
+                       _gst_object_unref0 (bus);
+                       return;
+               }
+#line 266 "import.vala"
+               self->priv->audio_decoder = (_tmp19_ = GST_BIN (_tmp18_), _gst_object_unref0 (self->priv->audio_decoder), _tmp19_);
+#line 269 "import.vala"
+               g_signal_connect_object (GST_ELEMENT (self->priv->audio_decoder), "pad-added", (GCallback) _model_clip_importer_on_pad_added_gst_element_pad_added, self, 0);
+#line 271 "import.vala"
+               gst_bin_add (GST_BIN (self->priv->pipeline), _gst_object_ref0 (GST_ELEMENT (self->priv->audio_decoder)));
+#line 273 "import.vala"
+               if (!gst_element_link (self->priv->audio_convert, self->priv->mux)) {
+#line 274 "import.vala"
+                       g_error ("import.vala:274: do_import: Cannot link audio convert to mux!");
+#line 1179 "import.c"
+               }
+       }
+#line 277 "import.vala"
+       if (!gst_element_link (self->priv->mux, self->priv->filesink)) {
+#line 278 "import.vala"
+               g_error ("import.vala:278: do_import: Cannot link mux to filesink!");
+#line 1186 "import.c"
+       }
+#line 280 "import.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_IMPORT, LOGGING_LEVEL_VERBOSE, _tmp21_ = g_strdup_printf ("Starting import to %s...", _tmp20_ = (char*) gee_abstract_list_get (GEE_ABSTRACT_LIST (self->priv->queued_filenames), self->priv->current_file_importing)));
+#line 1190 "import.c"
+       _g_free0 (_tmp21_);
+       _g_free0 (_tmp20_);
+#line 282 "import.vala"
+       gst_element_set_state (GST_ELEMENT (self->priv->pipeline), GST_STATE_PLAYING);
+#line 1195 "import.c"
+       _gst_object_unref0 (bus);
+}
+
+
+#line 285 "import.vala"
+static void model_clip_importer_on_pad_added (ModelClipImporter* self, GstPad* p) {
+#line 1202 "import.c"
+       GstCaps* _tmp1_;
+       GstCaps* _tmp0_ = NULL;
+       char* _tmp2_;
+       char* str;
+       GstPad* sink;
+#line 285 "import.vala"
+       g_return_if_fail (MODEL_IS_CLIP_IMPORTER (self));
+#line 285 "import.vala"
+       g_return_if_fail (GST_IS_PAD (p));
+#line 286 "import.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_pad_added");
+#line 288 "import.vala"
+       str = (_tmp2_ = gst_caps_to_string (_tmp1_ = (g_object_get (p, "caps", &_tmp0_, NULL), _tmp0_)), _gst_caps_unref0 (_tmp1_), _tmp2_);
+#line 289 "import.vala"
+       sink = NULL;
+#line 291 "import.vala"
+       if (g_str_has_prefix (str, "video")) {
+#line 1220 "import.c"
+               GstPad* _tmp3_;
+               GstPad* _tmp6_;
+               GstCaps* _tmp5_;
+               GstCaps* _tmp4_ = NULL;
+#line 292 "import.vala"
+               self->priv->video_pad = (_tmp3_ = _gst_object_ref0 (p), _gst_object_unref0 (self->priv->video_pad), _tmp3_);
+#line 293 "import.vala"
+               sink = (_tmp6_ = gst_element_get_compatible_pad (self->priv->video_convert, p, _tmp5_ = (g_object_get (p, "caps", &_tmp4_, NULL), _tmp4_)), _gst_object_unref0 (sink), _tmp6_);
+#line 1229 "import.c"
+               _gst_caps_unref0 (_tmp5_);
+       } else {
+#line 294 "import.vala"
+               if (g_str_has_prefix (str, "audio")) {
+#line 1234 "import.c"
+                       GstPad* _tmp7_;
+                       GstPad* _tmp10_;
+                       GstCaps* _tmp9_;
+                       GstCaps* _tmp8_ = NULL;
+#line 295 "import.vala"
+                       self->priv->audio_pad = (_tmp7_ = _gst_object_ref0 (p), _gst_object_unref0 (self->priv->audio_pad), _tmp7_);
+#line 296 "import.vala"
+                       sink = (_tmp10_ = gst_element_get_compatible_pad (self->priv->audio_convert, p, _tmp9_ = (g_object_get (p, "caps", &_tmp8_, NULL), _tmp8_)), _gst_object_unref0 (sink), _tmp10_);
+#line 1243 "import.c"
+                       _gst_caps_unref0 (_tmp9_);
+               } else {
+                       char* _tmp11_;
+#line 299 "import.vala"
+                       g_warning ("import.vala:299: %s", _tmp11_ = g_strdup_printf ("Unrecognized prefix %s", str));
+#line 1249 "import.c"
+                       _g_free0 (_tmp11_);
+                       _g_free0 (str);
+                       _gst_object_unref0 (sink);
+#line 300 "import.vala"
+                       return;
+#line 1255 "import.c"
+               }
+       }
+#line 303 "import.vala"
+       if (gst_pad_link (p, sink) != GST_PAD_LINK_OK) {
+#line 304 "import.vala"
+               g_error ("import.vala:304: Cannot link pad in importer!");
+#line 1262 "import.c"
+       }
+       _g_free0 (str);
+       _gst_object_unref0 (sink);
+}
+
+
+#line 308 "import.vala"
+static void model_clip_importer_on_error (ModelClipImporter* self, GstBus* bus, GstMessage* message) {
+#line 1271 "import.c"
+       GError* e;
+       char* text;
+       char* _tmp3_;
+       char* _tmp2_ = NULL;
+       GError* _tmp1_;
+       GError* _tmp0_ = NULL;
+#line 308 "import.vala"
+       g_return_if_fail (MODEL_IS_CLIP_IMPORTER (self));
+#line 308 "import.vala"
+       g_return_if_fail (GST_IS_BUS (bus));
+#line 308 "import.vala"
+       g_return_if_fail (GST_IS_MESSAGE (message));
+#line 309 "import.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_error");
+#line 1286 "import.c"
+       e = NULL;
+       text = NULL;
+#line 312 "import.vala"
+       (gst_message_parse_error (message, &_tmp0_, &_tmp2_), e = (_tmp1_ = _tmp0_, _g_error_free0 (e), _tmp1_));
+#line 312 "import.vala"
+       text = (_tmp3_ = _tmp2_, _g_free0 (text), _tmp3_);
+#line 313 "import.vala"
+       g_warning ("import.vala:313: %s\n", text);
+#line 314 "import.vala"
+       g_signal_emit_by_name (self, "error-occurred", text);
+#line 1297 "import.c"
+       _g_error_free0 (e);
+       _g_free0 (text);
+}
+
+
+#line 317 "import.vala"
+static void model_clip_importer_on_warning (ModelClipImporter* self, GstBus* bus, GstMessage* message) {
+#line 1305 "import.c"
+       GError* e;
+       char* text;
+       char* _tmp3_;
+       char* _tmp2_ = NULL;
+       GError* _tmp1_;
+       GError* _tmp0_ = NULL;
+#line 317 "import.vala"
+       g_return_if_fail (MODEL_IS_CLIP_IMPORTER (self));
+#line 317 "import.vala"
+       g_return_if_fail (GST_IS_BUS (bus));
+#line 317 "import.vala"
+       g_return_if_fail (GST_IS_MESSAGE (message));
+#line 318 "import.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_warning");
+#line 1320 "import.c"
+       e = NULL;
+       text = NULL;
+#line 321 "import.vala"
+       (gst_message_parse_warning (message, &_tmp0_, &_tmp2_), e = (_tmp1_ = _tmp0_, _g_error_free0 (e), _tmp1_));
+#line 321 "import.vala"
+       text = (_tmp3_ = _tmp2_, _g_free0 (text), _tmp3_);
+#line 322 "import.vala"
+       g_warning ("import.vala:322: %s", text);
+#line 1329 "import.c"
+       _g_error_free0 (e);
+       _g_free0 (text);
+}
+
+
+#line 325 "import.vala"
+static void model_clip_importer_on_state_changed (ModelClipImporter* self, GstBus* b, GstMessage* m) {
+#line 1337 "import.c"
+       GError * _inner_error_;
+       GstState old_state = 0;
+       GstState new_state = 0;
+       GstState pending = 0;
+       char* _tmp0_;
+#line 325 "import.vala"
+       g_return_if_fail (MODEL_IS_CLIP_IMPORTER (self));
+#line 325 "import.vala"
+       g_return_if_fail (GST_IS_BUS (b));
+#line 325 "import.vala"
+       g_return_if_fail (GST_IS_MESSAGE (m));
+#line 1349 "import.c"
+       _inner_error_ = NULL;
+#line 326 "import.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_state_changed");
+#line 327 "import.vala"
+       if (m->src != GST_OBJECT (self->priv->pipeline)) {
+#line 328 "import.vala"
+               return;
+#line 1357 "import.c"
+       }
+#line 334 "import.vala"
+       gst_message_parse_state_changed (m, &old_state, &new_state, &pending);
+#line 336 "import.vala"
+       if (old_state == new_state) {
+#line 337 "import.vala"
+               return;
+#line 1365 "import.c"
+       }
+#line 339 "import.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_IMPORT, LOGGING_LEVEL_VERBOSE, _tmp0_ = g_strdup_printf ("Import State in %s", gst_element_state_get_name (new_state)));
+#line 1369 "import.c"
+       _g_free0 (_tmp0_);
+#line 341 "import.vala"
+       if (new_state == GST_STATE_PAUSED) {
+#line 342 "import.vala"
+               if (!self->priv->import_done) {
+#line 1375 "import.c"
+                       char* _tmp7_;
+#line 343 "import.vala"
+                       if (self->priv->video_pad != NULL) {
+#line 1379 "import.c"
+                               GstCaps* _tmp3_;
+                               GstCaps* *_tmp2_;
+                               GstCaps* _tmp1_ = NULL;
+#line 344 "import.vala"
+                               _tmp2_ = &MODEL_FETCHER (self->priv->our_fetcher)->clipfile->video_caps;
+#line 344 "import.vala"
+                               (*_tmp2_) = (_tmp3_ = (g_object_get (self->priv->video_pad, "caps", &_tmp1_, NULL), _tmp1_), _gst_caps_unref0 ((*_tmp2_)), _tmp3_);
+#line 1387 "import.c"
+                       }
+#line 346 "import.vala"
+                       if (self->priv->audio_pad != NULL) {
+#line 1391 "import.c"
+                               GstCaps* _tmp6_;
+                               GstCaps* *_tmp5_;
+                               GstCaps* _tmp4_ = NULL;
+#line 347 "import.vala"
+                               _tmp5_ = &MODEL_FETCHER (self->priv->our_fetcher)->clipfile->audio_caps;
+#line 347 "import.vala"
+                               (*_tmp5_) = (_tmp6_ = (g_object_get (self->priv->audio_pad, "caps", &_tmp4_, NULL), _tmp4_), _gst_caps_unref0 ((*_tmp5_)), _tmp6_);
+#line 1399 "import.c"
+                       }
+#line 349 "import.vala"
+                       logging_emit (G_OBJECT (self), LOGGING_FACILITY_IMPORT, LOGGING_LEVEL_VERBOSE, _tmp7_ = g_strdup_printf ("Got clipfile info for: %s", MODEL_FETCHER (self->priv->our_fetcher)->clipfile->filename));
+#line 1403 "import.c"
+                       _g_free0 (_tmp7_);
+               }
+       } else {
+#line 352 "import.vala"
+               if (new_state == GST_STATE_NULL) {
+#line 353 "import.vala"
+                       if (self->priv->import_state == MODEL_CLIP_IMPORTER_IMPORT_STATE_CANCELLED) {
+#line 1411 "import.c"
+                               char* _tmp9_;
+                               char* _tmp8_;
+                               char* _tmp11_;
+                               char* _tmp10_;
+#line 354 "import.vala"
+                               g_remove (_tmp9_ = append_extension (_tmp8_ = (char*) gee_abstract_list_get (GEE_ABSTRACT_LIST (self->priv->queued_filenames), self->priv->current_file_importing), "mov"));
+#line 1418 "import.c"
+                               _g_free0 (_tmp9_);
+                               _g_free0 (_tmp8_);
+#line 356 "import.vala"
+                               g_remove (_tmp11_ = append_extension (_tmp10_ = (char*) gee_abstract_list_get (GEE_ABSTRACT_LIST (self->priv->queued_filenames), self->priv->current_file_importing), "md5"));
+#line 1423 "import.c"
+                               _g_free0 (_tmp11_);
+                               _g_free0 (_tmp10_);
+                       } else {
+#line 359 "import.vala"
+                               if (self->priv->import_done) {
+#line 1429 "import.c"
+                                       {
+#line 361 "import.vala"
+                                               model_clip_importer_do_import_complete (self, &_inner_error_);
+#line 1433 "import.c"
+                                               if (_inner_error_ != NULL) {
+                                                       goto __catch8_g_error;
+                                               }
+                                       }
+                                       goto __finally8;
+                                       __catch8_g_error:
+                                       {
+                                               GError * e;
+                                               e = _inner_error_;
+                                               _inner_error_ = NULL;
+                                               {
+#line 363 "import.vala"
+                                                       g_signal_emit_by_name (self, "error-occurred", e->message);
+#line 1447 "import.c"
+                                                       _g_error_free0 (e);
+                                               }
+                                       }
+                                       __finally8:
+                                       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 369 "import.vala"
+static void model_clip_importer_on_eos (ModelClipImporter* self) {
+#line 369 "import.vala"
+       g_return_if_fail (MODEL_IS_CLIP_IMPORTER (self));
+#line 370 "import.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_eos");
+#line 371 "import.vala"
+       self->priv->import_done = TRUE;
+#line 372 "import.vala"
+       gst_element_set_state (GST_ELEMENT (self->priv->pipeline), GST_STATE_NULL);
+#line 1474 "import.c"
+}
+
+
+static void model_clip_importer_class_init (ModelClipImporterClass * klass) {
+       model_clip_importer_parent_class = g_type_class_peek_parent (klass);
+       g_type_class_add_private (klass, sizeof (ModelClipImporterPrivate));
+       G_OBJECT_CLASS (klass)->finalize = model_clip_importer_finalize;
+       g_signal_new ("clip_complete", MODEL_TYPE_CLIP_IMPORTER, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, MODEL_TYPE_CLIP_FILE);
+       g_signal_new ("importing_started", MODEL_TYPE_CLIP_IMPORTER, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__INT, G_TYPE_NONE, 1, G_TYPE_INT);
+       g_signal_new ("error_occurred", MODEL_TYPE_CLIP_IMPORTER, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__STRING, G_TYPE_NONE, 1, G_TYPE_STRING);
+}
+
+
+static void model_clip_importer_multi_file_progress_interface_interface_init (MultiFileProgressInterfaceIface * iface) {
+       model_clip_importer_multi_file_progress_interface_parent_iface = g_type_interface_peek_parent (iface);
+       iface->cancel = model_clip_importer_real_cancel;
+       iface->complete = model_clip_importer_real_complete;
+}
+
+
+static void model_clip_importer_instance_init (ModelClipImporter * self) {
+       self->priv = MODEL_CLIP_IMPORTER_GET_PRIVATE (self);
+       self->priv->pipeline = NULL;
+       self->priv->current_file_importing = 0;
+       self->priv->filenames = gee_array_list_new (G_TYPE_STRING, (GBoxedCopyFunc) g_strdup, g_free, NULL);
+       self->priv->queued_fetchers = gee_array_list_new (MODEL_TYPE_CLIP_FETCHER, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL);
+       self->priv->queued_filenames = gee_array_list_new (G_TYPE_STRING, (GBoxedCopyFunc) g_strdup, g_free, NULL);
+       self->priv->no_import_formats = gee_array_list_new (G_TYPE_STRING, (GBoxedCopyFunc) g_strdup, g_free, NULL);
+}
+
+
+static void model_clip_importer_finalize (GObject* obj) {
+       ModelClipImporter * self;
+       self = MODEL_CLIP_IMPORTER (obj);
+       _g_free0 (self->priv->import_directory);
+       _g_object_unref0 (self->priv->our_fetcher);
+       _gst_object_unref0 (self->priv->video_pad);
+       _gst_object_unref0 (self->priv->audio_pad);
+       _gst_object_unref0 (self->priv->pipeline);
+       _gst_object_unref0 (self->priv->filesink);
+       _gst_object_unref0 (self->priv->video_convert);
+       _gst_object_unref0 (self->priv->audio_convert);
+       _gst_object_unref0 (self->priv->mux);
+       _gst_object_unref0 (self->priv->video_decoder);
+       _gst_object_unref0 (self->priv->audio_decoder);
+       _g_object_unref0 (self->priv->filenames);
+       _g_object_unref0 (self->priv->queued_fetchers);
+       _g_object_unref0 (self->priv->queued_filenames);
+       _g_object_unref0 (self->priv->no_import_formats);
+       G_OBJECT_CLASS (model_clip_importer_parent_class)->finalize (obj);
+}
+
+
+GType model_clip_importer_get_type (void) {
+       static volatile gsize model_clip_importer_type_id__volatile = 0;
+       if (g_once_init_enter (&model_clip_importer_type_id__volatile)) {
+               static const GTypeInfo g_define_type_info = { sizeof (ModelClipImporterClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) model_clip_importer_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ModelClipImporter), 0, (GInstanceInitFunc) model_clip_importer_instance_init, NULL };
+               static const GInterfaceInfo multi_file_progress_interface_info = { (GInterfaceInitFunc) model_clip_importer_multi_file_progress_interface_interface_init, (GInterfaceFinalizeFunc) NULL, NULL};
+               GType model_clip_importer_type_id;
+               model_clip_importer_type_id = g_type_register_static (G_TYPE_OBJECT, "ModelClipImporter", &g_define_type_info, 0);
+               g_type_add_interface_static (model_clip_importer_type_id, TYPE_MULTI_FILE_PROGRESS_INTERFACE, &multi_file_progress_interface_info);
+               g_once_init_leave (&model_clip_importer_type_id__volatile, model_clip_importer_type_id);
+       }
+       return model_clip_importer_type_id__volatile;
+}
+
+
+#line 406 "import.vala"
+static void _model_library_importer_on_clip_complete_model_clip_importer_clip_complete (ModelClipImporter* _sender, ModelClipFile* f, gpointer self) {
+#line 1544 "import.c"
+       model_library_importer_on_clip_complete (self, f);
+}
+
+
+#line 396 "import.vala"
+static void _model_library_importer_on_error_occurred_model_clip_importer_error_occurred (ModelClipImporter* _sender, const char* _error_, gpointer self) {
+#line 1551 "import.c"
+       model_library_importer_on_error_occurred (self, _error_);
+}
+
+
+#line 391 "import.vala"
+static void _model_library_importer_on_importer_started_model_clip_importer_importing_started (ModelClipImporter* _sender, gint num_clips, gpointer self) {
+#line 1558 "import.c"
+       model_library_importer_on_importer_started (self, _sender, num_clips);
+}
+
+
+#line 382 "import.vala"
+ModelLibraryImporter* model_library_importer_construct (GType object_type, ModelProject* p) {
+#line 1565 "import.c"
+       ModelLibraryImporter * self;
+       ModelProject* _tmp0_;
+       ModelClipImporter* _tmp1_;
+#line 382 "import.vala"
+       g_return_val_if_fail (MODEL_IS_PROJECT (p), NULL);
+#line 382 "import.vala"
+       self = (ModelLibraryImporter*) g_object_new (object_type, NULL);
+#line 383 "import.vala"
+       self->project = (_tmp0_ = _g_object_ref0 (p), _g_object_unref0 (self->project), _tmp0_);
+#line 385 "import.vala"
+       self->importer = (_tmp1_ = model_clip_importer_new (), _g_object_unref0 (self->importer), _tmp1_);
+#line 386 "import.vala"
+       g_signal_connect_object (self->importer, "clip-complete", (GCallback) _model_library_importer_on_clip_complete_model_clip_importer_clip_complete, self, 0);
+#line 387 "import.vala"
+       g_signal_connect_object (self->importer, "error-occurred", (GCallback) _model_library_importer_on_error_occurred_model_clip_importer_error_occurred, self, 0);
+#line 388 "import.vala"
+       g_signal_connect_object (self->importer, "importing-started", (GCallback) _model_library_importer_on_importer_started_model_clip_importer_importing_started, self, 0);
+#line 1583 "import.c"
+       return self;
+}
+
+
+#line 382 "import.vala"
+ModelLibraryImporter* model_library_importer_new (ModelProject* p) {
+#line 382 "import.vala"
+       return model_library_importer_construct (MODEL_TYPE_LIBRARY_IMPORTER, p);
+#line 1592 "import.c"
+}
+
+
+#line 391 "import.vala"
+static void model_library_importer_on_importer_started (ModelLibraryImporter* self, ModelClipImporter* i, gint num) {
+#line 391 "import.vala"
+       g_return_if_fail (MODEL_IS_LIBRARY_IMPORTER (self));
+#line 391 "import.vala"
+       g_return_if_fail (MODEL_IS_CLIP_IMPORTER (i));
+#line 392 "import.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_importer_started");
+#line 393 "import.vala"
+       g_signal_emit_by_name (self, "started", i, num);
+#line 1606 "import.c"
+}
+
+
+#line 396 "import.vala"
+static void model_library_importer_on_error_occurred (ModelLibraryImporter* self, const char* _error_) {
+#line 396 "import.vala"
+       g_return_if_fail (MODEL_IS_LIBRARY_IMPORTER (self));
+#line 396 "import.vala"
+       g_return_if_fail (_error_ != NULL);
+#line 397 "import.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_error_occurred");
+#line 398 "import.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_DEVELOPER_WARNINGS, LOGGING_LEVEL_INFO, _error_);
+#line 399 "import.vala"
+       g_signal_emit_by_name (self->project, "error-occurred", "Error importing", "An error occurred importing this file.");
+#line 1622 "import.c"
+}
+
+
+#line 402 "import.vala"
+static void model_library_importer_real_append_existing_clipfile (ModelLibraryImporter* self, ModelClipFile* f) {
+#line 402 "import.vala"
+       g_return_if_fail (MODEL_IS_LIBRARY_IMPORTER (self));
+#line 402 "import.vala"
+       g_return_if_fail (MODEL_IS_CLIP_FILE (f));
+#line 1632 "import.c"
+}
+
+
+#line 402 "import.vala"
+void model_library_importer_append_existing_clipfile (ModelLibraryImporter* self, ModelClipFile* f) {
+#line 402 "import.vala"
+       MODEL_LIBRARY_IMPORTER_GET_CLASS (self)->append_existing_clipfile (self, f);
+#line 1640 "import.c"
+}
+
+
+#line 406 "import.vala"
+static void model_library_importer_real_on_clip_complete (ModelLibraryImporter* self, ModelClipFile* f) {
+#line 1646 "import.c"
+       ModelClipFile* cf;
+#line 406 "import.vala"
+       g_return_if_fail (MODEL_IS_LIBRARY_IMPORTER (self));
+#line 406 "import.vala"
+       g_return_if_fail (MODEL_IS_CLIP_FILE (f));
+#line 407 "import.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_clip_complete");
+#line 408 "import.vala"
+       cf = model_project_find_clipfile (self->project, f->filename);
+#line 409 "import.vala"
+       if (cf == NULL) {
+#line 410 "import.vala"
+               model_project_add_clipfile (self->project, f);
+#line 1660 "import.c"
+       }
+       _g_object_unref0 (cf);
+}
+
+
+#line 406 "import.vala"
+void model_library_importer_on_clip_complete (ModelLibraryImporter* self, ModelClipFile* f) {
+#line 406 "import.vala"
+       MODEL_LIBRARY_IMPORTER_GET_CLASS (self)->on_clip_complete (self, f);
+#line 1670 "import.c"
+}
+
+
+#line 414 "import.vala"
+void model_library_importer_add_file (ModelLibraryImporter* self, const char* filename, GError** error) {
+#line 1676 "import.c"
+       ModelClipFile* cf;
+#line 414 "import.vala"
+       g_return_if_fail (MODEL_IS_LIBRARY_IMPORTER (self));
+#line 414 "import.vala"
+       g_return_if_fail (filename != NULL);
+#line 415 "import.vala"
+       cf = model_project_find_clipfile (self->project, filename);
+#line 417 "import.vala"
+       if (cf != NULL) {
+#line 418 "import.vala"
+               model_library_importer_append_existing_clipfile (self, cf);
+#line 1688 "import.c"
+       } else {
+#line 420 "import.vala"
+               model_clip_importer_add_filename (self->importer, filename);
+#line 1692 "import.c"
+       }
+       _g_object_unref0 (cf);
+}
+
+
+#line 423 "import.vala"
+void model_library_importer_start (ModelLibraryImporter* self, GError** error) {
+#line 1700 "import.c"
+       GError * _inner_error_;
+#line 423 "import.vala"
+       g_return_if_fail (MODEL_IS_LIBRARY_IMPORTER (self));
+#line 1704 "import.c"
+       _inner_error_ = NULL;
+#line 424 "import.vala"
+       model_clip_importer_start (self->importer, &_inner_error_);
+#line 1708 "import.c"
+       if (_inner_error_ != NULL) {
+               g_propagate_error (error, _inner_error_);
+               return;
+       }
+}
+
+
+static void model_library_importer_class_init (ModelLibraryImporterClass * klass) {
+       model_library_importer_parent_class = g_type_class_peek_parent (klass);
+       MODEL_LIBRARY_IMPORTER_CLASS (klass)->append_existing_clipfile = model_library_importer_real_append_existing_clipfile;
+       MODEL_LIBRARY_IMPORTER_CLASS (klass)->on_clip_complete = model_library_importer_real_on_clip_complete;
+       G_OBJECT_CLASS (klass)->finalize = model_library_importer_finalize;
+       g_signal_new ("started", MODEL_TYPE_LIBRARY_IMPORTER, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_user_marshal_VOID__OBJECT_INT, G_TYPE_NONE, 2, MODEL_TYPE_CLIP_IMPORTER, G_TYPE_INT);
+}
+
+
+static void model_library_importer_instance_init (ModelLibraryImporter * self) {
+}
+
+
+static void model_library_importer_finalize (GObject* obj) {
+       ModelLibraryImporter * self;
+       self = MODEL_LIBRARY_IMPORTER (obj);
+       _g_object_unref0 (self->project);
+       _g_object_unref0 (self->importer);
+       G_OBJECT_CLASS (model_library_importer_parent_class)->finalize (obj);
+}
+
+
+GType model_library_importer_get_type (void) {
+       static volatile gsize model_library_importer_type_id__volatile = 0;
+       if (g_once_init_enter (&model_library_importer_type_id__volatile)) {
+               static const GTypeInfo g_define_type_info = { sizeof (ModelLibraryImporterClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) model_library_importer_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ModelLibraryImporter), 0, (GInstanceInitFunc) model_library_importer_instance_init, NULL };
+               GType model_library_importer_type_id;
+               model_library_importer_type_id = g_type_register_static (G_TYPE_OBJECT, "ModelLibraryImporter", &g_define_type_info, 0);
+               g_once_init_leave (&model_library_importer_type_id__volatile, model_library_importer_type_id);
+       }
+       return model_library_importer_type_id__volatile;
+}
+
+
+#line 433 "import.vala"
+ModelTimelineImporter* model_timeline_importer_construct (GType object_type, ModelTrack* track, ModelProject* p, gint64 time_to_add, gboolean both_tracks) {
+#line 1752 "import.c"
+       ModelTimelineImporter * self;
+       ModelTrack* _tmp0_;
+#line 433 "import.vala"
+       g_return_val_if_fail (MODEL_IS_TRACK (track), NULL);
+#line 433 "import.vala"
+       g_return_val_if_fail (MODEL_IS_PROJECT (p), NULL);
+#line 434 "import.vala"
+       self = (ModelTimelineImporter*) model_library_importer_construct (object_type, p);
+#line 435 "import.vala"
+       self->priv->track = (_tmp0_ = _g_object_ref0 (track), _g_object_unref0 (self->priv->track), _tmp0_);
+#line 436 "import.vala"
+       self->priv->time_to_add = time_to_add;
+#line 437 "import.vala"
+       self->priv->both_tracks = both_tracks;
+#line 1767 "import.c"
+       return self;
+}
+
+
+#line 433 "import.vala"
+ModelTimelineImporter* model_timeline_importer_new (ModelTrack* track, ModelProject* p, gint64 time_to_add, gboolean both_tracks) {
+#line 433 "import.vala"
+       return model_timeline_importer_construct (MODEL_TYPE_TIMELINE_IMPORTER, track, p, time_to_add, both_tracks);
+#line 1776 "import.c"
+}
+
+
+#line 440 "import.vala"
+static void model_timeline_importer_add_to_both (ModelTimelineImporter* self, ModelClipFile* clip_file) {
+#line 440 "import.vala"
+       g_return_if_fail (MODEL_IS_TIMELINE_IMPORTER (self));
+#line 440 "import.vala"
+       g_return_if_fail (MODEL_IS_CLIP_FILE (clip_file));
+#line 441 "import.vala"
+       if (self->priv->both_tracks) {
+#line 1788 "import.c"
+               ModelTrack* other_track;
+               other_track = NULL;
+#line 443 "import.vala"
+               if (MODEL_IS_VIDEO_TRACK (self->priv->track)) {
+#line 1793 "import.c"
+                       ModelTrack* _tmp0_;
+#line 444 "import.vala"
+                       other_track = (_tmp0_ = MODEL_TRACK (model_project_find_audio_track (MODEL_LIBRARY_IMPORTER (self)->project)), _g_object_unref0 (other_track), _tmp0_);
+#line 1797 "import.c"
+               } else {
+                       ModelTrack* _tmp1_;
+#line 446 "import.vala"
+                       other_track = (_tmp1_ = MODEL_TRACK (model_project_find_video_track (MODEL_LIBRARY_IMPORTER (self)->project)), _g_object_unref0 (other_track), _tmp1_);
+#line 1802 "import.c"
+               }
+#line 448 "import.vala"
+               if (other_track != NULL) {
+#line 449 "import.vala"
+                       model_project_add (MODEL_LIBRARY_IMPORTER (self)->project, other_track, clip_file, self->priv->time_to_add);
+#line 1808 "import.c"
+               }
+               _g_object_unref0 (other_track);
+       }
+}
+
+
+#line 454 "import.vala"
+static void model_timeline_importer_real_append_existing_clipfile (ModelLibraryImporter* base, ModelClipFile* f) {
+#line 1817 "import.c"
+       ModelTimelineImporter * self;
+       self = MODEL_TIMELINE_IMPORTER (base);
+#line 454 "import.vala"
+       g_return_if_fail (MODEL_IS_CLIP_FILE (f));
+#line 455 "import.vala"
+       model_undo_manager_start_transaction (MODEL_LIBRARY_IMPORTER (self)->project->undo_manager, "Create Clip");
+#line 456 "import.vala"
+       model_project_add (MODEL_LIBRARY_IMPORTER (self)->project, self->priv->track, f, self->priv->time_to_add);
+#line 457 "import.vala"
+       model_timeline_importer_add_to_both (self, f);
+#line 458 "import.vala"
+       model_undo_manager_end_transaction (MODEL_LIBRARY_IMPORTER (self)->project->undo_manager, "Create Clip");
+#line 1830 "import.c"
+}
+
+
+#line 461 "import.vala"
+static void model_timeline_importer_real_on_clip_complete (ModelLibraryImporter* base, ModelClipFile* f) {
+#line 1836 "import.c"
+       ModelTimelineImporter * self;
+       self = MODEL_TIMELINE_IMPORTER (base);
+#line 461 "import.vala"
+       g_return_if_fail (MODEL_IS_CLIP_FILE (f));
+#line 462 "import.vala"
+       model_undo_manager_start_transaction (MODEL_LIBRARY_IMPORTER (self)->project->undo_manager, "Create Clip");
+#line 463 "import.vala"
+       MODEL_LIBRARY_IMPORTER_CLASS (model_timeline_importer_parent_class)->on_clip_complete (MODEL_LIBRARY_IMPORTER (self), f);
+#line 464 "import.vala"
+       model_project_add (MODEL_LIBRARY_IMPORTER (self)->project, self->priv->track, f, self->priv->time_to_add);
+#line 465 "import.vala"
+       model_timeline_importer_add_to_both (self, f);
+#line 466 "import.vala"
+       model_undo_manager_end_transaction (MODEL_LIBRARY_IMPORTER (self)->project->undo_manager, "Create Clip");
+#line 1851 "import.c"
+}
+
+
+static void model_timeline_importer_class_init (ModelTimelineImporterClass * klass) {
+       model_timeline_importer_parent_class = g_type_class_peek_parent (klass);
+       g_type_class_add_private (klass, sizeof (ModelTimelineImporterPrivate));
+       MODEL_LIBRARY_IMPORTER_CLASS (klass)->append_existing_clipfile = model_timeline_importer_real_append_existing_clipfile;
+       MODEL_LIBRARY_IMPORTER_CLASS (klass)->on_clip_complete = model_timeline_importer_real_on_clip_complete;
+       G_OBJECT_CLASS (klass)->finalize = model_timeline_importer_finalize;
+}
+
+
+static void model_timeline_importer_instance_init (ModelTimelineImporter * self) {
+       self->priv = MODEL_TIMELINE_IMPORTER_GET_PRIVATE (self);
+}
+
+
+static void model_timeline_importer_finalize (GObject* obj) {
+       ModelTimelineImporter * self;
+       self = MODEL_TIMELINE_IMPORTER (obj);
+       _g_object_unref0 (self->priv->track);
+       G_OBJECT_CLASS (model_timeline_importer_parent_class)->finalize (obj);
+}
+
+
+GType model_timeline_importer_get_type (void) {
+       static volatile gsize model_timeline_importer_type_id__volatile = 0;
+       if (g_once_init_enter (&model_timeline_importer_type_id__volatile)) {
+               static const GTypeInfo g_define_type_info = { sizeof (ModelTimelineImporterClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) model_timeline_importer_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ModelTimelineImporter), 0, (GInstanceInitFunc) model_timeline_importer_instance_init, NULL };
+               GType model_timeline_importer_type_id;
+               model_timeline_importer_type_id = g_type_register_static (MODEL_TYPE_LIBRARY_IMPORTER, "ModelTimelineImporter", &g_define_type_info, 0);
+               g_once_init_leave (&model_timeline_importer_type_id__volatile, model_timeline_importer_type_id);
+       }
+       return model_timeline_importer_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);
+}
+
+
+
+static void g_cclosure_user_marshal_VOID__OBJECT_INT (GClosure * closure, GValue * return_value, guint n_param_values, const GValue * param_values, gpointer invocation_hint, gpointer marshal_data) {
+       typedef void (*GMarshalFunc_VOID__OBJECT_INT) (gpointer data1, gpointer arg_1, gint arg_2, gpointer data2);
+       register GMarshalFunc_VOID__OBJECT_INT callback;
+       register GCClosure * cc;
+       register gpointer data1, data2;
+       cc = (GCClosure *) closure;
+       g_return_if_fail (n_param_values == 3);
+       if (G_CCLOSURE_SWAP_DATA (closure)) {
+               data1 = closure->data;
+               data2 = param_values->data[0].v_pointer;
+       } else {
+               data1 = param_values->data[0].v_pointer;
+               data2 = closure->data;
+       }
+       callback = (GMarshalFunc_VOID__OBJECT_INT) (marshal_data ? marshal_data : cc->callback);
+       callback (data1, g_value_get_object (param_values + 1), g_value_get_int (param_values + 2), data2);
+}
+
+
+