2
* arch-tag: Implementation of metadata reading using monkey-media
4
* Copyright (C) 2003 Colin Walters <walters@verbum.org>
6
* This program is free software; you can redistribute it and/or modify
7
* it under the terms of the GNU General Public License as published by
8
* the Free Software Foundation; either version 2 of the License, or
9
* (at your option) any later version.
11
* This program is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
* GNU General Public License for more details.
16
* You should have received a copy of the GNU General Public License
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.
23
#include <libgnomevfs/gnome-vfs-mime-utils.h>
24
#include <libgnome/gnome-i18n.h>
26
#include "rb-metadata.h"
28
#include "monkey-media-stream-info.h"
30
static void rb_metadata_class_init (RBMetaDataClass *klass);
31
static void rb_metadata_init (RBMetaData *md);
32
static void rb_metadata_finalize (GObject *object);
34
struct RBMetaDataPrivate
42
static GObjectClass *parent_class = NULL;
45
rb_metadata_get_type (void)
47
static GType type = 0;
50
static const GTypeInfo our_info =
52
sizeof (RBMetaDataClass),
55
(GClassInitFunc) rb_metadata_class_init,
60
(GInstanceInitFunc) rb_metadata_init,
63
type = g_type_register_static (G_TYPE_OBJECT,
72
rb_metadata_class_init (RBMetaDataClass *klass)
74
GObjectClass *object_class = G_OBJECT_CLASS (klass);
76
parent_class = g_type_class_peek_parent (klass);
78
object_class->finalize = rb_metadata_finalize;
82
rb_metadata_init (RBMetaData *md)
84
md->priv = g_new0 (RBMetaDataPrivate, 1);
87
md->priv->type = NULL;
91
rb_metadata_finalize (GObject *object)
95
md = RB_METADATA (object);
97
g_hash_table_destroy (md->priv->metadata);
99
g_free (md->priv->type);
100
g_free (md->priv->uri);
104
G_OBJECT_CLASS (parent_class)->finalize (object);
108
rb_metadata_new (void)
110
return RB_METADATA (g_object_new (RB_TYPE_METADATA, NULL));
114
free_gvalue (GValue *val)
121
load_val (RBMetaData *md,
122
MonkeyMediaStreamInfo *info,
123
MonkeyMediaStreamInfoField mmfield,
124
RBMetaDataField mdfield)
126
GValue *val = g_new0 (GValue, 1);
128
if (monkey_media_stream_info_get_value (info,
131
g_hash_table_insert (md->priv->metadata,
132
GINT_TO_POINTER (mdfield),
139
rb_metadata_load (RBMetaData *md,
143
MonkeyMediaStreamInfo *info = NULL;
145
g_free (md->priv->uri);
146
md->priv->uri = NULL;
148
g_free (md->priv->type);
149
md->priv->type = NULL;
154
md->priv->uri = g_strdup (uri);
155
md->priv->type = gnome_vfs_get_mime_type (md->priv->uri);
157
if (md->priv->metadata)
158
g_hash_table_destroy (md->priv->metadata);
159
md->priv->metadata = g_hash_table_new_full (g_direct_hash, g_direct_equal,
160
NULL, (GDestroyNotify) free_gvalue);
162
info = monkey_media_stream_info_new (uri, error);
167
load_val (md, info, MONKEY_MEDIA_STREAM_INFO_FIELD_TRACK_NUMBER,
168
RB_METADATA_FIELD_TRACK_NUMBER);
170
load_val (md, info, MONKEY_MEDIA_STREAM_INFO_FIELD_DISC_NUMBER,
171
RB_METADATA_FIELD_DISC_NUMBER);
175
MONKEY_MEDIA_STREAM_INFO_FIELD_DURATION,
176
RB_METADATA_FIELD_DURATION);
180
MONKEY_MEDIA_STREAM_INFO_FIELD_AUDIO_BIT_RATE,
181
RB_METADATA_FIELD_BITRATE);
185
MONKEY_MEDIA_STREAM_INFO_FIELD_TITLE,
186
RB_METADATA_FIELD_TITLE);
190
MONKEY_MEDIA_STREAM_INFO_FIELD_GENRE,
191
RB_METADATA_FIELD_GENRE);
195
MONKEY_MEDIA_STREAM_INFO_FIELD_ARTIST,
196
RB_METADATA_FIELD_ARTIST);
200
MONKEY_MEDIA_STREAM_INFO_FIELD_ALBUM,
201
RB_METADATA_FIELD_ALBUM);
203
g_object_unref (G_OBJECT (info));
208
rb_metadata_can_save (RBMetaData *md, const char *mimetype)
214
rb_metadata_save (RBMetaData *md, GError **error)
218
RB_METADATA_ERROR_UNSUPPORTED,
219
_("Operation not supported"));
223
rb_metadata_get (RBMetaData *md, RBMetaDataField field,
227
if ((val = g_hash_table_lookup (md->priv->metadata,
228
GINT_TO_POINTER (field)))) {
229
g_value_init (ret, G_VALUE_TYPE (val));
230
g_value_copy (val, ret);
237
rb_metadata_set (RBMetaData *md, RBMetaDataField field,
244
rb_metadata_get_mime (RBMetaData *md)
246
return (md->priv->type);