<!-- ##### SECTION Title ##### -->
RhythmDB

<!-- ##### SECTION Short_Description ##### -->


<!-- ##### SECTION Long_Description ##### -->
<para>

</para>

<!-- ##### SECTION See_Also ##### -->
<para>

</para>

<!-- ##### SECTION Stability_Level ##### -->


<!-- ##### SECTION Image ##### -->


<!-- ##### MACRO RHYTHMDB_TYPE ##### -->
<para>

</para>



<!-- ##### MACRO RHYTHMDB ##### -->
<para>

</para>

@o: 


<!-- ##### MACRO RHYTHMDB_IS ##### -->
<para>

</para>

@o: 


<!-- ##### TYPEDEF RhythmDBQuery ##### -->
<para>

</para>


<!-- ##### ENUM RhythmDBQueryType ##### -->
<para>

</para>

@RHYTHMDB_QUERY_END: 
@RHYTHMDB_QUERY_DISJUNCTION: 
@RHYTHMDB_QUERY_SUBQUERY: 
@RHYTHMDB_QUERY_PROP_EQUALS: 
@RHYTHMDB_QUERY_PROP_NOT_EQUAL: 
@RHYTHMDB_QUERY_PROP_LIKE: 
@RHYTHMDB_QUERY_PROP_NOT_LIKE: 
@RHYTHMDB_QUERY_PROP_PREFIX: 
@RHYTHMDB_QUERY_PROP_SUFFIX: 
@RHYTHMDB_QUERY_PROP_GREATER: 
@RHYTHMDB_QUERY_PROP_LESS: 
@RHYTHMDB_QUERY_PROP_CURRENT_TIME_WITHIN: 
@RHYTHMDB_QUERY_PROP_CURRENT_TIME_NOT_WITHIN: 
@RHYTHMDB_QUERY_PROP_YEAR_EQUALS: 
@RHYTHMDB_QUERY_PROP_YEAR_NOT_EQUAL: 
@RHYTHMDB_QUERY_PROP_YEAR_GREATER: 
@RHYTHMDB_QUERY_PROP_YEAR_LESS: 

<!-- ##### ENUM RhythmDBPropType ##### -->
<para>

</para>

