1 /* 2 * Copyright (C) 2003,2004 Colin Walters <walters@verbum.org> 3 * 4 * This program is free software; you can redistribute it and/or modify 5 * it under the terms of the GNU General Public License as published by 6 * the Free Software Foundation; either version 2 of the License, or 7 * (at your option) any later version. 8 * 9 * The Rhythmbox authors hereby grant permission for non-GPL compatible 10 * GStreamer plugins to be used and distributed together with GStreamer 11 * and Rhythmbox. This permission is above and beyond the permissions granted 12 * by the GPL license by which Rhythmbox is covered. If you modify this code 13 * you may extend this exception to your version of the code, but you are not 14 * obligated to do so. If you do not wish to do so, delete this exception 15 * statement from your version. 16 * 17 * This program is distributed in the hope that it will be useful, 18 * but WITHOUT ANY WARRANTY; without even the implied warranty of 19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 20 * GNU General Public License for more details. 21 * 22 * You should have received a copy of the GNU General Public License 23 * along with this program; if not, write to the Free Software 24 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 25 * 26 */ 27 28 #ifndef __RB_METADATA_H 29 #define __RB_METADATA_H 30 31 #include <glib-object.h> 32 33 G_BEGIN_DECLS 34 35 typedef enum 36 { 37 RB_METADATA_FIELD_TITLE, /* string */ 38 RB_METADATA_FIELD_ARTIST, /* string */ 39 RB_METADATA_FIELD_ALBUM, /* string */ 40 RB_METADATA_FIELD_DATE, /* ulong */ 41 RB_METADATA_FIELD_GENRE, /* string */ 42 RB_METADATA_FIELD_COMMENT, /* string */ 43 RB_METADATA_FIELD_TRACK_NUMBER, /* ulong */ 44 RB_METADATA_FIELD_MAX_TRACK_NUMBER, /* ulong */ 45 RB_METADATA_FIELD_DISC_NUMBER, /* ulong */ 46 RB_METADATA_FIELD_MAX_DISC_NUMBER, /* ulong */ 47 RB_METADATA_FIELD_DESCRIPTION, /* string */ 48 RB_METADATA_FIELD_VERSION, /* string */ 49 RB_METADATA_FIELD_ISRC, /* string */ 50 RB_METADATA_FIELD_ORGANIZATION, /* string */ 51 RB_METADATA_FIELD_COPYRIGHT, /* string */ 52 RB_METADATA_FIELD_CONTACT, /* string */ 53 RB_METADATA_FIELD_LICENSE, /* string */ 54 RB_METADATA_FIELD_PERFORMER, /* string */ 55 RB_METADATA_FIELD_DURATION, /* ulong */ 56 RB_METADATA_FIELD_CODEC, /* string */ 57 RB_METADATA_FIELD_BITRATE, /* ulong */ 58 RB_METADATA_FIELD_TRACK_GAIN, /* double */ 59 RB_METADATA_FIELD_TRACK_PEAK, /* double */ 60 RB_METADATA_FIELD_ALBUM_GAIN, /* double */ 61 RB_METADATA_FIELD_ALBUM_PEAK, /* double */ 62 RB_METADATA_FIELD_LANGUAGE_CODE, /* string */ 63 RB_METADATA_FIELD_BPM, /* double */ 64 RB_METADATA_FIELD_MUSICBRAINZ_TRACKID, /* string */ 65 RB_METADATA_FIELD_MUSICBRAINZ_ARTISTID, /* string */ 66 RB_METADATA_FIELD_MUSICBRAINZ_ALBUMID, /* string */ 67 RB_METADATA_FIELD_MUSICBRAINZ_ALBUMARTISTID, /* string */ 68 RB_METADATA_FIELD_ARTIST_SORTNAME, /* string */ 69 RB_METADATA_FIELD_ALBUM_SORTNAME, /* string */ 70 RB_METADATA_FIELD_ALBUM_ARTIST, /* string */ 71 RB_METADATA_FIELD_ALBUM_ARTIST_SORTNAME, /* string */ 72 RB_METADATA_FIELD_COMPOSER, /* string */ 73 RB_METADATA_FIELD_COMPOSER_SORTNAME, /* string */ 74 75 RB_METADATA_FIELD_LAST /* nothing */ 76 } RBMetaDataField; 77 78 #define RB_TYPE_METADATA_FIELD (rb_metadata_field_get_type ()) 79 80 typedef enum 81 { 82 RB_METADATA_ERROR_IO, 83 RB_METADATA_ERROR_MISSING_PLUGIN, 84 RB_METADATA_ERROR_UNRECOGNIZED, 85 RB_METADATA_ERROR_UNSUPPORTED, 86 RB_METADATA_ERROR_GENERAL, 87 RB_METADATA_ERROR_INTERNAL, 88 RB_METADATA_ERROR_EMPTY_FILE 89 } RBMetaDataError; 90 91 #define RB_METADATA_ERROR rb_metadata_error_quark () 92 #define RB_TYPE_METADATA_ERROR (rb_metadata_error_get_type ()) 93 94 GQuark rb_metadata_error_quark (void); 95 96 #define RB_TYPE_METADATA (rb_metadata_get_type ()) 97 #define RB_METADATA(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), RB_TYPE_METADATA, RBMetaData)) 98 #define RB_METADATA_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), RB_TYPE_METADATA, RBMetaDataClass)) 99 #define RB_IS_METADATA(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), RB_TYPE_METADATA)) 100 #define RB_IS_METADATA_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), RB_TYPE_METADATA)) 101 #define RB_METADATA_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), RB_TYPE_METADATA, RBMetaDataClass)) 102 103 typedef struct _RBMetaData RBMetaData; 104 typedef struct _RBMetaDataClass RBMetaDataClass; 105 106 typedef struct RBMetaDataPrivate RBMetaDataPrivate; 107 108 struct _RBMetaData 109 { 110 GObject parent; 111 112 RBMetaDataPrivate *priv; 113 }; 114 115 struct _RBMetaDataClass 116 { 117 GObjectClass parent_class; 118 }; 119 120 GType rb_metadata_get_type (void); 121 122 GType rb_metadata_field_get_type (void); 123 GType rb_metadata_error_get_type (void); 124 125 GType rb_metadata_get_field_type (RBMetaDataField field); 126 127 const char * rb_metadata_get_field_name (RBMetaDataField field); 128 129 RBMetaData * rb_metadata_new (void); 130 131 gboolean rb_metadata_can_save (RBMetaData *md, const char *media_type); 132 char ** rb_metadata_get_saveable_types (RBMetaData *md); 133 134 void rb_metadata_reset (RBMetaData *md); 135 136 void rb_metadata_load (RBMetaData *md, 137 const char *uri, 138 GError **error); 139 140 void rb_metadata_save (RBMetaData *md, 141 const char *uri, 142 GError **error); 143 144 const char * rb_metadata_get_media_type (RBMetaData *md); 145 146 gboolean rb_metadata_has_missing_plugins (RBMetaData *md); 147 148 gboolean rb_metadata_get_missing_plugins (RBMetaData *md, 149 char ***missing_plugins, 150 char ***plugin_descriptions); 151 gboolean rb_metadata_has_audio (RBMetaData *md); 152 gboolean rb_metadata_has_video (RBMetaData *md); 153 gboolean rb_metadata_has_other_data (RBMetaData *md); 154 155 gboolean rb_metadata_get (RBMetaData *md, RBMetaDataField field, 156 GValue *val); 157 158 gboolean rb_metadata_set (RBMetaData *md, RBMetaDataField field, 159 const GValue *val); 160 161 G_END_DECLS 162 163 #endif /* __RB_METADATA_H */ 164