* Use band name for virtual audio containers when it's available.
This commit is contained in:
parent
e777a93a5e
commit
b632bf1704
36
metadata.c
36
metadata.c
@ -47,6 +47,7 @@
|
|||||||
#define FLAG_ALBUM 0x00000004
|
#define FLAG_ALBUM 0x00000004
|
||||||
#define FLAG_GENRE 0x00000008
|
#define FLAG_GENRE 0x00000008
|
||||||
#define FLAG_COMMENT 0x00000010
|
#define FLAG_COMMENT 0x00000010
|
||||||
|
#define FLAG_BAND 0x00000020
|
||||||
|
|
||||||
/* Audio profile flags */
|
/* Audio profile flags */
|
||||||
#define MP3 0x00000001
|
#define MP3 0x00000001
|
||||||
@ -126,7 +127,7 @@ GetFolderMetadata(const char * name, const char * path, const char * artist, con
|
|||||||
sql = sqlite3_mprintf( "INSERT into DETAILS"
|
sql = sqlite3_mprintf( "INSERT into DETAILS"
|
||||||
" (TITLE, PATH, CREATOR, ARTIST, GENRE, ALBUM_ART) "
|
" (TITLE, PATH, CREATOR, ARTIST, GENRE, ALBUM_ART) "
|
||||||
"VALUES"
|
"VALUES"
|
||||||
" ('%q', %Q, %Q, %Q, %Q, %lld, %Q);",
|
" ('%q', %Q, %Q, %Q, %Q, %lld);",
|
||||||
name, path, artist, artist, genre,
|
name, path, artist, artist, genre,
|
||||||
album_art ? strtoll(album_art, NULL, 10) : 0);
|
album_art ? strtoll(album_art, NULL, 10) : 0);
|
||||||
if( sql_exec(db, sql) != SQLITE_OK )
|
if( sql_exec(db, sql) != SQLITE_OK )
|
||||||
@ -146,7 +147,7 @@ GetAudioMetadata(const char * path, char * name)
|
|||||||
struct stat file;
|
struct stat file;
|
||||||
sqlite_int64 ret;
|
sqlite_int64 ret;
|
||||||
char *sql;
|
char *sql;
|
||||||
char *title, *artist = NULL, *album = NULL, *genre = NULL, *comment = NULL, *date = NULL;
|
char *title, *artist = NULL, *album = NULL, *band = NULL, *genre = NULL, *comment = NULL, *date = NULL;
|
||||||
char *esc_tag;
|
char *esc_tag;
|
||||||
int i, free_flags = 0;
|
int i, free_flags = 0;
|
||||||
sqlite_int64 album_art = 0;
|
sqlite_int64 album_art = 0;
|
||||||
@ -243,14 +244,35 @@ GetAudioMetadata(const char * path, char * name)
|
|||||||
if( song.contributor[i] && *song.contributor[i] )
|
if( song.contributor[i] && *song.contributor[i] )
|
||||||
{
|
{
|
||||||
artist = trim(song.contributor[i]);
|
artist = trim(song.contributor[i]);
|
||||||
if( (esc_tag = escape_tag(artist)) )
|
if( strlen(artist) > 48 )
|
||||||
|
{
|
||||||
|
free_flags |= FLAG_ARTIST;
|
||||||
|
artist = strdup("Various Artists");
|
||||||
|
}
|
||||||
|
else if( (esc_tag = escape_tag(artist)) )
|
||||||
{
|
{
|
||||||
free_flags |= FLAG_ARTIST;
|
free_flags |= FLAG_ARTIST;
|
||||||
artist = esc_tag;
|
artist = esc_tag;
|
||||||
}
|
}
|
||||||
|
band = artist;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/* If there is a band associated with the album, use it for virtual containers. */
|
||||||
|
if( (i != ROLE_BAND) && song.contributor[ROLE_BAND] && *song.contributor[ROLE_BAND] )
|
||||||
|
{
|
||||||
|
band = trim(song.contributor[ROLE_BAND]);
|
||||||
|
if( strlen(band) > 48 )
|
||||||
|
{
|
||||||
|
free_flags |= FLAG_BAND;
|
||||||
|
band = strdup("Various Artists");
|
||||||
|
}
|
||||||
|
else if( (esc_tag = escape_tag(band)) )
|
||||||
|
{
|
||||||
|
free_flags |= FLAG_BAND;
|
||||||
|
band = esc_tag;
|
||||||
|
}
|
||||||
|
}
|
||||||
if( song.album && *song.album )
|
if( song.album && *song.album )
|
||||||
{
|
{
|
||||||
album = trim(song.album);
|
album = trim(song.album);
|
||||||
@ -285,9 +307,9 @@ GetAudioMetadata(const char * path, char * name)
|
|||||||
" (PATH, SIZE, DURATION, CHANNELS, BITRATE, SAMPLERATE, DATE,"
|
" (PATH, SIZE, DURATION, CHANNELS, BITRATE, SAMPLERATE, DATE,"
|
||||||
" TITLE, CREATOR, ARTIST, ALBUM, GENRE, COMMENT, DISC, TRACK, DLNA_PN, MIME, ALBUM_ART) "
|
" TITLE, CREATOR, ARTIST, ALBUM, GENRE, COMMENT, DISC, TRACK, DLNA_PN, MIME, ALBUM_ART) "
|
||||||
"VALUES"
|
"VALUES"
|
||||||
" (%Q, %d, '%s', %d, %d, %d, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %d, %d, %Q, '%s', %lld, %Q);",
|
" (%Q, %d, '%s', %d, %d, %d, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %d, %d, %Q, '%s', %lld);",
|
||||||
path, song.file_size, duration, song.channels, song.bitrate, song.samplerate, date,
|
path, song.file_size, duration, song.channels, song.bitrate, song.samplerate, date,
|
||||||
title, artist, artist, album, genre, comment, song.disc, song.track,
|
title, band, artist, album, genre, comment, song.disc, song.track,
|
||||||
dlna_pn, song.mime?song.mime:mime, album_art);
|
dlna_pn, song.mime?song.mime:mime, album_art);
|
||||||
freetags(&song);
|
freetags(&song);
|
||||||
if( dlna_pn )
|
if( dlna_pn )
|
||||||
@ -300,6 +322,8 @@ GetAudioMetadata(const char * path, char * name)
|
|||||||
free(artist);
|
free(artist);
|
||||||
if( free_flags & FLAG_ALBUM )
|
if( free_flags & FLAG_ALBUM )
|
||||||
free(album);
|
free(album);
|
||||||
|
if( free_flags & FLAG_BAND )
|
||||||
|
free(band);
|
||||||
if( free_flags & FLAG_GENRE )
|
if( free_flags & FLAG_GENRE )
|
||||||
free(genre);
|
free(genre);
|
||||||
if( free_flags & FLAG_COMMENT )
|
if( free_flags & FLAG_COMMENT )
|
||||||
@ -903,7 +927,7 @@ GetVideoMetadata(const char * path, char * name)
|
|||||||
" (PATH, SIZE, DURATION, DATE, CHANNELS, BITRATE, SAMPLERATE, RESOLUTION,"
|
" (PATH, SIZE, DURATION, DATE, CHANNELS, BITRATE, SAMPLERATE, RESOLUTION,"
|
||||||
" CREATOR, TITLE, DLNA_PN, MIME, ALBUM_ART) "
|
" CREATOR, TITLE, DLNA_PN, MIME, ALBUM_ART) "
|
||||||
"VALUES"
|
"VALUES"
|
||||||
" (%Q, %lld, %Q, %Q, %Q, %Q, %Q, %Q, %Q, '%q', %Q, '%q', %lld, %Q);",
|
" (%Q, %lld, %Q, %Q, %Q, %Q, %Q, %Q, %Q, '%q', %Q, '%q', %lld);",
|
||||||
path, size, m.duration,
|
path, size, m.duration,
|
||||||
strlen(date) ? date : NULL,
|
strlen(date) ? date : NULL,
|
||||||
m.channels, m.bitrate, m.frequency, m.resolution,
|
m.channels, m.bitrate, m.frequency, m.resolution,
|
||||||
|
@ -230,7 +230,7 @@ insert_containers(const char * name, const char *path, const char * refID, const
|
|||||||
}
|
}
|
||||||
else if( strstr(class, "audioItem") )
|
else if( strstr(class, "audioItem") )
|
||||||
{
|
{
|
||||||
asprintf(&sql, "SELECT ARTIST, ALBUM, GENRE, ALBUM_ART from DETAILS where ID = %lu", detailID);
|
asprintf(&sql, "SELECT ALBUM, CREATOR, GENRE, ALBUM_ART from DETAILS where ID = %lu", detailID);
|
||||||
ret = sql_get_table(db, sql, &result, &row, &cols);
|
ret = sql_get_table(db, sql, &result, &row, &cols);
|
||||||
free(sql);
|
free(sql);
|
||||||
if( ret != SQLITE_OK )
|
if( ret != SQLITE_OK )
|
||||||
@ -240,8 +240,8 @@ insert_containers(const char * name, const char *path, const char * refID, const
|
|||||||
sqlite3_free_table(result);
|
sqlite3_free_table(result);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
char *artist = result[5], *album = result[6], *genre = result[7];
|
char *album = result[4], *artist = result[5], *genre = result[6];
|
||||||
char *album_art = result[8];
|
char *album_art = result[7];
|
||||||
static struct virtual_item last_album;
|
static struct virtual_item last_album;
|
||||||
static struct virtual_item last_artist;
|
static struct virtual_item last_artist;
|
||||||
static struct virtual_item last_artistAlbum;
|
static struct virtual_item last_artistAlbum;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user