diff --git a/src/enclosure.cpp b/src/enclosure.cpp index f84a3713..1d2ad558 100644 --- a/src/enclosure.cpp +++ b/src/enclosure.cpp @@ -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; + } +} diff --git a/src/enclosure.h b/src/enclosure.h index db7b0969..9a4378f8 100644 --- a/src/enclosure.h +++ b/src/enclosure.h @@ -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; };