流利说-英语 v8.47.26版本的 MD5 值为:0079dce5ff96e6cdbc95c261b3f51387
以下内容为反编译后的 Converter.java 源代码,内容仅作参考
package com.herewhite.sdk;
import com.google.gson.e;
import com.google.gson.m;
import com.herewhite.sdk.domain.ConversionInfo;
import com.herewhite.sdk.domain.ConvertErrorCode;
import com.herewhite.sdk.domain.ConvertException;
import com.herewhite.sdk.domain.ConvertedFiles;
import com.herewhite.sdk.domain.ConverterStatus;
import com.herewhite.sdk.domain.PptPage;
import com.herewhite.sdk.domain.Scene;
import com.qiniu.android.http.Client;
import java.io.IOException;
import java.util.Date;
import java.util.HashMap;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
public class Converter {
static final String PPT_ORIGIN = "https://cloudcapiv4.herewhite.com";
private Date beginDate;
OkHttpClient client;
private boolean converting;
private e gson;
private long interval;
private String roomToken;
private ConverterStatus status;
private String taskId;
private long timeout;
private static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");
static ExecutorService poolExecutor = Executors.newSingleThreadExecutor();
public interface CheckCallback {
void onCheckFailure(Exception exc);
void onCheckResponse(ConversionInfo conversionInfo);
}
public interface ConvertCallback {
void onConvertFailure(ConvertException convertException);
void onConvertFinish(ConversionInfo conversionInfo);
void onConvertProgress(Double d, ConversionInfo conversionInfo);
}
public enum ConvertType {
Unknown,
Static,
Dynamic
}
public String getRoomToken() {
return this.roomToken;
}
public String getTaskId() {
return this.taskId;
}
public long getInterval() {
return this.interval;
}
public void setInterval(long j) {
this.interval = j;
}
public long getTimeout() {
return this.timeout;
}
public void setTimeout(long j) {
this.timeout = j;
}
public ConverterStatus getStatus() {
return this.status;
}
public Converter(String str) {
this(str, 15000L, 180000L);
}
public Converter(String str, long j, long j2) {
this.converting = true;
this.client = new OkHttpClient();
this.roomToken = str;
this.gson = new e();
this.status = ConverterStatus.Idle;
this.interval = j;
this.timeout = j2;
}
public void startConvertTask(final String str, final ConvertType convertType, final ConverterCallbacks converterCallbacks) {
this.beginDate = new Date();
poolExecutor.execute(new Runnable() {
@Override
public void run() {
final CountDownLatch countDownLatch = new CountDownLatch(1);
this.createConvertTask(str, convertType, new Callback() {
@Override
public void onFailure(Call call, IOException iOException) {
this.status = ConverterStatus.CreateFail;
converterCallbacks.onFailure(new ConvertException(ConvertErrorCode.CreatedFail, iOException));
countDownLatch.countDown();
}
@Override
public void onResponse(Call call, Response response) throws IOException {
m mVar = (m) Converter.this.gson.fromJson(response.body().string(), m.class);
if (response.code() == 200) {
if (mVar.dM("msg").dK("succeed").getAsBoolean()) {
this.status = ConverterStatus.Created;
this.taskId = mVar.dM("msg").dJ("taskUUID").TT();
} else {
this.status = ConverterStatus.CreateFail;
converterCallbacks.onFailure(new ConvertException(ConvertErrorCode.CreatedFail, Converter.this.gson.a(mVar)));
}
} else {
this.status = ConverterStatus.CreateFail;
converterCallbacks.onFailure(new ConvertException(ConvertErrorCode.ConvertFail, Converter.this.gson.a(mVar)));
}
countDownLatch.countDown();
}
});
try {
countDownLatch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
if (this.status == ConverterStatus.CreateFail) {
return;
}
this.polling(Converter.this.taskId, convertType, new ConvertCallback() {
@Override
public void onConvertProgress(Double d, ConversionInfo conversionInfo) {
converterCallbacks.onProgress(d, conversionInfo);
}
@Override
public void onConvertFinish(ConversionInfo conversionInfo) {
this.status = ConverterStatus.Success;
converterCallbacks.onFinish(this.getPpt(conversionInfo, convertType), conversionInfo);
}
@Override
public void onConvertFailure(ConvertException convertException) {
converterCallbacks.onFailure(convertException);
}
});
}
});
}
public void createConvertTask(String str, ConvertType convertType, Callback callback) {
String str2 = convertType.equals(ConvertType.Dynamic) ? "dynamic_conversion" : "static_conversion";
HashMap hashMap = new HashMap();
hashMap.put("sourceUrl", str);
hashMap.put("serviceType", str2);
this.client.newCall(new Request.Builder().url("https://cloudcapiv4.herewhite.com/services/conversion/tasks?roomToken=" + this.roomToken).header(Client.ContentTypeHeader, Client.JsonMime).header("Accept", Client.JsonMime).post(RequestBody.create(JSON, this.gson.aB(hashMap))).build()).enqueue(callback);
}
public void polling(String str, ConvertType convertType, final ConvertCallback convertCallback) {
boolean z = this.status == ConverterStatus.Timeout || this.status == ConverterStatus.CheckingFail || this.status == ConverterStatus.GetDynamicFail;
if (this.status == ConverterStatus.Created || z) {
Date date = new Date(this.beginDate.getTime() + this.timeout);
while (this.converting && date.after(new Date())) {
final CountDownLatch countDownLatch = new CountDownLatch(1);
this.status = ConverterStatus.Checking;
checkProgress(str, convertType, new CheckCallback() {
@Override
public void onCheckResponse(ConversionInfo conversionInfo) {
ConversionInfo.ServerConversionStatus convertStatus = conversionInfo.getConvertStatus();
if (convertStatus == ConversionInfo.ServerConversionStatus.Fail || convertStatus == ConversionInfo.ServerConversionStatus.NotFound) {
Converter.this.converting = false;
this.status = ConverterStatus.Fail;
convertCallback.onConvertFailure(new ConvertException(convertStatus == ConversionInfo.ServerConversionStatus.Fail ? ConvertErrorCode.ConvertFail : ConvertErrorCode.NotFound, conversionInfo.getReason()));
} else if (convertStatus == ConversionInfo.ServerConversionStatus.Finished) {
Converter.this.converting = false;
convertCallback.onConvertFinish(conversionInfo);
} else {
this.status = ConverterStatus.WaitingForNextCheck;
convertCallback.onConvertProgress(conversionInfo.getConvertedPercentage(), conversionInfo);
}
try {
Thread.sleep(Converter.this.interval);
} catch (Exception e) {
e.printStackTrace();
}
countDownLatch.countDown();
}
@Override
public void onCheckFailure(Exception exc) {
convertCallback.onConvertFailure(new ConvertException(ConvertErrorCode.CheckFail));
Converter.this.converting = false;
countDownLatch.countDown();
}
});
try {
countDownLatch.await();
} catch (Exception e) {
e.printStackTrace();
}
}
if (this.status == ConverterStatus.WaitingForNextCheck) {
this.status = ConverterStatus.Timeout;
convertCallback.onConvertFailure(new ConvertException(ConvertErrorCode.CheckTimeout));
}
}
}
private void checkProgress(String str, ConvertType convertType, final CheckCallback checkCallback) {
String str2 = convertType.equals(ConvertType.Dynamic) ? "dynamic_conversion" : "static_conversion";
Call newCall = this.client.newCall(new Request.Builder().url("https://cloudcapiv4.herewhite.com/services/conversion/tasks/" + str + "/progress?roomToken=" + this.roomToken + "&serviceType=" + str2).header(Client.ContentTypeHeader, Client.JsonMime).header("Accept", Client.JsonMime).build());
final CountDownLatch countDownLatch = new CountDownLatch(1);
this.status = ConverterStatus.Checking;
newCall.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException iOException) {
checkCallback.onCheckFailure(iOException);
this.status = ConverterStatus.CheckingFail;
countDownLatch.countDown();
}
@Override
public void onResponse(Call call, Response response) throws IOException {
m mVar = (m) Converter.this.gson.fromJson(response.body().string(), m.class);
if (response.code() == 200) {
checkCallback.onCheckResponse((ConversionInfo) Converter.this.gson.fromJson(Converter.this.gson.a(mVar.dM("msg").dM("task")), ConversionInfo.class));
} else {
checkCallback.onCheckFailure(new ConvertException(ConvertErrorCode.ConvertFail, Converter.this.gson.a(mVar)));
}
countDownLatch.countDown();
}
});
try {
countDownLatch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public ConvertedFiles getPpt(ConversionInfo conversionInfo, ConvertType convertType) {
int length = conversionInfo.getConvertedFileList().length;
String[] strArr = new String[length];
Scene[] sceneArr = new Scene[length];
ConvertedFiles convertedFiles = new ConvertedFiles();
convertedFiles.setTaskId(this.taskId);
convertedFiles.setType(convertType(convertType));
int i = 0;
while (i < length) {
PptPage pptPage = conversionInfo.getConvertedFileList()[i];
pptPage.setSrc(conversionInfo.getPrefix() + pptPage.getSrc());
strArr[i] = pptPage.getSrc();
int i2 = i + 1;
sceneArr[i] = new Scene(String.valueOf(i2), pptPage);
i = i2;
}
convertedFiles.setSlideURLs(strArr);
convertedFiles.setScenes(sceneArr);
return convertedFiles;
}
private com.herewhite.sdk.converter.ConvertType convertType(ConvertType convertType) {
if (convertType == ConvertType.Static) {
return com.herewhite.sdk.converter.ConvertType.Static;
}
return com.herewhite.sdk.converter.ConvertType.Dynamic;
}
}