From 784cd3eb91d27f0b8f44bbf9f195cc97f8055d2e Mon Sep 17 00:00:00 2001 From: Anna Schumaker Date: Mon, 29 Aug 2016 11:19:58 -0400 Subject: [PATCH] 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 --- core/playlists/artist.c | 6 +++--- core/tags/track.c | 24 +++++++++++++----------- gui/audio.c | 2 +- gui/model.c | 4 ++-- gui/queue.c | 8 ++++---- include/core/tags/track.h | 2 -- tests/core/tags/track.c | 12 +++++------- tests/gui/audio.c | 2 +- 8 files changed, 29 insertions(+), 31 deletions(-) diff --git a/core/playlists/artist.c b/core/playlists/artist.c index 1642c9b0..dd1edafc 100644 --- a/core/playlists/artist.c +++ b/core/playlists/artist.c @@ -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) diff --git a/core/tags/track.c b/core/tags/track.c index 8b1c251d..b9fc4b7c 100644 --- a/core/tags/track.c +++ b/core/tags/track.c @@ -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: diff --git a/gui/audio.c b/gui/audio.c index 10080faa..3bc961e7 100644 --- a/gui/audio.c +++ b/gui/audio.c @@ -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); diff --git a/gui/model.c b/gui/model.c index f8a26601..23f1978a 100644 --- a/gui/model.c +++ b/gui/model.c @@ -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); diff --git a/gui/queue.c b/gui/queue.c index 405b919d..1c438d73 100644 --- a/gui/queue.c +++ b/gui/queue.c @@ -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) diff --git a/include/core/tags/track.h b/include/core/tags/track.h index 7e4f4844..46380fd0 100644 --- a/include/core/tags/track.h +++ b/include/core/tags/track.h @@ -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. */ diff --git a/tests/core/tags/track.c b/tests/core/tags/track.c index 11baff51..9ab443d9 100644 --- a/tests/core/tags/track.c +++ b/tests/core/tags/track.c @@ -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); diff --git a/tests/gui/audio.c b/tests/gui/audio.c index 228576df..54b1c218 100644 --- a/tests/gui/audio.c +++ b/tests/gui/audio.c @@ -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"));