1
0
Fork 0
mirror of https://github.com/syncthing/syncthing-android.git synced 2024-12-23 03:11:30 +00:00

Read web gui url from config instead of hardcoding it.

This commit is contained in:
Felix Ableitner 2014-05-26 17:30:49 +02:00
parent b1574aaee1
commit 77b7f3a299
6 changed files with 54 additions and 22 deletions

View file

@ -26,13 +26,16 @@ public class SettingsActivity extends PreferenceActivity {
private SyncthingService mSyncthingService;
/**
* Binds to service and sets version name. The version name can not be retrieved if the service
* is just started (as we don't wait until the api is up).
*/
private ServiceConnection mSyncthingServiceConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName className, IBinder service) {
SyncthingServiceBinder binder = (SyncthingServiceBinder) service;
mSyncthingService = binder.getService();
final PreferenceScreen screen = getPreferenceScreen();
final Preference version = screen.findPreference(SYNCTHING_VERSION_KEY);
Preference version = getPreferenceScreen().findPreference(SYNCTHING_VERSION_KEY);
version.setSummary(mSyncthingService.getApi().getVersion());
}

View file

@ -99,7 +99,7 @@ public class WebGuiActivity extends Activity implements SyncthingService.OnWebGu
*/
@Override
public void onWebGuiAvailable() {
mWebView.loadUrl(SyncthingService.SYNCTHING_URL);
mWebView.loadUrl(mSyncthingService.getApi().getUrl());
}
@Override

View file

@ -25,12 +25,12 @@ public class GetTask extends AsyncTask<String, Void, String> {
/**
* URI to call to get version name.
*/
public static final String URI_VERSION = SyncthingService.SYNCTHING_URL + "/rest/version";
public static final String URI_VERSION = "/rest/version";
@Override
protected String doInBackground(String... uri) {
HttpClient httpclient = new DefaultHttpClient();
HttpGet get = new HttpGet(uri[0]);
HttpGet get = new HttpGet(uri[0] + uri[1]);
String responseString = null;
try {
HttpResponse response = httpclient.execute(get);

View file

@ -20,12 +20,12 @@ public class PostTask extends AsyncTask<String, Void, Void> {
/**
* URI to call for shutdown.
*/
public static final String URI_SHUTDOWN = SyncthingService.SYNCTHING_URL + "/rest/shutdown";
public static final String URI_SHUTDOWN = "/rest/shutdown";
@Override
protected Void doInBackground(String... uri) {
HttpClient httpclient = new DefaultHttpClient();
HttpPost post = new HttpPost(uri[0]);
HttpPost post = new HttpPost(uri[0] + uri[1]);
String responseString = null;
try {
HttpResponse response = httpclient.execute(post);

View file

@ -13,8 +13,18 @@ public class RestApi implements SyncthingService.OnWebGuiAvailableListener {
private String mVersion;
public RestApi(Context context) {
private String mUrl;
public RestApi(Context context, String url) {
mContext = context;
mUrl = url;
}
/**
* Returns the full URL of the web gui.
*/
public String getUrl() {
return mUrl;
}
@Override
@ -26,15 +36,21 @@ public class RestApi implements SyncthingService.OnWebGuiAvailableListener {
? versionName
: mContext.getString(R.string.syncthing_version_error);
}
}.execute(GetTask.URI_VERSION);
}.execute(mUrl, GetTask.URI_VERSION);
}
/**
* Returns the version name, or a (text) error message on failure.
*/
public String getVersion() {
return mVersion;
}
/**
* Stops syncthing. You should probably use SyncthingService.stopService() instead.
*/
public void shutdown() {
new PostTask().execute(PostTask.URI_SHUTDOWN);
new PostTask().execute(mUrl, PostTask.URI_SHUTDOWN);
}
}

View file

@ -68,13 +68,6 @@ public class SyncthingService extends Service {
*/
private static final String CONFIG_FILE = "config.xml";
/**
* URL of the local syncthing web UI.
*
* TODO: read from config.
*/
public static final String SYNCTHING_URL = "http://127.0.0.1:8080";
private RestApi mApi;
private final SyncthingServiceBinder mBinder = new SyncthingServiceBinder(this);
@ -192,7 +185,7 @@ public class SyncthingService extends Service {
protected Void doInBackground(Void... voids) {
int status = 0;
HttpClient httpclient = new DefaultHttpClient();
HttpHead head = new HttpHead(SYNCTHING_URL);
HttpHead head = new HttpHead(mApi.getUrl());
do {
try {
Thread.sleep(WEB_GUI_POLL_INTERVAL);
@ -206,10 +199,10 @@ public class SyncthingService extends Service {
// so we ignore and continue.
}
catch (IOException e) {
Log.d(TAG, "Failed to poll for web interface", e);
Log.w(TAG, "Failed to poll for web interface", e);
}
catch (InterruptedException e) {
Log.d(TAG, "Failed to poll for web interface", e);
Log.w(TAG, "Failed to poll for web interface", e);
}
} while(status != HttpStatus.SC_OK);
return null;
@ -241,8 +234,27 @@ public class SyncthingService extends Service {
n.flags |= Notification.FLAG_ONGOING_EVENT;
startForeground(NOTIFICATION_ID, n);
mApi = new RestApi(this);
registerOnWebGuiAvailableListener(mApi);
String syncthingUrl = null;
try {
DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document d = db.parse(getConfigFile());
Element options = (Element)
d.getDocumentElement().getElementsByTagName("gui").item(0);
syncthingUrl = options.getElementsByTagName("address").item(0).getTextContent();
}
catch (SAXException e) {
throw new RuntimeException("Failed to read gui url, aborting", e);
}
catch (ParserConfigurationException e) {
throw new RuntimeException("Failed to read gui url, aborting", e);
}
catch (IOException e) {
throw new RuntimeException("Failed to read gui url, aborting", e);
}
finally {
mApi = new RestApi(this, "http://" + syncthingUrl);
registerOnWebGuiAvailableListener(mApi);
}
new Thread(new NativeSyncthingRunnable()).start();
new PollWebGuiAvailableTask().execute();
@ -295,6 +307,7 @@ public class SyncthingService extends Service {
DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document d = db.parse(getConfigFile());
// Hardcode default globalAnnounceServer ip.
Element options = (Element)
d.getDocumentElement().getElementsByTagName("options").item(0);