[Import ()]
[CCode (cprefix = "RhythmDB", lower_case_cprefix = "rhythmdb_")]
namespace RhythmDB {
	[CCode (cname = "RhythmDB", cheader_filename = "rhythmdb.h")]
	public class RhythmDatabase : GLib.Object {
		[CCode (cname = "rhythmdb_new", has_construct_function = false)]
		public RhythmDatabase(string name);
		[CCode (cname = "rhythmdb_add_uri")]
		public void add_uri (string uri);
		[CCode (cname = "rhythmdb_add_uri_with_types")]
		public void add_uri_with_types (string uri, RhythmDB.EntryType type, RhythmDB.EntryType ignore_type, RhythmDB.EntryType error_type);
		[CCode (cname = "rhythmdb_commit")]
		public void commit ();
		[CCode (cname = "rhythmdb_compute_status_normal")]
		public static unowned string compute_status_normal (int n_songs, long duration, uint64 size, string singular, string plural);
		[CCode (cname = "rhythmdb_dispose_monitoring")]
		public void dispose_monitoring ();
		[CCode (cname = "rhythmdb_do_full_query")]
		public void do_full_query (RhythmDB.QueryResults results);
		[CCode (cname = "rhythmdb_do_full_query_async")]
		public void do_full_query_async (RhythmDB.QueryResults results);
		[CCode (cname = "rhythmdb_do_full_query_async_parsed")]
		public void do_full_query_async_parsed (RhythmDB.QueryResults results, RhythmDB.Query query);
		[CCode (cname = "rhythmdb_do_full_query_parsed")]
		public void do_full_query_parsed (RhythmDB.QueryResults results, RhythmDB.Query query);
		[CCode (cname = "rhythmdb_emit_entry_added")]
		public void emit_entry_added (RhythmDB.Entry entry);
		[CCode (cname = "rhythmdb_emit_entry_deleted")]
		public void emit_entry_deleted (RhythmDB.Entry entry);
		[CCode (cname = "rhythmdb_emit_entry_extra_metadata_notify")]
		public void emit_entry_extra_metadata_notify (RhythmDB.Entry entry, string property_name, GLib.Value metadata);
		[CCode (cname = "rhythmdb_error_quark")]
		public static GLib.Quark error_quark ();
		[CCode (cname = "rhythmdb_evaluate_query")]
		public bool evaluate_query (RhythmDB.Query query, RhythmDB.Entry entry);
		[CCode (cname = "rhythmdb_finalize_monitoring")]
		public void finalize_monitoring ();
		[CCode (cname = "rhythmdb_get_property_type")]
		public GLib.Type get_property_type (uint property_id);
		[NoWrapper]
		public virtual void impl_do_full_query (RhythmDB.Query query, RhythmDB.QueryResults results, bool cancel);
		[NoWrapper]
		public virtual int64 impl_entry_count ();
		[NoWrapper]
		public virtual int64 impl_entry_count_by_type (RhythmDB.EntryType type);
		[NoWrapper]
		public virtual void impl_entry_delete (RhythmDB.Entry entry);
		[NoWrapper]
		public virtual void impl_entry_delete_by_type (RhythmDB.EntryType type);
		[NoWrapper]
		public virtual void impl_entry_foreach (GLib.Func func, void* data);
		[NoWrapper]
		public virtual void impl_entry_foreach_by_type (RhythmDB.EntryType type, GLib.Func func, void* data);
		[NoWrapper]
		public virtual void impl_entry_get (RhythmDB.Entry entry, uint propid, GLib.Value value);
		[NoWrapper]
		public virtual bool impl_entry_keyword_add (RhythmDB.Entry entry, RB.RefString keyword);
		[NoWrapper]
		public virtual bool impl_entry_keyword_has (RhythmDB.Entry entry, RB.RefString keyword);
		[NoWrapper]
		public virtual bool impl_entry_keyword_remove (RhythmDB.Entry entry, RB.RefString keyword);
		[NoWrapper]
		public virtual unowned GLib.List impl_entry_keywords_get (RhythmDB.Entry entry);
		[NoWrapper]
		public virtual void impl_entry_new (RhythmDB.Entry entry);
		[NoWrapper]
		public virtual bool impl_entry_set (RhythmDB.Entry entry, uint propid, GLib.Value value);
		[NoWrapper]
		public virtual void impl_entry_type_registered (string name, RhythmDB.EntryType type);
		[NoWrapper]
		public virtual bool impl_evaluate_query (RhythmDB.Query query, RhythmDB.Entry entry);
		[NoWrapper]
		public virtual bool impl_load (GLib.Cancellable cancel) throws GLib.Error;
		[NoWrapper]
		public virtual unowned Entry impl_lookup_by_id (int id);
		[NoWrapper]
		public virtual unowned Entry impl_lookup_by_location (RB.RefString uri);
		[NoWrapper]
		public virtual void impl_save ();
		[CCode (cname = "rhythmdb_init_monitoring")]
		public void init_monitoring ();
		[CCode (cname = "rhythmdb_is_busy")]
		public bool is_busy ();
		[CCode (cname = "rhythmdb_load")]
		public void load ();
		[NoWrapper]
		public virtual void load_error (string uri, string msg);
		[CCode (cname = "rhythmdb_monitor_uri_path")]
		public void monitor_uri_path (string uri) throws GLib.Error;
		[CCode (cname = "rhythmdb_nice_elt_name_from_propid")]
		public unowned uchar[] nice_elt_name_from_propid (RhythmDB.PropType propid);
		[CCode (cname = "rhythmdb_propid_from_nice_elt_name")]
		public int propid_from_nice_elt_name (uchar[] name);
		[CCode (cname = "rhythmdb_read_encoded_property")]
		public void read_encoded_property (string data, RhythmDB.PropType propid, GLib.Value val);
		[CCode (cname = "rhythmdb_save")]
		public void save ();
		[CCode (cname = "rhythmdb_save_async")]
		public void save_async ();
		[CCode (cname = "rhythmdb_shutdown")]
		public void shutdown ();
		[CCode (cname = "rhythmdb_start_action_thread")]
		public void start_action_thread ();
		[CCode (cname = "rhythmdb_start_monitoring")]
		public void start_monitoring ();
		[CCode (cname = "rhythmdb_stop_monitoring")]
		public void stop_monitoring ();
		[NoAccessorMethod]
		public bool dry_run { get; set; }
		[NoAccessorMethod]
		public string name { owned get; set; }
		[NoAccessorMethod]
		public bool no_update { get; set; }
		public virtual signal unowned GLib.MountOperation create_mount_op ();
		public virtual signal void entry_added (RhythmDB.Entry entry);
		public virtual signal void entry_changed (RhythmDB.Entry entry, void* changes);
		public virtual signal void entry_deleted (RhythmDB.Entry entry);
		public virtual signal void entry_extra_metadata_gather (RhythmDB.Entry entry, RB.StringValueMap data);
		public virtual signal void entry_extra_metadata_notify (RhythmDB.Entry entry, string field, GLib.Value metadata);
		public virtual signal GLib.Value entry_extra_metadata_request (RhythmDB.Entry entry);
		public virtual signal void entry_keyword_added (RhythmDB.Entry entry, RB.RefString keyword);
		public virtual signal void entry_keyword_removed (RhythmDB.Entry entry, RB.RefString keyword);
		public virtual signal void load_complete ();
		public virtual signal bool missing_plugins (string[] p0, string[] p1, GLib.Closure p2);
		public virtual signal void read_only (bool readonly);
		public virtual signal void save_complete ();
		public virtual signal void save_error (string uri, void* error);
	}
	[Compact]
	[CCode (ref_function = "rhythmdb_entry_ref", unref_function = "rhythmdb_entry_unref", type_id = "RHYTHM_DB_TYPE_ENTRY", cheader_filename = "rhythmdb.h")]
	public class Entry {
		public weak RB.RefString album;
		public double album_gain;
		public double album_peak;
		public weak RB.RefString album_sortname;
		public weak RB.RefString artist;
		public weak RB.RefString artist_sortname;
		public ulong bitrate;
		public void* data;
		public GLib.Date date;
		public ulong discnum;
		public ulong duration;
		public uint64 file_size;
		public ulong first_seen;
		public void* first_seen_str;
		public uint flags;
		public weak RB.RefString genre;
		public uint id;
		public ulong last_played;
		public void* last_played_str;
		public ulong last_seen;
		public void* last_seen_str;
		public weak RB.RefString location;
		public weak RB.RefString mimetype;
		public weak RB.RefString mountpoint;
		public ulong mtime;
		public weak RB.RefString musicbrainz_albumartistid;
		public weak RB.RefString musicbrainz_albumid;
		public weak RB.RefString musicbrainz_artistid;
		public weak RB.RefString musicbrainz_trackid;
		public long play_count;
		public weak RB.RefString playback_error;
		public double rating;
		public int refcount;
		public weak RB.RefString title;
		public double track_gain;
		public double track_peak;
		public ulong tracknum;
		public weak RhythmDB.EntryType type;
		[CCode (cname = "rhythmdb_entry_new", has_construct_function = false)]
		public Entry (RhythmDB.RhythmDatabase db, RhythmDB.EntryType type, string uri);
		[CCode (cname = "rhythmdb_entry_allocate")]
		public static unowned Entry allocate (RhythmDB.RhythmDatabase db, RhythmDB.EntryType type);
		[CCode (cname = "rhythmdb_entry_count")]
		public static int64 count (RhythmDB.RhythmDatabase db);
		[CCode (cname = "rhythmdb_entry_count_by_type")]
		public static int64 count_by_type (RhythmDB.RhythmDatabase db, RhythmDB.EntryType entry_type);
		[CCode (cname = "rhythmdb_entry_delete")]
		public static void @delete (RhythmDB.RhythmDatabase db, RhythmDB.Entry entry);
		[CCode (cname = "rhythmdb_entry_delete_by_type")]
		public static void delete_by_type (RhythmDB.RhythmDatabase db, RhythmDB.EntryType type);
		[CCode (cname = "rhythmdb_entry_dup_string")]
		public unowned string dup_string (RhythmDB.PropType propid);
		[CCode (cname = "rhythmdb_entry_example_new")]
		public static unowned Entry example_new (RhythmDB.RhythmDatabase db, RhythmDB.EntryType type, string uri);
		[CCode (cname = "rhythmdb_entry_foreach")]
		public static void @foreach (RhythmDB.RhythmDatabase db, GLib.Func func, void* data);
		[CCode (cname = "rhythmdb_entry_foreach_by_type")]
		public static void foreach_by_type (RhythmDB.RhythmDatabase db, RhythmDB.EntryType entry_type, GLib.Func func, void* data);
		[CCode (cname = "rhythmdb_entry_gather_metadata")]
		public static unowned RB.StringValueMap gather_metadata (RhythmDB.RhythmDatabase db, RhythmDB.Entry entry);
		[CCode (cname = "rhythmdb_entry_get")]
		public static void @get (RhythmDB.RhythmDatabase db, RhythmDB.Entry entry, RhythmDB.PropType propid, GLib.Value val);
		[CCode (cname = "rhythmdb_entry_get_boolean")]
		public bool get_boolean (RhythmDB.PropType propid);
		[CCode (cname = "rhythmdb_entry_get_double")]
		public double get_double (RhythmDB.PropType propid);
		[CCode (cname = "rhythmdb_entry_get_entry_type")]
		public unowned RhythmDB.EntryType get_entry_type ();
		[CCode (cname = "rhythmdb_entry_get_playback_uri")]
		public unowned string get_playback_uri ();
		[CCode (cname = "rhythmdb_entry_get_pointer")]
		public void* get_pointer (RhythmDB.PropType propid);
		[CCode (cname = "rhythmdb_entry_get_refstring")]
		public unowned RB.RefString get_refstring (RhythmDB.PropType propid);
		[CCode (cname = "rhythmdb_entry_get_string")]
		public unowned string get_string (RhythmDB.PropType propid);
		[CCode (cname = "rhythmdb_entry_get_type_data")]
		public void* get_type_data (uint expected_size);
		[CCode (cname = "rhythmdb_entry_get_uint64")]
		public uint64 get_uint64 (RhythmDB.PropType propid);
		[CCode (cname = "rhythmdb_entry_get_ulong")]
		public ulong get_ulong (RhythmDB.PropType propid);
		[CCode (cname = "rhythmdb_entry_ignore_get_type")]
		public static unowned RhythmDB.EntryType ignore_get_type ();
		[CCode (cname = "rhythmdb_entry_import_error_get_type")]
		public static unowned RhythmDB.EntryType import_error_get_type ();
		[CCode (cname = "rhythmdb_entry_insert")]
		public static void insert (RhythmDB.RhythmDatabase db, RhythmDB.Entry entry);
		[CCode (cname = "rhythmdb_entry_is_editable")]
		public static bool is_editable (RhythmDB.RhythmDatabase db, RhythmDB.Entry entry);
		[CCode (cname = "rhythmdb_entry_is_lossless")]
		public bool is_lossless ();
		[CCode (cname = "rhythmdb_entry_keyword_add")]
		public static bool keyword_add (RhythmDB.RhythmDatabase db, RhythmDB.Entry entry, RB.RefString keyword);
		[CCode (cname = "rhythmdb_entry_keyword_has")]
		public static bool keyword_has (RhythmDB.RhythmDatabase db, RhythmDB.Entry entry, RB.RefString keyword);
		[CCode (cname = "rhythmdb_entry_keyword_remove")]
		public static bool keyword_remove (RhythmDB.RhythmDatabase db, RhythmDB.Entry entry, RB.RefString keyword);
		[CCode (cname = "rhythmdb_entry_keywords_get")]
		public static unowned GLib.List keywords_get (RhythmDB.RhythmDatabase db, RhythmDB.Entry entry);
		[CCode (cname = "rhythmdb_entry_lookup_by_id")]
		public static unowned RhythmDB.Entry lookup_by_id (RhythmDB.RhythmDatabase db, int id);
		[CCode (cname = "rhythmdb_entry_lookup_by_location")]
		public static unowned RhythmDB.Entry lookup_by_location (RhythmDB.RhythmDatabase db, string uri);
		[CCode (cname = "rhythmdb_entry_lookup_by_location_refstring")]
		public static unowned RhythmDB.Entry lookup_by_location_refstring (RhythmDB.RhythmDatabase db, RB.RefString uri);
		[CCode (cname = "rhythmdb_entry_lookup_from_string")]
		public static unowned RhythmDB.Entry lookup_from_string (RhythmDB.RhythmDatabase db, string str, bool is_id);
		[CCode (cname = "rhythmdb_entry_move_to_trash")]
		public static void move_to_trash (RhythmDB.RhythmDatabase db, RhythmDB.Entry entry);
		[CCode (cname = "rhythmdb_entry_podcast_feed_get_type")]
		public static unowned RhythmDB.EntryType podcast_feed_get_type ();
		[CCode (cname = "rhythmdb_entry_podcast_post_get_type")]
		public static unowned RhythmDB.EntryType podcast_post_get_type ();
		[CCode (cname = "rhythmdb_entry_register_type")]
		public static unowned RhythmDB.EntryType register_type (RhythmDB.RhythmDatabase db, string name);
		[CCode (cname = "rhythmdb_entry_request_extra_metadata")]
		public static GLib.Value request_extra_metadata (RhythmDB.RhythmDatabase db, RhythmDB.Entry entry, string property_name);
		[CCode (cname = "rhythmdb_entry_set")]
		public static void @set (RhythmDB.RhythmDatabase db, RhythmDB.Entry entry, uint propid, GLib.Value value);
		[CCode (cname = "rhythmdb_entry_set_internal")]
		public static void set_internal (RhythmDB.RhythmDatabase db, RhythmDB.Entry entry, bool notify_if_inserted, uint propid, GLib.Value value);
		[CCode (cname = "rhythmdb_entry_set_visibility")]
		public static void set_visibility (RhythmDB.RhythmDatabase db, RhythmDB.Entry entry, bool visibility);
		[CCode (cname = "rhythmdb_entry_song_get_type")]
		public static unowned RhythmDB.EntryType song_get_type ();
	}
	[Compact]
	[CCode (cheader_filename = "rhythmdb.h")]
	public class EntryChange {
		public GLib.Value @new;
		public GLib.Value old;
		public PropType prop;
	}
	[Compact]
	[CCode (cname = "RhythmDBEntryType_", cheader_filename = "rhythmdb.h")]
	public class EntryType {
		[CCode (cname = "rhythmdb_entry_type_foreach")]
		public static void @foreach (RhythmDB.RhythmDatabase db, GLib.HFunc func, void* data);
		[CCode (cname = "rhythmdb_entry_type_get_by_name")]
		public static RhythmDB.EntryType get_by_name (RhythmDB.RhythmDatabase db, string name);
		public weak EntryCanSyncFunc can_sync_metadata;
		public void* can_sync_metadata_data;
		public weak GLib.DestroyNotify can_sync_metadata_destroy;
		public EntryCategory category;
		public uint entry_type_data_size;
		public weak EntryStringFunc get_playback_uri;
		public void* get_playback_uri_data;
		public weak GLib.DestroyNotify get_playback_uri_destroy;
		public bool has_playlists;
		public weak string name;
		public weak EntryActionFunc post_entry_create;
		public void* post_entry_create_data;
		public weak GLib.DestroyNotify post_entry_create_destroy;
		public weak EntryActionFunc pre_entry_destroy;
		public void* pre_entry_destroy_data;
		public weak GLib.DestroyNotify pre_entry_destroy_destroy;
		public bool save_to_disk;
		public weak EntrySyncFunc sync_metadata;
		public void* sync_metadata_data;
		public weak GLib.DestroyNotify sync_metadata_destroy;
	}
	[Compact]
	[CCode (cheader_filename = "rhythmdb.h")]
	public class Event {
		public weak EntryChange change;
		public weak RhythmDatabase db;
		public weak Entry entry;
		public weak EntryType entry_type;
		public weak GLib.Error error;
		public weak EntryType error_type;
		public weak GLib.FileInfo file_info;
		public weak EntryType ignore_type;
		public weak RB.MetaData metadata;
		public weak RB.RefString real_uri;
		public weak QueryResults results;
		public bool signal_change;
		public int type;
		public weak RB.RefString uri;
	}
	[CCode (cheader_filename = "rhythmdb.h")]
	public class ImportJob : GLib.Object {
		[CCode (cname = "rhythmdb_import_job_new", has_construct_function = false)]
		public ImportJob (RhythmDB.RhythmDatabase db, RhythmDB.EntryType entry_type, RhythmDB.EntryType ignore_type, RhythmDB.EntryType error_type);
		[CCode (cname = "rhythmdb_import_job_add_uri")]
		public void add_uri (string uri);
		[CCode (cname = "rhythmdb_import_job_cancel")]
		public void cancel ();
		[CCode (cname = "rhythmdb_import_job_get_imported")]
		public int get_imported ();
		[CCode (cname = "rhythmdb_import_job_get_total")]
		public int get_total ();
		[CCode (cname = "rhythmdb_import_job_complete")]
		public bool job_complete ();
		[CCode (cname = "rhythmdb_import_job_scan_complete")]
		public bool job_scan_complete ();
		[CCode (cname = "rhythmdb_import_job_start")]
		public void start ();
		[NoAccessorMethod]
		public RhythmDB.RhythmDatabase db { owned get; construct; }
		[NoAccessorMethod]
		public RhythmDB.EntryType entry_type { owned get; construct; }
		[NoAccessorMethod]
		public RhythmDB.EntryType error_type { owned get; construct; }
		[NoAccessorMethod]
		public RhythmDB.EntryType ignore_type { owned get; construct; }
		public virtual signal void complete (int total);
		public virtual signal void entry_added (RhythmDB.Entry entry);
		public virtual signal void scan_complete (int total);
		public virtual signal void status_changed (int total, int imported);
	}
	[Compact]
	[CCode (cheader_filename = "rhythmdb.h")]
	public class PodcastFields {
		public weak RB.RefString copyright;
		public weak RB.RefString description;
		public weak RB.RefString image;
		public weak RB.RefString lang;
		public ulong post_time;
		public ulong status;
		public weak RB.RefString subtitle;
		public weak RB.RefString summary;
	}
	[CCode (cheader_filename = "rhythmdb.h")]
	public class PropertyModel : GLib.Object, Gtk.TreeModel {
		[CCode (cname = "rhythmdb_property_model_new", has_construct_function = false)]
		public PropertyModel (RhythmDB.RhythmDatabase db, RhythmDB.PropType propid);
		[CCode (cname = "rhythmdb_property_model_enable_drag")]
		public void enable_drag (Gtk.TreeView view);
		[CCode (cname = "rhythmdb_property_model_iter_from_string")]
		public bool iter_from_string (string name, Gtk.TreeIter iter);
		[NoAccessorMethod]
		public RhythmDB.RhythmDatabase db { owned get; construct; }
		[NoAccessorMethod]
		public int prop { get; construct; }
		[NoAccessorMethod]
		public RhythmDB.QueryModel query_model { owned get; set; }
		public virtual signal void pre_row_deletion ();
	}
	[Compact]
	[CCode (copy_function = "query_copy", free_function = "query_free", cheader_filename = "rhythmdb.h")]
	public class Query {
		[CCode (cname = "rhythmdb_query_append")]
		public static void append (RhythmDB.RhythmDatabase db, RhythmDB.Query query);
		[CCode (cname = "rhythmdb_query_append_params")]
		public static void append_params (RhythmDB.RhythmDatabase db, RhythmDB.Query query, RhythmDB.QueryType type, RhythmDB.PropType prop, GLib.Value value);
		[CCode (cname = "rhythmdb_query_append_prop_multiple")]
		public static void append_prop_multiple (RhythmDB.RhythmDatabase db, RhythmDB.Query query, RhythmDB.PropType propid, GLib.List items);
		[CCode (cname = "rhythmdb_query_concatenate")]
		public void concatenate (RhythmDB.Query query2);
		[CCode (cname = "rhythmdb_query_copy")]
		public unowned RhythmDB.Query copy ();
		[CCode (cname = "rhythmdb_query_deserialize")]
		public static unowned RhythmDB.Query deserialize (RhythmDB.RhythmDatabase db, uchar node);
		[CCode (cname = "rhythmdb_query_is_time_relative")]
		public static bool is_time_relative (RhythmDB.RhythmDatabase db, RhythmDB.Query query);
		[CCode (cname = "rhythmdb_query_parse")]
		public static unowned RhythmDB.Query parse (RhythmDB.RhythmDatabase db, ...);
		[CCode (cname = "rhythmdb_query_parse_valist")]
		public static unowned GLib.PtrArray parse_valist (RhythmDB.RhythmDatabase db, void* args);
		[CCode (cname = "rhythmdb_query_preprocess")]
		public static void preprocess (RhythmDB.RhythmDatabase db, RhythmDB.Query query);
		[CCode (cname = "rhythmdb_query_serialize")]
		public static void serialize (RhythmDB.RhythmDatabase db, RhythmDB.Query query, uchar node);
		[CCode (cname = "rhythmdb_query_to_string")]
		public static unowned string to_string (RhythmDB.RhythmDatabase db, RhythmDB.Query query);
	}
	[Compact]
	[CCode (cheader_filename = "rhythmdb.h")]
	public class QueryData {
		public uint propid;
		public weak Query subquery;
		public uint type;
		public GLib.Value val;
	}
	[CCode (cheader_filename = "rhythmdb-query-model.h")]
	public class QueryModel : GLib.Object, QueryResults, Gtk.TreeModel {
		[CCode (cname = "rhythmdb_query_model_new", has_construct_function = false)]
		public QueryModel (RhythmDB.RhythmDatabase db, GLib.PtrArray query, GLib.CompareDataFunc sort_func, void* sort_data, GLib.DestroyNotify sort_data_destroy, bool sort_reverse);
		[CCode (cname = "rhythmdb_query_model_add_entry")]
		public void add_entry (RhythmDB.Entry entry, int index);
		[CCode (cname = "rhythmdb_query_model_album_sort_func")]
		public static int album_sort_func (RhythmDB.Entry a, RhythmDB.Entry b, void* data);
		[CCode (cname = "rhythmdb_query_model_artist_sort_func")]
		public static int artist_sort_func (RhythmDB.Entry a, RhythmDB.Entry b, void* data);
		[CCode (cname = "rhythmdb_query_model_bitrate_sort_func")]
		public static int bitrate_sort_func (RhythmDB.Entry a, RhythmDB.Entry b, void* data);
		[CCode (cname = "rhythmdb_query_model_chain")]
		public void chain (RhythmDB.QueryModel @base, bool import_entries);
		[CCode (cname = "rhythmdb_query_model_compute_status_normal")]
		public unowned string compute_status_normal (string singular, string plural);
		[CCode (cname = "rhythmdb_query_model_copy_contents")]
		public void copy_contents (RhythmDB.QueryModel src);
		[CCode (cname = "rhythmdb_query_model_date_sort_func")]
		public static int date_sort_func (RhythmDB.Entry a, RhythmDB.Entry b, void* data);
		[CCode (cname = "rhythmdb_query_model_double_ceiling_sort_func")]
		public static int double_ceiling_sort_func (RhythmDB.Entry a, RhythmDB.Entry b, void* data);
		[CCode (cname = "rhythmdb_query_model_new_empty", has_construct_function = false)]
		public QueryModel.empty (RhythmDB.RhythmDatabase db);
		[CCode (cname = "rhythmdb_query_model_entry_to_iter")]
		public bool entry_to_iter (RhythmDB.Entry entry, Gtk.TreeIter iter);
		[CCode (cname = "rhythmdb_query_model_genre_sort_func")]
		public static int genre_sort_func (RhythmDB.Entry a, RhythmDB.Entry b, void* data);
		[CCode (cname = "rhythmdb_query_model_get_duration")]
		public long get_duration ();
		[CCode (cname = "rhythmdb_query_model_get_next_from_entry")]
		public unowned RhythmDB.Entry get_next_from_entry (RhythmDB.Entry entry);
		[CCode (cname = "rhythmdb_query_model_get_previous_from_entry")]
		public unowned RhythmDB.Entry get_previous_from_entry (RhythmDB.Entry entry);
		[CCode (cname = "rhythmdb_query_model_get_size")]
		public uint64 get_size ();
		[CCode (cname = "rhythmdb_query_model_has_pending_changes")]
		public bool has_pending_changes ();
		[CCode (cname = "rhythmdb_query_model_iter_to_entry")]
		public unowned RhythmDB.Entry iter_to_entry (Gtk.TreeIter entry_iter);
		[CCode (cname = "rhythmdb_query_model_location_sort_func")]
		public static int location_sort_func (RhythmDB.Entry a, RhythmDB.Entry b, void* data);
		[CCode (cname = "rhythmdb_query_model_move_entry")]
		public void move_entry (RhythmDB.Entry entry, int index);
		[CCode (cname = "rhythmdb_query_model_reapply_query")]
		public void reapply_query (bool filter);
		[CCode (cname = "rhythmdb_query_model_remove_entry")]
		public bool remove_entry (RhythmDB.Entry entry);
		[CCode (cname = "rhythmdb_query_model_set_sort_order")]
		public void set_sort_order (GLib.CompareDataFunc sort_func, void* sort_data, GLib.DestroyNotify sort_data_destroy, bool sort_reverse);
		[CCode (cname = "rhythmdb_query_model_shuffle_entries")]
		public void shuffle_entries ();
		[CCode (cname = "rhythmdb_query_model_string_sort_func")]
		public static int string_sort_func (RhythmDB.Entry a, RhythmDB.Entry b, void* data);
		[CCode (cname = "rhythmdb_query_model_title_sort_func")]
		public static int title_sort_func (RhythmDB.Entry a, RhythmDB.Entry b, void* data);
		[CCode (cname = "rhythmdb_query_model_track_sort_func")]
		public static int track_sort_func (RhythmDB.Entry a, RhythmDB.Entry b, void* data);
		[CCode (cname = "rhythmdb_query_model_tree_path_to_entry")]
		public unowned RhythmDB.Entry tree_path_to_entry (Gtk.TreePath path);
		[CCode (cname = "rhythmdb_query_model_ulong_sort_func")]
		public static int ulong_sort_func (RhythmDB.Entry a, RhythmDB.Entry b, void* data);
		[NoAccessorMethod]
		public RhythmDB.QueryModel base_model { owned get; set construct; }
		[NoAccessorMethod]
		public RhythmDB.RhythmDatabase db { owned get; construct; }
		[NoAccessorMethod]
		public RhythmDB.QueryModelLimitType limit_type { get; construct; }
		[NoAccessorMethod]
		public GLib.ValueArray limit_value { owned get; construct; }
		[NoAccessorMethod]
		public void* query { get; set; }
		[NoAccessorMethod]
		public bool show_hidden { get; set construct; }
		[NoAccessorMethod]
		public void* sort_data { get; set; }
		[NoAccessorMethod]
		public void* sort_data_destroy { get; set; }
		[NoAccessorMethod]
		public void* sort_func { get; set; }
		[NoAccessorMethod]
		public bool sort_reverse { get; set; }
		public virtual signal void complete ();
		public virtual signal void entry_prop_changed (RhythmDB.Entry entry, int prop, void* old, void* new_value);
		public virtual signal void entry_removed (RhythmDB.Entry entry);
		public virtual signal bool filter_entry_drop (RhythmDB.Entry entry);
		public virtual signal void non_entry_dropped (string uri, int position);
		public virtual signal void post_entry_delete (RhythmDB.Entry entry);
	}
	[CCode (cheader_filename = "rhythmdb-tree.h")]
	public class Tree : RhythmDatabase {
		[CCode (cname = "rhythmdb_tree_new", type = "RhythmDB*", has_construct_function = false)]
		public Tree (string name);
		[CCode (cname = "rhythmdb_tree_error_quark")]
		public static GLib.Quark error_quark ();
	}
	[CCode (cheader_filename = "rhythmdb.h")]
	public interface QueryResults {
		[CCode (cname = "rhythmdb_query_results_add_results")]
		public abstract void add_results (GLib.PtrArray entries);
		[CCode (cname = "rhythmdb_query_results_query_complete")]
		public abstract void query_complete ();
		[CCode (cname = "rhythmdb_query_results_set_query")]
		public abstract void set_query (GLib.PtrArray query);
	}
	[CCode (cprefix = "RHYTHMDB_ENTRY_", cheader_filename = "rhythmdb.h")]
	public enum EntryCategory {
		NORMAL,
		STREAM,
		CONTAINER,
		VIRTUAL
	}
	[CCode (cprefix = "RHYTHMDB_ERROR_ACCESS_", has_type_id = false, cheader_filename = "rhythmdb.h")]
	public enum Error {
		FAILED
	}
	[CCode (cprefix = "RHYTHMDB_PROP_", cheader_filename = "rhythmdb.h")]
	public enum PropType {
		TYPE,
		ENTRY_ID,
		TITLE,
		GENRE,
		ARTIST,
		ALBUM,
		TRACK_NUMBER,
		DISC_NUMBER,
		MUSICBRAINZ_TRACKID,
		MUSICBRAINZ_ARTISTID,
		MUSICBRAINZ_ALBUMID,
		MUSICBRAINZ_ALBUMARTISTID,
		ARTIST_SORTNAME,
		ALBUM_SORTNAME,
		DURATION,
		FILE_SIZE,
		LOCATION,
		MOUNTPOINT,
		MTIME,
		FIRST_SEEN,
		LAST_SEEN,
		RATING,
		PLAY_COUNT,
		LAST_PLAYED,
		BITRATE,
		DATE,
		TRACK_GAIN,
		TRACK_PEAK,
		ALBUM_GAIN,
		ALBUM_PEAK,
		MIMETYPE,
		TITLE_SORT_KEY,
		GENRE_SORT_KEY,
		ARTIST_SORT_KEY,
		ALBUM_SORT_KEY,
		TITLE_FOLDED,
		GENRE_FOLDED,
		ARTIST_FOLDED,
		ALBUM_FOLDED,
		LAST_PLAYED_STR,
		PLAYBACK_ERROR,
		HIDDEN,
		FIRST_SEEN_STR,
		LAST_SEEN_STR,
		SEARCH_MATCH,
		YEAR,
		STATUS,
		DESCRIPTION,
		SUBTITLE,
		SUMMARY,
		LANG,
		COPYRIGHT,
		IMAGE,
		POST_TIME,
		KEYWORD
	}
	[CCode (cprefix = "RHYTHMDB_PROPERTY_MODEL_COLUMN_", cheader_filename = "rhythmdb.h")]
	public enum PropertyModelColumn {
		TITLE,
		PRIORITY,
		NUMBER
	}
	[CCode (cprefix = "RHYTHMDB_QUERY_MODEL_LIMIT_", cheader_filename = "rhythmdb.h")]
	public enum QueryModelLimitType {
		NONE,
		COUNT,
		SIZE,
		TIME
	}
	[CCode (cprefix = "RHYTHMDB_QUERY_", cheader_filename = "rhythmdb.h")]
	public enum QueryType {
		END,
		DISJUNCTION,
		SUBQUERY,
		PROP_EQUALS,
		PROP_LIKE,
		PROP_NOT_LIKE,
		PROP_PREFIX,
		PROP_SUFFIX,
		PROP_GREATER,
		PROP_LESS,
		PROP_CURRENT_TIME_WITHIN,
		PROP_CURRENT_TIME_NOT_WITHIN,
		PROP_YEAR_EQUALS,
		PROP_YEAR_GREATER,
		PROP_YEAR_LESS
	}
	[CCode (cprefix = "MEDIA_TYPE_", has_type_id = false, cheader_filename = "rhythmdb.h")]
	public enum RBGstMediaType {
		NONE,
		CONTAINER,
		AUDIO,
		VIDEO,
		OTHER
	}
	[CCode (cprefix = "RHYTHMDB_TREE_ERROR_DATABASE_TOO_", has_type_id = false, cheader_filename = "rhythmdb.h")]
	public enum RhythmTreeDBError {
		NEW
	}
	[CCode (cheader_filename = "rhythmdb.h")]
	public delegate void EntryActionFunc (RhythmDB.Entry entry);
	[CCode (cheader_filename = "rhythmdb.h")]
	public delegate bool EntryCanSyncFunc (RhythmDB.RhythmDatabase db, RhythmDB.Entry entry);
	[CCode (cheader_filename = "rhythmdb.h")]
	public delegate unowned string EntryStringFunc (RhythmDB.Entry entry);
	[CCode (cheader_filename = "rhythmdb.h")]
	public delegate void EntrySyncFunc (RhythmDB.RhythmDatabase db, RhythmDB.Entry entry, GLib.Error error);
	[CCode (cheader_filename = "rhythmdb.h")]
	public const string PROP_ALBUM_ARTIST;
	[CCode (cheader_filename = "rhythmdb.h")]
	public const string PROP_ALBUM_ARTIST_SORTNAME;
	[CCode (cheader_filename = "rhythmdb.h")]
	public const string PROP_COVER_ART;
	[CCode (cheader_filename = "rhythmdb.h")]
	public const string PROP_COVER_ART_URI;
	[CCode (cheader_filename = "rhythmdb.h")]
	public const string PROP_STREAM_SONG_ALBUM;
	[CCode (cheader_filename = "rhythmdb.h")]
	public const string PROP_STREAM_SONG_ARTIST;
	[CCode (cheader_filename = "rhythmdb.h")]
	public const string PROP_STREAM_SONG_TITLE;
	[CCode (cheader_filename = "rhythmdb.h")]
	public const int QUERY_MODEL_SUGGESTED_UPDATE_CHUNK;
}
