package kaaass.es2k.mission;
//import java.io.BufferedInputStream;
//import java.io.BufferedReader;
import java.io.File;
//import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import kaaass.es2k.Main;
import kaaass.es2k.Main.SendType;
import kaaass.es2k.crashreport.ErrorUtil;
import kaaass.es2k.file.FileUtil;
import kaaass.es2k.file.StreamGobbler;
import kaaass.es2k.file.ZipCompressor;
import kaaass.es2k.mail.MailUtil;
import kaaass.es2k.mail.MailUtil.Result;
public class MailMission extends IMission {
String[] file = new String[0];
List<File> fileT = new ArrayList<File>();
MailUtil mail = null;
Result result = null;
boolean hasMobi = false;
MailMission() {
}
public MailMission(String par) {
super();
String[] s = new String[1];
s[0] = par;
this.file = s;
Main.missionManager.todo(this.id);
}
public MailMission(String[] par) {
super();
this.file = par;
Main.missionManager.todo(this.id);
}
@Override
public SendType getInfo() {
if (this.isAlive()) {
if (result.isSuccess()) {
return SendType.OK;
} else {
return SendType.ERROR;
}
}
return SendType.SENDING;
}
@Override
public void onStart() {
// String tempPath = System.getProperty("java.io.tmpdir");
boolean flag = false;
for (int ii = 0; ii < file.length; ii++) {
if (file[ii].toLowerCase().endsWith(".pdf")
&& Main.des1.isSelected()) {
if (!flag) {
(new TimeDialog()).showDialog(null, "������ʼת�룬�����ĵȴ���", 5);
// JOptionPane.showMessageDialog(null, "������ʼת�룬�����ĵȴ���");
flag = true;
}
switch (Main.comboF.getSelectedIndex()) {
case 0:
FileUtil.pdf2html(null, file[ii], ii + ".html");
String[] gen = new String[2];
gen[0] = ".\\lib\\kindlegen.exe";
gen[1] = ii + ".html";
Runtime run = Runtime.getRuntime();
try {
Process p = run.exec(gen);
StreamGobbler errorGobbler = new StreamGobbler(
p.getErrorStream(), "ERROR");
errorGobbler.start();
StreamGobbler outGobbler = new StreamGobbler(
p.getInputStream(), "STDOUT");
outGobbler.start();
int w = p.waitFor();
System.out.println(w);
int v = p.exitValue();
System.out.println(v);
if (v == 1) {
String e = "\nError:\n" + errorGobbler.getOut()
+ "\nOut:\n" + outGobbler.getOut();
(new ErrorUtil(e)).dealWithResult();
}
File f = new File(ii + ".html");
f.delete();
} catch (Exception e) {
e.printStackTrace();
(new ErrorUtil(e)).dealWithException();
}
file[ii] = ii + ".mobi";
File f = new File(file[ii]);
fileT.add(f);
FileUtil.makeDirs("mobi/");
FileUtil.copyFileTo(f, new File("mobi/" + ii + ".mobi"));
hasMobi = true;
break;
case 1:
try {
FileUtil.pdf2txt(file[ii]);
} catch (Exception e) {
e.printStackTrace();
(new ErrorUtil(e)).dealWithException();
}
file[ii] = file[ii].substring(0, file[ii].length() - 4)
+ ".txt";
fileT.add(new File(file[ii]));
break;
}
}
if (file[ii].toLowerCase().endsWith(".epub")) {
if (!flag) {
(new TimeDialog()).showDialog(null, "������ʼת�룬�����ĵȴ���", 5);
// JOptionPane.showMessageDialog(null, "������ʼת�룬�����ĵȴ���");
flag = true;
}
String[] gen = new String[2];
gen[0] = ".\\lib\\kindlegen.exe";
gen[1] = file[ii];
Runtime run = Runtime.getRuntime();
try {
Process p = run.exec(gen);
StreamGobbler errorGobbler = new StreamGobbler(
p.getErrorStream(), "ERROR");
errorGobbler.start();
StreamGobbler outGobbler = new StreamGobbler(
p.getInputStream(), "STDOUT");
outGobbler.start();
int w = p.waitFor();
System.out.println(w);
int v = p.exitValue();
System.out.println(v);
if (v == 1) {
String e = "\nError:\n" + errorGobbler.getOut()
+ "\nOut:\n" + outGobbler.getOut();
(new ErrorUtil(e)).dealWithResult();
}
} catch (Exception e) {
e.printStackTrace();
(new ErrorUtil(e)).dealWithException();
}
file[ii] = file[ii].substring(0, file[ii].length() - 4)
+ "mobi";
File f = new File(file[ii]);
fileT.add(f);
FileUtil.makeDirs("mobi/");
FileUtil.copyFileTo(f, new File("mobi/" + ii + ".mobi"));
hasMobi = true;
}
if (file[ii].toLowerCase().endsWith(".mobi")) {
FileUtil.makeDirs("mobi/");
File a = new File(file[ii]);
// FileUtil.copyFileTo(a, new File("mobi/" + a.getName()));
FileUtil.copyFileTo(a, new File("mobi/" + ii + ".mobi"));
hasMobi = true;
}
}
if (hasMobi) {
try {
(new ZipCompressor("mobi.zip")).compress("mobi/");
} catch (RuntimeException e) {
e.printStackTrace();
(new ErrorUtil(e)).dealWithException();
}
fileT.add(new File("mobi.zip"));
List<String> a = new ArrayList<String>();
for (String s : file) {
if (!s.toLowerCase().endsWith(".mobi")) {
a.add(s);
}
}
a.add((new File("mobi.zip")).getAbsolutePath());
String[] b = new String[a.size()];
for (int i = 0; i < a.size(); i++) {
b[i] = a.get(i);
}
file = b;
}
if (flag) {
(new TimeDialog()).showDialog(null, "ת�������������ʼ���͡�", 5);
// JOptionPane.showMessageDialog(null, "ת�������������ʼ���͡�");
}
}
@Override
public void onRun() {
this.mail = new MailUtil(Main.isDebug);
this.result = mail.send("Kindle�����ʼ�", "<p>���ʼ��dz����Զ����͵��ʼ�������ظ���лл��</p>",
file);
if (!result.isSuccess()) {
boolean origin = Main.otherM;
Main.missionFrame.redraw();
for (int i = 0; i < 3; i++) {
if (i == 2) {
Main.otherM = true;
}
result = mail.send("Kindle�����ʼ�",
"<p>���ʼ��dz����Զ����͵��ʼ�������ظ���лл��</p>", file);
Main.missionFrame.redraw();
if (result.isSuccess()) {
break;
}
}
Main.otherM = origin;
(new ErrorUtil(result)).dealWithResult();
}
}
@Override
public void onEnd() {
for (File f : fileT) {
f.delete();
}
if (hasMobi) {
FileUtil.deleteDirectory("mobi/");
}
if (!result.isSuccess()) {
System.out.println("Send error!");
} else {
System.out.println("Send ok!");
}
}
@Override
public void onStop() {
}
@Override
public String getDesc() {
StringBuilder stringbuilder = new StringBuilder();
stringbuilder.append("\n�������ͣ���������");
stringbuilder.append("\n�������");
for (String s : file) {
File f = new File(s);
if (f.getName().equals("mobi.zip")) {
stringbuilder.append("\n �������ļ�");
} else {
stringbuilder.append("\n " + f.getName());
}
}
stringbuilder.append("\n�ļ�λ�ã�");
stringbuilder.append("\n " + file[0] + " ��");
stringbuilder.append("\n����״̬��");
stringbuilder.append("\n " + getStates());
return stringbuilder.toString();
}
@Override
public Object getType() {
return new MailMission();
}
public Result getResult() {
return result;
}
@Override
public String getTitle() {
File f = new File(file[0]);
return f.getName() + " ���ļ�";
}
@Override
public String getStates() {
if (this.result != null) {
if (this.result.isSuccess()) {
return "�����";
} else {
if (Main.missionManager.todoList.isEmpty()) {
return "���ʹ���";
} else {
if (Main.missionManager.todoList.get(0) == this.id) {
return "���ʹ���,��������";
} else {
return "���ʹ���";
}
}
}
} else if (Main.missionManager.todoList.get(0) == this.id) {
return "������";
} else {
return "�Ŷ���";
}
}
@Override
public String getTypeName() {
return "��������";
}
@Override
public IMission restart() {
return new MailMission(this.file);
}
}