Save playlist when content is added, moved or removed.
[dcpomatic.git] / src / tools / dcpomatic_playlist.cc
index 9eada8b3820968807aea9297d772c342545d4328..5368cb3af906ff6c4bec48aec71502817f411b3d 100644 (file)
@@ -176,7 +176,9 @@ private:
                        return;
                }
 
-               if (change == SignalSPL::Change::NAME) {
+               switch (change) {
+               case SignalSPL::Change::NAME:
+               {
                        int N = 0;
                        for (auto i: _playlists) {
                                if (i == playlist) {
@@ -184,6 +186,13 @@ private:
                                }
                                ++N;
                        }
+                       break;
+               }
+               case SignalSPL::Change::CONTENT:
+                       if (auto dir = Config::instance()->player_playlist_directory()) {
+                               playlist->write(*dir / (playlist->id() + ".xml"));
+                       }
+                       break;
                }
        }
 
@@ -402,9 +411,7 @@ private:
 
                DCPOMATIC_ASSERT (_playlist);
 
-               auto tmp = (*_playlist)[s];
-               (*_playlist)[s] = (*_playlist)[s-1];
-               (*_playlist)[s-1] = tmp;
+               _playlist->swap(s, s - 1);
 
                set_item (s - 1, (*_playlist)[s-1]);
                set_item (s, (*_playlist)[s]);
@@ -419,9 +426,7 @@ private:
 
                DCPOMATIC_ASSERT (_playlist);
 
-               auto tmp = (*_playlist)[s];
-               (*_playlist)[s] = (*_playlist)[s+1];
-               (*_playlist)[s+1] = tmp;
+               _playlist->swap(s, s + 1);
 
                set_item (s + 1, (*_playlist)[s+1]);
                set_item (s, (*_playlist)[s]);