/*
- Copyright (C) 2018 Carl Hetherington <cth@carlh.net>
+ Copyright (C) 2018-2021 Carl Hetherington <cth@carlh.net>
This file is part of DCP-o-matic.
*/
+
#include "content_view.h"
#include "wx_util.h"
#include "lib/dcpomatic_assert.h"
#include <boost/optional.hpp>
#include <wx/progdlg.h>
-using std::string;
+
using std::cout;
+using std::dynamic_pointer_cast;
using std::list;
-using boost::shared_ptr;
-using boost::weak_ptr;
+using std::make_shared;
+using std::shared_ptr;
+using std::string;
+using std::weak_ptr;
using boost::optional;
-using boost::dynamic_pointer_cast;
using namespace dcpomatic;
+
ContentView::ContentView (wxWindow* parent)
: wxListCtrl (parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_REPORT | wxLC_NO_HEADER)
{
AppendColumn (wxT(""), wxLIST_FORMAT_LEFT, 580);
}
+
shared_ptr<Content>
ContentView::selected () const
{
long int s = GetNextItem (-1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED);
if (s == -1) {
- return shared_ptr<Content>();
+ return {};
}
DCPOMATIC_ASSERT (s < int(_content.size()));
return _content[s];
}
+
void
ContentView::update ()
{
DeleteAllItems ();
_content.clear ();
- optional<path> dir = Config::instance()->player_content_directory();
+ auto dir = Config::instance()->player_content_directory();
if (!dir || !boost::filesystem::is_directory(*dir)) {
dir = home_directory ();
}
wxProgressDialog progress (_("DCP-o-matic"), _("Reading content directory"));
- JobManager* jm = JobManager::instance ();
+ auto jm = JobManager::instance ();
- list<shared_ptr<ExamineContentJob> > jobs;
+ list<shared_ptr<ExamineContentJob>> jobs;
- for (directory_iterator i = directory_iterator(*dir); i != directory_iterator(); ++i) {
+ for (auto i: directory_iterator(*dir)) {
try {
+ progress.Pulse ();
+
shared_ptr<Content> content;
- if (is_directory(*i) && (is_regular_file(*i / "ASSETMAP") || is_regular_file(*i / "ASSETMAP.xml"))) {
- content.reset (new DCPContent(*i));
- } else if (i->path().extension() == ".mp4" || i->path().extension() == ".ecinema") {
- content = content_factory(*i).front();
+ if (is_directory(i) && (is_regular_file(i / "ASSETMAP") || is_regular_file(i / "ASSETMAP.xml"))) {
+ content.reset (new DCPContent(i));
+ } else if (i.path().extension() == ".mp4" || i.path().extension() == ".ecinema") {
+ content = content_factory(i).front();
}
if (content) {
- shared_ptr<ExamineContentJob> job(new ExamineContentJob(shared_ptr<Film>(), content));
+ auto job = make_shared<ExamineContentJob>(shared_ptr<Film>(), content);
jm->add (job);
jobs.push_back (job);
}
} catch (boost::filesystem::filesystem_error& e) {
/* Never mind */
- } catch (dcp::DCPReadError& e) {
+ } catch (dcp::ReadError& e) {
/* Never mind */
}
}
while (jm->work_to_do()) {
if (!progress.Pulse()) {
/* user pressed cancel */
- BOOST_FOREACH (shared_ptr<Job> i, jm->get()) {
+ for (auto i: jm->get()) {
i->cancel();
}
return;
}
- dcpomatic_sleep (1);
+ dcpomatic_sleep_seconds (1);
}
/* Add content from successful jobs and report errors */
- BOOST_FOREACH (shared_ptr<ExamineContentJob> i, jobs) {
+ for (auto i: jobs) {
if (i->finished_in_error()) {
error_dialog(this, std_to_wx(i->error_summary()) + ".\n", std_to_wx(i->error_details()));
} else {
}
}
+
void
ContentView::add (shared_ptr<Content> content)
{
wxListItem it;
it.SetId(N);
it.SetColumn(0);
- DCPTime length = content->approximate_length ();
- int h, m, s, f;
- length.split (24, h, m, s, f);
- it.SetText(wxString::Format("%02d:%02d:%02d", h, m, s));
+ auto length = content->approximate_length ();
+ auto const hmsf = length.split (24);
+ it.SetText(wxString::Format("%02d:%02d:%02d", hmsf.h, hmsf.m, hmsf.s));
InsertItem(it);
- shared_ptr<DCPContent> dcp = dynamic_pointer_cast<DCPContent>(content);
+ auto dcp = dynamic_pointer_cast<DCPContent>(content);
if (dcp && dcp->content_kind()) {
it.SetId(N);
it.SetColumn(1);
SetItem(it);
}
+
shared_ptr<Content>
ContentView::get (string digest) const
{
- BOOST_FOREACH (shared_ptr<Content> i, _content) {
+ for (auto i: _content) {
if (i->digest() == digest) {
return i;
}
}
- return shared_ptr<Content>();
+ return {};
}