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:
parent
71ee59ae22
commit
784cd3eb91
|
@ -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)
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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. */
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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"));
|
||||
|
|
Loading…
Reference in New Issue