Made transcoding optional

This commit is contained in:
emeric
2019-05-20 12:55:17 +02:00
parent 49dc6c84f1
commit 234d9f80ef
22 changed files with 412 additions and 286 deletions
+1 -1
View File
@@ -46,7 +46,7 @@
namespace Database {
#define LMS_DATABASE_VERSION 1
#define LMS_DATABASE_VERSION 2
namespace {
Wt::Auth::AuthService authService;
+2 -2
View File
@@ -211,9 +211,9 @@ Track::getByFilter(Wt::Dbo::Session& session,
.limit(size ? static_cast<int>(*size) + 1 : -1)
.offset(offset ? static_cast<int>(*offset) : -1);
auto res = std::vector<pointer>(collection.begin(), collection.end());
std::vector<pointer> res(collection.begin(), collection.end());
if (size && res.size() == static_cast<std::size_t>(*size) + 1)
if (size && (res.size() == static_cast<std::size_t>(*size) + 1))
{
moreResults = true;
res.pop_back();
+17 -18
View File
@@ -23,9 +23,8 @@
namespace Database {
// must be ordered
const std::vector<std::size_t>
User::audioBitrates =
const std::set<Bitrate>
User::audioTranscodeAllowedBitrates =
{
64000,
96000,
@@ -35,7 +34,7 @@ User::audioBitrates =
};
User::User()
: _maxAudioBitrate(audioBitrates.back())
: _maxAudioTranscodeBitrate{static_cast<int>(*audioTranscodeAllowedBitrates.rbegin())}
{
}
@@ -67,29 +66,29 @@ User::getById(Wt::Dbo::Session& session, IdType id)
}
void
User::setAudioBitrate(std::size_t bitrate)
User::setAudioTranscodeBitrate(Bitrate bitrate)
{
_audioBitrate = std::min(bitrate, static_cast<std::size_t>(_maxAudioBitrate));
_audioTranscodeBitrate = std::min(bitrate, static_cast<Bitrate>(_maxAudioTranscodeBitrate));
}
void
User::setMaxAudioBitrate(std::size_t bitrate)
User::setMaxAudioTranscodeBitrate(Bitrate bitrate)
{
_maxAudioBitrate = std::min(bitrate, audioBitrates.back());
if (_audioBitrate > _maxAudioBitrate)
_audioBitrate = _maxAudioBitrate;
_maxAudioTranscodeBitrate = std::min(bitrate, *audioTranscodeAllowedBitrates.rbegin());
if (_audioTranscodeBitrate > _maxAudioTranscodeBitrate)
_audioTranscodeBitrate = _maxAudioTranscodeBitrate;
}
Bitrate
User::getAudioTranscodeBitrate(void) const
{
return _audioTranscodeBitrate;
}
std::size_t
User::getAudioBitrate(void) const
User::getMaxAudioTranscodeBitrate(void) const
{
return _audioBitrate;
}
std::size_t
User::getMaxAudioBitrate(void) const
{
return _maxAudioBitrate;
return _maxAudioTranscodeBitrate;
}
Wt::Dbo::ptr<TrackList>
+37 -29
View File
@@ -34,15 +34,17 @@ using AuthInfo = Wt::Auth::Dbo::AuthInfo<User>;
class TrackList;
// User selectable audio formats
enum class AudioEncoding
// Do not change values
enum class AudioFormat
{
AUTO = 0,
MP3 = 1,
OGG_OPUS = 2,
OGG_VORBIS = 3,
WEBM_VORBIS = 4,
};
using Bitrate = std::size_t;
class User : public Wt::Dbo::Dbo<User>
{
public:
@@ -59,7 +61,7 @@ class User : public Wt::Dbo::Dbo<User>
};
// list of audio parameters
static const std::vector<std::size_t> audioBitrates;
static const std::set<Bitrate> audioTranscodeAllowedBitrates;
User();
@@ -72,23 +74,25 @@ class User : public Wt::Dbo::Dbo<User>
static pointer getDemo(Wt::Dbo::Session& session);
// write
void setType(Type type) { _type = type; }
void setAudioBitrate(std::size_t bitrate);
void setAudioEncoding(AudioEncoding encoding) { _audioEncoding = encoding; }
void setMaxAudioBitrate(std::size_t bitrate);
void setCurPlayingTrackPos(std::size_t pos) { _curPlayingTrackPos = pos; }
void setRadio(bool val) { _radio = val; }
void setRepeatAll(bool val) { _repeatAll = val; }
void setType(Type type) { _type = type; }
void setAudioTranscodeEnable(bool value) { _audioTranscodeEnable = value; }
void setAudioTranscodeFormat(AudioFormat format) { _audioTranscodeFormat = format; }
void setAudioTranscodeBitrate(Bitrate bitrate);
void setMaxAudioTranscodeBitrate(Bitrate bitrate);
void setCurPlayingTrackPos(std::size_t pos) { _curPlayingTrackPos = pos; }
void setRadio(bool val) { _radio = val; }
void setRepeatAll(bool val) { _repeatAll = val; }
// read
bool isAdmin() const { return _type == Type::ADMIN; }
bool isDemo() const { return _type == Type::DEMO; }
std::size_t getAudioBitrate() const;
AudioEncoding getAudioEncoding() const { return _audioEncoding; }
std::size_t getMaxAudioBitrate() const;
std::size_t getCurPlayingTrackPos() const { return _curPlayingTrackPos; }
bool isRepeatAllSet() const { return _repeatAll; }
bool isRadioSet() const { return _radio; }
bool isAdmin() const { return _type == Type::ADMIN; }
bool isDemo() const { return _type == Type::DEMO; }
bool getAudioTranscodeEnable() const { return _audioTranscodeEnable; }
Bitrate getAudioTranscodeBitrate() const;
AudioFormat getAudioTranscodeFormat() const { return _audioTranscodeFormat; }
Bitrate getMaxAudioTranscodeBitrate() const;
std::size_t getCurPlayingTrackPos() const { return _curPlayingTrackPos; }
bool isRepeatAllSet() const { return _repeatAll; }
bool isRadioSet() const { return _radio; }
Wt::Dbo::ptr<TrackList> getQueuedTrackList() const;
Wt::Dbo::ptr<TrackList> getPlayedTrackList() const;
@@ -96,10 +100,11 @@ class User : public Wt::Dbo::Dbo<User>
template<class Action>
void persist(Action& a)
{
Wt::Dbo::field(a, _maxAudioBitrate, "max_audio_bitrate");
Wt::Dbo::field(a, _type, "type");
Wt::Dbo::field(a, _audioBitrate, "audio_bitrate");
Wt::Dbo::field(a, _audioEncoding, "audio_encoding");
Wt::Dbo::field(a, _maxAudioTranscodeBitrate, "max_audio_bitrate");
Wt::Dbo::field(a, _audioTranscodeEnable, "audio_transcode_enable");
Wt::Dbo::field(a, _audioTranscodeBitrate, "audio_transcode_bitrate");
Wt::Dbo::field(a, _audioTranscodeFormat, "audio_transcode_format");
// User's dynamic data
Wt::Dbo::field(a, _curPlayingTrackPos, "cur_playing_track_pos");
Wt::Dbo::field(a, _repeatAll, "repeat_all");
@@ -109,20 +114,23 @@ class User : public Wt::Dbo::Dbo<User>
private:
static const std::size_t defaultAudioBitrate = 128000;
static const bool defaultAudioTranscodeEnable {true};
static const AudioFormat defaultAudioTranscodeFormat {AudioFormat::OGG_OPUS};
static const Bitrate defaultAudioTranscodeBitrate {128000};
// Admin defined settings
int _maxAudioBitrate;
Type _type = Type::REGULAR;
int _maxAudioTranscodeBitrate;
Type _type {Type::REGULAR};
// User defined settings
int _audioBitrate = defaultAudioBitrate;
AudioEncoding _audioEncoding = AudioEncoding::AUTO;
bool _audioTranscodeEnable {defaultAudioTranscodeEnable};
AudioFormat _audioTranscodeFormat {defaultAudioTranscodeFormat};
int _audioTranscodeBitrate {defaultAudioTranscodeBitrate};
// User's dynamic data
int _curPlayingTrackPos = 0; // Current track position in queue
bool _repeatAll = false;
bool _radio = false;
int _curPlayingTrackPos {}; // Current track position in queue
bool _repeatAll {};
bool _radio {};
Wt::Dbo::collection< Wt::Dbo::ptr<TrackList> > _tracklists;