This is the main.c source code. It handles all the inital setup and runs the main menu. The selection of tracks, albums etc is handled in PlayTracks.c
/***************************************************************************
main.c - description
-------------------
begin : Thu Jan 27 16:10:51 GMT 2005
copyright : (C) 2005 by Andy
email :
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#ifdef HAVE_CONFIG_H
#include
#endif
#include
#include
#include
#include
#include
#include
#include
#include
#include "Structures.h"
#include "log.h"
int failed_files = 0;
#define FALSE 0
#define TRUE 1
int i, counter = 0, zero = 0, exists = 0, new = 0;
MYSQL mysql;
MYSQL_RES *res;
MYSQL_RES *res1;
MYSQL_ROW row;
int t,r;
// char *server = "localhost";
// char *user = "andy";
// char *password = "";
// char *database = "mp3";
char query[400];
char temp[4];
MYSQL mysql;
int Connect_DB()
{
char *host = "localhost";
char *user = "mp3";
char *passwd = "mp3";
char *database = "mp3";
mysql_init(&mysql);
if (!mysql_real_connect(&mysql, host, user, passwd, database, 0, NULL, 0))
{
printf("Error connecting to database.\n");
exit(-1);
}
else
printf("Connected...\n");
}
MYSQL_RES *db_query(char *query)
{
MYSQL_RES *res;
res = (MYSQL_RES *)mysql_real_query(&mysql, query, (unsigned int)strlen(query));
if (res)
{
log_printf(LOG_NORMAL, "db_query : Error making query (%s) : %s\n", query, mysql_error(&mysql));
return ((MYSQL_RES *) -1);
}
res = mysql_store_result(&mysql);
return (res);
}
int main(int argc, char *argv[])
{
FILE *masterfile = NULL;
char buffer[255], buffer1[255], filename[255];
char command[80];
int counter=0;
debug_level = LOG_NOISY_DEBUG;
log_open("./logfile", debug_level);
char *music_root="/mp3";
if ((masterfile=fopen("./master","r"))==NULL)
{
perror("Master file not present - Creating");
sprintf(command,"find %s -iname '*.mp3'|grep -v andy|sort>./master", music_root);
printf("%s\n", command);
system(command);
if ((masterfile=fopen("./master","r"))==NULL)
{
perror("Master file still not present - quitting");
exit(1);
}
}
else
{
printf("Masterfile found.\n");
}
Connect_DB();
/*
mysql_init(&mysql);
if (!mysql_real_connect(&mysql,server ,user ,password ,database , 0, NULL, 0))
{
printf("Error connecting to mp3 database : %s\n", mysql_error(&mysql));
}
else printf("Connected...\n");
*/
sprintf(query,"update all_songs set available=%i",FALSE); // default all songs to unavailable.
t=mysql_real_query(&mysql, query, (unsigned int) strlen(query));
if (t)
{
printf("Error making query (UPDATE available=FALSE) : %s\n", mysql_error(&mysql));
}
else printf("Defaulting all tracks to unavailable\n");
db_query("UPDATE albums SET available=0");
db_query("UPDATE artists SET available=0");
printf("Files processed : %-5i", counter);
while (fgets(buffer1,256,masterfile))
{
strcpy(buffer,"");
strcpy(filename,"");
sprintf(buffer,"%s",buffer1);
strncat(filename,buffer,strlen(buffer)-1);
get_id3(filename);
counter++;
printf("\b\b\b\b\b%-5i", counter -1);
}
counter--;
printf("\nTotal files processed : %i, of which %i failed to process\n",counter, failed_files);
printf("In SQl database, %i existed, %i added\n", exists, new);
return EXIT_SUCCESS;
}
int get_id3(char *filename)
{
int retcode = 0;
int raw_genre;
char fbuf[4];
FILE *filedes;
char Track[30], Artist[30], Album[30], Comments[30];
songinfo tag;
if ( !( filedes = fopen(filename, "r") ) )
{
printf("Error opening file %s\n", filename);
failed_files++;
retcode |= 1;
}
else
{
if (fseek(filedes, -128, SEEK_END ))
{
printf("ERROR : Couldn't read last 128 bytes of %s\n", filename);
retcode |= 4; // ie. retcode = retcode | 4
}
else
{
fread(fbuf, 1, 3, filedes); fbuf[3] = '\0';
strcpy(tag.filename, filename);
if (!strcmp((const char *)"TAG", (const char*)fbuf))
{
fseek(filedes, -125, SEEK_END);
fread(tag.song, 1, 30, filedes);
mysql_real_escape_string(&mysql, Track, tag.song, strlen(tag.song));
if (strncmp(Track, "\\", 29)) {Track[29] = "\0";}
strcpy(tag.song, Track); tag.song[30] = '\0';
fread(tag.artist, 1, 30, filedes);
mysql_real_escape_string(&mysql, Artist, tag.artist, strlen(tag.artist));
if (strncmp(Artist, "\\" , 29)) {tag.artist[29] = "\0";}
strcpy(tag.artist, Artist); tag.artist[30] = '\0';
fread(tag.album, 1, 30, filedes);
mysql_real_escape_string(&mysql, Album, tag.album, strlen(tag.album));
if (strncmp(Album, "\\", 29)) {Album[29] = "\0";}
strcpy(tag.album, Album); tag.album[30] = '\0';
fread(tag.raw_year, 1, 4, filedes); tag.raw_year[4] = '\0'; tag.year = atoi(tag.raw_year);
fread(tag.comments, 1, 30, filedes);
mysql_real_escape_string(&mysql, Comments, tag.comments, strlen(tag.comments));
if (strncmp(Comments, "\\", 29)) {Comments[29] = "\0";}
strcpy(tag.comments, Comments); tag.comments[30] = '\0';
if (tag.comments[28] == '\0' )
{
tag.track[0] = tag.comments[29];
}
fread(tag.track, 1, 1, filedes); tag.track_num = atoi(tag.track);
fseek(filedes,-1L,SEEK_END);
raw_genre = fgetc(filedes);
switch (raw_genre)
{
case 0:
strcpy(tag.genre,"Blues");
break;
case 1:
strcpy(tag.genre,"Classic Rock");
break;
case 2:
strcpy(tag.genre,"Country");
break;
case 3:
strcpy(tag.genre,"Dance");
break;
case 4:
strcpy(tag.genre,"Disco");
break;
case 5:
strcpy(tag.genre,"Funk");
break;
case 6:
strcpy(tag.genre,"Grunge");
break;
case 7:
strcpy(tag.genre,"Hip-Hop");
break;
case 8:
strcpy(tag.genre,"Jazz");
break;
case 9:
strcpy(tag.genre,"Metal");
break;
case 10:
strcpy(tag.genre,"New Age");
break;
case 11:
strcpy(tag.genre,"Oldies");
break;
case 12:
strcpy(tag.genre,"Other");
break;
case 13:
strcpy(tag.genre,"POP");
break;
case 14:
strcpy(tag.genre,"R&B");
break;
case 15:
strcpy(tag.genre,"Rap");
break;
case 16:
strcpy(tag.genre,"Reggae");
break;
case 17:
strcpy(tag.genre,"Rock");
break;
case 18:
strcpy(tag.genre,"Techno");
break;
case 19:
strcpy(tag.genre,"Industrial");
break;
case 20:
strcpy(tag.genre,"Alternative");
break;
case 21:
strcpy(tag.genre,"Ska");
break;
case 22:
strcpy(tag.genre,"Death Metal");
break;
case 23:
strcpy(tag.genre,"Pranks");
break;
case 24:
strcpy(tag.genre,"Soundtrack");
break;
case 25:
strcpy(tag.genre,"Euro-Techno");
break;
case 26:
strcpy(tag.genre,"Ambient");
break;
case 27:
strcpy(tag.genre,"Trip-Hop");
break;
case 28:
strcpy(tag.genre,"Vocal");
break;
case 29:
strcpy(tag.genre,"Jazz&Funk");
break;
case 30:
strcpy(tag.genre,"Fusion");
break;
case 31:
strcpy(tag.genre,"Trance");
break;
case 32:
strcpy(tag.genre,"Classical");
break;
case 33:
strcpy(tag.genre,"Instrumental");
break;
case 34:
strcpy(tag.genre,"Acid");
break;
case 35:
strcpy(tag.genre,"House");
break;
case 36:
strcpy(tag.genre,"Game");
break;
case 37:
strcpy(tag.genre,"Sound Clip");
break;
case 38:
strcpy(tag.genre,"Gospel");
break;
case 39:
strcpy(tag.genre,"Noise");
break;
case 40:
strcpy(tag.genre,"AlternRock");
break;
case 41:
strcpy(tag.genre,"Bass");
break;
case 42:
strcpy(tag.genre,"Soul");
break;
case 43:
strcpy(tag.genre,"Punk");
break;
case 44:
strcpy(tag.genre,"Space");
break;
case 45:
strcpy(tag.genre,"Meditive");
break;
case 46:
strcpy(tag.genre,"Instrumental Pop");
break;
case 47:
strcpy(tag.genre,"Instrumental Rock");
break;
case 48:
strcpy(tag.genre,"Ethnic");
break;
case 49:
strcpy(tag.genre,"Gothic");
break;
case 50:
strcpy(tag.genre,"Darkwave");
break;
case 51:
strcpy(tag.genre,"Techno-Industrial");
break;
case 52:
strcpy(tag.genre,"Electronic");
break;
case 53:
strcpy(tag.genre,"Pop-folk");
break;
case 54:
strcpy(tag.genre,"Eurodance");
break;
case 55:
strcpy(tag.genre,"Dream");
break;
case 56:
strcpy(tag.genre,"Southern Rock");
break;
case 57:
strcpy(tag.genre,"Comedy");
break;
case 58:
strcpy(tag.genre, "Cult");
break;
case 59:
strcpy(tag.genre,"Gangsta");
break;
case 60:
strcpy(tag.genre,"Top 40");
break;
case 61:
strcpy(tag.genre,"Christian Rap");
break;
case 62:
strcpy(tag.genre,"Pop/Funk");
break;
case 63:
strcpy(tag.genre,"Jungle");
break;
case 64:
strcpy(tag.genre,"Native American");
break;
case 65:
strcpy(tag.genre,"Cabaret");
break;
case 66:
strcpy(tag.genre,"New Wave");
break;
case 67:
strcpy(tag.genre,"Psychedelic");
break;
case 68:
strcpy(tag.genre,"Rave");
break;
case 69:
strcpy(tag.genre,"Show Tunes");
break;
case 70:
strcpy(tag.genre,"Trailer");
break;
case 71:
strcpy(tag.genre,"Lo-Fi");
break;
case 72:
strcpy(tag.genre,"Tribal");
break;
case 73:
strcpy(tag.genre,"Acid Punk");
break;
case 74:
strcpy(tag.genre,"Acid Jazz");
break;
case 75:
strcpy(tag.genre,"Polka");
break;
case 76:
strcpy(tag.genre,"Retro");
break;
case 77:
strcpy(tag.genre,"Musical");
break;
case 78:
strcpy(tag.genre,"Rock & Roll");
break;
case 79:
strcpy(tag.genre,"Hard Rock");
break;
case 80:
strcpy(tag.genre,"Folk");
break;
case 81:
strcpy(tag.genre,"Folk/Rock");
break;
case 82:
strcpy(tag.genre,"National Folk");
break;
case 83:
strcpy(tag.genre,"Swing");
break;
case 84:
strcpy(tag.genre, "Fast Fusion");
break;
case 85:
strcpy(tag.genre,"Bebop");
break;
case 86:
strcpy(tag.genre,"Latin");
break;
case 87:
strcpy(tag.genre,"Revival");
break;
case 88:
strcpy(tag.genre,"Celtic");
break;
case 89:
strcpy(tag.genre,"Blue Grass");
break;
case 90:
strcpy(tag.genre,"Avant Garde");
break;
case 91:
strcpy(tag.genre,"Gothic Rock");
break;
case 92:
strcpy(tag.genre,"Progressive Rock");
break;
case 93:
strcpy(tag.genre,"Psychedelic Rock");
break;
case 94:
strcpy(tag.genre,"Symphonic Rock");
break;
case 95:
strcpy(tag.genre,"Slow Rock");
break;
case 96:
strcpy(tag.genre,"Latin");
break;
case 97:
strcpy(tag.genre,"Chorus");
break;
case 98:
strcpy(tag.genre,"Easy Listening");
break;
case 99:
strcpy(tag.genre,"Acoustic");
break;
case 100:
strcpy(tag.genre,"Humour");
break;
case 101:
strcpy(tag.genre, "Speech");
break;
case 102:
strcpy(tag.genre, "Chanson");
break;
case 103:
strcpy(tag.genre, "Opera");
break;
case 104:
strcpy(tag.genre, "Chamber Music");
break;
case 105:
strcpy(tag.genre, "Sonata");
break;
case 106:
strcpy(tag.genre, "Symphony");
break;
case 107:
strcpy(tag.genre, "Booty Bass");
break;
case 108:
strcpy(tag.genre, "Primus");
break;
case 109:
strcpy(tag.genre, "Porn Groove");
break;
case 110:
strcpy(tag.genre, "Satire");
break;
case 111:
strcpy(tag.genre, "Slow Jam");
break;
case 112:
strcpy(tag.genre, "Club");
break;
case 113:
strcpy(tag.genre, "Tango");
break;
case 114:
strcpy(tag.genre, "Samba");
break;
case 115:
strcpy(tag.genre, "Folklore");
break;
case 116:
strcpy(tag.genre, "Ballad");
break;
case 117:
strcpy(tag.genre, "Power Ballad");
break;
case 118:
strcpy(tag.genre, "Rhythmic Soul");
break;
case 119:
strcpy(tag.genre, "Freestyle");
break;
case 120:
strcpy(tag.genre, "Duet");
break;
case 121:
strcpy(tag.genre, "Punk Rock");
break;
case 122:
strcpy(tag.genre, "Drum Solo");
break;
case 123:
strcpy(tag.genre, "A Capella");
break;
case 124:
strcpy(tag.genre, "Euro-House");
break;
case 125:
strcpy(tag.genre, "Dance Hall");
break;
case 131:
strcpy(tag.genre, "Indie");
break;
default:
sprintf(tag.genre,"Unknown (%i)", raw_genre);
break;
}
trimright(tag.song);
trimright(tag.artist);
trimright(tag.album);
trimright(tag.raw_year);
trimright(tag.comments);
}
else
{
tag.song[0] = '\0';
tag.artist[0] = '\0';
tag.album[0] = '\0';
strcpy(tag.genre, "Unknown (no ID3)");
strcpy(tag.comments,"No ID3\0");
printf("No ID3 Tag : %s\n", filename);
}
}
log_printf(LOG_NOISY_DEBUG, "get_id3 : %s: %s: %s: %i: %s: %s\n", tag.song, tag.artist, tag.album, tag.year, tag.genre, tag.comments);
update_database(tag);
update_albums(tag);
update_artists(tag);
}
fclose(filedes);
return retcode;
}
int getline(FILE *filename, char buffer[255])
{
char buffer1[255];
strncpy(buffer, "\0", 255);
if ((fgets(buffer1, 255, filename)) == NULL)
return(1);
strncpy(buffer, buffer1, strlen(buffer1) -1);
return(0);
}
void update_database(songinfo songs)
{
char buffer[400];
MYSQL_RES *res1;
MYSQL_ROW row1;
// printf("%s: %s: %s: %i: %s: %s\n", songs.song, songs.artist, songs.album, songs.year, songs.genre, songs.comments);
sprintf(query, "select track, album, artist, genre, year, track_num from all_songs where filename = \"%s\"", songs.filename);
log_printf(LOG_NOISY_DEBUG, "update_database :%s\n", query);
t=mysql_real_query(&mysql, query, (unsigned int) strlen(query));
if (t)
{
printf("Error making query (SELECT) : %s\n", mysql_error(&mysql));
}
res=mysql_store_result(&mysql);
if ( (unsigned long)mysql_num_rows(res) == 0)
{
sprintf(query, "insert into all_songs (filename, track, album, artist, genre, year, available, track_num)\
values (\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",%i,%i, %i)",\
songs.filename, songs.song,\
songs.album, songs.artist,\
songs.genre, songs.year,TRUE,\
atoi(songs.track) );
log_printf(LOG_NOISY_DEBUG, "update_database :%s\n", query);
t=mysql_real_query(&mysql, query, (unsigned int) strlen(query));
if (t)
{
printf("Error making query (INSERT) : %s\n", mysql_error(&mysql));
printf("%s\n", query);
}
else new++;
}
else
{
exists++;
sprintf(query, "update all_songs set available=%i where filename=\"%s\"", TRUE, songs.filename);
// printf("%s\n", query);
t=mysql_real_query(&mysql, query, (unsigned int) strlen(query));
if (t)
{
printf("Error making query (UPDATE available=TRUE) : %s\n", mysql_error(&mysql));
printf("%s\n", query);
}
row=mysql_fetch_row(res);
if (strcmp(songs.song, row[0]) != 0)
{
log_printf(LOG_DEBUG, "%s : Song title changed to :\n",row[0], songs.filename);
sprintf(query, "update all_songs set track=\"%s\" where filename = \"%s\"", songs.song, songs.filename);
t=mysql_real_query(&mysql, query, (unsigned int) strlen(query));
if (t)
{
printf("Error making query (UPDATE) : %s\n%s\n", query, mysql_error(&mysql));
}
}
if (strcmp(songs.album, row[1]) != 0)
{
log_printf(LOG_DEBUG, "%s : Song Album changed\n", songs.filename);
sprintf(query, "update all_songs set album=\"%s\" where filename = \"%s\"", songs.album, songs.filename);
t=mysql_real_query(&mysql, query, (unsigned int) strlen(query));
if (t)
{
printf("Error making query (UPDATE) : %s\n%s\n", query, mysql_error(&mysql));
}
}
if (strcmp(songs.artist, row[2]) != 0)
{
log_printf(LOG_DEBUG,"%s : Song Artist changed\n", songs.filename);
sprintf(query, "update all_songs set artist=\"%s\" where filename = \"%s\"", songs.artist, songs.filename);
t=mysql_real_query(&mysql, query, (unsigned int) strlen(query));
if (t)
{
printf("Error making query (UPDATE) : %s\n%s\n", query, mysql_error(&mysql));
}
}
/*
if (strcmp(songs.genre, row[3]) != 0)
{
log_printf(LOG_DEBUG, "%s : Song Genre changed\n", songs.filename);
sprintf(query, "update all_songs set genre=\"%s\" where filename = \"%s\"", songs.genre, songs.filename);
t=mysql_real_query(&mysql, query, (unsigned int) strlen(query));
if (t)
{
printf("Error making query (UPDATE) : %s\n%s\n", query, mysql_error(&mysql));
}
}
if (songs.track_num != (int)row[5])
{
log_printf(LOG_DEBUG,"%s : Song track num changed\n", songs.filename);
sprintf(query, "update all_songs set track_num=%i where filename = %i", songs.track_num, songs.filename);
t=mysql_real_query(&mysql, query, (unsigned int) strlen(query));
if (t)
{
printf("Error making query (UPDATE) : %s\n", mysql_error(&mysql));
}
}
*/
sprintf(temp, "%i", songs.year);
if (strcmp(temp, row[4]) != 0)
{
printf("%s : Song year changed\n", songs.filename);
sprintf(query, "update all_songs set year=%i where filename = \"%s\"", songs.year, songs.filename);
t=mysql_real_query(&mysql, query, (unsigned int) strlen(query));
if (t)
{
printf("Error making query (UPDATE) : %s\n", mysql_error(&mysql));
}
}
}
// printf("Total of %-5i tracks saved.\n", number_of_tracks);
}
int readline(int fd, char *buf, int count)
{
int rc, c;
buf[0] = 0;
c = 0;
struct timeval timeout;
fd_set fds;
FD_ZERO(&fds);
FD_SET(fd, &fds);
timeout.tv_sec = 0;
timeout.tv_usec = 0;
if (select(fd+1, &fds, NULL, NULL, &timeout))
{
do
{
rc = read(fd, buf+c, 1);
if (rc <= 0)
return rc - 1;
// skip CR and/or LF at begining of line
if (!c && (*buf == '\r' || *buf == '\n'))
continue;
// skip CR / LF at end of line
if (buf[c] == 0 || buf[c] == '\r' || buf[c] == '\n')
break;
c++;
} while (c < count);
}
buf[c] = 0;
return c;
}
int trimright(char *str)
{
char *s = str + strlen(str) - 1;
while (s >= str && (*s == ' ' || *s == '\t'))
*s-- = 0;
return str;
}
update_albums(songinfo song)
{
MYSQL_RES *res;
MYSQL_ROW row;
char query[200];
int number_of_rows;
sprintf(query, "SELECT album, artist, available FROM albums WHERE album=\"%s\"", song.album);
log_printf(LOG_NOISY_DEBUG, "update_albums : %s\n", query);
res = db_query(query);
number_of_rows = mysql_num_rows(res);
if (number_of_rows ==0) // ie album has not been processed before
// if (res == NULL)
{
mysql_free_result(res);
if (strcmp(song.genre, "Speech") == 0)
sprintf(query, "INSERT INTO albums (album, artist, available, audio_book) VALUES (\"%s\", \"%s\", %i, %i)", \
song.album,\
song.artist,\
TRUE, \
TRUE);
else
sprintf(query, "INSERT INTO albums (album, artist, available, audio_book) VALUES (\"%s\", \"%s\", %i, %i)", \
song.album,\
song.artist,\
TRUE,\
FALSE);
log_printf(LOG_NOISY_DEBUG, "update_albums : %s\n", query);
res = db_query(query);
mysql_free_result(res);
}
else
{
row = mysql_fetch_row(res);
if (row[1] == NULL) //ie no artist has previously been set
{
mysql_free_result(res);
if (strcmp(song.genre, "Speech") == 0)
sprintf(query, "UPDATE albums SET artist=\"%s\", available=%i, audio_book=%i WHERE album=\"%s\"", song.artist, TRUE, TRUE, song.album);
else
sprintf(query, "UPDATE albums SET artist=\"%s\", available=%i, audio_book=%i WHERE album=\"%s\"", song.artist, TRUE, FALSE, song.album);
log_printf(LOG_NOISY_DEBUG, "update_albums : %s\n", query);
res = db_query(query);
mysql_free_result(res);
}
else if (strcmp(row[1], "Various") == 0) // Already found multiple artists in album => a compilation
{
mysql_free_result(res);
if (strcmp(song.genre, "Speech") == 0)
sprintf(query, "UPDATE albums SET available=%i, audio_book=%i WHERE album=\"%s\"", TRUE, TRUE, song.album);
else
sprintf(query, "UPDATE albums SET available=%i, audio_book=%i WHERE album=\"%s\"", TRUE, FALSE, song.album);
log_printf(LOG_NOISY_DEBUG, "update_albums : %s\n", query);
res = db_query(query);
mysql_free_result(res);
}
else if (strcmp(row[1], song.artist) != 0) // Previous and current artists don't match, so set to Various album
{
mysql_free_result(res);
sprintf(query, "UPDATE albums SET artist=\"Various\", available=%i WHERE album=\"%s\"", TRUE, song.album);
log_printf(LOG_NOISY_DEBUG, "update_albums : %s\n", query);
res = db_query(query);
mysql_free_result(res);
}
else // Album is a single artist, so simply make available
{
mysql_free_result(res);
if (strcmp(song.genre, "Speech") == 0)
sprintf(query, "UPDATE albums SET available=%i, audio_book=%i WHERE album=\"%s\"", TRUE, TRUE, song.album);
else
sprintf(query, "UPDATE albums SET available=%i, audio_book=%i WHERE album=\"%s\"", TRUE, FALSE, song.album);
log_printf(LOG_NOISY_DEBUG, "update_albums : %s\n", query);
res = db_query(query);
mysql_free_result(res);
}
}
}
update_artists(songinfo song)
{
MYSQL_RES *res;
MYSQL_ROW row;
char query[200];
int number_of_rows;
sprintf(query, "SELECT artist, album, available FROM artists WHERE artist=\"%s\"", song.artist);
log_printf(LOG_NOISY_DEBUG, "update_artists : %s\n", query);
res = db_query(query);
number_of_rows = mysql_num_rows(res);
if (number_of_rows ==0) // ie artist has not been processed before
// if (res == NULL)
{
mysql_free_result(res);
sprintf(query, "INSERT INTO artists (artist, available) VALUES (\"%s\", %i)", song.artist, TRUE);
log_printf(LOG_NOISY_DEBUG, "update_artists : %s\n", query);
res = db_query(query);
mysql_free_result(res);
}
else
{
row = mysql_fetch_row(res);
if (row[1] == NULL) //ie no artist has previously been set
{
mysql_free_result(res);
sprintf(query, "UPDATE artists SET available=%i WHERE artist=\"%s\"", TRUE, song.artist);
log_printf(LOG_NOISY_DEBUG, "update_artists : %s\n", query);
res = db_query(query);
mysql_free_result(res);
}
/* else // Album is a single artist, so simply make available
{
mysql_free_result(res);
sprintf(query, "UPDATE albums SET available=%i WHERE album=\"%s\"", TRUE, song.album);
log_printf(LOG_NOISY_DEBUG, "update_artists : %s\n", query);
res = db_query(query);
mysql_free_result(res);
}
*/
}
}