use terminal when copying memory card
[meviz.git] / src / main / java / eu / svjatoslav / meviz / encoder / EncodingTask.java
1 /*
2  * Meviz - Various tools collection to work with multimedia.
3  * Copyright (C) 2012, Svjatoslav Agejenko, svjatoslav@svjatoslav.eu
4  *
5  * This program is free software; you can redistribute it and/or
6  * modify it under the terms of version 2 of the GNU General Public License
7  * as published by the Free Software Foundation.
8  */
9
10 package eu.svjatoslav.meviz.encoder;
11
12 import java.io.File;
13
14 import eu.svjatoslav.meviz.encoder.converters.AbstractConverter;
15
16 public class EncodingTask {
17
18         /**
19          * Source file to encode
20          */
21         private final File source;
22
23         /**
24          * Target file.
25          */
26         private final File target;
27
28         private final AbstractConverter converter;
29
30         private boolean useTerminal;
31
32         private final String targetFormat;
33
34         public EncodingTask(final File source, final File target, final AbstractConverter converter,
35                         final String targetFormat) {
36
37                 this.source = source;
38                 this.target = target;
39                 this.converter = converter;
40                 this.targetFormat = targetFormat;
41         }
42
43         /**
44          * @return the useTerminal
45          */
46         public boolean doUseTerminal() {
47                 return useTerminal;
48         }
49
50         public String encodeApostrophes(final String input) {
51                 final StringBuffer result = new StringBuffer();
52
53                 for (final char c : input.toCharArray()) {
54                         if (c == '\'') {
55                                 result.append("'\\''");
56                                 continue;
57                         }
58                         result.append(c);
59                 }
60
61                 return result.toString();
62         }
63
64         public void execute(final EncodingOptions encodingOptions) {
65                 try {
66                         String command = getCommand(encodingOptions);
67
68                         if (doUseTerminal())
69                                 command = "xterm -e '" + encodeApostrophes(command) + "'";
70
71                         System.out.println("Executing command: " + command);
72
73                         final Runtime runtime = Runtime.getRuntime();
74                         final Process process = runtime.exec(new String[] { "/bin/bash", "-c", command });
75
76                         process.waitFor();
77
78                 } catch (final Exception e) {
79                         System.out.println(e.toString());
80                         e.printStackTrace();
81                 }
82
83         }
84
85         public String getCommand(final EncodingOptions encodingOptions) {
86                 return converter.getCommand(source, target, encodingOptions, targetFormat);
87         }
88
89         /**
90          * @param useTerminal
91          *            the useTerminal to set
92          */
93         public void setUseTerminal(final boolean useTerminal) {
94                 this.useTerminal = useTerminal;
95         }
96 }