[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())
|
||||
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]) );
|
||||
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
@@ -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
@@ -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");
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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