@RHYTHMDB_PROP_TYPE: 
@RHYTHMDB_PROP_ENTRY_ID: 
@RHYTHMDB_PROP_TITLE: 
@RHYTHMDB_PROP_GENRE: 
@RHYTHMDB_PROP_ARTIST: 
@RHYTHMDB_PROP_ALBUM: 
@RHYTHMDB_PROP_TRACK_NUMBER: 
@RHYTHMDB_PROP_DISC_NUMBER: 
@RHYTHMDB_PROP_DURATION: 
@RHYTHMDB_PROP_FILE_SIZE: 
@RHYTHMDB_PROP_LOCATION: 
@RHYTHMDB_PROP_MOUNTPOINT: 
@RHYTHMDB_PROP_MTIME: 
@RHYTHMDB_PROP_FIRST_SEEN: 
@RHYTHMDB_PROP_LAST_SEEN: 
@RHYTHMDB_PROP_RATING: 
@RHYTHMDB_PROP_PLAY_COUNT: 
@RHYTHMDB_PROP_LAST_PLAYED: 
@RHYTHMDB_PROP_BITRATE: 
@RHYTHMDB_PROP_DATE: 
@RHYTHMDB_PROP_TRACK_GAIN: 
@RHYTHMDB_PROP_TRACK_PEAK: 
@RHYTHMDB_PROP_ALBUM_GAIN: 
@RHYTHMDB_PROP_ALBUM_PEAK: 
@RHYTHMDB_PROP_MEDIA_TYPE: 
@RHYTHMDB_PROP_TITLE_SORT_KEY: 
@RHYTHMDB_PROP_GENRE_SORT_KEY: 
@RHYTHMDB_PROP_ARTIST_SORT_KEY: 
@RHYTHMDB_PROP_ALBUM_SORT_KEY: 
@RHYTHMDB_PROP_TITLE_FOLDED: 
@RHYTHMDB_PROP_GENRE_FOLDED: 
@RHYTHMDB_PROP_ARTIST_FOLDED: 
@RHYTHMDB_PROP_ALBUM_FOLDED: 
@RHYTHMDB_PROP_LAST_PLAYED_STR: 
@RHYTHMDB_PROP_HIDDEN: 
@RHYTHMDB_PROP_PLAYBACK_ERROR: 
@RHYTHMDB_PROP_FIRST_SEEN_STR: 
@RHYTHMDB_PROP_LAST_SEEN_STR: 
@RHYTHMDB_PROP_SEARCH_MATCH: 
@RHYTHMDB_PROP_YEAR: 
@RHYTHMDB_PROP_KEYWORD: 
@RHYTHMDB_PROP_STATUS: 
@RHYTHMDB_PROP_DESCRIPTION: 
@RHYTHMDB_PROP_SUBTITLE: 
@RHYTHMDB_PROP_SUMMARY: 
@RHYTHMDB_PROP_LANG: 
@RHYTHMDB_PROP_COPYRIGHT: 
@RHYTHMDB_PROP_IMAGE: 
@RHYTHMDB_PROP_POST_TIME: 
@RHYTHMDB_PROP_MUSICBRAINZ_TRACKID: 
@RHYTHMDB_PROP_MUSICBRAINZ_ARTISTID: 
@RHYTHMDB_PROP_MUSICBRAINZ_ALBUMID: 
@RHYTHMDB_PROP_MUSICBRAINZ_ALBUMARTISTID: 
@RHYTHMDB_PROP_ARTIST_SORTNAME: 
@RHYTHMDB_PROP_ALBUM_SORTNAME: 
@RHYTHMDB_PROP_ARTIST_SORTNAME_SORT_KEY: 
@RHYTHMDB_PROP_ARTIST_SORTNAME_FOLDED: 
@RHYTHMDB_PROP_ALBUM_SORTNAME_SORT_KEY: 
@RHYTHMDB_PROP_ALBUM_SORTNAME_FOLDED: 
@RHYTHMDB_PROP_COMMENT: 
@RHYTHMDB_PROP_ALBUM_ARTIST: 
@RHYTHMDB_PROP_ALBUM_ARTIST_SORT_KEY: 
@RHYTHMDB_PROP_ALBUM_ARTIST_FOLDED: 
@RHYTHMDB_PROP_ALBUM_ARTIST_SORTNAME: 
@RHYTHMDB_PROP_ALBUM_ARTIST_SORTNAME_SORT_KEY: 
@RHYTHMDB_PROP_ALBUM_ARTIST_SORTNAME_FOLDED: 
@RHYTHMDB_PROP_BPM: 
@RHYTHMDB_PROP_COMPOSER: 
@RHYTHMDB_PROP_COMPOSER_SORT_KEY: 
@RHYTHMDB_PROP_COMPOSER_FOLDED: 
@RHYTHMDB_PROP_COMPOSER_SORTNAME: 
@RHYTHMDB_PROP_COMPOSER_SORTNAME_SORT_KEY: 
@RHYTHMDB_PROP_COMPOSER_SORTNAME_FOLDED: 
@RHYTHMDB_NUM_PROPERTIES: 

<!-- ##### MACRO RHYTHMDB_PROP_STREAM_SONG_TITLE ##### -->
<para>

</para>



<!-- ##### MACRO RHYTHMDB_PROP_STREAM_SONG_ARTIST ##### -->
<para>

</para>



<!-- ##### MACRO RHYTHMDB_PROP_STREAM_SONG_ALBUM ##### -->
<para>

</para>



<!-- ##### MACRO RHYTHMDB_PROP_COVER_ART ##### -->
<para>

</para>



<!-- ##### MACRO RHYTHMDB_PROP_COVER_ART_URI ##### -->
<para>

</para>



<!-- ##### STRUCT RhythmDBQueryData ##### -->
<para>

</para>

@type: 
@propid: 
@val: 
@subquery: 

<!-- ##### STRUCT RhythmDBEntryChange ##### -->
<para>

</para>

@prop: 
@old: 
@new: 

<!-- ##### FUNCTION rhythmdb_entry_get_string ##### -->
<para>

</para>

@entry: 
@propid: 
@Returns: 


<!-- ##### FUNCTION rhythmdb_entry_get_refstring ##### -->
<para>

</para>

@entry: 
@propid: 
@Returns: 


<!-- ##### FUNCTION rhythmdb_entry_dup_string ##### -->
<para>

</para>

@entry: 
@propid: 
@Returns: 


<!-- ##### FUNCTION rhythmdb_entry_get_boolean ##### -->
<para>

</para>

@entry: 
@propid: 
@Returns: 


<!-- ##### FUNCTION rhythmdb_entry_get_uint64 ##### -->
<para>

</para>

@entry: 
@propid: 
@Returns: 


<!-- ##### FUNCTION rhythmdb_entry_get_ulong ##### -->
<para>

