More player debugging for butler video-full states.
[dcpomatic.git] / src / lib / config.h
index d2829af0884bdf374b6c2c6847fd2c78862041c5..21463fdb5bc44500ca16827acbfc6f766ee06b7c 100644 (file)
@@ -27,6 +27,7 @@
 
 #include "isdcf_metadata.h"
 #include "types.h"
+#include "edid.h"
 #include <dcp/name_format.h>
 #include <dcp/certificate_chain.h>
 #include <dcp/encrypted_kdm.h>
@@ -76,6 +77,13 @@ public:
                SOUND,
                SOUND_OUTPUT,
                INTERFACE_COMPLEXITY,
+               PLAYER_CONTENT_DIRECTORY,
+               PLAYER_PLAYLIST_DIRECTORY,
+               PLAYER_DEBUG_LOG,
+               HISTORY,
+#ifdef DCPOMATIC_VARIANT_SWAROOP
+               PLAYER_BACKGROUND_IMAGE,
+#endif
                OTHER
        };
 
@@ -469,6 +477,64 @@ public:
                return _player_mode;
        }
 
+       int image_display () const {
+               return _image_display;
+       }
+
+       bool respect_kdm_validity_periods () const {
+               return _respect_kdm_validity_periods;
+       }
+
+       boost::optional<boost::filesystem::path> player_activity_log_file () const {
+               return _player_activity_log_file;
+       }
+
+       boost::optional<boost::filesystem::path> player_debug_log_file () const {
+               return _player_debug_log_file;
+       }
+
+       boost::optional<boost::filesystem::path> player_content_directory () const {
+               return _player_content_directory;
+       }
+
+       boost::optional<boost::filesystem::path> player_playlist_directory () const {
+               return _player_playlist_directory;
+       }
+
+       boost::optional<boost::filesystem::path> player_kdm_directory () const {
+               return _player_kdm_directory;
+       }
+
+#ifdef DCPOMATIC_VARIANT_SWAROOP
+       boost::optional<boost::filesystem::path> player_background_image () const {
+               return _player_background_image;
+       }
+
+       std::string kdm_server_url () const {
+               return _kdm_server_url;
+       }
+
+       std::string player_watermark_theatre () const {
+               return _player_watermark_theatre;
+       }
+
+       int player_watermark_period () const {
+               return _player_watermark_period;
+       }
+
+       int player_watermark_duration () const {
+               return _player_watermark_duration;
+       }
+
+       std::vector<Monitor> required_monitors () const {
+               return _required_monitors;
+       }
+
+       boost::optional<boost::filesystem::path> player_lock_file () const {
+               return _player_lock_file;
+       }
+#endif
+
        /* SET (mostly) */
 
        void set_master_encoding_threads (int n) {
@@ -871,6 +937,120 @@ public:
                maybe_set (_player_mode, m);
        }
 
