diff options
| author | Carl Hetherington <cth@carlh.net> | 2025-07-15 11:10:45 +0200 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2025-07-15 11:10:45 +0200 |
| commit | 61e305653bf23cfb96ed884b8e42130eb22a9d55 (patch) | |
| tree | 7854a3e49b3dd58d47cf14b76801d8f9c98e47e8 | |
| parent | 6ee9e0555297bf30ed9709817f8a9e5abd734b90 (diff) | |
Add Playlist::add_at_end() taking a vector of content.
| -rw-r--r-- | src/lib/playlist.cc | 25 | ||||
| -rw-r--r-- | src/lib/playlist.h | 1 |
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>); |
