Synchronizer.java 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
  1. /*
  2. * To change this license header, choose License Headers in Project Properties.
  3. * To change this template file, choose Tools | Templates
  4. * and open the template in the editor.
  5. */
  6. package de.nplusc.izc.Utilities.WPCMgr;
  7. import de.nplusc.izc.tools.IOtools.FileTK;
  8. import de.nplusc.izc.tools.baseTools.Tools;
  9. import java.io.File;
  10. import java.io.FileInputStream;
  11. import java.io.FileNotFoundException;
  12. import java.io.IOException;
  13. import java.util.ArrayList;
  14. import java.util.Arrays;
  15. import java.util.LinkedHashMap;
  16. import java.util.List;
  17. import org.yaml.snakeyaml.DumperOptions;
  18. import org.yaml.snakeyaml.Yaml;
  19. /**
  20. *
  21. * @author LH
  22. */
  23. public class Synchronizer
  24. {
  25. public static void main(String[] args)
  26. {
  27. String path = "";
  28. String res = "";
  29. if(args.length>1)
  30. {
  31. path = args[0];
  32. res = args[1];
  33. }
  34. //DEBUG
  35. //path="T:\\wpc";
  36. //res="1920x1080";
  37. try
  38. {
  39. LinkedHashMap<String,Object> data = (LinkedHashMap<String,Object>) new Yaml().load(new FileInputStream(path+"\\00_meta\\state.yml"));
  40. if(data.get("HEAD")==null)
  41. {
  42. initPipeLine(path, res);
  43. }
  44. else
  45. {
  46. updatePipeLine(path, res);
  47. }
  48. }
  49. catch (FileNotFoundException ex)
  50. {
  51. ex.printStackTrace();
  52. }
  53. }
  54. public static void initPipeLine(String path,String res)
  55. {
  56. String[] dirsExist = FileTK.getDirectoryContent(/*args[0]*/path,true);
  57. final int pid[] = new int[]{0};
  58. List<String[]> cmdQueue = new ArrayList<>();
  59. List<String> resultFiles = new ArrayList<>();
  60. List<String> packagesInitialized = new ArrayList<>();
  61. Arrays.stream(dirsExist).filter(t -> !t.startsWith("00_") && new File(path+"\\" + t).isDirectory()).forEach(t ->
  62. {
  63. packagesInitialized.add(t);
  64. Object[] rv = processPackage(/*args[0]+*/path+"\\" + t, pid[0]++, res);
  65. cmdQueue.addAll((List<String[]>) rv[0]);
  66. resultFiles.addAll((List<String>) rv[1]);
  67. });
  68. DumperOptions yamlOptions = new DumperOptions();
  69. yamlOptions.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK);
  70. Yaml y = new Yaml(yamlOptions);
  71. //FileTK.writeFile(new Yaml().dump(cmdQueue),"T:\\wpc\\00_meta\\debug_.yaml");
  72. cmdQueue.forEach(x -> Tools.runCmdWithPassthru(System.out, x));
  73. try
  74. {
  75. LinkedHashMap<String,Object> data = (LinkedHashMap<String,Object>) y.load(new FileInputStream(path+"\\00_meta\\state.yml"));
  76. String targetDir = (String) data.get("Outdir");
  77. resultFiles.forEach(entry ->
  78. {
  79. String fn = FileTK.getFileName(entry);
  80. FileTK.kopierpaste(new File(entry),new File(targetDir+"\\"+fn));
  81. });
  82. data.put("HEAD", packagesInitialized);
  83. String o = y.dump(data);
  84. FileTK.writeFile(o, path+"\\00_meta\\state.yml");
  85. }
  86. catch (FileNotFoundException ex)
  87. {
  88. ex.printStackTrace();
  89. }
  90. System.exit(0);
  91. }
  92. public static void updatePipeLine(String path,String res)
  93. {
  94. DumperOptions yamlOptions = new DumperOptions();
  95. yamlOptions.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK);
  96. Yaml y = new Yaml(yamlOptions);
  97. LinkedHashMap<String,Object> data = null;
  98. try
  99. {
  100. data = (LinkedHashMap<String,Object>) y.load(new FileInputStream(path+"\\00_meta\\state.yml"));
  101. }
  102. catch(IOException lm)
  103. {
  104. }
  105. if(data==null)
  106. {
  107. return;
  108. }
  109. String[] dirsExist = FileTK.getDirectoryContent(/*args[0]*/path,true);
  110. List<String[]> cmdQueue = new ArrayList<>();
  111. List<String> resultFiles = new ArrayList<>();
  112. List<String> packagesInitialized = (List<String>) data.get("HEAD");
  113. Arrays.stream(dirsExist).filter(t -> !t.startsWith("00_") && new File(path+"\\" + t).isDirectory()).forEach(t ->
  114. {
  115. if(!packagesInitialized.contains(t)&&FileTK.getDirectoryContent(path+"\\" + t+"\\proc").length>0) //package initialisiert sich erst wenn mindestens ein WP in proc
  116. {
  117. packagesInitialized.add(t); //vv-- highest IDX of package list aka current -> results in counter continuity
  118. Object[] rv = processPackage(/*args[0]+*/path+"\\" + t, packagesInitialized.size()-1, res);
  119. cmdQueue.addAll((List<String[]>) rv[0]);
  120. resultFiles.addAll((List<String>) rv[1]);
  121. }
  122. });
  123. //FileTK.writeFile(new Yaml().dump(cmdQueue),"T:\\wpc\\00_meta\\debug_.yaml");
  124. cmdQueue.forEach(x -> Tools.runCmdWithPassthru(System.out, x));
  125. String targetDir = (String) data.get("Outdir");
  126. resultFiles.forEach(entry ->
  127. {
  128. String fn = FileTK.getFileName(entry);
  129. FileTK.kopierpaste(new File(entry),new File(targetDir+"\\"+fn));
  130. });
  131. data.put("HEAD", packagesInitialized);
  132. String o = y.dump(data);
  133. FileTK.writeFile(o, path+"\\00_meta\\state.yml");
  134. System.exit(0);
  135. }
  136. public static Object[] processPackage(String path,int packID,String res)
  137. {
  138. /*
  139. if(false)
  140. {
  141. System.out.println(packID+"|"+path);
  142. return;
  143. }*/
  144. System.out.println(path);
  145. FileTK.verzeichnisKillen(new File(path+"\\p"));
  146. new File(path+"\\p\\b\\").mkdirs();
  147. String[] availablePackagesNormal = FileTK.getDirectoryContent(path+"\\proc",true);
  148. String[] availablePackagesNoResize = FileTK.getDirectoryContent(path+"\\k-i-p",true);
  149. String[] availablePackagesBFrames = FileTK.getDirectoryContent(path+"\\b-frames",true);
  150. int c1 = availablePackagesNormal==null?0:availablePackagesNormal.length;
  151. int c2 = availablePackagesNoResize==null?0:availablePackagesNoResize.length;
  152. //System.out.println(c1+"|"+c2+"||"+(c1+c2));
  153. String[][] mergedList = new String[c1+c2][2];
  154. for (int i = 0; i < c1 ; i++)
  155. {
  156. mergedList[i][0] = availablePackagesNormal[i];
  157. mergedList[i][1] = "proc";
  158. }
  159. for (int i = 0; i < c2; i++)
  160. {
  161. mergedList[i+c1][0] = availablePackagesNoResize[i];
  162. mergedList[i+c1][1] = "k-i-p";
  163. }
  164. //main inited_b's b_loop
  165. int[] cntr = new int[]{0,0,0};//HAX
  166. //Arrays.sort(mergedList, ); //verwursteln....
  167. List<String[]> commandQueue = new ArrayList<>();
  168. List<String> resultFiles = new ArrayList<>();
  169. Arrays.stream(mergedList).sorted((x, y) ->
  170. {
  171. return x[0].compareToIgnoreCase(y[0]);
  172. }).forEach((x) ->
  173. {
  174. String outFile = path + "\\p\\" + String.format("%04d", packID) + "_" + String.format("%04d", cntr[0]++);
  175. String[] y = x[1].equals("proc")
  176. ? new String[]
  177. {
  178. "C:\\Program Files\\ImageMagick-6.8.8-Q16\\convert.exe", path + "\\" + x[1] + "\\" + x[0], "-resize", res + "!", outFile + ".jpg"
  179. }
  180. : new String[]
  181. {
  182. "C:\\Program Files\\ImageMagick-6.8.8-Q16\\convert.exe", path + "\\" + x[1] + "\\" + x[0], "-resize", res + ">", "-background", "black", "-gravity", "center", "-extent",res, outFile + ".jpg"
  183. };
  184. resultFiles.add(outFile+ ".jpg");
  185. //System.out.println(Arrays.toString(y));
  186. if (cntr[0] % 5 == 0)
  187. {
  188. if (cntr[1] < availablePackagesBFrames.length)
  189. {
  190. String bp = path+"\\p\\b\\"+cntr[1]+".jpg";
  191. commandQueue.add(new String[]
  192. {
  193. "C:\\Program Files\\ImageMagick-6.8.8-Q16\\convert.exe", path + "\\b-frames\\" + availablePackagesBFrames[cntr[1]], "-resize", res + "!", bp
  194. });
  195. availablePackagesBFrames[cntr[1]]=bp;
  196. cntr[1]++;
  197. }
  198. commandQueue.add(new String[]{"cmd.exe","/c","copy",availablePackagesBFrames[cntr[2]],outFile+"b.jpg"});
  199. cntr[2]=((cntr[2]+1)%availablePackagesBFrames.length);
  200. resultFiles.add(outFile+ "b.jpg");
  201. }
  202. commandQueue.add(y);
  203. }
  204. ); //System.out.println(packID+"|"+x[0])
  205. //DBG FileTK.writeFile(new Yaml().dump(commandQueue),"T:\\wpc\\00_meta\\debug_"+packID+".yaml");
  206. //normal
  207. //convert in.image -resize res! out.image
  208. //keepaspect's
  209. // res+">"
  210. //convert in.image -resize res+">" -background black -gravity center -extent res out.image
  211. return new Object[]{commandQueue,resultFiles};
  212. }
  213. }