</para>

@entry: 
@propid: 
@Returns: 


<!-- ##### FUNCTION rhythmdb_entry_get_double ##### -->
<para>

</para>

@entry: 
@propid: 
@Returns: 


<!-- ##### FUNCTION rhythmdb_entry_get_object ##### -->
<para>

</para>

@entry: 
@propid: 
@Returns: 


<!-- ##### FUNCTION rhythmdb_entry_get_entry_type ##### -->
<para>

</para>

@entry: 
@Returns: 


<!-- ##### ENUM RhythmDBError ##### -->
<para>

</para>

@RHYTHMDB_ERROR_ACCESS_FAILED: 

<!-- ##### MACRO RHYTHMDB_ERROR ##### -->
<para>

</para>



<!-- ##### FUNCTION rhythmdb_error_quark ##### -->
<para>

</para>

@void: 
@Returns: 


<!-- ##### STRUCT RhythmDB ##### -->
<para>

</para>


<!-- ##### SIGNAL RhythmDB::create-mount-op ##### -->
<para>

</para>

@rhythmdb: the object which received the signal.
@Returns: 

<!-- ##### SIGNAL RhythmDB::entry-added ##### -->
<para>

</para>

@rhythmdb: the object which received the signal.
@arg1: 

<!-- ##### SIGNAL RhythmDB::entry-changed ##### -->
<para>

</para>

@rhythmdb: the object which received the signal.
@arg1: 
@arg2: 

<!-- ##### SIGNAL RhythmDB::entry-deleted ##### -->
<para>

</para>

@rhythmdb: the object which received the signal.
@arg1: 

<!-- ##### SIGNAL RhythmDB::entry-extra-metadata-gather ##### -->
<para>

</para>

@rhythmdb: the object which received the signal.
@arg1: 
@arg2: 

<!-- ##### SIGNAL RhythmDB::entry-extra-metadata-notify ##### -->
<para>

</para>

@rhythmdb: the object which received the signal.
@arg1: 
@arg2: 
@arg3: 

<!-- ##### SIGNAL RhythmDB::entry-extra-metadata-request ##### -->
<para>

</para>

@rhythmdb: the object which received the signal.
@arg1: 
@Returns: 

<!-- ##### SIGNAL RhythmDB::entry-keyword-added ##### -->
<para>

</para>

@rhythmdb: the object which received the signal.
@arg1: 
@arg2: 

<!-- ##### SIGNAL RhythmDB::entry-keyword-removed ##### -->
<para>

</para>

@rhythmdb: the object which received the signal.
@arg1: 
@arg2: 

<!-- ##### SIGNAL RhythmDB::load-complete ##### -->
<para>

</para>

@rhythmdb: the object which received the signal.

<!-- ##### SIGNAL RhythmDB::read-only ##### -->
<para>

</para>

@rhythmdb: the object which received the signal.
@arg1: 

<!-- ##### SIGNAL RhythmDB::save-complete ##### -->
<para>

</para>

@rhythmdb: the object which received the signal.

<!-- ##### SIGNAL RhythmDB::save-error ##### -->
<para>

</para>

@rhythmdb: the object which received the signal.
@arg1: 
@arg2: 

<!-- ##### ARG RhythmDB:dry-run ##### -->
<para>

</para>

<!-- ##### ARG RhythmDB:name ##### -->
<para>

</para>

<!-- ##### ARG RhythmDB:no-update ##### -->
<para>

</para>

<!-- ##### STRUCT RhythmDBClass ##### -->
<para>

</para>

@parent: 
@entry_added: 
@entry_changed: 
@entry_deleted: 
@entry_keyword_added: 
@entry_keyword_removed: 
@entry_extra_metadata_request: 
@entry_extra_metadata_gather: 
@entry_extra_metadata_notify: 
@load_complete: 
@save_complete: 
@load_error: 
@save_error: 
@read_only: 
@impl_load: 
@impl_save: 
@impl_entry_new: 
@impl_entry_set: 
@impl_entry_get: 
@impl_entry_delete: 
@impl_entry_delete_by_type: 
@impl_lookup_by_location: 
@impl_lookup_by_id: 
@impl_evaluate_query: 
@impl_entry_foreach: 
@impl_entry_count: 
@impl_entry_foreach_by_type: 
@impl_entry_count_by_type: 
@impl_do_full_query: 
@impl_entry_type_registered: 
@impl_entry_keyword_add: 
@impl_entry_keyword_remove: 
@impl_entry_keyword_has: 
@impl_entry_keywords_get: 

