package com.tomclaw.mandarin.im.icq;
import com.tomclaw.mandarin.util.HttpParamsBuilder;
import com.tomclaw.mandarin.util.HttpUtil;
import com.tomclaw.mandarin.util.StringUtil;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.UnsupportedEncodingException;
import java.util.GregorianCalendar;
import static com.tomclaw.mandarin.im.icq.WimConstants.RESPONSE_OBJECT;
import static com.tomclaw.mandarin.im.icq.WimConstants.STATUS_CODE;
/**
* Created by Igor on 05.04.2015.
*/
public class UpdateInfoRequest extends WimRequest {
private String friendlyName;
private String firstName;
private String lastName;
private int gender;
private long birthDate;
private String city;
private String webSite;
private String aboutMe;
public UpdateInfoRequest(String friendlyName, String firstName, String lastName, int gender,
long birthDate, String city, String webSite, String aboutMe) {
this.friendlyName = friendlyName;
this.firstName = firstName;
this.lastName = lastName;
this.gender = gender;
this.birthDate = birthDate;
this.city = city;
this.webSite = webSite;
this.aboutMe = aboutMe;
}
@Override
protected String getHttpRequestType() {
return HttpUtil.POST;
}
@Override
protected int parseJson(JSONObject response) throws JSONException {
// Parsing response.
JSONObject responseObject = response.getJSONObject(RESPONSE_OBJECT);
int statusCode = responseObject.getInt(STATUS_CODE);
// Check for server reply.
if (statusCode == WIM_OK) {
return REQUEST_DELETE;
}
// Maybe incorrect aim sid or other strange error we've not recognized.
return REQUEST_SKIP;
}
@Override
protected String getUrl() {
return getAccountRoot().getWellKnownUrls().getWebApiBase()
.concat("memberDir/update");
}
@Override
protected HttpParamsBuilder getParams() {
String genderString;
if (gender == 1) {
genderString = "male";
} else if (gender == 2) {
genderString = "female";
} else {
genderString = "unknown";
}
HttpParamsBuilder params = new HttpParamsBuilder();
params.appendParam("aimsid", getAccountRoot().getAimSid());
params.appendParam("f", WimConstants.FORMAT_JSON);
try {
params.appendParam("set", getFieldValue("friendlyName", friendlyName));
params.appendParam("set", getFieldValue("firstName", firstName));
params.appendParam("set", getFieldValue("lastName", lastName));
params.appendParam("set", getFieldValue("gender", genderString));
params.appendParam("set", getPairValue("homeAddress", "city", city));
params.appendParam("set", getFieldValue("website1", webSite));
if (birthDate > new GregorianCalendar(0, 0, 0).getTimeInMillis()) {
params.appendParam("set", getFieldValue("birthDate", birthDate / 1000));
}
params.appendParam("set", getFieldValue("aboutMe", aboutMe));
} catch (UnsupportedEncodingException ignored) {
// Never come here.
}
return params;
}
private String getFieldValue(String field, boolean value) throws UnsupportedEncodingException {
return getFieldValue(field, value ? "1" : "0");
}
private String getFieldValue(String field, long value) throws UnsupportedEncodingException {
return getFieldValue(field, String.valueOf(value));
}
private String getFieldValue(String field, int value) throws UnsupportedEncodingException {
return getFieldValue(field, String.valueOf(value));
}
private String getFieldValue(String field, String value) throws UnsupportedEncodingException {
return field + "=" + StringUtil.urlEncode(value);
}
private String getPairValue(String field, String key, String value) throws UnsupportedEncodingException {
return field + "=[{" + key + "=" + StringUtil.urlEncode(value) + "}]";
}
}