162 lines
5 KiB
Java
162 lines
5 KiB
Java
package btools.routingapp;
|
|
|
|
import android.content.Context;
|
|
import android.content.res.AssetManager;
|
|
import android.util.Log;
|
|
|
|
import java.io.BufferedReader;
|
|
import java.io.File;
|
|
import java.io.FileOutputStream;
|
|
import java.io.FileReader;
|
|
import java.io.IOException;
|
|
import java.io.InputStream;
|
|
import java.util.zip.ZipEntry;
|
|
import java.util.zip.ZipInputStream;
|
|
|
|
public class ServerConfig {
|
|
|
|
private static final String TAG = "ServerConfig";
|
|
|
|
private static String mServerConfigName = "serverconfig.txt";
|
|
|
|
private String mSegmentUrl = "https://brouter.de/brouter/segments4/";
|
|
private String mLookupsUrl = "https://brouter.de/brouter/profiles2/";
|
|
private String mProfilesUrl = "https://brouter.de/brouter/profiles2/";
|
|
|
|
private String[] mLookups = new String[]{"lookups.dat"};
|
|
private String[] mProfiles = new String[0];
|
|
|
|
public ServerConfig(Context ctx) {
|
|
File configFile = new File(ConfigHelper.getBaseDir(ctx), "/brouter/segments4/" + mServerConfigName);
|
|
readConfigFile(configFile);
|
|
}
|
|
|
|
public ServerConfig(Context context, File file) {
|
|
readConfigFile(file);
|
|
}
|
|
|
|
private void readConfigFile(File file) {
|
|
if (file.exists()) {
|
|
BufferedReader br = null;
|
|
try {
|
|
br = new BufferedReader(new FileReader(file));
|
|
for (; ; ) {
|
|
String line = br.readLine();
|
|
if (line == null) break;
|
|
if (line.trim().startsWith("segment_url=")) {
|
|
mSegmentUrl = line.substring(12);
|
|
} else if (line.trim().startsWith("lookup_url=")) {
|
|
mLookupsUrl = line.substring(11);
|
|
} else if (line.trim().startsWith("profiles_url=")) {
|
|
mProfilesUrl = line.substring(13);
|
|
} else if (line.trim().startsWith("check_lookup=")) {
|
|
mLookups = line.substring(13).split(",");
|
|
} else if (line.trim().startsWith("check_profiles=")) {
|
|
mProfiles = line.substring(15).split(",");
|
|
}
|
|
}
|
|
} catch (IOException e) {
|
|
Log.e(TAG, Log.getStackTraceString(e));
|
|
} finally {
|
|
try {
|
|
if (br != null) br.close();
|
|
} catch (IOException e) {
|
|
throw new RuntimeException(e);
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
public static void checkForUpdate(Context context, File path, String assetZip) {
|
|
if (assetZip != null) {
|
|
writeTmpFromAsset(context, path, assetZip);
|
|
|
|
File configFileOld = new File(ConfigHelper.getBaseDir(context), "/brouter/segments4/" + mServerConfigName);
|
|
File configFileNew = new File(ConfigHelper.getBaseDir(context), "/brouter/segments4/" + mServerConfigName + ".tmp");
|
|
if (configFileOld.length() != configFileNew.length()) {
|
|
ServerConfig serverConfigOld = new ServerConfig(context, configFileOld);
|
|
ServerConfig serverConfigNew = new ServerConfig(context, configFileNew);
|
|
if (serverConfigOld.getSegmentUrl().equals(serverConfigNew.getSegmentUrl()) &&
|
|
serverConfigOld.getProfilesUrl().equals(serverConfigNew.getProfilesUrl()) &&
|
|
serverConfigOld.getLookupUrl().equals(serverConfigNew.getLookupUrl())
|
|
) {
|
|
// replace when servers wasn't changed
|
|
configFileOld.delete();
|
|
configFileNew.renameTo(configFileOld);
|
|
}
|
|
} else {
|
|
configFileNew.delete();
|
|
}
|
|
}
|
|
}
|
|
|
|
private static void writeTmpFromAsset(Context context, File path, String assetZip) {
|
|
InputStream is = null;
|
|
try {
|
|
AssetManager assetManager = context.getAssets();
|
|
is = assetManager.open(assetZip);
|
|
ZipInputStream zis = new ZipInputStream(is);
|
|
byte[] data = new byte[1024];
|
|
for (; ; ) {
|
|
ZipEntry ze = zis.getNextEntry();
|
|
if (ze == null)
|
|
break;
|
|
if (ze.isDirectory()) {
|
|
continue;
|
|
}
|
|
String name = ze.getName();
|
|
if (name.equals(mServerConfigName)) {
|
|
File outfile = new File(path, name + ".tmp");
|
|
String canonicalPath = outfile.getCanonicalPath();
|
|
if (canonicalPath.startsWith(path.getCanonicalPath()) &&
|
|
!outfile.exists() &&
|
|
outfile.getParentFile() != null) {
|
|
outfile.getParentFile().mkdirs();
|
|
FileOutputStream fos = new FileOutputStream(outfile);
|
|
|
|
for (; ; ) {
|
|
int len = zis.read(data, 0, 1024);
|
|
if (len < 0)
|
|
break;
|
|
fos.write(data, 0, len);
|
|
}
|
|
fos.close();
|
|
}
|
|
}
|
|
zis.closeEntry();
|
|
}
|
|
zis.close();
|
|
} catch (IOException io) {
|
|
throw new RuntimeException("error expanding " + assetZip + ": " + io);
|
|
} finally {
|
|
try {
|
|
if (is != null) is.close();
|
|
} catch (IOException e) {
|
|
throw new RuntimeException(e);
|
|
}
|
|
}
|
|
}
|
|
|
|
public String getSegmentUrl() {
|
|
return mSegmentUrl;
|
|
}
|
|
|
|
public String getLookupUrl() {
|
|
return mLookupsUrl;
|
|
}
|
|
|
|
public String getProfilesUrl() {
|
|
return mProfilesUrl;
|
|
}
|
|
|
|
public String[] getLookups() {
|
|
return mLookups;
|
|
}
|
|
|
|
public String[] getProfiles() {
|
|
return mProfiles;
|
|
}
|
|
|
|
}
|