<!-- ##### FUNCTION rhythmdb_get_type ##### -->
<para>

</para>

@void: 
@Returns: 


<!-- ##### FUNCTION rhythmdb_shutdown ##### -->
<para>

</para>

@db: 


<!-- ##### FUNCTION rhythmdb_load ##### -->
<para>

</para>

@db: 


<!-- ##### FUNCTION rhythmdb_save ##### -->
<para>

</para>

@db: 


<!-- ##### FUNCTION rhythmdb_save_async ##### -->
<para>

</para>

@db: 


<!-- ##### FUNCTION rhythmdb_start_action_thread ##### -->
<para>

</para>

@db: 


<!-- ##### FUNCTION rhythmdb_commit ##### -->
<para>

</para>

@db: 


<!-- ##### FUNCTION rhythmdb_entry_new ##### -->
<para>

</para>

@db: 
@type: 
@uri: 
@Returns: 


<!-- ##### FUNCTION rhythmdb_entry_example_new ##### -->
<para>

</para>

@db: 
@type: 
@uri: 
@Returns: 


<!-- ##### FUNCTION rhythmdb_add_uri ##### -->
<para>

</para>

@db: 
@uri: 


<!-- ##### FUNCTION rhythmdb_add_uri_with_types ##### -->
<para>

</para>

@db: 
@uri: 
@type: 
@ignore_type: 
@error_type: 


<!-- ##### FUNCTION rhythmdb_entry_get ##### -->
<para>

</para>

@db: 
@entry: 
@propid: 
@val: 


<!-- ##### FUNCTION rhythmdb_entry_set ##### -->
<para>

</para>

@db: 
@entry: 
@propid: 
@value: 


<!-- ##### FUNCTION rhythmdb_entry_is_lossless ##### -->
<para>

</para>

@entry: 
@Returns: 


<!-- ##### FUNCTION rhythmdb_entry_get_type_data ##### -->
<para>

</para>

@entry: 
@expected_size: 
@Returns: 


<!-- ##### MACRO RHYTHMDB_ENTRY_GET_TYPE_DATA ##### -->
<para>

</para>

@e: 
@t: 


<!-- ##### FUNCTION rhythmdb_entry_delete ##### -->
<para>

</para>

@db: 
@entry: 


<!-- ##### FUNCTION rhythmdb_entry_delete_by_type ##### -->
<para>

</para>

@db: 
@type: 


<!-- ##### FUNCTION rhythmdb_entry_move_to_trash ##### -->
<para>

</para>

@db: 
@entry: 


<!-- ##### FUNCTION rhythmdb_entry_lookup_by_location ##### -->
<para>

</para>

@db: 
@uri: 
@Returns: 


<!-- ##### FUNCTION rhythmdb_entry_lookup_by_id ##### -->
<para>

</para>

@db: 
@id: 
@Returns: 


<!-- ##### FUNCTION rhythmdb_entry_lookup_from_string ##### -->
<para>

</para>

@db: 
@str: 
@is_id: 
@Returns: 


<!-- ##### FUNCTION rhythmdb_evaluate_query ##### -->
<para>

</para>

@db: 
@query: 
@entry: 
@Returns: 


<!-- ##### FUNCTION rhythmdb_entry_foreach ##### -->
<para>

</para>

@db: 
@func: 
@data: 


<!-- ##### FUNCTION rhythmdb_entry_count ##### -->
<para>

</para>

@db: 
@Returns: 


<!-- ##### FUNCTION rhythmdb_entry_foreach_by_type ##### -->
<para>

</para>

@db: 
@entry_type: 
@func: 
@data: 


<!-- ##### FUNCTION rhythmdb_entry_count_by_type ##### -->
<para>

</para>

@db: 
@entry_type: 
@Returns: 


<!-- ##### FUNCTION rhythmdb_entry_keyword_add ##### -->
<para>

</para>

@db: 
@entry: 
@keyword: 
@Returns: 


<!-- ##### FUNCTION rhythmdb_entry_keyword_remove ##### -->
<para>

</para>

@db: 
@entry: 
@keyword: 
@Returns: 


<!-- ##### FUNCTION rhythmdb_entry_keyword_has ##### -->
<para>

</para>

@db: 
@entry: 
@keyword: 
@Returns: 


<!-- ##### FUNCTION rhythmdb_entry_write_metadata_changes ##### -->
<para>

</para>

@db: 
@entry: 
@changes: 
@error: 


<!-- ##### FUNCTION rhythmdb_entry_create_ext_db_key ##### -->
<para>

