diff --git a/core/tags.cpp b/core/tags.cpp index 33bb6beb..159753fd 100644 --- a/core/tags.cpp +++ b/core/tags.cpp @@ -22,7 +22,7 @@ Database track_db("track.db", false); */ Track :: Track(const std::string &f, Library *library) - : _artist(NULL), _library(library), album(NULL), genre(NULL), + : _album(NULL), _artist(NULL), _library(library), genre(NULL), play_count(0), last_year(0), last_month(0), last_day(0), filepath(f.substr(library->primary_key().size() + 1)) { @@ -53,12 +53,12 @@ void Track :: read(File &f) _library = tags :: get_library(library_id); _artist = tags :: get_artist(artist_id); - album = tags :: get_album(album_id); + _album = tags :: get_album(album_id); genre = tags :: get_genre(genre_id); title_lower = filter :: add(title, index()); filter :: add(_artist->name(), index()); - filter :: add(album->name(), index()); + filter :: add(_album->name(), index()); _library->inc_size(); set_length_str(); } @@ -66,7 +66,7 @@ void Track :: read(File &f) void Track :: write(File &f) { f << _library->index() << " " << _artist->index() << " "; - f << album->index() << " " << genre->index() << " " << track << " "; + f << _album->index() << " " << genre->index() << " " << track << " "; f << last_year << " " << last_month << " " << last_day << " "; f << play_count << " " << length << " " << title << std::endl; f << filepath << std::endl; @@ -115,7 +115,7 @@ bool Track :: tag() audio = ref.audioProperties(); _artist = tags :: get_artist(format_tag(tag->artist())); - album = tags :: get_album(format_tag(tag->album()), tag->year()); + _album = tags :: get_album(format_tag(tag->album()), tag->year()); genre = tags :: get_genre(format_tag(tag->genre())); track = tag->track(); length = audio->length(); @@ -125,7 +125,7 @@ bool Track :: tag() set_length_str(); filter :: add(_artist->name(), index()); - filter :: add(album->name(), index()); + filter :: add(_album->name(), index()); return true; } @@ -181,7 +181,7 @@ int Track :: less_than(Track *rhs, sort_t field) case SORT_ARTIST: return _artist->compare(rhs->artist()); case SORT_ALBUM: - return album->compare(rhs->album); + return _album->compare(rhs->album()); case SORT_COUNT: return compare_uint(play_count, rhs->play_count); case SORT_GENRE: @@ -201,7 +201,7 @@ int Track :: less_than(Track *rhs, sort_t field) case SORT_TRACK: return compare_uint(track, rhs->track); case SORT_YEAR: - return compare_uint(album->year(), rhs->album->year()); + return compare_uint(_album->year(), rhs->album()->year()); } return 0; } diff --git a/core/tags/track.cpp b/core/tags/track.cpp index acbe1451..149b347d 100644 --- a/core/tags/track.cpp +++ b/core/tags/track.cpp @@ -7,15 +7,17 @@ Track :: Track() : GenericTag(), - _artist(NULL), _library(NULL), album(NULL), genre(NULL), + _album(NULL), _artist(NULL), _library(NULL), genre(NULL), track(0), length(0), play_count(0), last_year(0), last_month(0), last_day(0) {} -Track :: Track(Artist *artist, Library *library) - : _artist(artist), _library(library) +Track :: Track(Album *album, Artist *artist, Library *library) + : _album(album), _artist(artist), _library(library) + { _library->inc_size(); } +Album *Track :: album() { return _album; } Artist *Track :: artist() { return _artist; } Library *Track :: library() { return _library; } diff --git a/gui/gui.cpp b/gui/gui.cpp index 87aee9e8..58117384 100644 --- a/gui/gui.cpp +++ b/gui/gui.cpp @@ -48,7 +48,7 @@ static void on_track_loaded(Track *track) set_label_text(title, "xx-large", track->title); set_label_text(artist, "x-large", "By: " + track->artist()->name()); - set_label_text(album, "x-large", "From: " + track->album->name()); + set_label_text(album, "x-large", "From: " + track->album()->name()); duration->set_text(track->length_str); bool banned = playlist :: has(track, "Banned"); diff --git a/include/core/tags/track.h b/include/core/tags/track.h index f1cf6507..b344c25d 100644 --- a/include/core/tags/track.h +++ b/include/core/tags/track.h @@ -39,14 +39,13 @@ enum sort_t { class Track : public GenericTag { private: + Album *_album; /**< Pointer to the Album containing this track. */ Artist *_artist; /**< Pointer to the Artist performing this track. */ Library *_library; /**< Pointer to the Library containing this track. */ void set_length_str(); public: - /** Pointer to this track's album information */ - Album *album; /** Pointer to this track's genre information */ Genre *genre; @@ -78,10 +77,11 @@ public: /** * Track constructor * + * @param album The album containing this track. * @param artist The artist performing this track. * @param library The library containing this track. */ - Track(Artist *, Library *); + Track(Album *, Artist *, Library *); /** * Track constructor @@ -94,6 +94,7 @@ public: ~Track(); + Album *album(); /**< @return Track::_album. */ Artist *artist(); /**< @return Track::_artist. */ Library *library(); /**< @return Track::_library. */ diff --git a/lib/model.cpp b/lib/model.cpp index 8a779d4e..a2ed1891 100644 --- a/lib/model.cpp +++ b/lib/model.cpp @@ -121,7 +121,7 @@ void QueueModel::get_value_uint(Track *track, int column, specific.set(track->track); break; case 5: - specific.set(track->album->year()); + specific.set(track->album()->year()); break; case 7: specific.set(track->play_count); @@ -149,7 +149,7 @@ void QueueModel::get_value_str(Track *track, int column, specific.set(track->artist()->name()); break; case 4: - specific.set(track->album->name()); + specific.set(track->album()->name()); break; case 6: specific.set(track->genre->name()); diff --git a/tests/core/tags/track.cpp b/tests/core/tags/track.cpp index 8816b6b7..d0e5febb 100644 --- a/tests/core/tags/track.cpp +++ b/tests/core/tags/track.cpp @@ -9,9 +9,9 @@ static void test_track_tag_default() { Track track; + test_equal(track.album(), (Album *)NULL); test_equal(track.artist(), (Artist *)NULL); test_equal(track.library(), (Library *)NULL); - test_equal(track.album, (Album *)NULL); test_equal(track.genre, (Genre *)NULL); test_equal(track.name(), (std::string)""); @@ -32,10 +32,12 @@ static void test_track_tag_default() static void test_track_tag_constructor() { + Album *album = tags :: get_album("Hyrule Symphony", 1998); Artist *artist = tags :: get_artist("Koji Kondo"); Library *library = tags :: get_library("/home/Zelda/Music"); - Track track(artist, library); + Track track(album, artist, library); + test_equal(track.album(), album); test_equal(track.artist(), artist); test_equal(track.library(), library); test_equal(track.library()->size(), (unsigned)1);