Merge branch 'master' into 2.0
[dcpomatic.git] / src / tools / dcpomatic.cc
index 1e60d96903d3569fe8182e3777c32fd08980f902..6b534f4dea4558fe9318eedc0f2f6519c50bddf8 100644 (file)
@@ -57,6 +57,7 @@
 #include "lib/send_kdm_email_job.h"
 #include "lib/server_finder.h"
 #include "lib/update.h"
+#include "lib/content_factory.h"
 
 using std::cout;
 using std::string;
@@ -75,10 +76,13 @@ static shared_ptr<Film> film;
 static std::string log_level;
 static std::string film_to_load;
 static std::string film_to_create;
+static std::string content_to_add;
 static wxMenu* jobs_menu = 0;
 
 static void set_menu_sensitivity ();
 
+// #define DCPOMATIC_WINDOWS_CONSOLE 1
+
 class FilmChangedDialog
 {
 public:
@@ -253,7 +257,7 @@ public:
                , _hints_dialog (0)
                , _servers_list_dialog (0)
        {
-#ifdef DCPOMATIC_WINDOWS_CONSOLE               
+#if defined(DCPOMATIC_WINDOWS) && defined(DCPOMATIC_WINDOWS_CONSOLE)
                 AllocConsole();
                
                HANDLE handle_out = GetStdHandle(STD_OUTPUT_HANDLE);
@@ -322,6 +326,17 @@ public:
                overall_panel->SetSizer (main_sizer);
        }
 
+       void check_film_state_version (int v)
+       {
+               if (v == 4) {
+                       error_dialog (
+                               this,
+                               _("This film was created with an old version of DVD-o-matic and may not load correctly "
+                                 "in this version.  Please check the film's settings carefully.")
+                               );
+               }
+       }
+
 private:
 
        void set_film ()
@@ -403,6 +418,7 @@ private:
                        try {
                                film.reset (new Film (wx_to_std (c->GetPath ())));
                                film->read_metadata ();
+                               check_film_state_version (film->state_version ());
                                film->log()->set_level (log_level);
                                set_film ();
                        } catch (std::exception& e) {
@@ -474,8 +490,10 @@ private:
                                        shared_ptr<Job> (new SendKDMEmailJob (film, d->screens (), d->dcp (), d->from (), d->until ()))
                                        );
                        }
-               } catch (KDMError& e) {
+               } catch (exception& e) {
                        error_dialog (this, e.what ());
+               } catch (...) {
+                       error_dialog (this, _("An unknown exeception occurred."));
                }
        
                d->Destroy ();
@@ -579,7 +597,8 @@ private:
 static const wxCmdLineEntryDesc command_line_description[] = {
        { wxCMD_LINE_OPTION, "l", "log", "set log level (silent, verbose or timing)", wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_OPTIONAL },
        { wxCMD_LINE_SWITCH, "n", "new", "create new film", wxCMD_LINE_VAL_NONE, wxCMD_LINE_PARAM_OPTIONAL },
-       { wxCMD_LINE_PARAM, 0, 0, "film to load or create", wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_MULTIPLE | wxCMD_LINE_PARAM_OPTIONAL },
+       { wxCMD_LINE_OPTION, "c", "content", "add content file", wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_OPTIONAL },
+       { wxCMD_LINE_PARAM, 0, 0, "film to load or create", wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_OPTIONAL },
        { wxCMD_LINE_NONE, "", "", "", wxCmdLineParamType (0), 0 }
 };
 
@@ -641,6 +660,10 @@ class App : public wxApp
                        film->set_name (boost::filesystem::path (film_to_create).filename().generic_string ());
                }
 
+               if (!content_to_add.empty ()) {
+                       film->examine_and_add_content (content_factory (film, content_to_add));
+               }
+
                _frame = new Frame (_("DCP-o-matic"));
                SetTopWindow (_frame);
                _frame->Maximize ();
@@ -653,6 +676,10 @@ class App : public wxApp
                _timer.reset (new wxTimer (this));
                _timer->Start (1000);
 
+               if (film) {
+                       _frame->check_film_state_version (film->state_version ());
+               }
+
                UpdateChecker::instance()->StateChanged.connect (boost::bind (&App::update_checker_state_changed, this));
                if (Config::instance()->check_for_updates ()) {
                        UpdateChecker::instance()->run ();
@@ -678,10 +705,15 @@ class App : public wxApp
                        if (parser.Found (wxT ("new"))) {
                                film_to_create = wx_to_std (parser.GetParam (0));
                        } else {
-                               film_to_load = wx_to_std (parser.GetParam(0));
+                               film_to_load = wx_to_std (parser.GetParam (0));
                        }
                }
 
+               wxString content;
+               if (parser.Found (wxT ("content"), &content)) {
+                       content_to_add = wx_to_std (content);
+               }
+
                wxString log;
                if (parser.Found (wxT ("log"), &log)) {
                        log_level = wx_to_std (log);
@@ -732,7 +764,7 @@ class App : public wxApp
                }
        }
 
-       wxFrame* _frame;
+       Frame* _frame;
        shared_ptr<wxTimer> _timer;
 };