Add playposition tracking in enclosure

This commit is contained in:
Bart De Vries 2021-04-10 22:28:36 +02:00
parent e174269332
commit ee13a29d10
2 changed files with 31 additions and 3 deletions

View File

@ -33,7 +33,8 @@ Enclosure::Enclosure(Entry *entry)
m_title = query.value(QStringLiteral("title")).toString();
m_type = query.value(QStringLiteral("type")).toString();
m_url = query.value(QStringLiteral("url")).toString();
m_playposition = query.value(QStringLiteral("playposition")).toInt();
m_playposition = query.value(QStringLiteral("playposition")).toLongLong();
m_playposition_dbsave = m_playposition;
QFile file(path());
if(file.size() == m_size) {
@ -127,3 +128,25 @@ QString Enclosure::path() const
{
return Fetcher::instance().enclosurePath(m_url);
}
qint64 Enclosure::playPosition() const{
return m_playposition;
}
void Enclosure::setPlayPosition(const qint64 &position)
{
m_playposition = position;
qDebug() << "save playPosition" << m_entry->title();
// let's only save the play position to the database every 15 seconds
if (abs(m_playposition - m_playposition_dbsave) > 15000) {
qDebug() << "save playPosition to database" << m_entry->title();
QSqlQuery query;
query.prepare(QStringLiteral("UPDATE Enclosures SET playposition=:playposition WHERE id=:id AND feed=:feed"));
query.bindValue(QStringLiteral(":id"), m_entry->id());
query.bindValue(QStringLiteral(":feed"), m_entry->feed()->url());
query.bindValue(QStringLiteral(":playposition"), m_playposition);
Database::instance().execute(query);
m_playposition_dbsave = m_playposition;
}
}

View File

@ -25,7 +25,7 @@ class Enclosure : public QObject
Q_PROPERTY(Status status MEMBER m_status NOTIFY statusChanged)
Q_PROPERTY(double downloadProgress MEMBER m_downloadProgress NOTIFY downloadProgressChanged)
Q_PROPERTY(QString path READ path CONSTANT)
Q_PROPERTY(QString playposition MEMBER m_playposition CONSTANT)
Q_PROPERTY(qint64 playPosition READ playPosition WRITE setPlayPosition NOTIFY playPositionChanged)
public:
Enclosure(Entry *entry);
@ -42,11 +42,15 @@ public:
Q_INVOKABLE void deleteFile();
QString path() const;
qint64 playPosition() const;
void setPlayPosition(const qint64 &position);
Q_SIGNALS:
void statusChanged();
void downloadProgressChanged();
void cancelDownload();
void playPositionChanged();
private:
@ -58,7 +62,8 @@ private:
QString m_title;
QString m_type;
QString m_url;
int m_playposition;
qint64 m_playposition;
qint64 m_playposition_dbsave;
double m_downloadProgress = 0;
Status m_status;
};