[UI/MOBILE] Display disc number only if necessary

This commit is contained in:
emeric
2015-11-22 22:45:13 +01:00
parent df6bfec486
commit 3fdc25572a
12 changed files with 132 additions and 15 deletions
+6
View File
@@ -526,9 +526,15 @@ Updater::processAudioFile( const boost::filesystem::path& file, Stats& stats)
if (items.find(MetaData::Type::TrackNumber) != items.end())
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())
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())
track.modify()->setDate( boost::any_cast<boost::posix_time::ptime>(items[MetaData::Type::Date]) );
+2
View File
@@ -30,7 +30,9 @@ namespace Database {
Track::Track(const boost::filesystem::path& p)
:
_trackNumber(0),
_totalTrackNumber(0),
_discNumber(0),
_totalDiscNumber(0),
_filePath( p.string() ),
_coverType(CoverType::None)
{
+9 -1
View File
@@ -136,7 +136,9 @@ class Track
// Accessors
void setTrackNumber(int num) { _trackNumber = num; }
void setTotalTrackNumber(int num) { _totalTrackNumber = 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 setDuration(boost::posix_time::time_duration duration) { _duration = duration; }
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 setGenres(const std::string& genreList) { _genreList = genreList; }
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 setRelease(Wt::Dbo::ptr<Release> release) { _release = release; }
void setGenres(std::vector<Genre::pointer> genres);
int getTrackNumber(void) const { return _trackNumber; }
int getTotalTrackNumber(void) const { return _totalTrackNumber; }
int getDiscNumber(void) const { return _discNumber; }
int getTotalDiscNumber(void) const { return _totalDiscNumber; }
std::string getName(void) const { return _name; }
boost::filesystem::path getPath(void) const { return _filePath; }
boost::posix_time::time_duration getDuration(void) const { return _duration; }
@@ -172,7 +176,9 @@ class Track
void persist(Action& a)
{
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, _totalDiscNumber, "total_disc_number");
Wt::Dbo::field(a, _name, "name");
Wt::Dbo::field(a, _duration, "duration");
Wt::Dbo::field(a, _date, "date");
@@ -197,7 +203,9 @@ class Track
static const std::size_t _maxNameLength = 128;
int _trackNumber;
int _totalTrackNumber;
int _discNumber;
int _totalDiscNumber;
std::string _name;
std::string _artistName;
std::string _releaseName;
+34 -7
View File
@@ -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)) ));
else if (boost::iequals(it->first, "title"))
items.insert( std::make_pair(MetaData::Type::Title, stringTrim( stringToUTF8(it->second)) ));
else if (boost::iequals(it->first, "track")) {
std::size_t number;
if (readAs<std::size_t>(it->second, number))
items.insert( std::make_pair(MetaData::Type::TrackNumber, number ));
else if (boost::iequals(it->first, "track"))
{
// Expecting 'Number/Total'
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"))
{
std::size_t number;
if (readAs<std::size_t>(it->second, number))
items.insert( std::make_pair(MetaData::Type::DiscNumber, number ));
// Expecting 'Number/Total'
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::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")
|| boost::iequals(it->first, "year")
+2
View File
@@ -37,6 +37,8 @@ namespace MetaData
Duration, // boost::posix_time::time_duration
TrackNumber, // size_t
DiscNumber, // size_t
TotalTrack, // size_t
TotalDisc, // size_t
Date, // boost::posix_time::ptime
OriginalDate, // boost::posix_time::ptime
HasCover, // bool
+1 -1
View File
@@ -93,7 +93,7 @@ Audio::Audio(Wt::WContainerWidget *parent)
// Artist
// Release
// 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);
artistSearch->search(SearchFilter::ByName(SearchFilter::Field::Artist, keywords), SEARCH_NB_ITEMS);
+1 -1
View File
@@ -167,7 +167,7 @@ TrackSearch::addResults(size_t nb)
trackRes->setCondition("if-has-track-num", true);
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->bindInt("disc-num", track->getDiscNumber());
}
+1 -1
View File
@@ -90,7 +90,7 @@ durationToString(boost::posix_time::time_duration duration, std::string format)
}
std::vector<std::string>
splitStrings(std::string string, std::string separators)
splitString(std::string string, std::string separators)
{
std::vector<std::string> res;
+1 -1
View File
@@ -36,7 +36,7 @@ std::string
durationToString(boost::posix_time::time_duration duration, std::string format);
std::vector<std::string>
splitStrings(std::string string, std::string separators);
splitString(std::string string, std::string separators);
std::string
stringTrim(const std::string& str, const std::string& whitespace = " \t");
-2
View File
@@ -185,8 +185,6 @@ int main(void)
assert(res.front().id() == 1);
assert(res.front()->getName() == "release01");
// Make sure release has an artist
assert(res.front()->getArtists().size() == 1);
}
// Select genre by name
+12 -1
View File
@@ -1,7 +1,7 @@
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 = \
$(srcdir)/CheckDbBasics.cpp \
@@ -63,3 +63,14 @@ test_wt_SOURCES = TestWt.cpp
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
+63
View File
@@ -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;
}
}