#include "wx/update_dialog.h"
#include "wx/player_config_dialog.h"
#include "wx/verify_dcp_dialog.h"
-#include "wx/controls.h"
+#include "wx/standard_controls.h"
+#include "wx/swaroop_controls.h"
#include "lib/cross.h"
#include "lib/config.h"
#include "lib/util.h"
using std::exception;
using std::vector;
using boost::shared_ptr;
+using boost::weak_ptr;
using boost::scoped_array;
using boost::optional;
using boost::dynamic_pointer_cast;
, _view_full_screen (0)
, _view_dual_screen (0)
{
- /* XXX */
dcpomatic_log.reset (new NullLog());
- cout << "here's the log " << dcpomatic_log.get() << "\n";
#if defined(DCPOMATIC_WINDOWS)
maybe_open_console ();
_overall_panel = new wxPanel (this, wxID_ANY);
_viewer.reset (new FilmViewer (_overall_panel));
- _controls = new Controls (_overall_panel, _viewer, false);
+#ifdef DCPOMATIC_VARIANT_SWAROOP
+ SwaroopControls* sc = new SwaroopControls (_overall_panel, _viewer);
+ _controls = sc;
+ sc->ResetFilm.connect (bind(&DOMFrame::reset_film_weak, this, _1));
+#else
+ _controls = new StandardControls (_overall_panel, _viewer, false);
+#endif
_viewer->set_dcp_decode_reduction (Config::instance()->decode_reduction ());
_viewer->PlaybackPermitted.connect (bind(&DOMFrame::playback_permitted, this));
_viewer->Started.connect (bind(&DOMFrame::playback_started, this, _1));
_viewer->Seeked.connect (bind(&DOMFrame::playback_seeked, this, _1));
_viewer->Stopped.connect (bind(&DOMFrame::playback_stopped, this, _1));
-#ifdef DCPOMATIC_VARIANT_SWAROOP
- _viewer->PositionChanged.connect (bind(&DOMFrame::position_changed, this));
-#endif
_info = new PlayerInformation (_overall_panel, _viewer);
setup_main_sizer (Config::instance()->player_mode());
#ifdef __WXOSX__
setup_screen ();
#ifdef DCPOMATIC_VARIANT_SWAROOP
- if (
- boost::filesystem::is_regular_file(Config::path("position")) &&
- boost::filesystem::is_regular_file(Config::path("spl.xml"))) {
-
- shared_ptr<Film> film (new Film(boost::optional<boost::filesystem::path>()));
- film->read_metadata (Config::path("spl.xml"));
- reset_film (film);
- FILE* f = fopen_boost (Config::path("position"), "r");
- if (f) {
- char buffer[64];
- fscanf (f, "%63s", buffer);
- _viewer->seek (DCPTime(atoi(buffer)), true);
- _viewer->start ();
- fclose (f);
- }
- }
-
+ sc->check_restart ();
#endif
}
- void position_changed ()
- {
- if (!_viewer->playing() || _viewer->position().get() % DCPTime::HZ) {
- return;
- }
-
- FILE* f = fopen_boost (Config::path("position"), "w");
- if (f) {
- string const p = dcp::raw_convert<string> (_viewer->position().get());
- fwrite (p.c_str(), p.length(), 1, f);
- fclose (f);
- }
- }
-
#ifdef DCPOMATIC_VARIANT_SWAROOP
void monitor_checker_state_changed ()
{
reset_film ();
try {
shared_ptr<DCPContent> dcp (new DCPContent(dir));
- _film->examine_and_add_content (dcp);
+ _film->examine_and_add_content (dcp, true);
bool const ok = display_progress (_("DCP-o-matic Player"), _("Loading content"));
if (!ok || !report_errors_from_last_job(this)) {
return;
}
}
-#ifdef DCPOMATIC_VARIANT_SWAROOP
- optional<dcp::EncryptedKDM> get_kdm_from_url (shared_ptr<DCPContent> dcp)
+ void reset_film_weak (weak_ptr<Film> weak_film)
{
- ScopedTemporary temp;
- string url = Config::instance()->kdm_server_url();
- boost::algorithm::replace_all (url, "{CPL}", *dcp->cpl());
- optional<dcp::EncryptedKDM> kdm;
- if (dcp->cpl() && !get_from_url(url, false, temp)) {
- try {
- kdm = dcp::EncryptedKDM (dcp::file_to_string(temp.file()));
- if (kdm->cpl_id() != dcp->cpl()) {
- kdm = boost::none;
- }
- } catch (std::exception& e) {
- /* Hey well */
- }
- }
- return kdm;
- }
-#endif
-
- optional<dcp::EncryptedKDM> get_kdm_from_directory (shared_ptr<DCPContent> dcp)
- {
- using namespace boost::filesystem;
- optional<path> kdm_dir = Config::instance()->player_kdm_directory();
- if (!kdm_dir) {
- return optional<dcp::EncryptedKDM>();
- }
- for (directory_iterator i = directory_iterator(*kdm_dir); i != directory_iterator(); ++i) {
- try {
- if (file_size(i->path()) < MAX_KDM_SIZE) {
- dcp::EncryptedKDM kdm (dcp::file_to_string(i->path()));
- if (kdm.cpl_id() == dcp->cpl()) {
- return kdm;
- }
- }
- } catch (std::exception& e) {
- /* Hey well */
- }
+ shared_ptr<Film> film = weak_film.lock ();
+ if (film) {
+ reset_film (film);
}
- return optional<dcp::EncryptedKDM>();
}
void reset_film (shared_ptr<Film> film = shared_ptr<Film>(new Film(optional<boost::filesystem::path>())))
{
_film = film;
_viewer->set_film (_film);
+ _controls->set_film (_film);
_film->Change.connect (bind(&DOMFrame::film_changed, this, _1, _2));
+ _info->triggered_update ();
}
void film_changed (ChangeType type, Film::Property property)
return;
}
- _film->write_metadata (Config::path("spl.xml"));
-
if (_viewer->playing ()) {
_viewer->stop ();
}
BOOST_FOREACH (shared_ptr<Content> i, _film->content()) {
shared_ptr<DCPContent> dcp = dynamic_pointer_cast<DCPContent>(i);
- if (dcp && dcp->needs_kdm()) {
- optional<dcp::EncryptedKDM> kdm;
-#ifdef DCPOMATIC_VARIANT_SWAROOP
- kdm = get_kdm_from_url (dcp);
-#endif
- if (!kdm) {
- kdm = get_kdm_from_directory (dcp);
- }
-
- if (kdm) {
- dcp->add_kdm (*kdm);
- dcp->examine (_film, shared_ptr<Job>());
- }
- }
BOOST_FOREACH (shared_ptr<TextContent> j, i->text) {
j->set_use (true);
void setup_screen ()
{
_controls->Show (_mode != Config::PLAYER_MODE_FULL);
- _controls->show_extended_player_controls (_mode == Config::PLAYER_MODE_DUAL);
_info->Show (_mode != Config::PLAYER_MODE_FULL);
_overall_panel->SetBackgroundColour (_mode == Config::PLAYER_MODE_FULL ? wxColour(0, 0, 0) : wxNullColour);
ShowFullScreen (_mode == Config::PLAYER_MODE_FULL);
static const wxCmdLineEntryDesc command_line_description[] = {
{ wxCMD_LINE_PARAM, 0, 0, "DCP to load or create", wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_OPTIONAL },
+ { wxCMD_LINE_OPTION, "c", "config", "Directory containing config.xml", wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_OPTIONAL },
{ wxCMD_LINE_NONE, "", "", "", wxCmdLineParamType (0), 0 }
};
_dcp_to_load = wx_to_std (parser.GetParam (0));
}
+ wxString config;
+ if (parser.Found("c", &config)) {
+ Config::override_path = wx_to_std (config);
+ }
+
return true;
}