1
0
Fork 0
mirror of https://github.com/syncthing/syncthing-android.git synced 2025-01-10 20:15:54 +00:00

Refactoring of config related functions/constants (moved ConfigXml).

This commit is contained in:
Felix Ableitner 2014-08-02 00:03:57 +02:00
parent 6eeb161036
commit 766c7967b5
2 changed files with 56 additions and 56 deletions

View file

@ -29,10 +29,8 @@ import org.apache.http.conn.HttpHostConnectException;
import org.apache.http.impl.client.DefaultHttpClient;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FilenameFilter;
import java.io.IOException;
import java.io.InputStream;
import java.lang.ref.WeakReference;
import java.util.HashSet;
import java.util.Iterator;
@ -62,11 +60,6 @@ public class SyncthingService extends Service {
*/
private static final long WEB_GUI_POLL_INTERVAL = 100;
/**
* File in the config folder that contains configuration.
*/
private static final String CONFIG_FILE = "config.xml";
/**
* Name of the public key file in the data directory.
*/
@ -135,7 +128,7 @@ public class SyncthingService extends Service {
new PostTask() {
@Override
protected void onPostExecute(Void aVoid) {
ConfigXml config = new ConfigXml(getConfigFile());
ConfigXml config = new ConfigXml(SyncthingService.this);
mApi = new RestApi(SyncthingService.this,
config.getWebGuiUrl(), config.getApiKey());
registerOnWebGuiAvailableListener(mApi);
@ -261,8 +254,8 @@ public class SyncthingService extends Service {
publicKey.renameTo(new File(getFilesDir(), PUBLIC_KEY_FILE));
File privateKey = new File(getApplicationInfo().dataDir, PRIVATE_KEY_FILE);
privateKey.renameTo(new File(getFilesDir(), PRIVATE_KEY_FILE));
File config = new File(getApplicationInfo().dataDir, CONFIG_FILE);
config.renameTo(new File(getFilesDir(), CONFIG_FILE));
File config = new File(getApplicationInfo().dataDir, ConfigXml.CONFIG_FILE);
config.renameTo(new File(getFilesDir(), ConfigXml.CONFIG_FILE));
File oldStorageDir = new File(getApplicationInfo().dataDir);
File[] files = oldStorageDir.listFiles(idxFilter);
@ -308,18 +301,16 @@ public class SyncthingService extends Service {
private class StartupTask extends AsyncTask<Void, Void, Pair<String, String>> {
@Override
protected Pair<String, String> doInBackground(Void... voids) {
moveConfigFiles();
ConfigXml config = new ConfigXml(SyncthingService.this);
config.updateIfNeeded();
if (isFirstStart()) {
Log.i(TAG, "App started for the first time. " +
"Copying default config, keys will be generated automatically");
copyDefaultConfig();
}
moveConfigFiles();
ConfigXml config = new ConfigXml(getConfigFile());
if (isFirstStart()) {
config.createCameraRepo();
}
config.update();
return new Pair<String, String>(config.getWebGuiUrl(), config.getApiKey());
}
@ -329,7 +320,7 @@ public class SyncthingService extends Service {
Log.i(TAG, "Web GUI will be available at " + mApi.getUrl());
// HACK: Make sure there is no syncthing binary left running from an improper
// shutdown (eg Play Store update).
// shutdown (eg Play Store updateIfNeeded).
// NOTE: This will log an exception if syncthing is not actually running.
mApi.shutdown();
updateState();
@ -366,10 +357,6 @@ public class SyncthingService extends Service {
}
}
private File getConfigFile() {
return new File(getFilesDir(), CONFIG_FILE);
}
/**
* Returns true if this service has not been started before (ie config.xml does not exist).
*
@ -379,36 +366,6 @@ public class SyncthingService extends Service {
return !new File(getFilesDir(), PUBLIC_KEY_FILE).exists();
}
/**
* Copies the default config file from res/raw/config_default.xml to (data folder)/config.xml.
*/
private void copyDefaultConfig() {
InputStream in = null;
FileOutputStream out = null;
try {
in = getResources().openRawResource(R.raw.config_default);
out = new FileOutputStream(getConfigFile());
byte[] buff = new byte[1024];
int read;
while ((read = in.read(buff)) > 0) {
out.write(buff, 0, read);
}
}
catch (IOException e) {
throw new RuntimeException("Failed to write config file", e);
}
finally {
try {
in.close();
out.close();
}
catch (IOException e) {
Log.w(TAG, "Failed to close stream while copying config", e);
}
}
}
public RestApi getApi() {
return mApi;
}

View file

@ -1,15 +1,20 @@
package com.nutomic.syncthingandroid.util;
import android.content.Context;
import android.os.Environment;
import android.util.Log;
import com.nutomic.syncthingandroid.R;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Random;
import javax.xml.parsers.DocumentBuilder;
@ -30,15 +35,23 @@ public class ConfigXml {
private static final String TAG = "ConfigXml";
/**
* File in the config folder that contains configuration.
*/
public static final String CONFIG_FILE = "config.xml";
private File mConfigFile;
private Document mConfig;
public ConfigXml(File configFile) {
mConfigFile = configFile;
public ConfigXml(Context context) {
mConfigFile = new File(context.getFilesDir(), CONFIG_FILE);
if (!mConfigFile.exists()) {
copyDefaultConfig(context);
}
try {
DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
mConfig = db.parse(configFile);
mConfig = db.parse(mConfigFile);
} catch (SAXException e) {
throw new RuntimeException("Failed to parse config file", e);
} catch (ParserConfigurationException e) {
@ -65,7 +78,7 @@ public class ConfigXml {
* Coming from 0.3.0 and earlier, the ignorePerms flag is set to true on every repository.
*/
@SuppressWarnings("SdCardPath")
public void update() {
public void updateIfNeeded() {
Log.i(TAG, "Checking for needed config updates");
boolean changed = false;
Element options = (Element) mConfig.getDocumentElement()
@ -169,4 +182,34 @@ public class ConfigXml {
}
}
/**
* Copies the default config file from res/raw/config_default.xml to (data folder)/config.xml.
*/
private void copyDefaultConfig(Context context) {
InputStream in = null;
FileOutputStream out = null;
try {
in = context.getResources().openRawResource(R.raw.config_default);
out = new FileOutputStream(mConfigFile);
byte[] buff = new byte[1024];
int read;
while ((read = in.read(buff)) > 0) {
out.write(buff, 0, read);
}
}
catch (IOException e) {
throw new RuntimeException("Failed to write config file", e);
}
finally {
try {
in.close();
out.close();
}
catch (IOException e) {
Log.w(TAG, "Failed to close stream while copying config", e);
}
}
}
}