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); queue_set_flag(&playlist->pl_queue, Q_ADD_FRONT);
db_for_each(dbe, next, track_db_get()) { 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_add(&playlist->pl_queue, TRACK(dbe));
} }
queue_unset_flag(&playlist->pl_queue, Q_ADD_FRONT); 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) 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; struct playlist *playlist = (struct playlist *)artist->ar_playlist;
if (!playlist) { if (!playlist) {
@ -223,7 +223,7 @@ void pl_artist_new_track(struct track *track)
void pl_artist_delete_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; struct playlist *playlist = (struct playlist *)artist->ar_playlist;
if (playlist) if (playlist)

View File

@ -47,6 +47,8 @@ struct db_entry *track_alloc(const gchar *key)
{ {
const TagLib_AudioProperties *audio; const TagLib_AudioProperties *audio;
struct library *library; struct library *library;
struct artist *artist;
struct genre *genre;
struct track *track = NULL; struct track *track = NULL;
unsigned int lib_id; unsigned int lib_id;
TagLib_File *file; TagLib_File *file;
@ -62,14 +64,14 @@ struct db_entry *track_alloc(const gchar *key)
goto out; goto out;
} }
track = __track_alloc(); track = __track_alloc();
tag = taglib_file_tag(file); tag = taglib_file_tag(file);
audio = taglib_file_audioproperties(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_album = album_find(artist, genre, taglib_tag_album(tag),
track->tr_genre = genre_find(taglib_tag_genre(tag)); taglib_tag_year(tag));
track->tr_album = album_find(track->tr_artist, track->tr_genre,
taglib_tag_album(tag), taglib_tag_year(tag));
track->tr_library = library; track->tr_library = library;
unplayed_count++; unplayed_count++;
@ -162,8 +164,6 @@ static struct db_entry *track_read(struct file *file)
unplayed_count++; unplayed_count++;
track->tr_title = file_readl(file); 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_tokens = g_str_tokenize_and_fold(track->tr_title, NULL,
&track->tr_alts); &track->tr_alts);
track->tr_path = __track_key(track->tr_library, file_readl(file)); 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) { switch (compare) {
case COMPARE_ARTIST: 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: case COMPARE_ALBUM:
return album_compare(lhs->tr_album, rhs->tr_album); return album_compare(lhs->tr_album, rhs->tr_album);
case COMPARE_COUNT: case COMPARE_COUNT:
return lhs->tr_count - rhs->tr_count; return lhs->tr_count - rhs->tr_count;
case COMPARE_GENRE: 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: case COMPARE_LENGTH:
return lhs->tr_length - rhs->tr_length; return lhs->tr_length - rhs->tr_length;
case COMPARE_PLAYED: 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) static void __audio_load(struct track *track)
{ {
__audio_set_label("o_title", "xx-large", track->tr_title); __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_label("o_album", "x-large", track->tr_album->al_name);
__audio_set_time_label("o_duration", track->tr_length); __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)); g_value_take_string(value, string_sec2str(track->tr_length));
break; break;
case Q_MODEL_ARTIST: 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; break;
case Q_MODEL_ALBUM: case Q_MODEL_ALBUM:
g_value_set_static_string(value, track->tr_album->al_name); 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); g_value_set_uint(value, track->tr_album->al_year);
break; break;
case Q_MODEL_GENRE: 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; break;
case Q_MODEL_COUNT: case Q_MODEL_COUNT:
g_value_set_uint(value, track->tr_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); match = album_match_token(track->tr_album, token);
break; break;
case GQ_FILTER_ARTIST: case GQ_FILTER_ARTIST:
match = artist_match_token(track->tr_artist, token); match = artist_match_token(track->tr_album->al_artist, token);
break; break;
case GQ_FILTER_GENRE: case GQ_FILTER_GENRE:
match = genre_match_token(track->tr_genre, token); match = genre_match_token(track->tr_album->al_genre, token);
break; break;
case GQ_FILTER_TITLE: case GQ_FILTER_TITLE:
match = track_match_token(track, token); match = track_match_token(track, token);
@ -88,8 +88,8 @@ static gboolean __queue_visible_func(GtkTreeModel *model, GtkTreeIter *iter,
default: /* GQ_FILTER_DEFAULT */ default: /* GQ_FILTER_DEFAULT */
match = track_match_token(track, token) || match = track_match_token(track, token) ||
album_match_token(track->tr_album, token) || album_match_token(track->tr_album, token) ||
artist_match_token(track->tr_artist, token) || artist_match_token(track->tr_album->al_artist, token) ||
genre_match_token(track->tr_genre, token); genre_match_token(track->tr_album->al_genre, token);
} }
if (!match) if (!match)

View File

@ -42,8 +42,6 @@ enum compare_t {
struct track { struct track {
struct album *tr_album; /* This track's associated album. */ 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. */ struct library *tr_library; /* This track's associated library. */
unsigned short int tr_count; /* This track's play count. */ 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_cmpstr(track->tr_album->al_name, ==, "Hyrule Symphony");
g_assert_cmpuint(track->tr_album->al_year, ==, 1998); g_assert_cmpuint(track->tr_album->al_year, ==, 1998);
g_assert_cmpstr(track->tr_artist->ar_name, ==, "Koji Kondo"); g_assert_cmpstr(track->tr_album->al_artist->ar_name, ==, "Koji Kondo");
g_assert_cmpstr(track->tr_genre->ge_name, ==, "Game"); g_assert_cmpstr(track->tr_album->al_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_library->li_path, ==, "tests/Music"); 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"); struct track *kokiri = test_alloc("0/Ocarina of Time/05 - Kokiri Forest.ogg");
/* Compare artists. */ /* 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(title, title, COMPARE_ARTIST), ==, 0);
g_assert_cmpint(track_compare(kokiri, title, COMPARE_ARTIST), ==, 1); g_assert_cmpint(track_compare(kokiri, title, COMPARE_ARTIST), ==, 1);
g_assert_cmpint(track_compare(title, kokiri, 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. */ /* Compare albums. */
g_assert_cmpint(track_compare(title, title, COMPARE_ALBUM), ==, 0); g_assert_cmpint(track_compare(title, title, COMPARE_ALBUM), ==, 0);
@ -155,7 +153,7 @@ static void test_track_compare()
title->tr_count = 0; title->tr_count = 0;
/* Compare genres. */ /* 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, title, COMPARE_GENRE), ==, 0);
g_assert_cmpint(track_compare(title, kokiri, COMPARE_GENRE), ==, -1); g_assert_cmpint(track_compare(title, kokiri, COMPARE_GENRE), ==, -1);
g_assert_cmpint(track_compare(kokiri, title, 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); 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_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_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_position"), ==, "0:00");
g_assert_cmpstr(test_get_label_text("o_duration"), ==, duration); g_assert_cmpstr(test_get_label_text("o_duration"), ==, duration);
g_assert_true(test_get_toggle_state("o_favorite")); g_assert_true(test_get_toggle_state("o_favorite"));