package com.boombuler.piraten.map; import java.io.IOException; import java.net.UnknownHostException; import org.apache.http.HttpResponse; import org.apache.http.ParseException; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.methods.HttpGet; import org.apache.http.util.EntityUtils; import android.app.Activity; import android.app.ProgressDialog; import com.boombuler.piraten.map.data.DBAdapter; import com.boombuler.piraten.utils.JsonArray; import com.boombuler.piraten.utils.JsonObject; import com.boombuler.piraten.utils.JsonParser; import com.boombuler.piraten.utils.MyHttpClient; public class FetchServerList implements Runnable { private Activity mContext; private String mUrl; private Runnable mOnCompleteListener; private ProgressDialog mProgressDlg; public FetchServerList(Activity context) { mContext = context; mUrl = mContext.getString(R.string.server_list_url); } @Override public void run() { DBAdapter dba = new DBAdapter(mContext); JsonObject serverList = null; try { MyHttpClient client = new MyHttpClient(mContext); HttpResponse response = client.execute(new HttpGet(mUrl)); serverList = (JsonObject)JsonParser.Parse(EntityUtils.toString(response.getEntity(), "UTF-8")); } catch (UnknownHostException e) { e.printStackTrace(); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (ParseException e) { e.printStackTrace(); } catch (com.boombuler.piraten.utils.JsonParser.ParseException e) { e.printStackTrace(); } // online continue if we got a server list if(serverList != null) { try { dba.open(); dba.beginTransaction(); dba.ClearServers(); JsonArray servers = (JsonArray)serverList.get("ServerList"); for (Object sVal : servers ) { JsonObject server = (JsonObject)sVal; dba.InsertServer((String)server.get("ID"), (String)server.get("Name"), (String)server.get("Info"), (String)server.get("URL")); } JsonArray devIds = (JsonArray)serverList.get("Development"); for (Object sVal : devIds) { dba.SetDevServer((String)sVal); } dba.setTransactionSuccessful(); } catch (Exception e) { } finally { dba.endTransaction(); dba.close(); } } if (mOnCompleteListener != null) mContext.runOnUiThread(mOnCompleteListener); if (mProgressDlg != null) { mContext.runOnUiThread(new Runnable() { @Override public void run() { mProgressDlg.dismiss(); } }); } } public void setOnCompleteListener(Runnable listener) { mOnCompleteListener = listener; } public void setProgressDlg(ProgressDialog dlg) { mProgressDlg = dlg; } public static void Load(Activity context, Runnable onComplete) { final ProgressDialog progressDlg = new ProgressDialog(context); progressDlg.setOwnerActivity(context); progressDlg.setCancelable(false); progressDlg.setCanceledOnTouchOutside(false); progressDlg.setIndeterminate(true); progressDlg.setProgressStyle(ProgressDialog.STYLE_SPINNER); progressDlg.setTitle(R.string.settings); progressDlg.setMessage(context.getString(R.string.fetching_server_list)); progressDlg.show(); FetchServerList fetch = new FetchServerList(context); fetch.setOnCompleteListener(onComplete); fetch.setProgressDlg(progressDlg); new Thread(fetch).start(); } }