1 /////////////////////////////////////////////////////////////////////////////
2 // Name:        ProcessPreview.cpp
3 // Author:      Alex Thuering
4 // Created:     3.10.2014 (refactored)
5 // RCS-ID:      $Id: ProcessPreview.cpp,v 1.6 2016/08/21 13:36:55 ntalex Exp $
6 // Copyright:   (c) Alex Thuering
7 // Licence:     GPL
8 /////////////////////////////////////////////////////////////////////////////
9 
10 #include "ProcessPreview.h"
11 #include "Config.h"
12 #include "ProgressDlg.h"
13 #include "BurnDlg.h"
14 #include <wx/msgdlg.h>
15 
16 /** Constructor */
ProcessPreview(ProgressDlg * progressDlg,BurnDlg * burnDlg,const wxString & dvdOutDir)17 ProcessPreview::ProcessPreview(ProgressDlg* progressDlg, BurnDlg* burnDlg, const wxString& dvdOutDir): Process(progressDlg) {
18 	this->burnDlg = burnDlg;
19 	this->dvdOutDir = dvdOutDir;
20 }
21 
22 /** Returns true, if process need be executed */
IsNeedExecute()23 bool ProcessPreview::IsNeedExecute() {
24 	return burnDlg->DoPreview() && !progressDlg->DoShutdown();
25 }
26 
27 /** Returns true, if gauge need be updated */
IsUpdateGauge()28 bool ProcessPreview::IsUpdateGauge() {
29 	return false;
30 }
31 
32 /** Executes process */
Execute()33 bool ProcessPreview::Execute() {
34 	if (progressDlg->WasCanceled())
35 		return false;
36 	progressDlg->AddSummaryMsg(_("Start preview"));
37 	wxString cmd = s_config.GetPreviewCmd();
38 	if (cmd == wxT("wmplayer")) {
39 		cmd = wxT("start wmplayer \"$DIR\\VIDEO_TS\\VIDEO_TS.VOB\"");
40 		cmd.Replace(wxT("$DIR"), dvdOutDir.Mid(0, dvdOutDir.length() - 1));
41 		if (!wxShell(cmd)) {
42 			wxString msg = _("Starting of selected DVD player is failed. \
43 Please open the following directory with your favorite DVD player: ");
44 			msg += dvdOutDir;
45 			wxMessageBox(msg, _("Burn"), wxOK|wxICON_ERROR, progressDlg);
46 		}
47 	} else if (cmd.StartsWith(wxT("/Applications/VLC.app/Contents/MacOS/VLC"))) {
48 		if (!wxFileExists(wxT("/Applications/VLC.app/Contents/MacOS/VLC"))) {
49 			wxString msg = _("VLC player is not found. \
50 Please install VLC player (http://www.videolan.org) in Applications directory \
51 or open the following directory with your favorite DVD player: ");
52 			msg += dvdOutDir;
53 			wxMessageBox(msg, _("Burn"), wxOK|wxICON_ERROR, progressDlg);
54 		} else {
55 			cmd += wxT(" \"dvd:///$DIR\"");
56 			cmd.Replace(wxT("$DIR"), dvdOutDir.Mid(0, dvdOutDir.length() - 1));
57 			if (wxExecute(cmd, wxEXEC_ASYNC) < 0) {
58 				wxString msg = _("Starting of selected DVD player is failed. \
59 Please open the following directory with your favorite DVD player: ");
60 				msg += dvdOutDir;
61 				wxMessageBox(msg, _("Burn"), wxOK|wxICON_ERROR, progressDlg);
62 			}
63 		}
64 	} else {
65 		if (cmd.Find(wxT("%1")) > 0) {
66 			cmd.Replace(wxT("%1"), wxT("$DIR"));
67 		} else if (cmd.Find(wxT("$DIR")) < 0) {
68 			if (cmd[0] != wxT('"'))
69 				cmd = wxT('"') + cmd + wxT('"');
70 			if (cmd.Find(wxT("wmplayer")) >= 0)
71 				cmd += wxT(" \"$DIR\\VIDEO_TS\\VIDEO_TS.VOB\"");
72 			else if (cmd.Find(wxT("mpc-hc")) >= 0)
73 				cmd += wxT(" /dvd \"$DIR\"");
74 			else
75 				cmd += wxT(" \"dvd:///$DIR\"");
76 		}
77 		cmd.Replace(wxT("$DIR"), dvdOutDir.Mid(0, dvdOutDir.length() - 1));
78 		if (!ExecAsync(cmd)) {
79 			wxString msg = _("Starting of selected DVD player is failed. \
80 Please open the following directory with your favorite DVD player: ");
81 			msg += dvdOutDir;
82 			wxMessageBox(msg, _("Burn"), wxOK|wxICON_ERROR, progressDlg);
83 		}
84 	}
85 	if (burnDlg->DoBurn() || burnDlg->DoCreateIso()) {
86 		wxString msg = burnDlg->DoBurn() ? _("Do you want to burn this video to DVD?") : _("Do you want to create an iso image of this video?");
87 		if (wxMessageBox(msg, _("Burn"), wxYES_NO|wxICON_QUESTION, progressDlg) == wxNO) {
88 			progressDlg->AddSummaryMsg(_("Aborted"), wxEmptyString, *wxRED);
89 			return false;
90 		}
91 	}
92 	return true;
93 }
94