~ubuntu-branches/ubuntu/precise/rhythmbox/precise-201203091205

« back to all changes in this revision

Viewing changes to metadata/rb-metadata-common.c

Tags: upstream-0.9.5
ImportĀ upstreamĀ versionĀ 0.9.5

Show diffs side-by-side

added added

removed removed

Lines of Context:
15
15
 *
16
16
 *  You should have received a copy of the GNU General Public License
17
17
 *  along with this program; if not, write to the Free Software
18
 
 *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
18
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA.
19
19
 *
20
20
 */
21
21
 
24
24
#include "rb-metadata.h"
25
25
#include "rb-debug.h"
26
26
 
 
27
struct RBMetaDataFieldInfo {
 
28
        GType type;
 
29
        const char *name;
 
30
};
 
31
 
 
32
/*
 
33
 * Note: the field names are the same as those used by GStreamer.  We
 
34
 * could have just use the GST_TAG_X defines, but that would suck if we
 
35
 * ever got a non-GStreamer metadata backend.
 
36
 */
 
37
static struct RBMetaDataFieldInfo field_info[RB_METADATA_FIELD_LAST] = {
 
38
        /* RB_METADATA_FIELD_TITLE */                   { G_TYPE_STRING, "title" },
 
39
        /* RB_METADATA_FIELD_ARTIST */                  { G_TYPE_STRING, "artist" },
 
40
        /* RB_METADATA_FIELD_ALBUM */                   { G_TYPE_STRING, "album" },
 
41
        /* RB_METADATA_FIELD_DATE */                    { G_TYPE_ULONG, "date" },
 
42
        /* RB_METADATA_FIELD_GENRE */                   { G_TYPE_STRING, "genre" },
 
43
        /* RB_METADATA_FIELD_COMMENT */                 { G_TYPE_STRING, "comment" },
 
44
        /* RB_METADATA_FIELD_TRACK_NUMBER */            { G_TYPE_ULONG, "track-number" },
 
45
        /* RB_METADATA_FIELD_MAX_TRACK_NUMBER */        { G_TYPE_ULONG, "track-count" },
 
46
        /* RB_METADATA_FIELD_DISC_NUMBER */             { G_TYPE_ULONG, "album-disc-number" },
 
47
        /* RB_METADATA_FIELD_MAX_DISC_NUMBER */         { G_TYPE_ULONG, "album-disc-count" },
 
48
        /* RB_METADATA_FIELD_DESCRIPTION */             { G_TYPE_STRING, "description" },
 
49
        /* RB_METADATA_FIELD_VERSION */                 { G_TYPE_STRING, "version" },
 
50
        /* RB_METADATA_FIELD_IRSC */                    { G_TYPE_STRING, "isrc" },
 
51
        /* RB_METADATA_FIELD_ORGANIZATION */            { G_TYPE_STRING, "organization" },
 
52
        /* RB_METADATA_FIELD_COPYRIGHT */               { G_TYPE_STRING, "copyright" },
 
53
        /* RB_METADATA_FIELD_CONTACT */                 { G_TYPE_STRING, "contact" },
 
54
        /* RB_METADATA_FIELD_LICENSE */                 { G_TYPE_STRING, "license" },
 
55
        /* RB_METADATA_FIELD_PERFORMER */               { G_TYPE_STRING, "performer" },
 
56
        /* RB_METADATA_FIELD_DURATION */                { G_TYPE_ULONG, "duration" },
 
57
        /* RB_METADATA_FIELD_CODEC */                   { G_TYPE_STRING, "codec" },
 
58
        /* RB_METADATA_FIELD_BITRATE */                 { G_TYPE_ULONG, "bitrate" },
 
59
        /* RB_METADATA_FIELD_TRACK_GAIN */              { G_TYPE_DOUBLE, "replaygain-track-gain" },
 
60
        /* RB_METADATA_FIELD_TRACK_PEAK */              { G_TYPE_DOUBLE, "replaygain-track-peak" },
 
61
        /* RB_METADATA_FIELD_ALBUM_GAIN */              { G_TYPE_DOUBLE, "replaygain-album-gain" },
 
62
        /* RB_METADATA_FIELD_ALBUM_PEAK */              { G_TYPE_DOUBLE, "replaygain-album-peak" },
 
63
        /* RB_METADATA_FIELD_LANGUAGE_CODE */           { G_TYPE_STRING, "language-code" }
 
64
};
 
65
 
27
66
GType
28
 
rb_metadata_get_field_type (RBMetaData *md, RBMetaDataField field)
29
 
