diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2014-03-19 17:24:01 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2014-03-19 17:24:01 +0000 |
| commit | 33daea228cf9eafbf60595f539dedeb38a370ef7 (patch) | |
| tree | 66320d6c1992f9b80cb37d30d4d31267eee074a8 /src/qmmpui/playlistmanager.cpp | |
| parent | 2216c996fa2ce4e2355af4df8a7ba3cfeddd940f (diff) | |
| download | qmmp-33daea228cf9eafbf60595f539dedeb38a370ef7.tar.gz qmmp-33daea228cf9eafbf60595f539dedeb38a370ef7.tar.bz2 qmmp-33daea228cf9eafbf60595f539dedeb38a370ef7.zip | |
added atomic playlist saving operation
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@4179 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/qmmpui/playlistmanager.cpp')
| -rw-r--r-- | src/qmmpui/playlistmanager.cpp | 49 |
1 files changed, 31 insertions, 18 deletions
diff --git a/src/qmmpui/playlistmanager.cpp b/src/qmmpui/playlistmanager.cpp index dae0aac7d..744106bef 100644 --- a/src/qmmpui/playlistmanager.cpp +++ b/src/qmmpui/playlistmanager.cpp @@ -319,37 +319,50 @@ void PlayListManager::readPlayLists() void PlayListManager::writePlayLists() { qDebug("PlayListManager: saving playlists..."); - QFile file(QDir::homePath() +"/.qmmp/playlist.txt"); - if(!file.open(QIODevice::WriteOnly)) + QString tmpFilePath = QDir::homePath() +"/.qmmp/playlist.tmp"; + QString plFilePath = QDir::homePath() +"/.qmmp/playlist.txt"; + QFile tmpFile(tmpFilePath); + if(!tmpFile.open(QIODevice::WriteOnly)) { - qDebug("PlayListManager: error: %s", qPrintable(file.errorString())); + qDebug("PlayListManager: error: %s", qPrintable(tmpFile.errorString())); return; } - file.write(QString("current_playlist=%1\n").arg(m_models.indexOf(m_current)).toUtf8()); + tmpFile.write(QString("current_playlist=%1\n").arg(m_models.indexOf(m_current)).toUtf8()); foreach(PlayListModel *model, m_models) { QList<PlayListItem *> items = model->items(); - file.write(QString("playlist=%1\n").arg(model->name()).toUtf8()); - file.write(QString("current=%1\n").arg(model->numberOfTrack(model->currentIndex())).toUtf8()); + tmpFile.write(QString("playlist=%1\n").arg(model->name()).toUtf8()); + tmpFile.write(QString("current=%1\n").arg(model->numberOfTrack(model->currentIndex())).toUtf8()); foreach(PlayListItem* m, items) { if(m->isGroup()) continue; PlayListTrack *t = dynamic_cast<PlayListTrack *>(m); - file.write(QString("file=%1\n").arg(t->url()).toUtf8()); - file.write(QString("title=%1\n").arg(t->value(Qmmp::TITLE)).toUtf8()); - file.write(QString("artist=%1\n").arg(t->value(Qmmp::ARTIST)).toUtf8()); - file.write(QString("album=%1\n").arg(t->value(Qmmp::ALBUM)).toUtf8()); - file.write(QString("comment=%1\n").arg(t->value(Qmmp::COMMENT)).toUtf8()); - file.write(QString("genre=%1\n").arg(t->value(Qmmp::GENRE)).toUtf8()); - file.write(QString("composer=%1\n").arg(t->value(Qmmp::COMPOSER)).toUtf8()); - file.write(QString("year=%1\n").arg(t->value(Qmmp::YEAR)).toUtf8()); - file.write(QString("track=%1\n").arg(t->value(Qmmp::TRACK)).toUtf8()); - file.write(QString("disc=%1\n").arg(t->value(Qmmp::DISCNUMBER)).toUtf8()); - file.write(QString("length=%1\n").arg(t->length()).toUtf8()); + tmpFile.write(QString("file=%1\n").arg(t->url()).toUtf8()); + tmpFile.write(QString("title=%1\n").arg(t->value(Qmmp::TITLE)).toUtf8()); + tmpFile.write(QString("artist=%1\n").arg(t->value(Qmmp::ARTIST)).toUtf8()); + tmpFile.write(QString("album=%1\n").arg(t->value(Qmmp::ALBUM)).toUtf8()); + tmpFile.write(QString("comment=%1\n").arg(t->value(Qmmp::COMMENT)).toUtf8()); + tmpFile.write(QString("genre=%1\n").arg(t->value(Qmmp::GENRE)).toUtf8()); + tmpFile.write(QString("composer=%1\n").arg(t->value(Qmmp::COMPOSER)).toUtf8()); + tmpFile.write(QString("year=%1\n").arg(t->value(Qmmp::YEAR)).toUtf8()); + tmpFile.write(QString("track=%1\n").arg(t->value(Qmmp::TRACK)).toUtf8()); + tmpFile.write(QString("disc=%1\n").arg(t->value(Qmmp::DISCNUMBER)).toUtf8()); + tmpFile.write(QString("length=%1\n").arg(t->length()).toUtf8()); } } - file.close(); + tmpFile.close(); + + QFile plFile(plFilePath); + if(!plFile.remove()) + { + qWarning("PlayListManager: unable to remove previous playlist"); + return; + } + if(!QFile::rename(tmpFilePath, plFilePath)) + { + qWarning("PlayListManager: unable to rename temporary playlist"); + } } void PlayListManager::onCountChanged() |
