From b2ce9ff01665e359062ab800cf6ad56ef1bfb400 Mon Sep 17 00:00:00 2001
From: Craig Drummond
Date: Mon, 1 Jun 2015 21:53:55 +0100
Subject: [PATCH] Various devel changes - Use time_t to store MPD DB version,
as that is what MPD sends anyway - Initial changes for an (experimental)
webapp
---
devices/fsdevice.cpp | 6 +--
gui/albumspage.cpp | 2 +-
gui/librarypage.cpp | 2 +-
gui/mainwindow.cpp | 10 ++--
models/dirviewmodel.cpp | 31 ++++++------
models/dirviewmodel.h | 7 ++-
models/musiclibraryitemroot.cpp | 16 +++---
models/musiclibraryitemroot.h | 10 ++--
models/musiclibrarymodel.cpp | 22 ++++-----
models/musiclibrarymodel.h | 9 ++--
models/playlistsmodel.cpp | 13 ++---
models/playqueuemodel.cpp | 2 +-
models/streamsmodel.cpp | 41 +++------------
models/streamsmodel.h | 7 ++-
mpd-interface/cuefile.cpp | 4 +-
mpd-interface/mpdconnection.cpp | 85 +++++++++++++++++++++++---------
mpd-interface/mpdconnection.h | 25 +++++++---
mpd-interface/mpdparseutils.cpp | 37 +++++++++++++-
mpd-interface/mpdparseutils.h | 13 +++--
mpd-interface/mpdstats.h | 5 +-
mpd-interface/song.cpp | 6 +--
mpd-interface/song.h | 2 +-
network/networkaccessmanager.cpp | 5 +-
online/onlineservice.cpp | 4 +-
24 files changed, 212 insertions(+), 152 deletions(-)
diff --git a/devices/fsdevice.cpp b/devices/fsdevice.cpp
index 6035726b1..9ab7aeca0 100644
--- a/devices/fsdevice.cpp
+++ b/devices/fsdevice.cpp
@@ -82,7 +82,7 @@ void MusicScanner::scan(const QString &folder, const QString &cacheFile, bool re
MusicLibraryItemRoot *lib=new MusicLibraryItemRoot;
MusicLibraryModel::convertCache(cacheFile);
readProgress(0.0);
- if (lib->fromXML(cacheFile, QDateTime(), 0, folder)) {
+ if (lib->fromXML(cacheFile, 0, 0, folder)) {
lib->applyGrouping();
if (!stopRequested) {
emit libraryUpdated(lib);
@@ -109,7 +109,7 @@ void MusicScanner::scan(const QString &folder, const QString &cacheFile, bool re
library->applyGrouping();
if (!cacheFile.isEmpty()) {
writeProgress(0.0);
- library->toXML(cacheFile, QDateTime(), false, this);
+ library->toXML(cacheFile, 0, false, this);
}
emit libraryUpdated(library);
} else {
@@ -120,7 +120,7 @@ void MusicScanner::scan(const QString &folder, const QString &cacheFile, bool re
void MusicScanner::saveCache(const QString &cache, MusicLibraryItemRoot *lib)
{
writeProgress(0.0);
- lib->toXML(cache, QDateTime(), false, this);
+ lib->toXML(cache, 0, false, this);
emit cacheSaved();
}
diff --git a/gui/albumspage.cpp b/gui/albumspage.cpp
index 9b6e35e4d..9f0284896 100644
--- a/gui/albumspage.cpp
+++ b/gui/albumspage.cpp
@@ -71,7 +71,7 @@ AlbumsPage::AlbumsPage(QWidget *p)
connect(view, SIGNAL(itemsSelected(bool)), this, SLOT(controlActions()));
connect(view, SIGNAL(doubleClicked(const QModelIndex &)), this, SLOT(itemDoubleClicked(const QModelIndex &)));
connect(view, SIGNAL(rootIndexSet(QModelIndex)), this, SLOT(updateGenres(QModelIndex)));
- connect(MPDConnection::self(), SIGNAL(updatingLibrary()), view, SLOT(updating()));
+ connect(MPDConnection::self(), SIGNAL(updatingLibrary(time_t)), view, SLOT(updating()));
connect(MPDConnection::self(), SIGNAL(updatedLibrary()), view, SLOT(updated()));
connect(MPDConnection::self(), SIGNAL(updatingDatabase()), view, SLOT(updating()));
connect(MPDConnection::self(), SIGNAL(updatedDatabase()), view, SLOT(updated()));
diff --git a/gui/librarypage.cpp b/gui/librarypage.cpp
index dfc4e6351..67d33ee27 100644
--- a/gui/librarypage.cpp
+++ b/gui/librarypage.cpp
@@ -65,7 +65,7 @@ LibraryPage::LibraryPage(QWidget *p)
connect(this, SIGNAL(add(const QStringList &, bool, quint8)), MPDConnection::self(), SLOT(add(const QStringList &, bool, quint8)));
connect(this, SIGNAL(addSongsToPlaylist(const QString &, const QStringList &)), MPDConnection::self(), SLOT(addToPlaylist(const QString &, const QStringList &)));
connect(genreCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(searchItems()));
- connect(MPDConnection::self(), SIGNAL(updatingLibrary()), view, SLOT(updating()));
+ connect(MPDConnection::self(), SIGNAL(updatingLibrary(time_t)), view, SLOT(updating()));
connect(MPDConnection::self(), SIGNAL(updatedLibrary()), view, SLOT(updated()));
connect(MPDConnection::self(), SIGNAL(updatingDatabase()), view, SLOT(updating()));
connect(MPDConnection::self(), SIGNAL(updatedDatabase()), view, SLOT(updated()));
diff --git a/gui/mainwindow.cpp b/gui/mainwindow.cpp
index 2ea5165a4..51e79c77a 100644
--- a/gui/mainwindow.cpp
+++ b/gui/mainwindow.cpp
@@ -1617,6 +1617,8 @@ void MainWindow::showServerInfo()
qSort(handlers);
qSort(tags);
long version=MPDConnection::self()->version();
+ QDateTime dbUpdate;
+ dbUpdate.setTime_t(MPDStats::self()->dbUpdate());
MessageBox::information(this,
#ifdef Q_OS_MAC
i18n("Server Information")+QLatin1String("
")+
@@ -1640,7 +1642,7 @@ void MainWindow::showServerInfo()
"| Duration: | %4 |
"
"| Updated: | %5 |
",
MPDStats::self()->artists(), MPDStats::self()->albums(), MPDStats::self()->songs(),
- Utils::formatDuration(MPDStats::self()->dbPlaytime()), MPDStats::self()->dbUpdate().toString(Qt::SystemLocaleShortDate))+
+ Utils::formatDuration(MPDStats::self()->dbPlaytime()), dbUpdate.toString(Qt::SystemLocaleShortDate))+
QLatin1String("
"),
i18n("Server Information"));
}
@@ -1841,8 +1843,8 @@ void MainWindow::scrollPlayQueue(bool wasEmpty)
void MainWindow::updateStats()
{
// Check if remote db is more recent than local one
- if (!MusicLibraryModel::self()->lastUpdate().isValid() || MPDStats::self()->dbUpdate() > MusicLibraryModel::self()->lastUpdate()) {
- if (!MusicLibraryModel::self()->lastUpdate().isValid()) {
+ if (0==MusicLibraryModel::self()->lastUpdate() || MPDStats::self()->dbUpdate() > MusicLibraryModel::self()->lastUpdate()) {
+ if (0==MusicLibraryModel::self()->lastUpdate()) {
libraryPage->clear();
//albumsPage->clear();
folderPage->clear();
@@ -2066,7 +2068,7 @@ void MainWindow::addToNewStoredPlaylist()
for(;;) {
QString name = InputDialog::getText(i18n("Playlist Name"), i18n("Enter a name for the playlist:"), QString(), 0, this);
- if (name==StreamsModel::constPlayListName) {
+ if (name==MPDConnection::constStreamsPlayListName) {
MessageBox::error(this, i18n("'%1' is used to store favorite streams, please choose another name.", name));
continue;
}
diff --git a/models/dirviewmodel.cpp b/models/dirviewmodel.cpp
index fa3e69c67..a54ca7105 100644
--- a/models/dirviewmodel.cpp
+++ b/models/dirviewmodel.cpp
@@ -31,6 +31,7 @@
#include
#include
#include
+#include
#include "support/localize.h"
#include "gui/plurals.h"
#include "dirviewmodel.h"
@@ -90,12 +91,12 @@ void DirViewModel::setEnabled(bool e)
if (enabled) {
connect(MPDConnection::self(), SIGNAL(updatingDatabase()), this, SLOT(updatingMpd()));
- connect(MPDConnection::self(), SIGNAL(dirViewUpdated(DirViewItemRoot *, const QDateTime &)), this, SLOT(updateDirView(DirViewItemRoot *, const QDateTime &)));
+ connect(MPDConnection::self(), SIGNAL(dirViewUpdated(DirViewItemRoot *, time_t)), this, SLOT(updateDirView(DirViewItemRoot *, time_t)));
} else {
clear();
removeCache();
disconnect(MPDConnection::self(), SIGNAL(updatingDatabase()), this, SLOT(updatingMpd()));
- disconnect(MPDConnection::self(), SIGNAL(dirViewUpdated(DirViewItemRoot *, const QDateTime &)), this, SLOT(updateDirView(DirViewItemRoot *, const QDateTime &)));
+ disconnect(MPDConnection::self(), SIGNAL(dirViewUpdated(DirViewItemRoot *, time_t)), this, SLOT(updateDirView(DirViewItemRoot *, time_t)));
}
}
@@ -236,7 +237,7 @@ void DirViewModel::clear()
}
const DirViewItemRoot *oldRoot = rootItem;
beginResetModel();
- databaseTime = QDateTime();
+ databaseTime = 0;
rootItem = new DirViewItemRoot;
delete oldRoot;
endResetModel();
@@ -276,7 +277,7 @@ void DirViewModel::toXML()
writer.writeStartDocument();
writer.writeStartElement(constTopTag);
writer.writeAttribute(constVersionAttribute, QString::number(constVersion));
- writer.writeAttribute(constDateAttribute, QString::number(databaseTime.toTime_t()));
+ writer.writeAttribute(constDateAttribute, QString::number(databaseTime));
if (databaseTimeUnreliable) {
writer.writeAttribute(constDateUnreliableAttribute, constTrueValue);
}
@@ -298,7 +299,7 @@ void DirViewModel::removeCache()
QFile::remove(cacheFile);
}
- databaseTime = QDateTime();
+ databaseTime = 0;
}
void DirViewModel::toXML(const DirViewItem *item, QXmlStreamWriter &writer)
@@ -329,23 +330,21 @@ bool DirViewModel::fromXML()
}
DirViewItemRoot *root=new DirViewItemRoot;
- quint32 date=fromXML(&compressor, MPDStats::self()->dbUpdate(), root);
+ time_t date=fromXML(&compressor, MPDStats::self()->dbUpdate(), root);
compressor.close();
if (!date) {
delete root;
return false;
}
- QDateTime dt;
- dt.setTime_t(date);
- updateDirView(root, dt, true);
+ updateDirView(root, date, true);
return true;
}
-quint32 DirViewModel::fromXML(QIODevice *dev, const QDateTime &dt, DirViewItemRoot *root)
+time_t DirViewModel::fromXML(QIODevice *dev, time_t dt, DirViewItemRoot *root)
{
QXmlStreamReader reader(dev);
- quint32 xmlDate=0;
+ time_t xmlDate=0;
DirViewItemDir *currentDir=root;
QList dirStack;
@@ -362,7 +361,7 @@ quint32 DirViewModel::fromXML(QIODevice *dev, const QDateTime &dt, DirViewItemRo
if (constTopTag == element) {
quint32 version = attributes.value(constVersionAttribute).toString().toUInt();
xmlDate = attributes.value(constDateAttribute).toString().toUInt();
- if ( version < constVersion || (dt.isValid() && xmlDate < dt.toTime_t())) {
+ if ( version < constVersion || (dt>0 && xmlDate < dt)) {
return 0;
}
databaseTimeUnreliable=constTrueValue==attributes.value(constDateUnreliableAttribute).toString();
@@ -387,16 +386,16 @@ quint32 DirViewModel::fromXML(QIODevice *dev, const QDateTime &dt, DirViewItemRo
return xmlDate;
}
-void DirViewModel::updateDirView(DirViewItemRoot *newroot, const QDateTime &dbUpdate, bool fromFile)
+void DirViewModel::updateDirView(DirViewItemRoot *newroot, time_t dbUpdate, bool fromFile)
{
- if (databaseTime.isValid() && databaseTime >= dbUpdate) {
+ if (databaseTime>0 && databaseTime >= dbUpdate) {
delete newroot;
return;
}
bool incremental=enabled && rootItem->childCount() && newroot->childCount();
bool updatedListing=false;
- bool needToSave=!databaseTime.isValid() || (MusicLibraryModel::validCacheDate(dbUpdate) && dbUpdate>databaseTime);
+ bool needToSave=databaseTime==0 || (MusicLibraryModel::validCacheDate(dbUpdate) && dbUpdate>databaseTime);
if (incremental && !QFile::exists(cacheFileName())) {
incremental=false;
@@ -439,7 +438,7 @@ void DirViewModel::updateDirView(DirViewItemRoot *newroot, const QDateTime &dbUp
databaseTimeUnreliable=!MusicLibraryModel::validCacheDate(dbUpdate); // See note in updatingMpd()
}
if (!MusicLibraryModel::validCacheDate(databaseTime) && !MusicLibraryModel::validCacheDate(dbUpdate)) {
- databaseTime=QDateTime::currentDateTime();
+ databaseTime=QDateTime::currentDateTime().toTime_t();
}
if (!fromFile && (needToSave || updatedListing)) {
diff --git a/models/dirviewmodel.h b/models/dirviewmodel.h
index 3b5e1e644..906b25ef5 100644
--- a/models/dirviewmodel.h
+++ b/models/dirviewmodel.h
@@ -28,7 +28,6 @@
#include
#include
-#include
#include "dirviewitemroot.h"
#include "actionmodel.h"
@@ -66,7 +65,7 @@ public:
bool fromXML();
public Q_SLOTS:
- void updateDirView(DirViewItemRoot *newroot, const QDateTime &dbUpdate=QDateTime(), bool fromFile=false);
+ void updateDirView(DirViewItemRoot *newroot, time_t dbUpdate=0, bool fromFile=false);
void updatingMpd();
Q_SIGNALS:
@@ -74,14 +73,14 @@ Q_SIGNALS:
private:
void toXML(const DirViewItem *item, QXmlStreamWriter &writer);
- quint32 fromXML(QIODevice *dev, const QDateTime &dt, DirViewItemRoot *root);
+ time_t fromXML(QIODevice *dev, time_t dt, DirViewItemRoot *root);
void addFileToList(const QStringList &parts, const QModelIndex &parent, DirViewItemDir *dir, const QString &mopidyPath);
void removeFileFromList(const QStringList &parts, const QModelIndex &parent, DirViewItemDir *dir);
void getFiles(DirViewItem *item, QStringList &filenames, bool allowPlaylists) const;
private:
DirViewItemRoot *rootItem;
- QDateTime databaseTime;
+ time_t databaseTime;
bool databaseTimeUnreliable;
bool enabled;
};
diff --git a/models/musiclibraryitemroot.cpp b/models/musiclibraryitemroot.cpp
index f2a559c56..7ba60dd45 100644
--- a/models/musiclibraryitemroot.cpp
+++ b/models/musiclibraryitemroot.cpp
@@ -221,14 +221,14 @@ void MusicLibraryItemRoot::updateSongFile(const Song &from, const Song &to)
static quint32 constVersion=9;
static QLatin1String constTopTag("CantataLibrary");
-void MusicLibraryItemRoot::toXML(const QString &filename, const QDateTime &date, bool dateUnreliable, MusicLibraryProgressMonitor *prog) const
+void MusicLibraryItemRoot::toXML(const QString &filename, time_t date, bool dateUnreliable, MusicLibraryProgressMonitor *prog) const
{
if (isFlat) {
return;
}
// If saving device cache, and we have NO items, then remove cache file...
- if (0==childCount() && date.date().year()<2000) {
+ if (0==childCount() && date<2000) {
if (QFile::exists(filename)) {
QFile::remove(filename);
}
@@ -276,7 +276,7 @@ static const QString constImageAttribute=QLatin1String("img");
static const QString constnumTracksAttribute=QLatin1String("numTracks");
static const QString constTrueValue=QLatin1String("true");
-void MusicLibraryItemRoot::toXML(QXmlStreamWriter &writer, const QDateTime &date, bool dateUnreliable, MusicLibraryProgressMonitor *prog) const
+void MusicLibraryItemRoot::toXML(QXmlStreamWriter &writer, time_t date, bool dateUnreliable, MusicLibraryProgressMonitor *prog) const
{
if (isFlat) {
return;
@@ -295,7 +295,7 @@ void MusicLibraryItemRoot::toXML(QXmlStreamWriter &writer, const QDateTime &date
//Start with the document
writer.writeStartElement(constTopTag);
writer.writeAttribute(constVersionAttribute, QString::number(constVersion));
- writer.writeAttribute(constDateAttribute, QString::number(date.toTime_t()));
+ writer.writeAttribute(constDateAttribute, QString::number(date));
if (dateUnreliable) {
writer.writeAttribute(constDateUnreliableAttribute, constTrueValue);
}
@@ -411,7 +411,7 @@ void MusicLibraryItemRoot::toXML(QXmlStreamWriter &writer, const QDateTime &date
writer.writeEndDocument();
}
-quint32 MusicLibraryItemRoot::fromXML(const QString &filename, const QDateTime &date, bool *dateUnreliable, const QString &baseFolder, MusicLibraryProgressMonitor *prog, MusicLibraryErrorMonitor *em)
+time_t MusicLibraryItemRoot::fromXML(const QString &filename, time_t date, bool *dateUnreliable, const QString &baseFolder, MusicLibraryProgressMonitor *prog, MusicLibraryErrorMonitor *em)
{
if (isFlat) {
return 0;
@@ -429,7 +429,7 @@ quint32 MusicLibraryItemRoot::fromXML(const QString &filename, const QDateTime &
return 0;
}
QXmlStreamReader reader(&compressor);
- quint32 rv=fromXML(reader, date, dateUnreliable, baseFolder, prog, em);
+ time_t rv=fromXML(reader, date, dateUnreliable, baseFolder, prog, em);
compressor.close();
#ifdef TIME_XML_FILE_LOADING
qWarning() << filename << timer.elapsed();
@@ -437,7 +437,7 @@ quint32 MusicLibraryItemRoot::fromXML(const QString &filename, const QDateTime &
return rv;
}
-quint32 MusicLibraryItemRoot::fromXML(QXmlStreamReader &reader, const QDateTime &date, bool *dateUnreliable, const QString &baseFolder, MusicLibraryProgressMonitor *prog, MusicLibraryErrorMonitor *em)
+time_t MusicLibraryItemRoot::fromXML(QXmlStreamReader &reader, time_t date, bool *dateUnreliable, const QString &baseFolder, MusicLibraryProgressMonitor *prog, MusicLibraryErrorMonitor *em)
{
if (isFlat) {
return 0;
@@ -476,7 +476,7 @@ quint32 MusicLibraryItemRoot::fromXML(QXmlStreamReader &reader, const QDateTime
xmlDate = attributes.value(constDateAttribute).toString().toUInt();
gs = constTrueValue==attributes.value(constGroupSingleAttribute).toString();
gm = constTrueValue==attributes.value(constGroupSingleAttribute).toString();
- if ( version < constVersion || (date.isValid() && xmlDate < date.toTime_t())) {
+ if ( version < constVersion || (date>0 && xmlDate < date)) {
return 0;
}
if (prog) {
diff --git a/models/musiclibraryitemroot.h b/models/musiclibraryitemroot.h
index 8ff303262..183de83de 100644
--- a/models/musiclibraryitemroot.h
+++ b/models/musiclibraryitemroot.h
@@ -31,14 +31,12 @@
#include
#include
#include
-#include
#include
#include
#include "musiclibraryitem.h"
#include "mpd-interface/song.h"
#include "support/icon.h"
-class QDateTime;
class QXmlStreamReader;
class QXmlStreamWriter;
class MusicLibraryItemArtist;
@@ -87,10 +85,10 @@ public:
QSet allSongs(bool revertVa=false) const;
void getDetails(QSet &artists, QSet &albumArtists, QSet &composers, QSet &albums, QSet &genres);
void updateSongFile(const Song &from, const Song &to);
- void toXML(const QString &filename, const QDateTime &date=QDateTime(), bool dateUnreliable=false, MusicLibraryProgressMonitor *prog=0) const;
- void toXML(QXmlStreamWriter &writer, const QDateTime &date=QDateTime(), bool dateUnreliable=false, MusicLibraryProgressMonitor *prog=0) const;
- quint32 fromXML(const QString &filename, const QDateTime &date=QDateTime(), bool *dateUnreliable=0, const QString &baseFolder=QString(), MusicLibraryProgressMonitor *prog=0, MusicLibraryErrorMonitor *em=0);
- quint32 fromXML(QXmlStreamReader &reader, const QDateTime &date=QDateTime(), bool *dateUnreliable=0, const QString &baseFolder=QString(), MusicLibraryProgressMonitor *prog=0, MusicLibraryErrorMonitor *em=0);
+ void toXML(const QString &filename, time_t date=0, bool dateUnreliable=false, MusicLibraryProgressMonitor *prog=0) const;
+ void toXML(QXmlStreamWriter &writer, time_t date=0, bool dateUnreliable=false, MusicLibraryProgressMonitor *prog=0) const;
+ time_t fromXML(const QString &filename, time_t date=0, bool *dateUnreliable=0, const QString &baseFolder=QString(), MusicLibraryProgressMonitor *prog=0, MusicLibraryErrorMonitor *em=0);
+ time_t fromXML(QXmlStreamReader &reader, time_t date=0, bool *dateUnreliable=0, const QString &baseFolder=QString(), MusicLibraryProgressMonitor *prog=0, MusicLibraryErrorMonitor *em=0);
Type itemType() const { return Type_Root; }
void add(const QSet &songs);
bool supportsAlbumArtistTag() const { return supportsAlbumArtist; }
diff --git a/models/musiclibrarymodel.cpp b/models/musiclibrarymodel.cpp
index a1488b000..c5965d05b 100644
--- a/models/musiclibrarymodel.cpp
+++ b/models/musiclibrarymodel.cpp
@@ -148,8 +148,8 @@ MusicLibraryModel::MusicLibraryModel(QObject *parent, bool isMpdModel, bool isCh
this, SLOT(setArtistImage(const Song &, const QImage &, const QString &)));
#endif
connect(MPDConnection::self(), SIGNAL(updatingDatabase()), this, SLOT(updatingMpd()));
- connect(MPDConnection::self(), SIGNAL(musicLibraryUpdated(MusicLibraryItemRoot *, QDateTime)),
- this, SLOT(updateMusicLibrary(MusicLibraryItemRoot *, QDateTime)));
+ connect(MPDConnection::self(), SIGNAL(musicLibraryUpdated(MusicLibraryItemRoot *, time_t)),
+ this, SLOT(updateMusicLibrary(MusicLibraryItemRoot *, time_t)));
}
rootItem->setModel(this);
#if defined ENABLE_MODEL_TEST
@@ -367,7 +367,7 @@ void MusicLibraryModel::clear()
{
const MusicLibraryItemRoot *oldRoot = rootItem;
beginResetModel();
- databaseTime = QDateTime();
+ databaseTime = 0;
rootItem = new MusicLibraryItemRoot;
rootItem->setModel(this);
delete oldRoot;
@@ -433,7 +433,7 @@ void MusicLibraryModel::removeCache()
QFile::remove(oldCache);
}
- databaseTime = QDateTime();
+ databaseTime = 0;
}
QSet MusicLibraryModel::getAlbumArtists()
@@ -477,15 +477,15 @@ void MusicLibraryModel::clearNewState()
emit haveNewItems(false);
}
-void MusicLibraryModel::updateMusicLibrary(MusicLibraryItemRoot *newroot, QDateTime dbUpdate, bool fromFile)
+void MusicLibraryModel::updateMusicLibrary(MusicLibraryItemRoot *newroot, time_t dbUpdate, bool fromFile)
{
- if (!mpdModel || (databaseTime.isValid() && databaseTime >= dbUpdate)) {
+ if (!mpdModel || (databaseTime>0 && databaseTime >= dbUpdate)) {
delete newroot;
return;
}
bool updatedSongs=false;
- bool needToSave=!databaseTime.isValid() || (validCacheDate(dbUpdate) && dbUpdate>databaseTime);
+ bool needToSave=0==databaseTime || (validCacheDate(dbUpdate) && dbUpdate>databaseTime);
bool incremental=rootItem->childCount() && newroot->childCount();
if (incremental && !QFile::exists(cacheFileName())) {
@@ -519,7 +519,7 @@ void MusicLibraryModel::updateMusicLibrary(MusicLibraryItemRoot *newroot, QDateT
databaseTimeUnreliable=!validCacheDate(dbUpdate); // See note in updatingMpd()
}
if (!validCacheDate(databaseTime) && !validCacheDate(dbUpdate)) {
- databaseTime=QDateTime::currentDateTime();
+ databaseTime=QDateTime::currentDateTime().toTime_t();
}
if (!fromFile && (needToSave || updatedSongs)) {
@@ -808,14 +808,12 @@ bool MusicLibraryModel::fromXML()
convertCache(cacheFileName());
MusicLibraryItemRoot *root=new MusicLibraryItemRoot;
- quint32 date=root->fromXML(cacheFileName(), MPDStats::self()->dbUpdate(), &databaseTimeUnreliable, QString(), 0, this);
+ time_t date=root->fromXML(cacheFileName(), MPDStats::self()->dbUpdate(), &databaseTimeUnreliable, QString(), 0, this);
if (!date) {
delete root;
return false;
}
- QDateTime dt;
- dt.setTime_t(date);
- updateMusicLibrary(root, dt, true);
+ updateMusicLibrary(root, date, true);
return true;
}
diff --git a/models/musiclibrarymodel.h b/models/musiclibrarymodel.h
index c750a5e12..3299ae37b 100644
--- a/models/musiclibrarymodel.h
+++ b/models/musiclibrarymodel.h
@@ -27,7 +27,6 @@
#ifndef MUSIC_LIBRARY_MODEL_H
#define MUSIC_LIBRARY_MODEL_H
-#include
#include
#include
#include "musiclibraryitemroot.h"
@@ -51,7 +50,7 @@ public:
static void convertCache(const QString &compressedName);
static void cleanCache();
- static bool validCacheDate(const QDateTime &dt) { return dt.isValid() && dt.date().year()>2000; }
+ static bool validCacheDate(time_t dt) { return dt>0; }
MusicLibraryModel(QObject *parent=0, bool isMpdModel=true, bool isCheckable=false);
~MusicLibraryModel();
@@ -88,7 +87,7 @@ public:
QSet getAlbumArtists();
bool update(const QSet &songs);
// void uncheckAll();
- const QDateTime & lastUpdate() { return databaseTime; }
+ time_t lastUpdate() { return databaseTime; }
void setSupportsAlbumArtistTag(bool s) { rootItem->setSupportsAlbumArtistTag(s); }
void toggleGrouping();
const QSet & genres() const { return rootItem->genres(); }
@@ -100,7 +99,7 @@ public:
public Q_SLOTS:
void clearNewState();
- void updateMusicLibrary(MusicLibraryItemRoot * root, QDateTime dbUpdate = QDateTime(), bool fromFile = false);
+ void updateMusicLibrary(MusicLibraryItemRoot * root, time_t dbUpdate = 0, bool fromFile = false);
void coverLoaded(const Song &song, int size);
void updatingMpd();
// Touch version...
@@ -126,7 +125,7 @@ private:
bool checkable;
bool artistImages;
MusicLibraryItemRoot *rootItem;
- QDateTime databaseTime;
+ time_t databaseTime;
bool databaseTimeUnreliable;
};
diff --git a/models/playlistsmodel.cpp b/models/playlistsmodel.cpp
index 377b5bbf8..7169f940c 100644
--- a/models/playlistsmodel.cpp
+++ b/models/playlistsmodel.cpp
@@ -44,7 +44,6 @@
#include "mpd-interface/mpdstats.h"
#include "mpd-interface/mpdconnection.h"
#include "playqueuemodel.h"
-#include "streamsmodel.h"
#include "widgets/icons.h"
#ifdef ENABLE_HTTP_SERVER
#include "http/httpserver.h"
@@ -675,10 +674,9 @@ QStringList PlaylistsModel::mimeTypes() const
void PlaylistsModel::getPlaylists()
{
-// ALWAYS need to send listPlaylists() -> as it is now used for favourite streams!
-// if (enabled) {
+ if (enabled) {
emit listPlaylists();
-// }
+ }
}
void PlaylistsModel::clear()
@@ -725,9 +723,7 @@ void PlaylistsModel::setPlaylists(const QList &playlists)
}
beginResetModel();
foreach (const Playlist &p, playlists) {
- if (p.name!=StreamsModel::constPlayListName) {
- items.append(new PlaylistItem(p, allocateKey()));
- }
+ items.append(new PlaylistItem(p, allocateKey()));
}
endResetModel();
updateItemMenu();
@@ -751,9 +747,6 @@ void PlaylistsModel::setPlaylists(const QList &playlists)
}
foreach (const Playlist &p, playlists) {
- if (p.name==StreamsModel::constPlayListName) {
- continue;
- }
retreived.insert(p.name);
PlaylistItem *pl=getPlaylist(p.name);
diff --git a/models/playqueuemodel.cpp b/models/playqueuemodel.cpp
index afe185207..ba4a063db 100644
--- a/models/playqueuemodel.cpp
+++ b/models/playqueuemodel.cpp
@@ -934,7 +934,7 @@ void PlayQueueModel::update(const QList &songList, bool isComplete)
}
// If we have too many changes UI can hang, so it is sometimes better just to do a complete reset!
- if (isComplete && songs.count()>MPDConnection::constMaxPqChaanges) {
+ if (isComplete && songs.count()>MPDConnection::constMaxPqChanges) {
songs.clear();
}
diff --git a/models/streamsmodel.cpp b/models/streamsmodel.cpp
index 8e14c0a26..a8800c490 100644
--- a/models/streamsmodel.cpp
+++ b/models/streamsmodel.cpp
@@ -566,10 +566,10 @@ StreamsModel::StreamsModel(QObject *parent)
new ModelTest(this, this);
#endif
- connect(MPDConnection::self(), SIGNAL(playlistsRetrieved(QList)), SLOT(storedPlaylists(QList)));
connect(MPDConnection::self(), SIGNAL(savedStream(QString,QString)), SLOT(savedFavouriteStream(QString,QString)));
connect(MPDConnection::self(), SIGNAL(removedStreams(QList)), SLOT(removedFavouriteStreams(QList)));
connect(MPDConnection::self(), SIGNAL(streamList(QList)), SLOT(favouriteStreams(QList)));
+ connect(MPDConnection::self(), SIGNAL(stateChanged(bool)), SLOT(mpdConnectionState(bool)));
connect(this, SIGNAL(listFavouriteStreams()), MPDConnection::self(), SLOT(listStreams()));
connect(this, SIGNAL(saveFavouriteStream(QString,QString)), MPDConnection::self(), SLOT(saveStream(QString,QString)));
connect(this, SIGNAL(removeFavouriteStreams(QList)), MPDConnection::self(), SLOT(removeStreams(QList)));
@@ -1155,37 +1155,6 @@ void StreamsModel::tooltipUpdated(QAction *act)
#endif
}
-void StreamsModel::storedPlaylists(const QList &list)
-{
- QDateTime favouritesDateTime;
- foreach (const Playlist &p, list) {
- if (p.name==constPlayListName) {
- favouritesDateTime=p.lastModified;
- break;
- }
- }
-
- if (favouritesDateTime.isNull()) {
- favourites->state=CategoryItem::Fetched;
- if (!favourites->children.isEmpty()) {
- beginRemoveRows(favouritesIndex(), 0, favourites->children.count()-1);
- qDeleteAll(favourites->children);
- favourites->children.clear();
- endRemoveRows();
- }
- importOldFavourites();
- } else if (favourites->lastModified.isNull() || favourites->lastModifiedlastModified.currentMSecsSinceEpoch())<3) {
- if (favourites->lastModified.isNull()) {
- favourites->state=CategoryItem::Fetching;
- }
- emit listFavouriteStreams();
- }
- favourites->lastModified=favouritesDateTime;
-}
-
void StreamsModel::savedFavouriteStream(const QString &url, const QString &name)
{
if (favouritesNameForUrl(url).isEmpty()) {
@@ -1306,6 +1275,13 @@ void StreamsModel::favouriteStreams(const QList &streams)
}
}
+void StreamsModel::mpdConnectionState(bool c)
+{
+ if (c) {
+ emit listFavouriteStreams();
+ }
+}
+
QList StreamsModel::parseRadioTimeResponse(QIODevice *dev, CategoryItem *cat, bool parseSubText)
{
QList- newItems;
@@ -1911,7 +1887,6 @@ QModelIndex StreamsModel::categoryIndex(const CategoryItem *cat) const
#endif // ENABLE_STREAMS
const QString StreamsModel::constPrefix=QLatin1String("cantata-stream-");
-const QString StreamsModel::constPlayListName=QLatin1String("[Radio Streams]");
QString StreamsModel::modifyUrl(const QString &u, bool addPrefix, const QString &name)
{
diff --git a/models/streamsmodel.h b/models/streamsmodel.h
index 08e9e2196..d5426cd9f 100644
--- a/models/streamsmodel.h
+++ b/models/streamsmodel.h
@@ -24,10 +24,11 @@
#ifndef STREAMSMODEL_H
#define STREAMSMODEL_H
-#include "actionmodel.h"
#include "config.h"
+#include
#ifdef ENABLE_STREAMS
+#include "actionmodel.h"
#include "mpd-interface/stream.h"
#include "mpd-interface/playlist.h"
#include
@@ -119,7 +120,6 @@ public:
QList
- loadXml(QIODevice *dev);
bool isFavourites() const { return true; }
bool canReload() const { return false; }
- QDateTime lastModified;
bool importedOld;
};
@@ -196,7 +196,6 @@ public:
};
static const QString constPrefix;
- static const QString constPlayListName;
static const QString constSubDir;
static const QString constCacheExt;
@@ -304,11 +303,11 @@ private Q_SLOTS:
void tooltipUpdated(QAction *act);
// Responses from MPD...
- void storedPlaylists(const QList &list);
void savedFavouriteStream(const QString &url, const QString &name);
void removedFavouriteStreams(const QList &removed);
// void editedFavouriteStream(const QString &url, const QString &name, quint32 position);
void favouriteStreams(const QList &streams);
+ void mpdConnectionState(bool c);
private:
bool loadCache(CategoryItem *cat);
diff --git a/mpd-interface/cuefile.cpp b/mpd-interface/cuefile.cpp
index 1c24cfd71..b33e32536 100644
--- a/mpd-interface/cuefile.cpp
+++ b/mpd-interface/cuefile.cpp
@@ -24,7 +24,9 @@
#include "cuefile.h"
#include "mpdconnection.h"
#include "support/utils.h"
+#if !defined ENABLE_UBUNTU && !defined CANTATA_WEB
#include "gui/settings.h"
+#endif
#include
#include
#include
@@ -203,7 +205,7 @@ static const QList & codecList()
codecs.append(codec);
}
- #ifndef ENABLE_UBUNTU
+ #if !defined ENABLE_UBUNTU && !defined CANTATA_WEB
QStringList configCodecs=Settings::self()->cueFileCodecs();
foreach (const QString &cfg, configCodecs) {
codec=QTextCodec::codecForName(cfg.toLatin1());
diff --git a/mpd-interface/mpdconnection.cpp b/mpd-interface/mpdconnection.cpp
index e1fbde6b5..09040d777 100644
--- a/mpd-interface/mpdconnection.cpp
+++ b/mpd-interface/mpdconnection.cpp
@@ -26,23 +26,26 @@
#include "mpdconnection.h"
#include "mpdparseutils.h"
+#ifndef CANTATA_WEB
#include "models/musiclibraryitemroot.h"
#include "models/streamsmodel.h"
+#endif
#ifdef ENABLE_SIMPLE_MPD_SUPPORT
#include "mpduser.h"
#include "gui/settings.h"
#endif
#include "support/localize.h"
-#include "support/utils.h"
#include "support/globalstatic.h"
+#if !defined ENABLE_UBUNTU && !defined CANTATA_WEB
#include "support/configuration.h"
-#include
+#endif
#include
#include
#include
#include
#include
#include
+#include
#include "support/thread.h"
#include "cuefile.h"
#if defined Q_OS_LINUX && defined QT_QTDBUS_FOUND
@@ -64,7 +67,7 @@ void MPDConnection::enableDebug()
static const int constSocketCommsTimeout=2000;
static const int constMaxReadAttempts=4;
static int maxFilesPerAddCommand=10000;
-static bool alwaysUseLsInfo=false;
+static bool alwaysUseLsInfo=true;
static int seekStep=5;
static const QByteArray constOkValue("OK");
@@ -107,7 +110,8 @@ static QByteArray log(const QByteArray &data)
GLOBAL_STATIC(MPDConnection, instance)
QString MPDConnection::constModifiedSince=QLatin1String("modified-since");
-const int MPDConnection::constMaxPqChaanges=1000;
+const int MPDConnection::constMaxPqChanges=1000;
+const QString MPDConnection::constStreamsPlayListName=QLatin1String("[Radio Streams]");
QByteArray MPDConnection::quote(int val)
{
@@ -243,6 +247,7 @@ MPDConnection::MPDConnection()
, fadeDuration(0)
, restoreVolume(-1)
{
+ qRegisterMetaType("time_t");
qRegisterMetaType("Song");
qRegisterMetaType