aboutsummaryrefslogtreecommitdiff
path: root/src/playlistmodel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/playlistmodel.cpp')
-rw-r--r--src/playlistmodel.cpp63
1 files changed, 57 insertions, 6 deletions
diff --git a/src/playlistmodel.cpp b/src/playlistmodel.cpp
index f88f59268..196608438 100644
--- a/src/playlistmodel.cpp
+++ b/src/playlistmodel.cpp
@@ -43,6 +43,28 @@
#define INVALID_ROW -1
+TagUpdater::TagUpdater(QObject* o,MediaFile* f):m_observable(o),m_file(f)
+{
+ m_file->setFlag(MediaFile::EDITING);
+ connect (m_observable, SIGNAL(destroyed (QObject * )),SLOT(updateTag()));
+ connect (m_observable, SIGNAL(destroyed (QObject * )),SLOT(deleteLater()));
+}
+
+void TagUpdater::updateTag()
+{
+ if(m_file->flag() == MediaFile::SCHEDULED_FOR_DELETION)
+ {
+ delete m_file;
+ m_file = NULL;
+ }
+ else
+ {
+ m_file->updateTags();
+ m_file->setFlag(MediaFile::FREE);
+ }
+}
+
+
PlayListModel::PlayListModel ( QObject *parent )
: QObject ( parent ) , m_selection()
{
@@ -60,8 +82,6 @@ PlayListModel::PlayListModel ( QObject *parent )
registerPlaylistFormat( new XSPFPlaylistFormat);
#endif
loadExternalPlaylistFormats();
-
- //qRegisterMetaType<MediaFile*>("MediaFileStar");
}
PlayListModel::~PlayListModel()
@@ -145,7 +165,6 @@ void PlayListModel::clear()
{
if (!l.isNull())
{
- qWarning("void PlayListModel::clear()");
l->finish();
l->wait();
}
@@ -155,7 +174,18 @@ void PlayListModel::clear()
m_current = 0;
while ( !m_files.isEmpty() )
- delete m_files.takeFirst();
+ {
+ MediaFile* mf = m_files.takeFirst();
+
+ if(mf->flag() == MediaFile::FREE)
+ {
+ delete mf;
+ }
+ else if(mf->flag() == MediaFile::EDITING)
+ {
+ mf->setFlag(MediaFile::SCHEDULED_FOR_DELETION);
+ }
+ }
m_total_length = 0;
m_play_state->resetState();
@@ -225,7 +255,14 @@ void PlayListModel::removeSelection(bool inverted)
m_total_length -= f->length();
if (m_total_length < 0)
m_total_length = 0;
- delete f;
+
+ if(f->flag() == MediaFile::FREE)
+ {
+ delete f;
+ f = NULL;
+ }
+ else if(f->flag() == MediaFile::EDITING)
+ f->setFlag(MediaFile::SCHEDULED_FOR_DELETION);
select_after_delete = i;
@@ -271,7 +308,15 @@ void PlayListModel::showDetails()
{
DecoderFactory *fact = Decoder::findByPath ( m_files.at ( i )->path() );
if ( fact )
- fact->showDetails ( 0, m_files.at ( i )->path() );
+ {
+ QObject* o = fact->showDetails ( 0, m_files.at ( i )->path() );
+ if(o)
+ {
+ TagUpdater *updater = new TagUpdater(o,m_files.at(i));
+ m_editing_files.append(m_files.at(i));
+ connect (updater, SIGNAL(destroyed (QObject * )),SIGNAL(listChanged()));
+ }
+ }
return;
}
@@ -846,3 +891,9 @@ void PlayListModel::preparePlayState()
+
+
+
+
+
+