diff --git a/ncsmsgo/ncsmsgo.aar b/ncsmsgo/ncsmsgo.aar index df3d685..f74d3d5 100644 Binary files a/ncsmsgo/ncsmsgo.aar and b/ncsmsgo/ncsmsgo.aar differ diff --git a/src/main/java/fr/unix_experience/owncloud_sms/engine/ASyncContactLoad.java b/src/main/java/fr/unix_experience/owncloud_sms/engine/ASyncContactLoad.java index 4f50c4a..66cff1a 100644 --- a/src/main/java/fr/unix_experience/owncloud_sms/engine/ASyncContactLoad.java +++ b/src/main/java/fr/unix_experience/owncloud_sms/engine/ASyncContactLoad.java @@ -12,15 +12,13 @@ import android.view.View; import android.widget.LinearLayout; import android.widget.ProgressBar; -import org.json.JSONArray; -import org.json.JSONException; - import java.util.ArrayList; import java.util.Collections; import fr.unix_experience.owncloud_sms.R; import fr.unix_experience.owncloud_sms.adapters.ContactListAdapter; import fr.unix_experience.owncloud_sms.exceptions.OCSyncException; +import ncsmsgo.SmsPhoneListResponse; public interface ASyncContactLoad { class ContactLoadTask extends AsyncTask { @@ -68,10 +66,15 @@ public interface ASyncContactLoad { ArrayList serverPhoneList = new ArrayList<>(); - JSONArray phoneNumbers = _client.getServerPhoneNumbers(); - for (int i = 0; i < phoneNumbers.length(); i++) { - String phone = phoneNumbers.getString(i); - serverPhoneList.add(phone); + SmsPhoneListResponse splr = _client.getServerPhoneNumbers(); + if (splr == null) { + _objects.add(_context.getString(R.string.err_fetch_phonelist)); + return false; + } + + String phoneNumber; + while (!(phoneNumber = splr.getNextEntry()).equals("")) { + serverPhoneList.add(phoneNumber); } // Read all contacts @@ -81,9 +84,6 @@ public interface ASyncContactLoad { // Sort phone numbers Collections.sort(_objects); - } catch (JSONException e) { - _objects.add(_context.getString(R.string.err_fetch_phonelist)); - return false; } catch (OCSyncException e) { _objects.add(_context.getString(e.getErrorId())); return false; diff --git a/src/main/java/fr/unix_experience/owncloud_sms/engine/OCHttpClient.java b/src/main/java/fr/unix_experience/owncloud_sms/engine/OCHttpClient.java index 5daa9a1..3095d12 100644 --- a/src/main/java/fr/unix_experience/owncloud_sms/engine/OCHttpClient.java +++ b/src/main/java/fr/unix_experience/owncloud_sms/engine/OCHttpClient.java @@ -47,6 +47,7 @@ import fr.unix_experience.owncloud_sms.exceptions.OCSyncException; import fr.unix_experience.owncloud_sms.providers.AndroidVersionProvider; import ncsmsgo.SmsBuffer; import ncsmsgo.SmsHTTPClient; +import ncsmsgo.SmsPhoneListResponse; import ncsmsgo.SmsPushResponse; public class OCHttpClient { @@ -108,17 +109,13 @@ public class OCHttpClient { return new Pair<>(0, null); } - private Pair post(String oc_call, String data) throws OCSyncException { - Log.i(OCHttpClient.TAG, "Perform POST " + _url + oc_call); - try { - return execute("POST", - new URL(_url.toString() + oc_call), data, false); - } catch (MalformedURLException e) { - Log.e(OCHttpClient.TAG, "Malformed URL provided, aborting. URL was: " - + _url.toExternalForm() + oc_call); + private void handleEarlyHTTPStatus(int httpStatus) throws OCSyncException { + switch (httpStatus) { + case 403: { + // Authentication failed + throw new OCSyncException(R.string.err_sync_auth_failed, OCSyncErrorType.AUTH); + } } - - return new Pair<>(0, null); } Pair getAllSmsIds() throws OCSyncException { @@ -130,6 +127,8 @@ public class OCHttpClient { Integer serverAPIVersion = (int) _smsHttpClient.doVersionCall(); int httpStatus = (int) _smsHttpClient.getLastHTTPStatus(); + handleEarlyHTTPStatus(httpStatus); + // If last status is not 200, send the wrong status now if (httpStatus != 200) { return new Pair<>(httpStatus, 0); @@ -153,11 +152,16 @@ public class OCHttpClient { Pair pushSms(SmsBuffer smsBuf) throws OCSyncException { SmsPushResponse spr = _smsHttpClient.doPushCall(smsBuf); - return new Pair<>((int) _smsHttpClient.getLastHTTPStatus(), spr); + int httpStatus = (int) _smsHttpClient.getLastHTTPStatus(); + handleEarlyHTTPStatus(httpStatus); + return new Pair<>(httpStatus, spr); } - Pair getPhoneList() throws OCSyncException { - return get(_smsHttpClient.getPhoneListCall(), true); + Pair getPhoneList() throws OCSyncException { + SmsPhoneListResponse splr = _smsHttpClient.doGetPhoneList(); + int httpStatus = (int) _smsHttpClient.getLastHTTPStatus(); + handleEarlyHTTPStatus(httpStatus); + return new Pair<>(httpStatus, splr); } Pair getMessages(Long start, Integer limit) throws OCSyncException { diff --git a/src/main/java/fr/unix_experience/owncloud_sms/engine/OCSMSOwnCloudClient.java b/src/main/java/fr/unix_experience/owncloud_sms/engine/OCSMSOwnCloudClient.java index 3f1a921..640e6d0 100644 --- a/src/main/java/fr/unix_experience/owncloud_sms/engine/OCSMSOwnCloudClient.java +++ b/src/main/java/fr/unix_experience/owncloud_sms/engine/OCSMSOwnCloudClient.java @@ -23,8 +23,6 @@ import android.content.Context; import android.util.Log; import android.util.Pair; -import org.json.JSONArray; -import org.json.JSONException; import org.json.JSONObject; import java.net.MalformedURLException; @@ -35,6 +33,7 @@ import fr.unix_experience.owncloud_sms.enums.OCSyncErrorType; import fr.unix_experience.owncloud_sms.exceptions.OCSyncException; import fr.unix_experience.owncloud_sms.prefs.OCSMSSharedPrefs; import ncsmsgo.SmsBuffer; +import ncsmsgo.SmsPhoneListResponse; import ncsmsgo.SmsPushResponse; @SuppressWarnings("deprecation") @@ -74,18 +73,13 @@ public class OCSMSOwnCloudClient { return 0; } - JSONArray getServerPhoneNumbers() throws OCSyncException { - Pair response = _http.getPhoneList(); - if (response.second == null) { + SmsPhoneListResponse getServerPhoneNumbers() throws OCSyncException { + Pair response = _http.getPhoneList(); + if (response.second == null || response.first != 200) { return null; } - try { - return response.second.getJSONArray("phoneList"); - } catch (JSONException e) { - Log.e(OCSMSOwnCloudClient.TAG, "No phonelist received from server, empty it", e); - return null; - } + return response.second; } public void doPushRequest(SmsBuffer smsBuffer) throws OCSyncException {