2020-05-19 23:16:15 -07:00
|
|
|
package com.rusefi.tools.online;
|
|
|
|
|
2020-07-02 19:22:50 -07:00
|
|
|
import com.rusefi.shared.FileUtil;
|
2020-06-04 20:32:52 -07:00
|
|
|
import com.rusefi.tune.xml.Msq;
|
|
|
|
import com.rusefi.ui.AuthTokenPanel;
|
2020-05-22 11:03:10 -07:00
|
|
|
import org.apache.http.HttpEntity;
|
|
|
|
import org.apache.http.HttpResponse;
|
|
|
|
import org.apache.http.client.HttpClient;
|
|
|
|
import org.apache.http.client.methods.HttpPost;
|
2020-06-22 21:24:32 -07:00
|
|
|
import org.apache.http.concurrent.BasicFuture;
|
|
|
|
import org.apache.http.concurrent.FutureCallback;
|
2020-05-22 11:03:10 -07:00
|
|
|
import org.apache.http.entity.mime.MultipartEntity;
|
|
|
|
import org.apache.http.entity.mime.content.FileBody;
|
|
|
|
import org.apache.http.entity.mime.content.StringBody;
|
|
|
|
import org.apache.http.impl.client.DefaultHttpClient;
|
|
|
|
import org.apache.http.util.EntityUtils;
|
2020-06-22 21:24:32 -07:00
|
|
|
import org.json.simple.JSONArray;
|
|
|
|
import org.json.simple.JSONObject;
|
|
|
|
import org.json.simple.parser.JSONParser;
|
|
|
|
import org.json.simple.parser.ParseException;
|
2020-05-22 11:03:10 -07:00
|
|
|
|
2020-06-04 20:32:52 -07:00
|
|
|
import javax.swing.*;
|
|
|
|
import javax.xml.bind.JAXBException;
|
2020-06-17 20:50:57 -07:00
|
|
|
import java.io.File;
|
|
|
|
import java.io.IOException;
|
2020-06-04 20:32:52 -07:00
|
|
|
|
2020-05-19 23:16:15 -07:00
|
|
|
public class Online {
|
2020-07-02 19:22:50 -07:00
|
|
|
public static final String outputXmlFileName = FileUtil.RUSEFI_SETTINGS_FOLDER + File.separator + "output.msq";
|
2020-05-22 11:03:10 -07:00
|
|
|
private static final String url = "https://rusefi.com/online/upload.php";
|
2020-05-19 23:16:15 -07:00
|
|
|
|
2020-06-22 21:24:32 -07:00
|
|
|
public static JSONArray upload(File fileName, String authTokenValue) throws IOException {
|
2020-05-22 11:03:10 -07:00
|
|
|
HttpClient httpclient = new DefaultHttpClient();
|
|
|
|
HttpPost httpPost = new HttpPost(url);
|
2020-05-19 23:16:15 -07:00
|
|
|
|
2020-06-14 15:39:05 -07:00
|
|
|
FileBody uploadFilePart = new FileBody(fileName);
|
2020-05-22 11:03:10 -07:00
|
|
|
MultipartEntity reqEntity = new MultipartEntity();
|
|
|
|
reqEntity.addPart("upload-file", uploadFilePart);
|
2020-05-22 11:25:03 -07:00
|
|
|
reqEntity.addPart("rusefi_token", new StringBody(authTokenValue));
|
2020-05-19 23:16:15 -07:00
|
|
|
|
2020-05-22 11:03:10 -07:00
|
|
|
httpPost.setEntity(reqEntity);
|
2020-05-19 23:16:15 -07:00
|
|
|
|
2020-05-22 11:03:10 -07:00
|
|
|
HttpResponse response = httpclient.execute(httpPost);
|
2020-06-22 21:24:32 -07:00
|
|
|
System.out.println("response=" + response);
|
|
|
|
System.out.println("code " + response.getStatusLine().getStatusCode());
|
2020-05-19 23:16:15 -07:00
|
|
|
|
2020-05-22 11:03:10 -07:00
|
|
|
HttpEntity entity = response.getEntity();
|
|
|
|
String responseString = EntityUtils.toString(entity, "UTF-8");
|
2020-06-22 21:24:32 -07:00
|
|
|
System.out.println("responseString=" + responseString);
|
2020-05-19 23:16:15 -07:00
|
|
|
|
2020-06-22 21:24:32 -07:00
|
|
|
JSONParser parser = new JSONParser();
|
|
|
|
try {
|
|
|
|
JSONObject object = (JSONObject) parser.parse(responseString);
|
|
|
|
System.out.println("object=" + object);
|
|
|
|
JSONArray info = (JSONArray) object.get("info");
|
|
|
|
JSONArray error = (JSONArray) object.get("error");
|
|
|
|
if (error != null) {
|
|
|
|
System.out.println("error " + error);
|
|
|
|
return error;
|
|
|
|
} else {
|
|
|
|
System.out.println("info " + info);
|
|
|
|
return info;
|
|
|
|
}
|
|
|
|
|
|
|
|
} catch (ParseException e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
|
|
|
return null;
|
2020-05-19 23:16:15 -07:00
|
|
|
}
|
2020-06-04 20:32:52 -07:00
|
|
|
|
2020-06-22 21:24:32 -07:00
|
|
|
public static BasicFuture<JSONArray> uploadTune(Msq tune, AuthTokenPanel authTokenPanel, JComponent parent, FutureCallback<JSONArray> callback) {
|
|
|
|
BasicFuture<JSONArray> result = new BasicFuture<>(callback);
|
2020-06-04 20:32:52 -07:00
|
|
|
String authToken = authTokenPanel.getToken();
|
2020-06-17 20:50:57 -07:00
|
|
|
if (!authTokenPanel.hasToken()) {
|
|
|
|
authTokenPanel.showError(parent);
|
2020-06-22 21:24:32 -07:00
|
|
|
return null;
|
2020-06-04 20:32:52 -07:00
|
|
|
}
|
2020-06-22 21:24:32 -07:00
|
|
|
new Thread(new Runnable() {
|
|
|
|
@Override
|
|
|
|
public void run() {
|
|
|
|
JSONArray array = doUpload(authToken, tune);
|
|
|
|
result.completed(array);
|
|
|
|
}
|
|
|
|
}).start();
|
|
|
|
return result;
|
2020-06-04 20:32:52 -07:00
|
|
|
}
|
|
|
|
|
2020-06-22 21:24:32 -07:00
|
|
|
private static JSONArray doUpload(String authToken, Msq tune) {
|
2020-06-04 20:32:52 -07:00
|
|
|
try {
|
2020-07-02 19:22:50 -07:00
|
|
|
tune.writeXmlFile(outputXmlFileName);
|
2020-06-04 20:32:52 -07:00
|
|
|
// todo: network upload should not happen on UI thread
|
2020-07-02 19:22:50 -07:00
|
|
|
return upload(new File(outputXmlFileName), authToken);
|
2020-06-04 20:32:52 -07:00
|
|
|
} catch (JAXBException | IOException ex) {
|
|
|
|
throw new IllegalStateException(ex);
|
|
|
|
}
|
|
|
|
}
|
2020-05-19 23:16:15 -07:00
|
|
|
}
|