2016-02-27 15:22:35 +08:00
|
|
|
package customskinloader.config;
|
|
|
|
|
|
2016-08-21 11:26:00 +08:00
|
|
|
import java.io.File;
|
|
|
|
|
import java.util.ArrayList;
|
2016-11-27 13:32:25 +08:00
|
|
|
import java.util.Arrays;
|
|
|
|
|
import java.util.List;
|
2016-08-21 11:26:00 +08:00
|
|
|
|
2016-11-27 13:32:25 +08:00
|
|
|
import org.apache.commons.io.FileUtils;
|
2016-08-21 11:26:00 +08:00
|
|
|
|
2016-04-03 13:01:06 +08:00
|
|
|
import customskinloader.CustomSkinLoader;
|
2016-08-21 11:26:00 +08:00
|
|
|
import customskinloader.loader.ProfileLoader;
|
2016-11-06 12:00:36 +08:00
|
|
|
import customskinloader.utils.HttpRequestUtil;
|
2016-11-27 13:32:25 +08:00
|
|
|
import customskinloader.utils.HttpTextureUtil;
|
2016-10-18 21:48:07 +08:00
|
|
|
import customskinloader.utils.HttpUtil0;
|
2016-04-03 13:01:06 +08:00
|
|
|
|
2018-06-25 00:34:32 +08:00
|
|
|
@SuppressWarnings("ResultOfMethodCallIgnored")
|
2016-02-27 15:22:35 +08:00
|
|
|
public class Config {
|
2018-02-12 12:20:28 +08:00
|
|
|
//Program
|
|
|
|
|
public String version;
|
|
|
|
|
public List<SkinSiteProfile> loadlist;
|
|
|
|
|
|
|
|
|
|
//Function
|
|
|
|
|
public boolean enableDynamicSkull=true;
|
|
|
|
|
public boolean enableTransparentSkin=true;
|
|
|
|
|
public boolean ignoreHttpsCertificate=false;
|
|
|
|
|
public boolean forceLoadAllTextures=false;
|
|
|
|
|
|
|
|
|
|
//Cache
|
2018-07-09 19:53:35 +08:00
|
|
|
public int cacheExpiry=30;
|
2018-02-12 12:20:28 +08:00
|
|
|
public boolean enableUpdateSkull=false;
|
|
|
|
|
public boolean enableLocalProfileCache=false;
|
|
|
|
|
public boolean enableCacheAutoClean=false;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//Init config
|
|
|
|
|
public Config(SkinSiteProfile[] loadlist){
|
|
|
|
|
this.version=CustomSkinLoader.CustomSkinLoader_VERSION;
|
|
|
|
|
this.loadlist=Arrays.asList(loadlist);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static Config loadConfig0() {
|
|
|
|
|
Config config=loadConfig();
|
|
|
|
|
|
|
|
|
|
//LoadList null checker
|
|
|
|
|
if(config.loadlist==null){
|
|
|
|
|
config.loadlist=new ArrayList<SkinSiteProfile>();
|
|
|
|
|
}else{
|
|
|
|
|
for(int i=0;i<config.loadlist.size();i++){
|
|
|
|
|
if(config.loadlist.get(i)==null)
|
|
|
|
|
config.loadlist.remove(i--);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//Init program
|
|
|
|
|
config.loadExtraList();
|
|
|
|
|
config.initLocalFolder();
|
|
|
|
|
if(config.ignoreHttpsCertificate)
|
|
|
|
|
HttpUtil0.ignoreHttpsCertificate();
|
|
|
|
|
if(config.enableCacheAutoClean && !config.enableLocalProfileCache){
|
|
|
|
|
try{
|
|
|
|
|
FileUtils.deleteDirectory(HttpRequestUtil.CACHE_DIR);
|
|
|
|
|
FileUtils.deleteDirectory(HttpTextureUtil.getCacheDir());
|
|
|
|
|
CustomSkinLoader.logger.info("Successfully cleaned cache.");
|
|
|
|
|
}catch(Exception e){
|
|
|
|
|
CustomSkinLoader.logger.warning("Exception occurs while cleaning cache: "+e.toString());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//Output config
|
|
|
|
|
CustomSkinLoader.logger.info("EnableDynamicSkull:"+config.enableDynamicSkull+
|
|
|
|
|
", EnableTranSkin:"+config.enableTransparentSkin+
|
|
|
|
|
", IgnoreHttpsCertificate:"+config.ignoreHttpsCertificate+
|
|
|
|
|
", CacheExpiry:"+config.cacheExpiry+
|
|
|
|
|
", EnableUpdateSkull:"+config.enableUpdateSkull+
|
|
|
|
|
", EnableLocalProfileCache:"+config.enableLocalProfileCache+
|
|
|
|
|
", EnableCacheAutoClean:"+config.enableCacheAutoClean+
|
|
|
|
|
", LoadList:"+(config.loadlist==null?0:config.loadlist.size()));
|
|
|
|
|
|
|
|
|
|
//Check config version
|
|
|
|
|
float floatVersion=0f;
|
|
|
|
|
float configVersion=0f;
|
|
|
|
|
try{
|
|
|
|
|
floatVersion=Float.parseFloat(CustomSkinLoader.CustomSkinLoader_VERSION);
|
|
|
|
|
configVersion=Float.parseFloat(config.version);
|
|
|
|
|
if(configVersion==15.1f)//To avoid some bug
|
|
|
|
|
configVersion=14.6f;
|
|
|
|
|
}catch (Exception e){
|
|
|
|
|
CustomSkinLoader.logger.warning("Exception occurs while parsing version: "+e.toString());
|
|
|
|
|
}
|
|
|
|
|
if(config.version==null || configVersion==0f || floatVersion > configVersion){
|
|
|
|
|
CustomSkinLoader.logger.info("Config File is out of date: "+config.version);
|
|
|
|
|
config.version=CustomSkinLoader.CustomSkinLoader_VERSION;
|
|
|
|
|
writeConfig(config,true);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return config;
|
|
|
|
|
}
|
2016-08-21 11:26:00 +08:00
|
|
|
|
2018-02-12 12:20:28 +08:00
|
|
|
private static Config loadConfig() {
|
|
|
|
|
CustomSkinLoader.logger.info("Config File: "+CustomSkinLoader.CONFIG_FILE.getAbsolutePath());
|
|
|
|
|
if(!CustomSkinLoader.CONFIG_FILE.exists()){
|
|
|
|
|
CustomSkinLoader.logger.info("Config file not found, use default instead.");
|
|
|
|
|
return initConfig();
|
|
|
|
|
}
|
|
|
|
|
try {
|
|
|
|
|
CustomSkinLoader.logger.info("Try to load config.");
|
2018-06-25 00:34:32 +08:00
|
|
|
String json=FileUtils.readFileToString(CustomSkinLoader.CONFIG_FILE, "UTF-8");
|
2018-02-12 12:20:28 +08:00
|
|
|
Config config=CustomSkinLoader.GSON.fromJson(json, Config.class);
|
|
|
|
|
CustomSkinLoader.logger.info("Successfully load config.");
|
|
|
|
|
return config;
|
|
|
|
|
}catch (Exception e) {
|
|
|
|
|
CustomSkinLoader.logger.info("Failed to load config, use default instead.("+e.toString()+")");
|
|
|
|
|
File brokenFile=new File(CustomSkinLoader.DATA_DIR,"BROKEN-CustomSkinLoader.json");
|
|
|
|
|
if(brokenFile.exists())
|
|
|
|
|
brokenFile.delete();
|
|
|
|
|
CustomSkinLoader.CONFIG_FILE.renameTo(brokenFile);
|
|
|
|
|
return initConfig();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void loadExtraList(){
|
|
|
|
|
File listAddition=new File(CustomSkinLoader.DATA_DIR,"ExtraList");
|
|
|
|
|
if(!listAddition.isDirectory()){
|
|
|
|
|
listAddition.mkdirs();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
List<SkinSiteProfile> adds=new ArrayList<SkinSiteProfile>();
|
|
|
|
|
File[] files=listAddition.listFiles();
|
2018-06-25 00:34:32 +08:00
|
|
|
for(File file: files != null ? files : new File[0]){
|
2018-02-12 12:20:28 +08:00
|
|
|
if(!file.getName().toLowerCase().endsWith(".json")&&!file.getName().toLowerCase().endsWith(".txt"))
|
|
|
|
|
continue;
|
|
|
|
|
try {
|
|
|
|
|
CustomSkinLoader.logger.info("Try to load Extra List.("+file.getName()+")");
|
2018-06-25 00:34:32 +08:00
|
|
|
String json=FileUtils.readFileToString(file, "UTF-8");
|
2018-02-12 12:20:28 +08:00
|
|
|
SkinSiteProfile ssp=CustomSkinLoader.GSON.fromJson(json, SkinSiteProfile.class);
|
|
|
|
|
CustomSkinLoader.logger.info("Successfully load Extra List.");
|
|
|
|
|
file.delete();
|
|
|
|
|
ProfileLoader.IProfileLoader loader=ProfileLoader.LOADERS.get(ssp.type.toLowerCase());
|
|
|
|
|
if(loader==null){
|
|
|
|
|
CustomSkinLoader.logger.info("Extra List will be ignore: Type '"+ssp.type+"' is not defined.");
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
boolean duplicate=false;
|
|
|
|
|
for(SkinSiteProfile ssp0:this.loadlist){
|
|
|
|
|
if(!ssp0.type.equalsIgnoreCase(ssp.type))
|
|
|
|
|
continue;
|
|
|
|
|
if(loader.compare(ssp0, ssp)){
|
|
|
|
|
duplicate=true;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(!duplicate){
|
|
|
|
|
adds.add(ssp);
|
|
|
|
|
CustomSkinLoader.logger.info("Successfully apply Extra List.("+ssp.name+")");
|
|
|
|
|
}else{
|
|
|
|
|
CustomSkinLoader.logger.info("Extra List will be ignore: Duplicate.("+ssp.name+")");
|
|
|
|
|
}
|
|
|
|
|
}catch (Exception e) {
|
|
|
|
|
CustomSkinLoader.logger.info("Failed to load Extra List.("+e.toString()+")");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(adds.size()!=0){
|
|
|
|
|
adds.addAll(this.loadlist);
|
|
|
|
|
this.loadlist=adds;
|
|
|
|
|
writeConfig(this,true);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void initLocalFolder(){
|
|
|
|
|
for(SkinSiteProfile ssp:this.loadlist){
|
|
|
|
|
ProfileLoader.IProfileLoader loader=ProfileLoader.LOADERS.get(ssp.type.toLowerCase());
|
|
|
|
|
if(loader==null)
|
|
|
|
|
continue;
|
|
|
|
|
loader.initLocalFolder(ssp);
|
|
|
|
|
}
|
|
|
|
|
}
|
2016-08-21 11:26:00 +08:00
|
|
|
|
2018-02-12 12:20:28 +08:00
|
|
|
private static Config initConfig() {
|
|
|
|
|
Config config=new Config(CustomSkinLoader.DEFAULT_LOAD_LIST);
|
|
|
|
|
writeConfig(config,false);
|
|
|
|
|
return config;
|
|
|
|
|
}
|
|
|
|
|
private static void writeConfig(Config config,boolean update){
|
|
|
|
|
String json=CustomSkinLoader.GSON.toJson(config);
|
|
|
|
|
if(CustomSkinLoader.CONFIG_FILE.exists())
|
|
|
|
|
CustomSkinLoader.CONFIG_FILE.delete();
|
|
|
|
|
try {
|
|
|
|
|
CustomSkinLoader.CONFIG_FILE.createNewFile();
|
2018-06-25 00:34:32 +08:00
|
|
|
FileUtils.write(CustomSkinLoader.CONFIG_FILE, json, "UTF-8");
|
2018-02-12 12:20:28 +08:00
|
|
|
CustomSkinLoader.logger.info("Successfully "+(update?"update":"create")+" config.");
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
CustomSkinLoader.logger.info("Failed to "+(update?"update":"create")+" config.("+e.toString()+")");
|
|
|
|
|
}
|
|
|
|
|
}
|
2016-02-27 15:22:35 +08:00
|
|
|
}
|