summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2025-07-15 11:10:45 +0200
committerCarl Hetherington <cth@carlh.net>2025-07-15 11:10:45 +0200
commit61e305653bf23cfb96ed884b8e42130eb22a9d55 (patch)
tree7854a3e49b3dd58d47cf14b76801d8f9c98e47e8
parent6ee9e0555297bf30ed9709817f8a9e5abd734b90 (diff)
Add Playlist::add_at_end() taking a vector of content.
-rw-r--r--src/lib/playlist.cc25
-rw-r--r--src/lib/playlist.h1
2 files changed, 26 insertions, 0 deletions
diff --git a/src/lib/playlist.cc b/src/lib/playlist.cc
index 45a06bfe2..7385c8ad5 100644
--- a/src/lib/playlist.cc
+++ b/src/lib/playlist.cc
@@ -309,6 +309,31 @@ Playlist::add(shared_ptr<const Film> film, shared_ptr<Content> c)
void
+Playlist::add_at_end(shared_ptr<const Film> film, vector<shared_ptr<Content>> const& content)
+{
+ Change(ChangeType::PENDING);
+
+ for (auto c: content) {
+ /* Add {video,subtitle} content after any existing {video,subtitle} content */
+ if (c->video) {
+ c->set_position(film, video_end(film));
+ } else if (!c->text.empty()) {
+ c->set_position(film, text_end(film));
+ }
+
+ boost::mutex::scoped_lock lm(_mutex);
+ _content.push_back(c);
+ sort(_content.begin(), _content.end(), ContentSorter());
+ reconnect(film);
+ }
+
+ Change(ChangeType::DONE);
+
+ LengthChange();
+}
+
+
+void
Playlist::remove(shared_ptr<Content> c)
{
Change(ChangeType::PENDING);
diff --git a/src/lib/playlist.h b/src/lib/playlist.h
index c84323b44..c26de5426 100644
--- a/src/lib/playlist.h
+++ b/src/lib/playlist.h
@@ -55,6 +55,7 @@ public:
void set_from_xml(std::shared_ptr<const Film> film, cxml::ConstNodePtr node, int version, std::list<std::string>& notes);
void add(std::shared_ptr<const Film> film, std::shared_ptr<Content>);
+ void add_at_end(std::shared_ptr<const Film> film, std::vector<std::shared_ptr<Content>> const& content);
void remove(std::shared_ptr<Content>);
void remove(ContentList);
void move_earlier(std::shared_ptr<const Film> film, std::shared_ptr<Content>);