annotate Plugins/General/scrobbler/tags/cdaudio.c @ 1176:6549a4c58e15 trunk

[svn] - grr
author nenolod
date Sun, 11 Jun 2006 20:29:00 -0700
parents 99382cddf771
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
688
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
1 /*
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
2 * libmetatag - A media file tag-reader library
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
3 * Copyright (C) 2003, 2004 Pipian
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
4 *
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
5 * This library is free software; you can redistribute it and/or
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
6 * modify it under the terms of the GNU Lesser General Public
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
7 * License as published by the Free Software Foundation; either
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
8 * version 2.1 of the License, or (at your option) any later version.
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
9 *
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
10 * This library is distributed in the hope that it will be useful,
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
13 * Lesser General Public License for more details.
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
14 *
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
15 * You should have received a copy of the GNU Lesser General Public
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
16 * License along with this library; if not, write to the Free Software
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
18 *
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
19 */
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
20
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
21 #include <stdio.h>
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
22 #include <stdlib.h>
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
23 #include <string.h>
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
24 #include <musicbrainz/mb_c.h>
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
25 #include "include/cdaudio.h"
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
26 #include "include/endian.h"
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
27 #include "../fmt.h"
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
28 #include "../config.h"
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
29 #include "include/unicode.h"
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
30 #define BUFFER_SIZE 4096
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
31
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
32 #ifdef MAKE_BMP
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
33 #include <libaudacious/vfs.h>
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
34 #define vfs_fopen vfs_fopen
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
35 #define vfs_fclose vfs_fclose
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
36 #define vfs_fread vfs_fread
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
37 #define vfs_fseek vfs_fseek
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
38 #define ftell vfs_ftell
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
39 #define VFSFile VFSFile
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
40 #endif
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
41
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
42 /*
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
43 * Determining if a CD is being played is left up to the reader.
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
44 *
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
45
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
46 int cdaudio_find(char *filename)
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
47 {
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
48 We've got to find a way to ensure this works on all platforms.
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
49
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
50 return !(fmt_strcasecmp(strrchr(filename, '.') + 1, "cda"));
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
51 }
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
52 */
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
53
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
54 cdaudio_t *readCDAudio(char *filename, char track)
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
55 {
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
56 int retVal;
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
57 musicbrainz_t mb;
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
58 char *tmp;
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
59 cdaudio_t *musicbrainz = calloc(sizeof(cdaudio_t), 1);
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
60
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
61 memset(musicbrainz, 0, sizeof(cdaudio_t));
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
62
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
63 tmp = malloc(BUFFER_SIZE / 4 + 1);
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
64 mb = mb_New();
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
65 mb_SetDevice(mb, filename);
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
66 pdebug("Submitting query to MusicBrainz...", META_DEBUG);
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
67 retVal = mb_Query(mb, MBQ_GetCDInfo);
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
68 if(retVal == 0)
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
69 {
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
70 #ifdef META_DEBUG
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
71 char error[129] = "";
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
72 pdebug("ERROR: Query failed.", META_DEBUG);
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
73 mb_GetQueryError(mb, error, 128);
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
74 pdebug(fmt_vastr("REASON: %s", error), META_DEBUG);
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
75 #endif
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
76 mb_Delete(mb);
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
77 free(tmp);
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
78 free(musicbrainz);
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
79 return NULL;
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
80 }
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
81 pdebug("Selecting result...", META_DEBUG);
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
82 retVal = mb_Select1(mb, MBS_SelectAlbum, 1);
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
83 if(retVal == 0)
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
84 {
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
85 pdebug("ERROR: Album select failed.", META_DEBUG);
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
86 mb_Delete(mb);
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
87 free(tmp);
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
88 free(musicbrainz);
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
89 return NULL;
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
90 }
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
91 pdebug("Extracting MusicBrainz data from result...", META_DEBUG);
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
92 memset(tmp, '\0', BUFFER_SIZE / 4 + 1);
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
93 retVal = mb_GetResultData(mb, MBE_AlbumGetAlbumName, tmp, BUFFER_SIZE / 4);
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
94 if(retVal == 0)
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
95 {
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
96 pdebug("ERROR: Album title not found.", META_DEBUG);
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
97 musicbrainz->album = calloc(1, 1);
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
98 }
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
99 else
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
100 {
700
99382cddf771 [svn] Fixes for all warnings (except 3 spurious GCC 4.0 ones, upgrade to 4.1 if you see them) and a performance increase. By external contributor Diego "FlameEyes" Petteno (Gentoo).
chainsaw
parents: 688
diff changeset
101 musicbrainz->album = (unsigned char*)strdup(tmp);
688
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
102 }
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
103 memset(tmp, '\0', BUFFER_SIZE / 4 + 1);
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
104 retVal = mb_GetResultData1(mb, MBE_AlbumGetArtistName, tmp, BUFFER_SIZE / 4, track);
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
105 if(retVal == 0)
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
106 {
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
107 pdebug("ERROR: Artist name not found.", META_DEBUG);
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
108 musicbrainz->artist = calloc(1, 1);
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
109 }
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
110 else
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
111 {
700
99382cddf771 [svn] Fixes for all warnings (except 3 spurious GCC 4.0 ones, upgrade to 4.1 if you see them) and a performance increase. By external contributor Diego "FlameEyes" Petteno (Gentoo).
chainsaw
parents: 688
diff changeset
112 musicbrainz->artist = (unsigned char*)strdup(tmp);
688
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
113 }
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
114 memset(tmp, '\0', BUFFER_SIZE / 4 + 1);
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
115 retVal = mb_GetResultData1(mb, MBE_AlbumGetTrackName, tmp, BUFFER_SIZE / 4, track);
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
116 if(retVal == 0)
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
117 {
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
118 pdebug("ERROR: Track title not found.", META_DEBUG);
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
119 musicbrainz->title = calloc(1, 1);
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
120 }
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
121 else
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
122 {
700
99382cddf771 [svn] Fixes for all warnings (except 3 spurious GCC 4.0 ones, upgrade to 4.1 if you see them) and a performance increase. By external contributor Diego "FlameEyes" Petteno (Gentoo).
chainsaw
parents: 688
diff changeset
123 musicbrainz->title = (unsigned char*)strdup(tmp);
688
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
124 }
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
125 memset(tmp, '\0', BUFFER_SIZE / 4 + 1);
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
126 retVal = mb_GetResultData1(mb, MBE_AlbumGetTrackId, tmp, BUFFER_SIZE / 4, track);
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
127 if(retVal == 0)
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
128 {
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
129 pdebug("ERROR: MBID not found.", META_DEBUG);
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
130 musicbrainz->mbid = calloc(1, 1);
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
131 }
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
132 else
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
133 {
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
134 musicbrainz->mbid = malloc(64);
700
99382cddf771 [svn] Fixes for all warnings (except 3 spurious GCC 4.0 ones, upgrade to 4.1 if you see them) and a performance increase. By external contributor Diego "FlameEyes" Petteno (Gentoo).
chainsaw
parents: 688
diff changeset
135 mb_GetIDFromURL(mb, tmp, (char*)musicbrainz->mbid, 64);
688
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
136 }
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
137 mb_Delete(mb);
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
138 free(tmp);
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
139
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
140 return musicbrainz;
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
141 }
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
142
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
143 void freeCDAudio(cdaudio_t *musicbrainz)
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
144 {
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
145 free(musicbrainz->mbid);
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
146 free(musicbrainz->title);
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
147 free(musicbrainz->artist);
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
148 free(musicbrainz->album);
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
149 free(musicbrainz);
cc1969408403 [svn] - add scrobbler support
nenolod
parents:
diff changeset
150 }