Save playlist when content is added, moved or removed.
authorCarl Hetherington <cth@carlh.net>
Thu, 1 Dec 2022 19:00:09 +0000 (20:00 +0100)
committerCarl Hetherington <cth@carlh.net>
Thu, 1 Dec 2022 19:00:09 +0000 (20:00 +0100)
src/lib/spl.h
src/tools/dcpomatic_playlist.cc

index b002a08829bdeadaa1be72a00b33bbcca1d0c6d4..f55a9fe1fd89c1405b2ff7887eec914f6d25d34d 100644 (file)
@@ -114,6 +114,21 @@ public:
                Changed(Change::NAME);
        }
 
+       void add(SPLEntry e) {
+               SPL::add(e);
+               Changed(Change::CONTENT);
+       }
+
+       void remove(std::size_t index) {
+               SPL::remove(index);
+               Changed(Change::CONTENT);
+       }
+
+       void swap(size_t a, size_t b) {
+               SPL::swap(a, b);
+               Changed(Change::CONTENT);
+       }
+
        boost::signals2::signal<void (Change)> Changed;
 };
 
index 5a8ee91267a9cb27aa65dbc42f828a36fe6257fd..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;
                }
        }