{
30
 
        GHashTable *map = g_object_get_data (G_OBJECT (md),
31
 
                                             "rb-metadata-field-type-map");
32
 
        
33
 
        if (!map) {
34
 
                map = g_hash_table_new (g_direct_hash, g_direct_equal);
35
 
                g_hash_table_insert (map, GINT_TO_POINTER (RB_METADATA_FIELD_TITLE),
36
 
                                     GINT_TO_POINTER (G_TYPE_STRING));
37
 
                g_hash_table_insert (map, GINT_TO_POINTER (RB_METADATA_FIELD_ARTIST),
38
 
                                     GINT_TO_POINTER (G_TYPE_STRING));
39
 
                g_hash_table_insert (map, GINT_TO_POINTER (RB_METADATA_FIELD_ALBUM),
40
 
                                     GINT_TO_POINTER (G_TYPE_STRING));
41
 
                g_hash_table_insert (map, GINT_TO_POINTER (RB_METADATA_FIELD_DATE),
42
 
                                     GINT_TO_POINTER (G_TYPE_ULONG));
43
 
                g_hash_table_insert (map, GINT_TO_POINTER (RB_METADATA_FIELD_GENRE),
44
 
                                     GINT_TO_POINTER (G_TYPE_STRING));
45
 
                g_hash_table_insert (map, GINT_TO_POINTER (RB_METADATA_FIELD_COMMENT),
46
 
                                     GINT_TO_POINTER (G_TYPE_STRING));
47
 
                g_hash_table_insert (map, GINT_TO_POINTER (RB_METADATA_FIELD_TRACK_NUMBER),
48
 
                                     GINT_TO_POINTER (G_TYPE_ULONG));
49
 
                g_hash_table_insert (map, GINT_TO_POINTER (RB_METADATA_FIELD_MAX_TRACK_NUMBER),
50
 
                                     GINT_TO_POINTER (G_TYPE_ULONG));
51
 
                g_hash_table_insert (map, GINT_TO_POINTER (RB_METADATA_FIELD_DISC_NUMBER),
52
 
                                     GINT_TO_POINTER (G_TYPE_ULONG));
53
 
                g_hash_table_insert (map, GINT_TO_POINTER (RB_METADATA_FIELD_MAX_DISC_NUMBER),
54
 
                                     GINT_TO_POINTER (G_TYPE_ULONG));
55
 
                g_hash_table_insert (map, GINT_TO_POINTER (RB_METADATA_FIELD_DESCRIPTION),
56
 
                                     GINT_TO_POINTER (G_TYPE_STRING));
57
 
                g_hash_table_insert (map, GINT_TO_POINTER (RB_METADATA_FIELD_VERSION),
58
 
                                     GINT_TO_POINTER (G_TYPE_STRING));
59
 
                g_hash_table_insert (map, GINT_TO_POINTER (RB_METADATA_FIELD_ISRC),
60
 
                                     GINT_TO_POINTER (G_TYPE_STRING));
61
 
                g_hash_table_insert (map, GINT_TO_POINTER (RB_METADATA_FIELD_ORGANIZATION),
62
 
                                     GINT_TO_POINTER (G_TYPE_STRING));
63
 
                g_hash_table_insert (map, GINT_TO_POINTER (RB_METADATA_FIELD_COPYRIGHT),
64
 
                                     GINT_TO_POINTER (G_TYPE_STRING));
65
 
                g_hash_table_insert (map, GINT_TO_POINTER (RB_METADATA_FIELD_CONTACT),
66
 
                                     GINT_TO_POINTER (G_TYPE_STRING));
67
 
                g_hash_table_insert (map, GINT_TO_POINTER (RB_METADATA_FIELD_LICENSE),
68
 
                                     GINT_TO_POINTER (G_TYPE_STRING));
69
 
                g_hash_table_insert (map, GINT_TO_POINTER (RB_METADATA_FIELD_PERFORMER),
70
 
                                     GINT_TO_POINTER (G_TYPE_STRING));
71
 
                g_hash_table_insert (map, GINT_TO_POINTER (RB_METADATA_FIELD_DURATION),
72
 
                                     GINT_TO_POINTER (G_TYPE_ULONG));
73
 
                g_hash_table_insert (map, GINT_TO_POINTER (RB_METADATA_FIELD_CODEC),
74
 
                                     GINT_TO_POINTER (G_TYPE_STRING));
75
 
                g_hash_table_insert (map, GINT_TO_POINTER (RB_METADATA_FIELD_BITRATE),
76
 
                                     GINT_TO_POINTER (G_TYPE_ULONG));
77
 
                g_hash_table_insert (map, GINT_TO_POINTER (RB_METADATA_FIELD_TRACK_GAIN),
78
 
                                     GINT_TO_POINTER (G_TYPE_DOUBLE));
79
 
                g_hash_table_insert (map, GINT_TO_POINTER (RB_METADATA_FIELD_TRACK_PEAK),
80
 
                                     GINT_TO_POINTER (G_TYPE_DOUBLE));
81
 
                g_hash_table_insert (map, GINT_TO_POINTER (RB_METADATA_FIELD_ALBUM_GAIN),
82
 
                                     GINT_TO_POINTER (G_TYPE_DOUBLE));
83
 
                g_hash_table_insert (map, GINT_TO_POINTER (RB_METADATA_FIELD_ALBUM_PEAK),
84
 
                                     GINT_TO_POINTER (G_TYPE_DOUBLE));
85
 
                g_object_set_data_full (G_OBJECT (md), "rb-metadata-field-type-map",
86
 
                                        map, (GDestroyNotify) g_hash_table_destroy);
87
 
        }
88
 
        return GPOINTER_TO_INT (g_hash_table_lookup (map, GINT_TO_POINTER (field)));
 
67
rb_metadata_get_field_type (RBMetaDataField field)
 
68
{
 
69
        g_assert (field >= 0 && field < RB_METADATA_FIELD_LAST);
 
70
        return field_info[field].type;
 
71
}
 
72
 
 
73
const char *
 
74
rb_metadata_get_field_name (RBMetaDataField field)
 
75
{
 
76
        g_assert (field >= 0 && field < RB_METADATA_FIELD_LAST);
 
77
        return field_info[field].name;
89
78
}
90
79
 
91
80
GQuark