X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;ds=sidebyside;f=webdvd.cpp;h=9c26c8fb20ef13df89ffc2ab9c6ea34a57c46282;hb=392b6372714c8c2b2bf2389b86fb8f47ef70c2ef;hp=c4cf8a95f662d35d7ab67c3e14f1a4c50b70b8f1;hpb=80da930b8321600a81d3d9ae39ff4b27def501c3;p=videolink.git diff --git a/webdvd.cpp b/webdvd.cpp index c4cf8a9..9c26c8f 100644 --- a/webdvd.cpp +++ b/webdvd.cpp @@ -154,6 +154,8 @@ namespace const std::string & main_page_uri, const std::string & output_dir); + bool is_finished() const; + private: dvd_contents::pgc_ref add_menu(const std::string & uri); dvd_contents::pgc_ref add_title(const std::string & uri); @@ -185,6 +187,8 @@ namespace std::auto_ptr background_temp_; struct page_state; std::auto_ptr page_state_; + + bool finished_; }; webdvd_window::webdvd_window( @@ -196,7 +200,8 @@ namespace stylesheet_(load_css("file://" WEBDVD_LIB_DIR "/webdvd.css")), pending_window_update_(false), pending_req_count_(0), - have_tweaked_page_(false) + have_tweaked_page_(false), + finished_(false) { set_size_request(frame_params_.width, frame_params_.height); set_resizable(false); @@ -210,6 +215,11 @@ namespace load_next_page(); } + bool webdvd_window::is_finished() const + { + return finished_; + } + dvd_contents::pgc_ref webdvd_window::add_menu(const std::string & uri) { dvd_contents::pgc_ref next_menu(dvd_contents::menu_pgc, @@ -357,7 +367,10 @@ namespace try { if (!process_page()) + { + finished_ = true; Gtk::Main::quit(); + } } catch (std::exception & e) { @@ -820,6 +833,12 @@ namespace } // namespace +void fatal_error(const std::string & message) +{ + std::cerr << "Fatal error: " << message << "\n"; + Gtk::Main::quit(); +} + int main(int argc, char ** argv) { try @@ -899,6 +918,11 @@ int main(int argc, char ** argv) { argi += 2; } + else if (std::strcmp(argv[argi], "--save-temps") == 0) + { + temp_file::keep_all(true); + argi += 1; + } else if (argv[argi][0] == '-') { std::cerr << "Invalid option: " << argv[argi] << "\n"; @@ -943,12 +967,14 @@ int main(int argc, char ** argv) // Run the browser/converter webdvd_window window(frame_params, menu_url, output_dir); Gtk::Main::run(window); + + return ((preview_mode || window.is_finished()) + ? EXIT_SUCCESS + : EXIT_FAILURE); } catch (std::exception & e) { std::cerr << "Fatal error: " << e.what() << "\n"; return EXIT_FAILURE; } - - return EXIT_SUCCESS; }