use terminal when copying memory card
[meviz.git] / src / main / java / eu / svjatoslav / meviz / grabmemcard / Main.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.grabmemcard;
11
12 import java.io.File;
13 import java.io.IOException;
14 import java.util.Date;
15 import java.util.GregorianCalendar;
16
17 import eu.svjatoslav.commons.file.CommonPathResolver;
18 import eu.svjatoslav.commons.file.FilePathParser;
19 import eu.svjatoslav.meviz.Module;
20 import eu.svjatoslav.meviz.encoder.BitrateParameter;
21 import eu.svjatoslav.meviz.encoder.EncodingOptions;
22 import eu.svjatoslav.meviz.encoder.EncodingPlan;
23 import eu.svjatoslav.meviz.encoder.EncodingTask;
24 import eu.svjatoslav.meviz.encoder.converters.AbstractConverter;
25 import eu.svjatoslav.meviz.encoder.converters.AvconvVideo;
26
27 public class Main implements Module {
28
29         @Override
30         public String getDescription() {
31                 return "Convenience helper to retrieve contents of inserted memory card.";
32         }
33
34         public File[] getDiskVideos(final File file) {
35                 final String videosPath = file.getAbsolutePath() + "/AVCHD/BDMV/STREAM/";
36                 final File videosDirectory = new File(videosPath);
37
38                 if (!videosDirectory.exists())
39                         return new File[0];
40
41                 return videosDirectory.listFiles();
42         }
43
44         public String getDoubleDigit(final int value) {
45                 String valueString = Integer.toString(value);
46                 if (valueString.length() == 1)
47                         valueString = "0" + valueString;
48                 return valueString;
49         };
50
51         private EncodingOptions getEncodingOptions() {
52                 final EncodingOptions options = new EncodingOptions();
53                 options.setVideoBitrate(BitrateParameter.bitrate.COPY);
54                 options.setAudioBitrate(BitrateParameter.bitrate.COPY);
55                 return options;
56         }
57
58         @Override
59         public String getModuleCommand() {
60                 return "grabmemcard";
61         }
62
63         @SuppressWarnings("deprecation")
64         public File getTargetDirectory() {
65                 final Date now = new Date();
66                 final GregorianCalendar calendar = new GregorianCalendar();
67
68                 final StringBuffer directoryName = new StringBuffer();
69                 directoryName.append(
70                                 calendar.get(GregorianCalendar.YEAR) + "." + getDoubleDigit(calendar.get(GregorianCalendar.MONTH) + 1)
71                                                 + "." + getDoubleDigit(calendar.get(GregorianCalendar.DAY_OF_MONTH)) + " ");
72
73                 directoryName.append(getDoubleDigit(now.getHours()) + ":" + getDoubleDigit(now.getMinutes()) + ":"
74                                 + getDoubleDigit(now.getSeconds()));
75
76                 final String targetDirectoryPath = CommonPathResolver.getDesktopDirectory().getAbsolutePath() + "/"
77                                 + directoryName.toString() + "/";
78
79                 System.out.println("Target directory path: " + targetDirectoryPath);
80
81                 return new File(targetDirectoryPath);
82         }
83
84         private File getTargetFile(final File targetDirectory, final File sourceFile) {
85                 // compute target file path
86                 final StringBuffer targetFilePath = new StringBuffer();
87                 targetFilePath.append(targetDirectory.getAbsolutePath());
88                 targetFilePath.append("/");
89                 targetFilePath.append(FilePathParser.getFileNameWithoutExtension(sourceFile));
90                 targetFilePath.append(".mp4");
91                 final File targetFile = new File(targetFilePath.toString());
92                 return targetFile;
93         }
94
95         @Override
96         public void run(final String[] args) throws IOException {
97
98                 final File targetDirectory = getTargetDirectory();
99                 targetDirectory.mkdirs();
100
101                 final AbstractConverter converter = new AvconvVideo();
102                 final EncodingPlan encodingPlan = new EncodingPlan();
103
104                 final String userName = System.getProperty("user.name");
105
106                 final File file = new File("/media/" + userName + "/");
107
108                 for (final File insertedDisk : file.listFiles()) {
109                         final File[] diskVideos = getDiskVideos(insertedDisk);
110
111                         for (final File sourceFile : diskVideos) {
112
113                                 final File targetFile = getTargetFile(targetDirectory, sourceFile);
114
115                                 final EncodingTask encodingTask = new EncodingTask(sourceFile, targetFile, converter, "mp4");
116                                 encodingTask.setUseTerminal(true);
117                                 encodingPlan.scheduleTask(encodingTask);
118                         }
119                 }
120
121                 encodingPlan.execute(getEncodingOptions());
122         }
123
124         @Override
125         public void showCommandlineHelp() {
126                 System.out.println("memory card grabber has no commandline options");
127         }
128
129 }