</para>

@entry: 
@prop: 
@Returns: 


<!-- ##### FUNCTION rhythmdb_entry_matches_ext_db_key ##### -->
<para>

</para>

@db: 
@entry: 
@key: 
@Returns: 


<!-- ##### FUNCTION rhythmdb_do_full_query ##### -->
<para>

</para>

@db: 
@results: 
@...: 


<!-- ##### FUNCTION rhythmdb_do_full_query_parsed ##### -->
<para>

</para>

@db: 
@results: 
@query: 


<!-- ##### FUNCTION rhythmdb_do_full_query_async ##### -->
<para>

</para>

@db: 
@results: 
@...: 


<!-- ##### FUNCTION rhythmdb_do_full_query_async_parsed ##### -->
<para>

</para>

@db: 
@results: 
@query: 


<!-- ##### FUNCTION rhythmdb_query_parse ##### -->
<para>

</para>

@db: 
@...: 
@Returns: 


<!-- ##### FUNCTION rhythmdb_query_append ##### -->
<para>

</para>

@db: 
@query: 
@...: 


<!-- ##### FUNCTION rhythmdb_query_append_params ##### -->
<para>

</para>

@db: 
@query: 
@type: 
@prop: 
@value: 


<!-- ##### FUNCTION rhythmdb_query_append_prop_multiple ##### -->
<para>

</para>

@db: 
@query: 
@propid: 
@items: 


<!-- ##### FUNCTION rhythmdb_query_concatenate ##### -->
<para>

</para>

@query1: 
@query2: 


<!-- ##### FUNCTION rhythmdb_query_free ##### -->
<para>

</para>

@query: 


<!-- ##### FUNCTION rhythmdb_query_copy ##### -->
<para>

</para>

@array: 
@Returns: 


<!-- ##### FUNCTION rhythmdb_query_preprocess ##### -->
<para>

</para>

@db: 
@query: 


<!-- ##### FUNCTION rhythmdb_query_serialize ##### -->
<para>

</para>

@db: 
@query: 
@parent: 


<!-- ##### FUNCTION rhythmdb_query_deserialize ##### -->
<para>

</para>

@db: 
@parent: 
@Returns: 


<!-- ##### FUNCTION rhythmdb_query_to_string ##### -->
<para>

</para>

@db: 
@query: 
@Returns: 


<!-- ##### FUNCTION rhythmdb_query_is_time_relative ##### -->
<para>

</para>

@db: 
@query: 
@Returns: 


<!-- ##### FUNCTION rhythmdb_nice_elt_name_from_propid ##### -->
<para>

</para>

@db: 
@propid: 
@Returns: 


<!-- ##### FUNCTION rhythmdb_propid_from_nice_elt_name ##### -->
<para>

</para>

@db: 
@name: 
@Returns: 


<!-- ##### FUNCTION rhythmdb_emit_entry_added ##### -->
<para>

</para>

@db: 
@entry: 


<!-- ##### FUNCTION rhythmdb_emit_entry_deleted ##### -->
<para>

</para>

@db: 
@entry: 


<!-- ##### FUNCTION rhythmdb_entry_request_extra_metadata ##### -->
<para>

</para>

@db: 
@entry: 
@property_name: 
@Returns: 


<!-- ##### FUNCTION rhythmdb_entry_gather_metadata ##### -->
<para>

</para>

@db: 
@entry: 
@Returns: 


<!-- ##### FUNCTION rhythmdb_emit_entry_extra_metadata_notify ##### -->
<para>

</para>

@db: 
@entry: 
@property_name: 
@metadata: 


<!-- ##### FUNCTION rhythmdb_compute_status_normal ##### -->
<para>

</para>

@n_songs: 
@duration: 
@size: 
@singular: 
@plural: 
@Returns: 


<!-- ##### FUNCTION rhythmdb_register_entry_type ##### -->
<para>

</para>

@db: 
@entry_type: 


<!-- ##### FUNCTION rhythmdb_entry_type_get_by_name ##### -->
<para>

</para>

@db: 
@name: 
@Returns: 


<!-- ##### FUNCTION rhythmdb_get_property_type ##### -->
<para>

</para>

@db: 
@property_id: 
@Returns: 


<!-- ##### FUNCTION rhythmdb_entry_ref ##### -->
<para>

</para>

@entry: 
@Returns: 


<!-- ##### FUNCTION rhythmdb_entry_unref ##### -->
<para>

</para>

@entry: 


<!-- ##### STRUCT RhythmDBPrivate ##### -->
<para>

</para>


