diff --git a/src/audiomanager.cpp b/src/audiomanager.cpp index e7b878d4..49977910 100644 --- a/src/audiomanager.cpp +++ b/src/audiomanager.cpp @@ -224,6 +224,12 @@ void AudioManager::setEntry(Entry* entry) Q_EMIT canGoNextChanged(); d->m_isSeekable = true; Q_EMIT seekableChanged(true); + qDebug() << "Duration" << d->m_player.duration()/1000 << d->m_entry->enclosure()->duration(); + // Finally, check if duration mentioned in enclosure corresponds to real duration + if ((d->m_player.duration()/1000) != d->m_entry->enclosure()->duration()) { + d->m_entry->enclosure()->setDuration(d->m_player.duration()/1000); + qDebug() << "Correcting duration of" << d->m_entry->id() << "to" << d->m_player.duration()/1000; + } } else { DataManager::instance().setLastPlayingEntry(QStringLiteral("none")); d->m_entry = nullptr; diff --git a/src/enclosure.cpp b/src/enclosure.cpp index 9a0b4595..d3869de5 100644 --- a/src/enclosure.cpp +++ b/src/enclosure.cpp @@ -176,10 +176,15 @@ Enclosure::Status Enclosure::status() const { return m_status; } + qint64 Enclosure::playPosition() const{ return m_playposition; } +qint64 Enclosure::duration() const { + return m_duration; +} + void Enclosure::setPlayPosition(const qint64 &position) { m_playposition = position; @@ -198,3 +203,18 @@ void Enclosure::setPlayPosition(const qint64 &position) m_playposition_dbsave = m_playposition; } } + +void Enclosure::setDuration(const qint64 &duration) +{ + m_duration = duration; + Q_EMIT durationChanged(); + + // also save to database + qDebug() << "updating entry duration" << duration << m_entry->title(); + QSqlQuery query; + query.prepare(QStringLiteral("UPDATE Enclosures SET duration=:duration WHERE id=:id AND feed=:feed")); + query.bindValue(QStringLiteral(":id"), m_entry->id()); + query.bindValue(QStringLiteral(":feed"), m_entry->feed()->url()); + query.bindValue(QStringLiteral(":duration"), m_duration); + Database::instance().execute(query); +} diff --git a/src/enclosure.h b/src/enclosure.h index 1a78002d..a8c68c3a 100644 --- a/src/enclosure.h +++ b/src/enclosure.h @@ -27,7 +27,7 @@ class Enclosure : public QObject Q_PROPERTY(double downloadProgress MEMBER m_downloadProgress NOTIFY downloadProgressChanged) Q_PROPERTY(QString path READ path CONSTANT) Q_PROPERTY(qint64 playPosition READ playPosition WRITE setPlayPosition NOTIFY playPositionChanged) - Q_PROPERTY(qint64 duration MEMBER m_duration CONSTANT) + Q_PROPERTY(qint64 duration READ duration WRITE setDuration NOTIFY durationChanged) public: Enclosure(Entry *entry); @@ -46,13 +46,17 @@ public: QString path() const; Status status() const; qint64 playPosition() const; + qint64 duration() const; + void setPlayPosition(const qint64 &position); + void setDuration(const qint64 &duration); Q_SIGNALS: void statusChanged(); void downloadProgressChanged(); void cancelDownload(); void playPositionChanged(); + void durationChanged(); private: