- for (auto filename: cpl_filenames) {
- try {
- auto cpl = make_shared<dcp::CPL>(filename);
- cpl->resolve_refs(assets);
- cpls.push_back(cpl);
- } catch (std::exception& e) {
- return String::compose("Could not read CPL %1: %2", filename, e.what());
+ for (auto filename_or_id: cpl_filenames_or_ids) {
+ if (boost::filesystem::exists(filename_or_id)) {
+ try {
+ auto cpl = make_shared<dcp::CPL>(filename_or_id);
+ cpl->resolve_refs(assets);
+ cpls.push_back(cpl);
+ } catch (std::exception& e) {
+ return String::compose("Could not read CPL %1: %2", filename_or_id, e.what());
+ }
+ } else {
+ auto cpl_iter = std::find_if(assets.begin(), assets.end(), [filename_or_id](shared_ptr<dcp::Asset> asset) {
+ return asset->id() == filename_or_id;
+ });
+ if (cpl_iter == assets.end()) {
+ return String::compose("Could not find CPL with ID %1", filename_or_id);
+ }
+ if (auto cpl = dynamic_pointer_cast<dcp::CPL>(*cpl_iter)) {
+ cpl->resolve_refs(assets);
+ cpls.push_back(cpl);
+ } else {
+ return String::compose("Could not find CPL with ID %1", filename_or_id);
+ }