#include "player.h" // Public Player::Player(QObject *parent) : QObject(parent), player(this), output(this), manager(this) { QObject::connect(&this->player, &QMediaPlayer::mediaStatusChanged, this, [this] () { emit this->hasVideoChanged(); emit this->loadingChanged(); }); QObject::connect(&this->player, &QMediaPlayer::playbackStateChanged, this, [this] () { emit this->playingChanged(); }); QObject::connect(&this->output, &QAudioOutput::volumeChanged, this, [this] () { emit this->volumeChanged(); }); this->output.setVolume(0.2); this->player.setAudioOutput(&this->output); qDebug("Player::Player(): Constructed"); } Player::~Player() { qDebug("Player::~Player(): Destructed"); } bool Player::hasVideo() const { return this->player.isAvailable(); } bool Player::loading() const { return this->player.mediaStatus() == QMediaPlayer::LoadingMedia || this->player.mediaStatus() == QMediaPlayer::BufferingMedia; } bool Player::failed() const { return this->m_failed; } bool Player::playing() const { return this->player.playbackState() == QMediaPlayer::PlayingState; } float Player::volume() const { return this->output.volume(); } void Player::setVolume(float newVolume) { this->output.setVolume(newVolume); } // Public slots void Player::loadVideo(QString id) { if (this->hasVideo()) { this->unloadVideo(); } const QNetworkReply* reply = this->manager.get(QNetworkRequest(QUrl("https://youvideo.nonamesoft.xyz/youvideo/video/" + id))); if (reply->error() != QNetworkReply::NoError) { qDebug() << "Player::loadVideo(): Video " << id << " doesn't exist!\n"; delete reply; return; } qDebug() << "Player::fetchMetadata(): Yippie! Got video " << id << "\n"; this->player.setSource(QUrl("https://youvideo.nonamesoft.xyz/youvideo/api/" + id)); // Signals will be sent by shit sent from player this->m_failed = false; emit this->failedChanged(); delete reply; } void Player::unloadVideo() { this->player.setSource(QUrl("")); this->player.stop(); this->m_failed = false; emit this->hasVideoChanged(); emit this->failedChanged(); emit this->loadingChanged(); emit this->playingChanged(); } void Player::play() { if (!this->hasVideo() || !this->loading()) { return; } this->player.play(); } void Player::pause() { if (!this->hasVideo() || !this->loading()) { return; } this->player.pause(); } void Player::stop() { if (!this->hasVideo() || !this->loading()) { return; } this->player.stop(); this->unloadVideo(); }