+       void set_image_display (int n) {
+               maybe_set (_image_display, n);
+       }
+
+       void set_respect_kdm_validity_periods (bool r) {
+               maybe_set (_respect_kdm_validity_periods, r);
+       }
+
+       void set_player_activity_log_file (boost::filesystem::path p) {
+               maybe_set (_player_activity_log_file, p);
+       }
+
+       void unset_player_activity_log_file () {
+               if (!_player_activity_log_file) {
+                       return;
+               }
+               _player_activity_log_file = boost::none;
+               changed ();
+       }
+
+       void set_player_debug_log_file (boost::filesystem::path p) {
+               maybe_set (_player_debug_log_file, p, PLAYER_DEBUG_LOG);
+       }
+
+       void unset_player_debug_log_file () {
+               if (!_player_debug_log_file) {
+                       return;
+               }
+               _player_debug_log_file = boost::none;
+               changed (PLAYER_DEBUG_LOG);
+       }
+
+       void set_player_content_directory (boost::filesystem::path p) {
+               maybe_set (_player_content_directory, p, PLAYER_CONTENT_DIRECTORY);
+       }
+
+       void unset_player_content_directory () {
+               if (!_player_content_directory) {
+                       return;
+               }
+               _player_content_directory = boost::none;
+               changed (PLAYER_CONTENT_DIRECTORY);
+       }
+
+       void set_player_playlist_directory (boost::filesystem::path p) {
+               maybe_set (_player_playlist_directory, p, PLAYER_PLAYLIST_DIRECTORY);
+       }
+
+       void unset_player_playlist_directory () {
+               if (!_player_playlist_directory) {
+                       return;
+               }
+               _player_playlist_directory = boost::none;
+               changed (PLAYER_PLAYLIST_DIRECTORY);
+       }
+
+       void set_player_kdm_directory (boost::filesystem::path p) {
+               maybe_set (_player_kdm_directory, p);
+       }
+
+       void unset_player_kdm_directory () {
+               if (!_player_kdm_directory) {
+                       return;
+               }
+               _player_kdm_directory = boost::none;
+               changed ();
+       }
+
+#ifdef DCPOMATIC_VARIANT_SWAROOP
+       void set_player_background_image (boost::filesystem::path p) {
+               maybe_set (_player_background_image, p, PLAYER_BACKGROUND_IMAGE);
+       }
+
+       void unset_player_background_image () {
+               if (!_player_background_image) {
+                       return;
+               }
+               _player_background_image = boost::none;
+               changed (PLAYER_BACKGROUND_IMAGE);
+       }
+
+       void set_kdm_server_url (std::string s) {
+               maybe_set (_kdm_server_url, s);
+       }
+
+       void set_player_watermark_theatre (std::string p) {
+               maybe_set (_player_watermark_theatre, p);
+       }
+
+       void set_player_watermark_period (int minutes) {
+               maybe_set (_player_watermark_period, minutes);
+       }
+
+       void set_player_watermark_duration (int milliseconds) {
+               maybe_set (_player_watermark_duration, milliseconds);
+       }
+
+       void set_required_monitors (std::vector<Monitor> monitors) {
+               maybe_set (_required_monitors, monitors);
+       }
+
+       void set_player_lock_file (boost::filesystem::path p) {
+               maybe_set (_player_lock_file, p);
+       }
+
+       void unset_player_lock_file () {
+               if (!_player_lock_file) {
+                       return;
+               }
+               _player_lock_file = boost::none;
+               changed ();
+       }
+#endif
+
        void changed (Property p = OTHER);
        boost::signals2::signal<void (Property)> Changed;
        /** Emitted if read() failed on an existing Config file.  There is nothing
@@ -889,6 +1069,7 @@ public:
        void write_cinemas () const;
        void link (boost::filesystem::path new_file) const;
        void copy_and_link (boost::filesystem::path new_file) const;
+       bool have_write_permission () const;
 
        void save_template (boost::shared_ptr<const Film> film, std::string name) const;
        bool existing_template (std::string name) const;
@@ -902,13 +1083,13 @@ public:
        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 ();
@@ -964,6 +1145,7 @@ private:
        std::string _tms_password;
        /** Our cinema sound processor */
        CinemaSoundProcessor const * _cinema_sound_processor;
+       /** The list of possible DCP frame rates that DCP-o-matic will use */
        std::list<int> _allowed_dcp_frame_rates;
        /** Allow any video frame rate for the DCP; if true, overrides _allowed_dcp_frame_rates */
        bool _allow_any_dcp_frame_rate;
@@ -1008,10 +1190,16 @@ private:
        std::string _notification_bcc;
        std::string _notification_email;
        boost::shared_ptr<const dcp::CertificateChain> _signer_chain;
+#ifdef DCPOMATIC_VARIANT_SWAROOP
+       boost::filesystem::path _signer_chain_path;
+#endif
        /** Chain used to decrypt KDMs; the leaf of this chain is the target
         *  certificate for making KDMs given to DCP-o-matic.
         */
        boost::shared_ptr<const dcp::CertificateChain> _decryption_chain;
+#ifdef DCPOMATIC_VARIANT_SWAROOP
+       boost::filesystem::path _decryption_chain_path;
+#endif
        /** true to check for updates on startup */
        bool _check_for_updates;
        bool _check_for_test_updates;
@@ -1054,6 +1242,33 @@ private:
        boost::optional<std::string> _gdc_password;
        Interface _interface_complexity;
        PlayerMode _player_mode;
+       int _image_display;
+       bool _respect_kdm_validity_periods;
+       /** Log file containing things the player does (e.g. started, stopped, loaded
+           playlist etc.)  Does not contain debugging information.
+       */
+       boost::optional<boost::filesystem::path> _player_activity_log_file;
+       /** Log file containing debug information for the player */
+       boost::optional<boost::filesystem::path> _player_debug_log_file;
+       /** A directory containing DCPs whose contents are presented to the user
+           in the dual-screen player mode.  DCPs on the list can be loaded
+           for playback.
+       */
+       boost::optional<boost::filesystem::path> _player_content_directory;
+       boost::optional<boost::filesystem::path> _player_playlist_directory;
+       boost::optional<boost::filesystem::path> _player_kdm_directory;
+#ifdef DCPOMATIC_VARIANT_SWAROOP
+       boost::optional<boost::filesystem::path> _player_background_image;
+       std::string _kdm_server_url;
+       std::string _player_watermark_theatre;
+       /** watermark period in minutes */
+       int _player_watermark_period;
+       /** watermark duration in milliseconds */
+       int _player_watermark_duration;
+       std::vector<Monitor> _required_monitors;
+       /** a file which, if specified, must be present for the player to work */
+       boost::optional<boost::filesystem::path> _player_lock_file;
+#endif
 
        static int const _current_version;