core/tags/track: Remove redundant artist and genre tags

The track tag doesn't need these tags now that they can be found in the
album tag.

Implements #64: Remove Artist and Genre pointers from Tracks
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2016-08-29 11:19:58 -04:00
parent 71ee59ae22
commit 784cd3eb91
8 changed files with 29 additions and 31 deletions

View File

@ -36,7 +36,7 @@ static bool __artist_pl_add(void *data)
queue_set_flag(&playlist->pl_queue, Q_ADD_FRONT);
db_for_each(dbe, next, track_db_get()) {
if (TRACK(dbe)->tr_artist == artist)
if (TRACK(dbe)->tr_album->al_artist == artist)
queue_add(&playlist->pl_queue, TRACK(dbe));
}
queue_unset_flag(&playlist->pl_queue, Q_ADD_FRONT);
@ -210,7 +210,7 @@ void pl_artist_deinit()
void pl_artist_new_track(struct track *track)
{
struct artist *artist = track->tr_artist;
struct artist *artist = track->tr_album->al_artist;
struct playlist *playlist = (struct playlist *)artist->ar_playlist;
if (!playlist) {
@ -223,7 +223,7 @@ void pl_artist_new_track(struct track *track)
void pl_artist_delete_track(struct track *track)
{
struct artist *artist = track->tr_artist;
struct artist *artist = track->tr_album->al_artist;
struct playlist *playlist = (struct playlist *)artist->ar_playlist;
if (playlist)

View File

@ -47,6 +47,8 @@ struct db_entry *track_alloc(const gchar *key)
{
const TagLib_AudioProperties *audio;
struct library *library;
struct artist *artist;
struct genre *genre;
struct track *track = NULL;
unsigned int lib_id;
TagLib_File *file;
@ -62,14 +64,14 @@ struct db_entry *track_alloc(const gchar *key)
goto out;
}
track = __track_alloc();
tag = taglib_file_tag(file);
audio = taglib_file_audioproperties(file);
track = __track_alloc();
tag = taglib_file_tag(file);
audio = taglib_file_audioproperties(file);
artist = artist_find(taglib_tag_artist(tag));
genre = genre_find(taglib_tag_genre(tag));
track->tr_artist = artist_find(taglib_tag_artist(tag));
track->tr_genre = genre_find(taglib_tag_genre(tag));
track->tr_album = album_find(track->tr_artist, track->tr_genre,
taglib_tag_album(tag), taglib_tag_year(tag));
track->tr_album = album_find(artist, genre, taglib_tag_album(tag),
taglib_tag_year(tag));
track->tr_library = library;
unplayed_count++;
@ -162,8 +164,6 @@ static struct db_entry *track_read(struct file *file)
unplayed_count++;
track->tr_title = file_readl(file);
track->tr_artist = track->tr_album->al_artist;
track->tr_genre = track->tr_album->al_genre;
track->tr_tokens = g_str_tokenize_and_fold(track->tr_title, NULL,
&track->tr_alts);
track->tr_path = __track_key(track->tr_library, file_readl(file));
@ -276,13 +276,15 @@ int track_compare(struct track *lhs, struct track *rhs, enum compare_t compare)
{
switch (compare) {
case COMPARE_ARTIST:
return artist_compare(lhs->tr_artist, rhs->tr_artist);
return artist_compare(lhs->tr_album->al_artist,
rhs->tr_album->al_artist);
case COMPARE_ALBUM:
return album_compare(lhs->tr_album, rhs->tr_album);
case COMPARE_COUNT:
return lhs->tr_count - rhs->tr_count;
case COMPARE_GENRE:
return genre_compare(lhs->tr_genre, rhs->tr_genre);
return genre_compare(lhs->tr_album->al_genre,
rhs->tr_album->al_genre);
case COMPARE_LENGTH:
return lhs->tr_length - rhs->tr_length;
case COMPARE_PLAYED:

View File

@ -29,7 +29,7 @@ static inline void __audio_set_time_label(const gchar *label, unsigned int time)
static void __audio_load(struct track *track)
{
__audio_set_label("o_title", "xx-large", track->tr_title);
__audio_set_label("o_artist", "x-large", track->tr_artist->ar_name);
__audio_set_label("o_artist", "x-large", track->tr_album->al_artist->ar_name);
__audio_set_label("o_album", "x-large", track->tr_album->al_name);
__audio_set_time_label("o_duration", track->tr_length);

View File

@ -110,7 +110,7 @@ static void _queue_model_get_value(GtkTreeModel *model, GtkTreeIter *iter,
g_value_take_string(value, string_sec2str(track->tr_length));
break;
case Q_MODEL_ARTIST:
g_value_set_static_string(value, track->tr_artist->ar_name);
g_value_set_static_string(value, track->tr_album->al_artist->ar_name);
break;
case Q_MODEL_ALBUM:
g_value_set_static_string(value, track->tr_album->al_name);
@ -119,7 +119,7 @@ static void _queue_model_get_value(GtkTreeModel *model, GtkTreeIter *iter,
g_value_set_uint(value, track->tr_album->al_year);
break;
case Q_MODEL_GENRE:
g_value_set_static_string(value, track->tr_genre->ge_name);
g_value_set_static_string(value, track->tr_album->al_genre->ge_name);
break;
case Q_MODEL_COUNT:
g_value_set_uint(value, track->tr_count);

View File

@ -77,10 +77,10 @@ static gboolean __queue_visible_func(GtkTreeModel *model, GtkTreeIter *iter,
match = album_match_token(track->tr_album, token);
break;
case GQ_FILTER_ARTIST:
match = artist_match_token(track->tr_artist, token);
match = artist_match_token(track->tr_album->al_artist, token);
break;
case GQ_FILTER_GENRE:
match = genre_match_token(track->tr_genre, token);
match = genre_match_token(track->tr_album->al_genre, token);
break;
case GQ_FILTER_TITLE:
match = track_match_token(track, token);
@ -88,8 +88,8 @@ static gboolean __queue_visible_func(GtkTreeModel *model, GtkTreeIter *iter,
default: /* GQ_FILTER_DEFAULT */
match = track_match_token(track, token) ||
album_match_token(track->tr_album, token) ||
artist_match_token(track->tr_artist, token) ||
genre_match_token(track->tr_genre, token);
artist_match_token(track->tr_album->al_artist, token) ||
genre_match_token(track->tr_album->al_genre, token);
}
if (!match)

View File

@ -42,8 +42,6 @@ enum compare_t {
struct track {
struct album *tr_album; /* This track's associated album. */
struct artist *tr_artist; /* This track's associated artist. */
struct genre *tr_genre; /* This track's associated genre. */
struct library *tr_library; /* This track's associated library. */
unsigned short int tr_count; /* This track's play count. */

View File

@ -21,10 +21,8 @@ static void test_verify_tags(struct track *track)
{
g_assert_cmpstr(track->tr_album->al_name, ==, "Hyrule Symphony");
g_assert_cmpuint(track->tr_album->al_year, ==, 1998);
g_assert_cmpstr(track->tr_artist->ar_name, ==, "Koji Kondo");
g_assert_cmpstr(track->tr_genre->ge_name, ==, "Game");
g_assert(track->tr_album->al_artist == track->tr_artist);
g_assert(track->tr_album->al_genre == track->tr_genre);
g_assert_cmpstr(track->tr_album->al_artist->ar_name, ==, "Koji Kondo");
g_assert_cmpstr(track->tr_album->al_genre->ge_name, ==, "Game");
g_assert_cmpstr(track->tr_library->li_path, ==, "tests/Music");
}
@ -136,11 +134,11 @@ static void test_track_compare()
struct track *kokiri = test_alloc("0/Ocarina of Time/05 - Kokiri Forest.ogg");
/* Compare artists. */
title->tr_artist = artist_find("Hajime Wakai");
title->tr_album->al_artist = artist_find("Hajime Wakai");
g_assert_cmpint(track_compare(title, title, COMPARE_ARTIST), ==, 0);
g_assert_cmpint(track_compare(kokiri, title, COMPARE_ARTIST), ==, 1);
g_assert_cmpint(track_compare(title, kokiri, COMPARE_ARTIST), ==, -1);
title->tr_artist = artist_find("Koji Kondo");
title->tr_album->al_artist = artist_find("Koji Kondo");
/* Compare albums. */
g_assert_cmpint(track_compare(title, title, COMPARE_ALBUM), ==, 0);
@ -155,7 +153,7 @@ static void test_track_compare()
title->tr_count = 0;
/* Compare genres. */
kokiri->tr_genre = genre_find("Video Game");
kokiri->tr_album->al_genre = genre_find("Video Game");
g_assert_cmpint(track_compare(title, title, COMPARE_GENRE), ==, 0);
g_assert_cmpint(track_compare(title, kokiri, COMPARE_GENRE), ==, -1);
g_assert_cmpint(track_compare(kokiri, title, COMPARE_GENRE), ==, 1);

View File

@ -81,7 +81,7 @@ static void test_audio()
duration = string_sec2str(track->tr_length);
g_assert_cmpstr(test_get_label_text("o_title"), ==, track->tr_title);
g_assert_cmpstr(test_get_label_text("o_album"), ==, track->tr_album->al_name);
g_assert_cmpstr(test_get_label_text("o_artist"), ==, track->tr_artist->ar_name);
g_assert_cmpstr(test_get_label_text("o_artist"), ==, track->tr_album->al_artist->ar_name);
g_assert_cmpstr(test_get_label_text("o_position"), ==, "0:00");
g_assert_cmpstr(test_get_label_text("o_duration"), ==, duration);
g_assert_true(test_get_toggle_state("o_favorite"));