libsaria: Find lowercase tags when creating a track

This avoids several lookups during list sorting, so initial startup
should be a little bit faster now.
This commit is contained in:
Bryan Schumaker 2011-12-28 17:40:11 -05:00
parent a3130a7da5
commit 1e5628d059
4 changed files with 29 additions and 4 deletions

View File

@ -30,7 +30,10 @@ namespace libsaria
int channels;
sid_t songid;
string *artist_lc;
string *album_lc;
void make_lenstr();
void format_tags();
public:
Track();
@ -52,6 +55,9 @@ namespace libsaria
int get_bitrate();
int get_channels();
sid_t get_songid();
string *get_artist_lc();
string *get_album_lc();
};
} /* Namespace: libsaria */

View File

@ -21,8 +21,8 @@ static inline bool compare_tracks(libsaria::Track *one, libsaria::Track *two)
static inline bool compare_albums(libsaria::Track *one, libsaria::Track *two)
{
string *s_one = libsaria::lowercase(one->get_album());
string *s_two = libsaria::lowercase(two->get_album());
string *s_one = one->get_album_lc();
string *s_two = two->get_album_lc();
if (*s_one < *s_two)
return true;
else if (*s_one == *s_two)
@ -32,8 +32,8 @@ static inline bool compare_albums(libsaria::Track *one, libsaria::Track *two)
static bool compare_tracktags(libsaria::Track *one, libsaria::Track *two)
{
string *s_one = libsaria::lowercase(one->get_artist());
string *s_two = libsaria::lowercase(two->get_artist());
string *s_one = one->get_artist_lc();
string *s_two = two->get_artist_lc();
if (*s_one == "")
return false;
if ( (*s_one < *s_two) || (*s_two == "") )

View File

@ -69,4 +69,14 @@ namespace libsaria
return songid;
}
string *Track::get_artist_lc()
{
return artist_lc;
}
string *Track::get_album_lc()
{
return album_lc;
}
} /* Namespace: libsaria */

View File

@ -1,5 +1,6 @@
#include <libsaria/track.h>
#include <libsaria/format.h>
#include <taglib/tag.h>
#include <taglib/fileref.h>
@ -42,6 +43,7 @@ namespace libsaria
channels = prop->channels();
make_lenstr();
format_tags();
}
Track::Track(InFile &in)
@ -60,12 +62,19 @@ namespace libsaria
in >> bitrate;
in >> sample;
in >> channels;
format_tags();
}
Track::~Track()
{
}
void Track::format_tags()
{
artist_lc = lowercase(artist);
album_lc = lowercase(album);
}
void Track::save(OutFile &out)
{
out << songid;