1 /* $Id$ */
2 /*-
3 * Copyright (c) 2006 Benedikt Meurer <benny@xfce.org>
4 * Jannis Pohlmann <jannis@xfce.org>
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License as
8 * published by the Free Software Foundation; either version 2 of the
9 * License, or (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful, but
12 * WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * General Public License for more details.
15 *
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,
19 * MA 02111-1307 USA.
20 */
21
22 #ifdef HAVE_CONFIG_H
23 #include <config.h>
24 #endif
25
26 #include <taglib/tag_c.h>
27
28 #include <media-tags-provider.h>
29 #include <tag-renamer.h>
30 #include <audio-tags-page.h>
31
32
33
34 static void media_tags_provider_tag_renamer_provider_init (ThunarxRenamerProviderIface *iface);
35 static GList *media_tags_provider_get_renamers (ThunarxRenamerProvider *renamer_provider);
36 static void media_tags_provider_audio_tags_page_provider_init (ThunarxPropertyPageProviderIface *iface);
37 static GList *media_tags_provider_get_pages (ThunarxPropertyPageProvider *renamer_provider,
38 GList *files);
39
40
41
42 struct _MediaTagsProviderClass
43 {
44 GObjectClass __parent__;
45 };
46
47 struct _MediaTagsProvider
48 {
49 GObject __parent__;
50 };
51
52
53
54 THUNARX_DEFINE_TYPE_WITH_CODE (MediaTagsProvider,
55 media_tags_provider,
56 G_TYPE_OBJECT,
57 THUNARX_IMPLEMENT_INTERFACE (THUNARX_TYPE_RENAMER_PROVIDER,
58 media_tags_provider_tag_renamer_provider_init)
59 THUNARX_IMPLEMENT_INTERFACE (THUNARX_TYPE_PROPERTY_PAGE_PROVIDER,
60 media_tags_provider_audio_tags_page_provider_init));
61
62
63
64 static void
media_tags_provider_class_init(MediaTagsProviderClass * klass)65 media_tags_provider_class_init (MediaTagsProviderClass *klass)
66 {
67 }
68
69
70
71 static void
media_tags_provider_tag_renamer_provider_init(ThunarxRenamerProviderIface * iface)72 media_tags_provider_tag_renamer_provider_init (ThunarxRenamerProviderIface *iface)
73 {
74 iface->get_renamers = media_tags_provider_get_renamers;
75 }
76
77
78
79 static void
media_tags_provider_init(MediaTagsProvider * sbr_provider)80 media_tags_provider_init (MediaTagsProvider *sbr_provider)
81 {
82 }
83
84
85
86 static GList*
media_tags_provider_get_renamers(ThunarxRenamerProvider * renamer_provider)87 media_tags_provider_get_renamers (ThunarxRenamerProvider *renamer_provider)
88 {
89 GList *renamers = NULL;
90
91 renamers = g_list_prepend (renamers, tag_renamer_new ());
92
93 return renamers;
94 }
95
96
97
98 static void
media_tags_provider_audio_tags_page_provider_init(ThunarxPropertyPageProviderIface * iface)99 media_tags_provider_audio_tags_page_provider_init (ThunarxPropertyPageProviderIface *iface)
100 {
101 iface->get_pages = media_tags_provider_get_pages;
102 }
103
104
105
106 static GList*
media_tags_provider_get_pages(ThunarxPropertyPageProvider * page_provider,GList * files)107 media_tags_provider_get_pages (ThunarxPropertyPageProvider *page_provider, GList *files)
108 {
109 GList *pages = NULL;
110 GList *file;
111 ThunarxFileInfo *info;
112
113 if (g_list_length (files) != 1)
114 return NULL;
115
116 file = g_list_first (files);
117
118 if (G_UNLIKELY (file == NULL))
119 return NULL;
120
121 info = THUNARX_FILE_INFO (file->data);
122
123 if (G_LIKELY (media_tags_get_audio_file_supported (info)))
124 {
125 AudioTagsPage *page;
126
127 /* Create the tag editor page */
128 page = audio_tags_page_new_with_save_button ();
129
130 /* Assign supported file info to the page */
131 audio_tags_page_set_file (page, info);
132
133 /* Add the tag editor page to the pages provided by this plugin */
134 pages = g_list_prepend (pages, page);
135 }
136
137 return pages;
138 }
139
140
141
142 gboolean
media_tags_get_audio_file_supported(ThunarxFileInfo * info)143 media_tags_get_audio_file_supported (ThunarxFileInfo *info)
144 {
145 gchar *uri;
146 gchar *filename;
147 TagLib_File *taglib_file;
148 gboolean supported = FALSE;
149
150 g_return_val_if_fail (info != NULL || THUNARX_IS_FILE_INFO (info), FALSE);
151
152 uri = thunarx_file_info_get_uri (info);
153 filename = g_filename_from_uri (uri, NULL, NULL);
154 g_free (uri);
155
156 if (G_UNLIKELY (filename == NULL))
157 return FALSE;
158
159 /* Try loading the tag information */
160 taglib_file = taglib_file_new (filename);
161
162 if (G_LIKELY (taglib_file != NULL))
163 {
164 /* Check that the file contains valid audio info */
165 supported = taglib_file_is_valid (taglib_file);
166
167 /* Free the taglib file */
168 taglib_file_free (taglib_file);
169 }
170
171 g_free (filename);
172
173 return supported;
174 }
175