Database: Fix tag_albumartist; new tag_virt_canonicalartist.

Change-Id: I1d887f8a9d6690b8286407d2502432b0497cfeb9
This commit is contained in:
James D. Smith 2021-09-15 17:33:41 -06:00 committed by William Wilgus
parent cb0f4599e1
commit fcb9c06852
3 changed files with 26 additions and 20 deletions

View file

@ -118,7 +118,7 @@ static long tempbuf_pos;
static int tempbuf_handle;
#endif
#define SORTED_TAGS_COUNT 8
#define SORTED_TAGS_COUNT 9
#define TAGCACHE_IS_UNIQUE(tag) (BIT_N(tag) & TAGCACHE_UNIQUE_TAGS)
#define TAGCACHE_IS_SORTED(tag) (BIT_N(tag) & TAGCACHE_SORTED_TAGS)
#define TAGCACHE_IS_NUMERIC_OR_NONUNIQUE(tag) \
@ -126,18 +126,21 @@ static int tempbuf_handle;
/* Tags we want to get sorted (loaded to the tempbuf). */
#define TAGCACHE_SORTED_TAGS ((1LU << tag_artist) | (1LU << tag_album) | \
(1LU << tag_genre) | (1LU << tag_composer) | (1LU << tag_comment) | \
(1LU << tag_albumartist) | (1LU << tag_grouping) | (1LU << tag_title))
(1LU << tag_albumartist) | (1LU << tag_grouping) | (1LU << tag_title) | \
(1LU << tag_virt_canonicalartist))
/* Uniqued tags (we can use these tags with filters and conditional clauses). */
#define TAGCACHE_UNIQUE_TAGS ((1LU << tag_artist) | (1LU << tag_album) | \
(1LU << tag_genre) | (1LU << tag_composer) | (1LU << tag_comment) | \
(1LU << tag_albumartist) | (1LU << tag_grouping))
(1LU << tag_albumartist) | (1LU << tag_grouping) | \
(1LU << tag_virt_canonicalartist))
/* String presentation of the tags defined in tagcache.h. Must be in correct order! */
static const char *tags_str[] = { "artist", "album", "genre", "title",
"filename", "composer", "comment", "albumartist", "grouping", "year",
"discnumber", "tracknumber", "bitrate", "length", "playcount", "rating",
"playtime", "lastplayed", "commitid", "mtime", "lastelapsed", "lastoffset" };
"discnumber", "tracknumber", "canonicalartist", "bitrate", "length",
"playcount", "rating", "playtime", "lastplayed", "commitid", "mtime",
"lastelapsed", "lastoffset" };
/* Status information of the tagcache. */
static struct tagcache_stat tc_stat;
@ -203,7 +206,7 @@ static const char * const tagfile_entry_ec = "ll";
/**
Note: This should be (1 + TAG_COUNT) amount of l's.
*/
static const char * const index_entry_ec = "lllllllllllllllllllllll";
static const char * const index_entry_ec = "llllllllllllllllllllllll";
static const char * const tagcache_header_ec = "lll";
static const char * const master_header_ec = "llllll";
@ -1896,7 +1899,7 @@ static void NO_INLINE add_tagcache(char *path, unsigned long mtime)
char tracknumfix[3];
int offset = 0;
int path_length = strlen(path);
bool has_albumartist;
bool has_artist;
bool has_grouping;
#ifdef SIMULATOR
@ -1996,8 +1999,8 @@ static void NO_INLINE add_tagcache(char *path, unsigned long mtime)
entry.tag_offset[tag_mtime] = mtime;
/* String tags. */
has_albumartist = id3.albumartist != NULL
&& strlen(id3.albumartist) > 0;
has_artist = id3.artist != NULL
&& strlen(id3.artist) > 0;
has_grouping = id3.grouping != NULL
&& strlen(id3.grouping) > 0;
@ -2008,13 +2011,14 @@ static void NO_INLINE add_tagcache(char *path, unsigned long mtime)
ADD_TAG(entry, tag_genre, &id3.genre_string);
ADD_TAG(entry, tag_composer, &id3.composer);
ADD_TAG(entry, tag_comment, &id3.comment);
if (has_albumartist)
{
ADD_TAG(entry, tag_albumartist, &id3.albumartist);
if (has_artist)
{
ADD_TAG(entry, tag_virt_canonicalartist, &id3.artist);
}
else
{
ADD_TAG(entry, tag_albumartist, &id3.artist);
ADD_TAG(entry, tag_virt_canonicalartist, &id3.albumartist);
}
if (has_grouping)
{
@ -2037,13 +2041,14 @@ static void NO_INLINE add_tagcache(char *path, unsigned long mtime)
write_item(id3.genre_string);
write_item(id3.composer);
write_item(id3.comment);
if (has_albumartist)
{
write_item(id3.albumartist);
if (has_artist)
{
write_item(id3.artist);
}
else
{
write_item(id3.artist);
write_item(id3.albumartist);
}
if (has_grouping)
{

View file

@ -32,9 +32,9 @@
*/
enum tag_type { tag_artist = 0, tag_album, tag_genre, tag_title,
tag_filename, tag_composer, tag_comment, tag_albumartist, tag_grouping, tag_year,
tag_discnumber, tag_tracknumber, tag_bitrate, tag_length, tag_playcount, tag_rating,
tag_playtime, tag_lastplayed, tag_commitid, tag_mtime, tag_lastelapsed,
tag_lastoffset,
tag_discnumber, tag_tracknumber, tag_virt_canonicalartist, tag_bitrate, tag_length,
tag_playcount, tag_rating, tag_playtime, tag_lastplayed, tag_commitid, tag_mtime,
tag_lastelapsed, tag_lastoffset,
/* Real tags end here, count them. */
TAG_COUNT,
/* Virtual tags */
@ -52,7 +52,7 @@ enum tag_type { tag_artist = 0, tag_album, tag_genre, tag_title,
#define IDX_BUF_DEPTH 64
/* Tag Cache Header version 'TCHxx'. Increment when changing internal structures. */
#define TAGCACHE_MAGIC 0x5443480f
#define TAGCACHE_MAGIC 0x54434810
/* Dump store/restore header version 'TCSxx'. */
#define TAGCACHE_STATEFILE_MAGIC 0x54435301

View file

@ -338,6 +338,7 @@ static int get_tag(int *tag)
{"filename", tag_filename},
{"basename", tag_virt_basename},
{"tracknum", tag_tracknumber},
{"canonicalartist", tag_virt_canonicalartist},
{"discnum", tag_discnumber},
{"year", tag_year},
{"playcount", tag_playcount},