static void restore_defaults ();
static bool have_existing (std::string);
static boost::filesystem::path config_file ();
+ static boost::filesystem::path path (std::string file, bool create_directories = true);
/** If set, this overrides the standard path (in home, Library, AppData or wherever) for config.xml and cinemas.xml */
static boost::optional<boost::filesystem::path> override_path;
private:
Config ();
- static boost::filesystem::path path (std::string file, bool create_directories = true);
void read ();
void set_defaults ();
void set_kdm_email_to_default ();
#include "spl.h"
#include "spl_entry.h"
#include <dcp/cpl.h>
+#include <dcp/dcp.h>
#include <libxml++/libxml++.h>
#include <boost/foreach.hpp>
+using boost::shared_ptr;
+
+SPL::SPL (boost::filesystem::path file)
+{
+ cxml::Document f ("DCPPlaylist");
+ f.read_file (file);
+
+ name = f.string_attribute ("Name");
+ BOOST_FOREACH (cxml::ConstNodePtr i, f.node_children("DCP")) {
+ boost::filesystem::path dir(i->content());
+ dcp::DCP dcp (dir);
+ dcp.read ();
+ BOOST_FOREACH (shared_ptr<dcp::CPL> j, dcp.cpls()) {
+ if (j->id() == i->string_attribute("CPL")) {
+ playlist.push_back (SPLEntry(j, dir));
+ }
+ }
+ }
+}
+
void
SPL::as_xml (boost::filesystem::path file) const
{
#include "lib/scoped_temporary.h"
#include "lib/monitor_checker.h"
#include <dcp/dcp.h>
+#include <dcp/raw_convert.h>
#include <wx/wx.h>
#include <wx/stdpaths.h>
#include <wx/splash.h>
_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__
MonitorChecker::instance()->run ();
#endif
setup_screen ();
+
+#ifdef DCPOMATIC_VARIANT_SWAROOP
+ if (
+ boost::filesystem::is_regular_file(Config::path("position")) &&
+ boost::filesystem::is_regular_file(Config::path("spl.xml"))) {
+
+ set_spl (SPL(Config::path("spl.xml")));
+ 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);
+ }
+ }
+
+#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);
+ }
}
void monitor_checker_state_changed ()
void playback_stopped (DCPTime time)
{
+#ifdef DCPOMATIC_VARIANT_SWAROOP
+ try {
+ boost::filesystem::remove (Config::path("position"));
+ } catch (...) {
+ /* Never mind */
+ }
+#endif
+
optional<boost::filesystem::path> log = Config::instance()->player_log_file();
if (!log) {
return;
void set_spl (SPL spl)
{
+#ifdef DCPOMATIC_VARIANT_SWAROOP
+ spl.as_xml (Config::path("spl.xml"));
+#endif
+
if (_viewer->playing ()) {
_viewer->stop ();
}
*/
Config::drop ();
+ signal_manager = new wxSignalManager (this);
+
_frame = new DOMFrame ();
SetTopWindow (_frame);
_frame->Maximize ();
}
_frame->Show ();
- signal_manager = new wxSignalManager (this);
-
PlayServer* server = new PlayServer (_frame);
new thread (boost::bind (&PlayServer::run, server));