ocarina/core/tags/track.cpp

69 lines
1.6 KiB
C++
Raw Normal View History

/**
* @file
* Copyright 2014 (c) Anna Schumaker.
*/
#include <core/tags/track.h>
#include <sstream>
Track :: Track()
: GenericTag(),
_album(NULL), _artist(NULL), _genre(NULL), _library(NULL),
_count(0), _length(0), _track(0), last_year(0), last_month(0), last_day(0)
{}
Track :: Track(Album *album, Artist *artist, Genre *genre, Library *library,
const std::string &filepath, const std::string &name,
unsigned int length, unsigned int track)
: GenericTag(name),
_album(album), _artist(artist), _genre(genre), _library(library),
_count(0), _length(length), _track(track),
_path(filepath.substr(library->primary_key().size() + 1))
{
_library->inc_size();
}
Track :: ~Track()
{
if (_library)
_library->dec_size();
}
Album *Track :: album() { return _album; }
Artist *Track :: artist() { return _artist; }
Genre *Track :: genre() { return _genre; }
Library *Track :: library() { return _library; }
unsigned int Track :: count() { return _count; }
unsigned int Track :: length() { return _length; }
unsigned int Track :: track() { return _track; }
const std::string Track :: path() const
{
if (_library)
return _library->primary_key() + "/" + _path;
return "";
}
const std::string Track :: length_str() const
{
std::stringstream ss;
unsigned int minutes = _length / 60;
unsigned int seconds = _length % 60;
ss << minutes << ":";
if (seconds < 10)
ss << 0;
ss << seconds;
return ss.str();
}
const std::string Track :: primary_key() const
{
std::stringstream ss;
if (_library)
ss << _library->index() << "/" << _path;
return ss.str();
}