Save last playing track in database instead of config file
This commit is contained in:
parent
ed2d1ee2c8
commit
4fa45b0075
@ -58,8 +58,8 @@ AudioManager::AudioManager(QObject *parent) : QObject(parent), d(std::make_uniqu
|
||||
// we'll send custom seekableChanged signal to work around QMediaPlayer glitches
|
||||
|
||||
// Check if an entry was playing when the program was shut down and restore it
|
||||
if (SettingsManager::self()->lastPlayingEntry() != QStringLiteral("none"))
|
||||
setEntry(DataManager::instance().getEntry(SettingsManager::self()->lastPlayingEntry()));
|
||||
if (DataManager::instance().lastPlayingEntry() != QStringLiteral("none"))
|
||||
setEntry(DataManager::instance().getEntry(DataManager::instance().lastPlayingEntry()));
|
||||
}
|
||||
|
||||
AudioManager::~AudioManager()
|
||||
@ -182,7 +182,7 @@ void AudioManager::setEntry(Entry* entry)
|
||||
Q_EMIT entryChanged(entry);
|
||||
d->m_player.setMedia(QUrl(QStringLiteral("file://")+d->m_entry->enclosure()->path()));
|
||||
// save the current playing track in the settingsfile for restoring on startup
|
||||
SettingsManager::self()->setLastPlayingEntry(d->m_entry->id());
|
||||
DataManager::instance().setLastPlayingEntry(d->m_entry->id());
|
||||
qDebug() << "Changed source to" << d->m_entry->title();
|
||||
|
||||
qint64 startingPosition = d->m_entry->enclosure()->playPosition();
|
||||
@ -225,7 +225,7 @@ void AudioManager::setEntry(Entry* entry)
|
||||
d->m_isSeekable = true;
|
||||
Q_EMIT seekableChanged(true);
|
||||
} else {
|
||||
SettingsManager::self()->setLastPlayingEntry(QStringLiteral("none"));
|
||||
DataManager::instance().setLastPlayingEntry(QStringLiteral("none"));
|
||||
d->m_entry = nullptr;
|
||||
Q_EMIT entryChanged(nullptr);
|
||||
d->m_readyToPlay = false;
|
||||
|
@ -51,7 +51,7 @@ bool Database::migrateTo1()
|
||||
TRUE_OR_RETURN(execute(QStringLiteral("CREATE TABLE IF NOT EXISTS Entries (feed TEXT, id TEXT UNIQUE, title TEXT, content TEXT, created INTEGER, updated INTEGER, link TEXT, read bool, new bool, hasEnclosure BOOL, image TEXT);")));
|
||||
TRUE_OR_RETURN(execute(QStringLiteral("CREATE TABLE IF NOT EXISTS Authors (feed TEXT, id TEXT, name TEXT, uri TEXT, email TEXT);")));
|
||||
TRUE_OR_RETURN(execute(QStringLiteral("CREATE TABLE IF NOT EXISTS Enclosures (feed TEXT, id TEXT, duration INTEGER, size INTEGER, title TEXT, type TEXT, url TEXT, playposition INTEGER);"))); //, filename TEXT);")));
|
||||
TRUE_OR_RETURN(execute(QStringLiteral("CREATE TABLE IF NOT EXISTS Queue (listnr INTEGER, feed TEXT, id TEXT);")));
|
||||
TRUE_OR_RETURN(execute(QStringLiteral("CREATE TABLE IF NOT EXISTS Queue (listnr INTEGER, feed TEXT, id TEXT, playing BOOL);")));
|
||||
TRUE_OR_RETURN(execute(QStringLiteral("PRAGMA user_version = 1;")));
|
||||
return true;
|
||||
}
|
||||
|
@ -322,10 +322,11 @@ void DataManager::addToQueue(const QString &feedurl, const QString &id)
|
||||
|
||||
// Add to Queue database
|
||||
QSqlQuery query;
|
||||
query.prepare(QStringLiteral("INSERT INTO Queue VALUES (:index, :feedurl, :id);"));
|
||||
query.prepare(QStringLiteral("INSERT INTO Queue VALUES (:index, :feedurl, :id, :playing);"));
|
||||
query.bindValue(QStringLiteral(":index"), index);
|
||||
query.bindValue(QStringLiteral(":feedurl"), feedurl);
|
||||
query.bindValue(QStringLiteral(":id"), id);
|
||||
query.bindValue(QStringLiteral(":playing"), false);
|
||||
Database::instance().execute(query);
|
||||
|
||||
// Make sure that the QueueModel is aware of the changes
|
||||
@ -378,6 +379,31 @@ void DataManager::removeQueueItem(Entry* entry)
|
||||
removeQueueItem(m_queuemap.indexOf(entry->id()));
|
||||
}
|
||||
|
||||
QString DataManager::lastPlayingEntry()
|
||||
{
|
||||
QSqlQuery query;
|
||||
query.prepare(QStringLiteral("SELECT id FROM Queue WHERE playing=:playing;"));
|
||||
query.bindValue(QStringLiteral(":playing"), true);
|
||||
Database::instance().execute(query);
|
||||
if (!query.next()) return QStringLiteral("none");
|
||||
return query.value(QStringLiteral("id")).toString();
|
||||
}
|
||||
|
||||
void DataManager::setLastPlayingEntry(const QString& id)
|
||||
{
|
||||
QSqlQuery query;
|
||||
// First set playing to false for all Queue items
|
||||
query.prepare(QStringLiteral("UPDATE Queue SET playing=:playing;"));
|
||||
query.bindValue(QStringLiteral(":playing"), false);
|
||||
Database::instance().execute(query);
|
||||
// Now set the correct track to playing=true
|
||||
query.prepare(QStringLiteral("UPDATE Queue SET playing=:playing WHERE id=:id;"));
|
||||
query.bindValue(QStringLiteral(":playing"), true);
|
||||
query.bindValue(QStringLiteral(":id"), id);
|
||||
Database::instance().execute(query);
|
||||
|
||||
}
|
||||
|
||||
void DataManager::importFeeds(const QString &path)
|
||||
{
|
||||
QUrl url(path);
|
||||
|
@ -50,6 +50,9 @@ public:
|
||||
Q_INVOKABLE void removeQueueItem(const QString id);
|
||||
Q_INVOKABLE void removeQueueItem(Entry* entry);
|
||||
|
||||
Q_INVOKABLE QString lastPlayingEntry();
|
||||
Q_INVOKABLE void setLastPlayingEntry(const QString& id);
|
||||
|
||||
Q_INVOKABLE void importFeeds(const QString &path);
|
||||
Q_INVOKABLE void exportFeeds(const QString &path);
|
||||
|
||||
|
@ -43,10 +43,6 @@
|
||||
<label>The top-level page that was open at shutdown</label>
|
||||
<default>FeedListPage</default>
|
||||
</entry>
|
||||
<entry name="lastPlayingEntry" type="String">
|
||||
<label>The entry that was being played at shutdown</label>
|
||||
<default>none</default>
|
||||
</entry>
|
||||
<entry name="showRemainingTime" type="Bool">
|
||||
<label>Whether the player shows remaining track time instead of total track time</label>
|
||||
<default>false</default>
|
||||
|
Loading…
x
Reference in New Issue
Block a user