Files
MCCustomSkinLoader/Common/source/customskinloader/loader/JsonAPILoader.java
T

101 lines
3.0 KiB
Java
Raw Normal View History

2016-08-09 17:23:27 +08:00
package customskinloader.loader;
import java.io.File;
import java.io.FileInputStream;
import org.apache.commons.io.IOUtils;
2016-09-10 21:00:53 +08:00
import org.apache.commons.lang3.StringUtils;
2016-08-09 17:23:27 +08:00
import com.mojang.authlib.GameProfile;
import customskinloader.CustomSkinLoader;
import customskinloader.config.SkinSiteProfile;
import customskinloader.loader.jsonapi.*;
import customskinloader.profile.UserProfile;
2016-11-06 12:00:36 +08:00
import customskinloader.utils.HttpRequestUtil;
2016-08-09 17:23:27 +08:00
import customskinloader.utils.HttpUtil0;
2016-11-06 12:00:36 +08:00
import customskinloader.utils.HttpRequestUtil.HttpRequest;
import customskinloader.utils.HttpRequestUtil.HttpResponce;
2016-08-09 17:23:27 +08:00
2016-08-21 11:26:00 +08:00
public class JsonAPILoader implements ProfileLoader.IProfileLoader {
2016-10-01 13:28:04 +08:00
2016-08-28 19:40:18 +08:00
public interface IJsonAPI {
public String toJsonUrl(String root,String username);
2016-10-18 21:48:07 +08:00
public String getPayload(SkinSiteProfile ssp);
2016-08-28 19:40:18 +08:00
public UserProfile toUserProfile(String root,String json,boolean local);
public String getName();
}
2016-10-01 13:28:04 +08:00
public static class ErrorProfile{
public int errno;
public String msg;
}
2016-08-09 17:23:27 +08:00
public static enum Type{
2016-10-18 21:48:07 +08:00
CustomSkinAPI(new CustomSkinAPI()),CustomSkinAPIPlus(new CustomSkinAPIPlus()),UniSkinAPI(new UniSkinAPI());
2016-08-09 17:23:27 +08:00
public IJsonAPI jsonAPI;
private Type(IJsonAPI jsonAPI){
this.jsonAPI=jsonAPI;
}
}
2016-10-01 13:28:04 +08:00
2016-08-09 17:23:27 +08:00
private Type type;
public JsonAPILoader(Type type){
this.type=type;
}
2016-10-01 13:28:04 +08:00
2016-08-09 17:23:27 +08:00
@Override
2016-09-10 21:00:53 +08:00
public UserProfile loadProfile(SkinSiteProfile ssp, GameProfile gameProfile) throws Exception {
2016-08-09 17:23:27 +08:00
String username=gameProfile.getName();
2016-09-10 21:00:53 +08:00
boolean local=HttpUtil0.isLocal(ssp.root);
2016-08-09 17:23:27 +08:00
if(ssp.root==null||ssp.root.equals("")){
CustomSkinLoader.logger.info("Root not defined.");
return null;
}
String jsonUrl=type.jsonAPI.toJsonUrl(ssp.root, username);
String json;
if(local){
File jsonFile=new File(jsonUrl);
if(!jsonFile.exists()){
CustomSkinLoader.logger.info("Profile File not found.");
return null;
}
json=IOUtils.toString(new FileInputStream(jsonFile));
}else{
2016-11-06 13:36:26 +08:00
HttpResponce responce=HttpRequestUtil.makeHttpRequest(new HttpRequest(jsonUrl).setCacheTime(60).setUserAgent(ssp.userAgent).setPayload(type.jsonAPI.getPayload(ssp)));
2016-11-06 12:00:36 +08:00
json=responce.content;
2016-08-09 17:23:27 +08:00
}
if(json==null||json.equals("")){
CustomSkinLoader.logger.info("Profile not found.");
return null;
}
2016-10-01 13:28:04 +08:00
ErrorProfile profile=CustomSkinLoader.GSON.fromJson(json, ErrorProfile.class);
if(profile.errno!=0){
CustomSkinLoader.logger.info("Error "+profile.errno+": "+profile.msg);
return null;
}
2016-08-09 17:23:27 +08:00
UserProfile p=type.jsonAPI.toUserProfile(ssp.root, json, local);
if(p==null||p.isEmpty()){
CustomSkinLoader.logger.info("Both skin and cape not found.");
return null;
}else{
return p;
}
}
2016-08-21 11:26:00 +08:00
@Override
public boolean compare(SkinSiteProfile ssp0, SkinSiteProfile ssp1) {
2016-09-10 21:00:53 +08:00
return StringUtils.isNoneEmpty(ssp0.root)?ssp0.root.equalsIgnoreCase(ssp1.root):true;
2016-08-21 11:26:00 +08:00
}
2016-08-28 19:40:18 +08:00
@Override
public String getName() {
return type.jsonAPI.getName();
}
2016-09-24 20:47:08 +08:00
@Override
public void initLocalFolder(SkinSiteProfile ssp) {
if(HttpUtil0.isLocal(ssp.root)){
File f=new File(ssp.root);
if(!f.exists())
f.mkdirs();
}
}
2016-08-09 17:23:27 +08:00
}