[UI/MOBILE] Display disc number only if necessary
This commit is contained in:
@@ -526,9 +526,15 @@ Updater::processAudioFile( const boost::filesystem::path& file, Stats& stats)
|
|||||||
if (items.find(MetaData::Type::TrackNumber) != items.end())
|
if (items.find(MetaData::Type::TrackNumber) != items.end())
|
||||||
track.modify()->setTrackNumber( boost::any_cast<std::size_t>(items[MetaData::Type::TrackNumber]) );
|
track.modify()->setTrackNumber( boost::any_cast<std::size_t>(items[MetaData::Type::TrackNumber]) );
|
||||||
|
|
||||||
|
if (items.find(MetaData::Type::TotalTrack) != items.end())
|
||||||
|
track.modify()->setTotalTrackNumber( boost::any_cast<std::size_t>(items[MetaData::Type::TotalTrack]) );
|
||||||
|
|
||||||
if (items.find(MetaData::Type::DiscNumber) != items.end())
|
if (items.find(MetaData::Type::DiscNumber) != items.end())
|
||||||
track.modify()->setDiscNumber( boost::any_cast<std::size_t>(items[MetaData::Type::DiscNumber]) );
|
track.modify()->setDiscNumber( boost::any_cast<std::size_t>(items[MetaData::Type::DiscNumber]) );
|
||||||
|
|
||||||
|
if (items.find(MetaData::Type::TotalDisc) != items.end())
|
||||||
|
track.modify()->setTotalDiscNumber( boost::any_cast<std::size_t>(items[MetaData::Type::TotalDisc]) );
|
||||||
|
|
||||||
if (items.find(MetaData::Type::Date) != items.end())
|
if (items.find(MetaData::Type::Date) != items.end())
|
||||||
track.modify()->setDate( boost::any_cast<boost::posix_time::ptime>(items[MetaData::Type::Date]) );
|
track.modify()->setDate( boost::any_cast<boost::posix_time::ptime>(items[MetaData::Type::Date]) );
|
||||||
|
|
||||||
|
|||||||
@@ -30,7 +30,9 @@ namespace Database {
|
|||||||
Track::Track(const boost::filesystem::path& p)
|
Track::Track(const boost::filesystem::path& p)
|
||||||
:
|
:
|
||||||
_trackNumber(0),
|
_trackNumber(0),
|
||||||
|
_totalTrackNumber(0),
|
||||||
_discNumber(0),
|
_discNumber(0),
|
||||||
|
_totalDiscNumber(0),
|
||||||
_filePath( p.string() ),
|
_filePath( p.string() ),
|
||||||
_coverType(CoverType::None)
|
_coverType(CoverType::None)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -136,7 +136,9 @@ class Track
|
|||||||
|
|
||||||
// Accessors
|
// Accessors
|
||||||
void setTrackNumber(int num) { _trackNumber = num; }
|
void setTrackNumber(int num) { _trackNumber = num; }
|
||||||
|
void setTotalTrackNumber(int num) { _totalTrackNumber = num; }
|
||||||
void setDiscNumber(int num) { _discNumber = num; }
|
void setDiscNumber(int num) { _discNumber = num; }
|
||||||
|
void setTotalDiscNumber(int num) { _totalDiscNumber = num; }
|
||||||
void setName(const std::string& name) { _name = std::string(name, 0, _maxNameLength); }
|
void setName(const std::string& name) { _name = std::string(name, 0, _maxNameLength); }
|
||||||
void setDuration(boost::posix_time::time_duration duration) { _duration = duration; }
|
void setDuration(boost::posix_time::time_duration duration) { _duration = duration; }
|
||||||
void setLastWriteTime(boost::posix_time::ptime time) { _fileLastWrite = time; }
|
void setLastWriteTime(boost::posix_time::ptime time) { _fileLastWrite = time; }
|
||||||
@@ -146,13 +148,15 @@ class Track
|
|||||||
void setOriginalDate(const boost::posix_time::ptime& date) { _originalDate = date; }
|
void setOriginalDate(const boost::posix_time::ptime& date) { _originalDate = date; }
|
||||||
void setGenres(const std::string& genreList) { _genreList = genreList; }
|
void setGenres(const std::string& genreList) { _genreList = genreList; }
|
||||||
void setCoverType(CoverType coverType) { _coverType = coverType; }
|
void setCoverType(CoverType coverType) { _coverType = coverType; }
|
||||||
void setMBID(const std::string& MBID) { _MBID = MBID; }
|
void setMBID(const std::string& MBID) { _MBID = MBID; }
|
||||||
void setArtist(Wt::Dbo::ptr<Artist> artist) { _artist = artist; }
|
void setArtist(Wt::Dbo::ptr<Artist> artist) { _artist = artist; }
|
||||||
void setRelease(Wt::Dbo::ptr<Release> release) { _release = release; }
|
void setRelease(Wt::Dbo::ptr<Release> release) { _release = release; }
|
||||||
void setGenres(std::vector<Genre::pointer> genres);
|
void setGenres(std::vector<Genre::pointer> genres);
|
||||||
|
|
||||||
int getTrackNumber(void) const { return _trackNumber; }
|
int getTrackNumber(void) const { return _trackNumber; }
|
||||||
|
int getTotalTrackNumber(void) const { return _totalTrackNumber; }
|
||||||
int getDiscNumber(void) const { return _discNumber; }
|
int getDiscNumber(void) const { return _discNumber; }
|
||||||
|
int getTotalDiscNumber(void) const { return _totalDiscNumber; }
|
||||||
std::string getName(void) const { return _name; }
|
std::string getName(void) const { return _name; }
|
||||||
boost::filesystem::path getPath(void) const { return _filePath; }
|
boost::filesystem::path getPath(void) const { return _filePath; }
|
||||||
boost::posix_time::time_duration getDuration(void) const { return _duration; }
|
boost::posix_time::time_duration getDuration(void) const { return _duration; }
|
||||||
@@ -172,7 +176,9 @@ class Track
|
|||||||
void persist(Action& a)
|
void persist(Action& a)
|
||||||
{
|
{
|
||||||
Wt::Dbo::field(a, _trackNumber, "track_number");
|
Wt::Dbo::field(a, _trackNumber, "track_number");
|
||||||
|
Wt::Dbo::field(a, _totalTrackNumber, "total_track_number");
|
||||||
Wt::Dbo::field(a, _discNumber, "disc_number");
|
Wt::Dbo::field(a, _discNumber, "disc_number");
|
||||||
|
Wt::Dbo::field(a, _totalDiscNumber, "total_disc_number");
|
||||||
Wt::Dbo::field(a, _name, "name");
|
Wt::Dbo::field(a, _name, "name");
|
||||||
Wt::Dbo::field(a, _duration, "duration");
|
Wt::Dbo::field(a, _duration, "duration");
|
||||||
Wt::Dbo::field(a, _date, "date");
|
Wt::Dbo::field(a, _date, "date");
|
||||||
@@ -197,7 +203,9 @@ class Track
|
|||||||
static const std::size_t _maxNameLength = 128;
|
static const std::size_t _maxNameLength = 128;
|
||||||
|
|
||||||
int _trackNumber;
|
int _trackNumber;
|
||||||
|
int _totalTrackNumber;
|
||||||
int _discNumber;
|
int _discNumber;
|
||||||
|
int _totalDiscNumber;
|
||||||
std::string _name;
|
std::string _name;
|
||||||
std::string _artistName;
|
std::string _artistName;
|
||||||
std::string _releaseName;
|
std::string _releaseName;
|
||||||
|
|||||||
@@ -114,16 +114,43 @@ AvFormat::parse(const boost::filesystem::path& p, Items& items)
|
|||||||
items.insert( std::make_pair(MetaData::Type::Album, stringTrim( stringToUTF8(it->second)) ));
|
items.insert( std::make_pair(MetaData::Type::Album, stringTrim( stringToUTF8(it->second)) ));
|
||||||
else if (boost::iequals(it->first, "title"))
|
else if (boost::iequals(it->first, "title"))
|
||||||
items.insert( std::make_pair(MetaData::Type::Title, stringTrim( stringToUTF8(it->second)) ));
|
items.insert( std::make_pair(MetaData::Type::Title, stringTrim( stringToUTF8(it->second)) ));
|
||||||
else if (boost::iequals(it->first, "track")) {
|
else if (boost::iequals(it->first, "track"))
|
||||||
std::size_t number;
|
{
|
||||||
if (readAs<std::size_t>(it->second, number))
|
// Expecting 'Number/Total'
|
||||||
items.insert( std::make_pair(MetaData::Type::TrackNumber, number ));
|
auto strings = splitString(it->second, "/");
|
||||||
|
|
||||||
|
if (strings.size() > 0)
|
||||||
|
{
|
||||||
|
std::size_t number;
|
||||||
|
if (readAs<std::size_t>(strings[0], number))
|
||||||
|
items.insert( std::make_pair(MetaData::Type::TrackNumber, number ));
|
||||||
|
|
||||||
|
if (strings.size() > 1)
|
||||||
|
{
|
||||||
|
std::size_t totalNumber;
|
||||||
|
if (readAs<std::size_t>(strings[1], totalNumber))
|
||||||
|
items.insert( std::make_pair(MetaData::Type::TotalTrack, totalNumber ));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (boost::iequals(it->first, "disc"))
|
else if (boost::iequals(it->first, "disc"))
|
||||||
{
|
{
|
||||||
std::size_t number;
|
// Expecting 'Number/Total'
|
||||||
if (readAs<std::size_t>(it->second, number))
|
auto strings = splitString(it->second, "/");
|
||||||
items.insert( std::make_pair(MetaData::Type::DiscNumber, number ));
|
|
||||||
|
if (strings.size() > 0)
|
||||||
|
{
|
||||||
|
std::size_t number;
|
||||||
|
if (readAs<std::size_t>(strings[0], number))
|
||||||
|
items.insert( std::make_pair(MetaData::Type::DiscNumber, number ));
|
||||||
|
|
||||||
|
if (strings.size() > 1)
|
||||||
|
{
|
||||||
|
std::size_t totalNumber;
|
||||||
|
if (readAs<std::size_t>(strings[1], totalNumber))
|
||||||
|
items.insert( std::make_pair(MetaData::Type::TotalDisc, totalNumber ));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (boost::iequals(it->first, "date")
|
else if (boost::iequals(it->first, "date")
|
||||||
|| boost::iequals(it->first, "year")
|
|| boost::iequals(it->first, "year")
|
||||||
|
|||||||
@@ -37,6 +37,8 @@ namespace MetaData
|
|||||||
Duration, // boost::posix_time::time_duration
|
Duration, // boost::posix_time::time_duration
|
||||||
TrackNumber, // size_t
|
TrackNumber, // size_t
|
||||||
DiscNumber, // size_t
|
DiscNumber, // size_t
|
||||||
|
TotalTrack, // size_t
|
||||||
|
TotalDisc, // size_t
|
||||||
Date, // boost::posix_time::ptime
|
Date, // boost::posix_time::ptime
|
||||||
OriginalDate, // boost::posix_time::ptime
|
OriginalDate, // boost::posix_time::ptime
|
||||||
HasCover, // bool
|
HasCover, // bool
|
||||||
|
|||||||
@@ -93,7 +93,7 @@ Audio::Audio(Wt::WContainerWidget *parent)
|
|||||||
// Artist
|
// Artist
|
||||||
// Release
|
// Release
|
||||||
// Song
|
// Song
|
||||||
std::vector<std::string> keywords = splitStrings(edit->text().toUTF8(), " ");;
|
auto keywords = splitString(edit->text().toUTF8(), " ");;
|
||||||
|
|
||||||
releaseSearch->search(SearchFilter::ByName(SearchFilter::Field::Release, keywords), SEARCH_NB_ITEMS);
|
releaseSearch->search(SearchFilter::ByName(SearchFilter::Field::Release, keywords), SEARCH_NB_ITEMS);
|
||||||
artistSearch->search(SearchFilter::ByName(SearchFilter::Field::Artist, keywords), SEARCH_NB_ITEMS);
|
artistSearch->search(SearchFilter::ByName(SearchFilter::Field::Artist, keywords), SEARCH_NB_ITEMS);
|
||||||
|
|||||||
@@ -167,7 +167,7 @@ TrackSearch::addResults(size_t nb)
|
|||||||
trackRes->setCondition("if-has-track-num", true);
|
trackRes->setCondition("if-has-track-num", true);
|
||||||
trackRes->bindInt("track-num", track->getTrackNumber());
|
trackRes->bindInt("track-num", track->getTrackNumber());
|
||||||
|
|
||||||
if (track->getDiscNumber() > 0)
|
if (track->getDiscNumber() > 0 && track->getTotalDiscNumber() > 1)
|
||||||
{ trackRes->setCondition("if-has-disc-num", true);
|
{ trackRes->setCondition("if-has-disc-num", true);
|
||||||
trackRes->bindInt("disc-num", track->getDiscNumber());
|
trackRes->bindInt("disc-num", track->getDiscNumber());
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -90,7 +90,7 @@ durationToString(boost::posix_time::time_duration duration, std::string format)
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::vector<std::string>
|
std::vector<std::string>
|
||||||
splitStrings(std::string string, std::string separators)
|
splitString(std::string string, std::string separators)
|
||||||
{
|
{
|
||||||
std::vector<std::string> res;
|
std::vector<std::string> res;
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -36,7 +36,7 @@ std::string
|
|||||||
durationToString(boost::posix_time::time_duration duration, std::string format);
|
durationToString(boost::posix_time::time_duration duration, std::string format);
|
||||||
|
|
||||||
std::vector<std::string>
|
std::vector<std::string>
|
||||||
splitStrings(std::string string, std::string separators);
|
splitString(std::string string, std::string separators);
|
||||||
|
|
||||||
std::string
|
std::string
|
||||||
stringTrim(const std::string& str, const std::string& whitespace = " \t");
|
stringTrim(const std::string& str, const std::string& whitespace = " \t");
|
||||||
|
|||||||
@@ -185,8 +185,6 @@ int main(void)
|
|||||||
assert(res.front().id() == 1);
|
assert(res.front().id() == 1);
|
||||||
assert(res.front()->getName() == "release01");
|
assert(res.front()->getName() == "release01");
|
||||||
|
|
||||||
// Make sure release has an artist
|
|
||||||
assert(res.front()->getArtists().size() == 1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Select genre by name
|
// Select genre by name
|
||||||
|
|||||||
+12
-1
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
TESTS = database-basics database-integrity sql-query database-user
|
TESTS = database-basics database-integrity sql-query database-user
|
||||||
|
|
||||||
check_PROGRAMS = database-basics database-integrity sql-query database-user test-wt
|
check_PROGRAMS = database-basics database-integrity sql-query database-user test-wt test-avmetadata
|
||||||
|
|
||||||
database_basics_SOURCES = \
|
database_basics_SOURCES = \
|
||||||
$(srcdir)/CheckDbBasics.cpp \
|
$(srcdir)/CheckDbBasics.cpp \
|
||||||
@@ -63,3 +63,14 @@ test_wt_SOURCES = TestWt.cpp
|
|||||||
|
|
||||||
test_wt_CXXFLAGS=-std=c++11 -Wall -Wextra
|
test_wt_CXXFLAGS=-std=c++11 -Wall -Wextra
|
||||||
|
|
||||||
|
|
||||||
|
test_avmetadata_SOURCES = TestAvMetadata.cpp \
|
||||||
|
$(top_srcdir)/src/logger/Logger.cpp \
|
||||||
|
$(top_srcdir)/src/utils/Utils.cpp \
|
||||||
|
$(top_srcdir)/src/metadata/AvFormat.cpp \
|
||||||
|
$(top_srcdir)/src/av/AvInfo.cpp \
|
||||||
|
$(top_srcdir)/src/av/AvTranscoder.cpp
|
||||||
|
|
||||||
|
test_avmetadata_CXXFLAGS=-std=c++11 -Wall -Wextra -I$(top_srcdir)/src
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,63 @@
|
|||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#include <stdexcept>
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
#include "av/AvInfo.hpp"
|
||||||
|
#include "metadata/AvFormat.hpp"
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
if (argc != 2)
|
||||||
|
{
|
||||||
|
std::cerr << "Usage: <file>" << std::endl;
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Av::AvInit();
|
||||||
|
|
||||||
|
MetaData::AvFormat parser;
|
||||||
|
MetaData::Items items;
|
||||||
|
|
||||||
|
if (!parser.parse(argv[1], items))
|
||||||
|
{
|
||||||
|
std::cout << "Parsing failed" << std::endl;
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (auto item : items)
|
||||||
|
{
|
||||||
|
switch (item.first)
|
||||||
|
{
|
||||||
|
case MetaData::Type::TrackNumber:
|
||||||
|
std::cout << "Track: " << boost::any_cast<std::size_t>(item.second) << std::endl;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MetaData::Type::TotalTrack:
|
||||||
|
std::cout << "TotalTrack: " << boost::any_cast<std::size_t>(item.second) << std::endl;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MetaData::Type::DiscNumber:
|
||||||
|
std::cout << "Disc: " << boost::any_cast<std::size_t>(item.second) << std::endl;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MetaData::Type::TotalDisc:
|
||||||
|
std::cout << "TotalDisc: " << boost::any_cast<std::size_t>(item.second) << std::endl;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return EXIT_SUCCESS;
|
||||||
|
}
|
||||||
|
catch (std::exception& e)
|
||||||
|
{
|
||||||
|
std::cerr << "Caught exception: " << e.what();
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
Reference in New Issue
Block a user