1
0
mirror of https://github.com/nerzhul/ownCloud-SMS-App.git synced 2025-06-07 16:06:18 +00:00

Massively improve secure sync speed (divide time spent by 10)

* Also cleanup some useless code but we need more cleanups
This commit is contained in:
Loïc Blot (@U-Exp) 2014-12-02 19:51:30 +01:00
parent 7ea252e0ab
commit deaf93ff8a
2 changed files with 70 additions and 35 deletions

View File

@ -83,6 +83,7 @@ public class OCSMSOwnCloudClient {
* If we need other API push, set it here * If we need other API push, set it here
*/ */
switch (_serverAPIVersion) { switch (_serverAPIVersion) {
case 2: doPushRequestV2(smsList); break;
case 1: case 1:
default: doPushRequestV1(smsList); break; default: doPushRequestV1(smsList); break;
} }
@ -161,6 +162,10 @@ public class OCSMSOwnCloudClient {
Log.d(TAG, "SMS Push request said: status " + pushStatus + " - " + pushMessage); Log.d(TAG, "SMS Push request said: status " + pushStatus + " - " + pushMessage);
} }
public void doPushRequestV2(JSONArray smsList) throws OCSyncException {
}
public GetMethod createGetVersionRequest() { public GetMethod createGetVersionRequest() {
return createGetRequest(OC_GET_VERSION); return createGetRequest(OC_GET_VERSION);
} }

View File

@ -17,6 +17,9 @@ package fr.unix_experience.owncloud_sms.engine;
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
import java.util.Date;
import java.util.concurrent.TimeUnit;
import org.json.JSONArray; import org.json.JSONArray;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
@ -25,6 +28,7 @@ import fr.unix_experience.owncloud_sms.enums.MailboxID;
import fr.unix_experience.owncloud_sms.providers.SmsDataProvider; import fr.unix_experience.owncloud_sms.providers.SmsDataProvider;
import android.content.Context; import android.content.Context;
import android.database.Cursor; import android.database.Cursor;
import android.net.Uri;
import android.util.Log; import android.util.Log;
public class SmsFetcher { public class SmsFetcher {
@ -43,11 +47,7 @@ public class SmsFetcher {
getSentMessages(true); getSentMessages(true);
getDraftMessages(true); getDraftMessages(true);
JSONArray result = _jsonTempDatas; return _jsonTempDatas;
// Empty the buffer
_jsonTempDatas = new JSONArray();
return result;
} }
public JSONArray getInboxMessages(Boolean toTempBuffer) { public JSONArray getInboxMessages(Boolean toTempBuffer) {
@ -66,15 +66,24 @@ public class SmsFetcher {
if (_context == null || _mb.length() == 0) { if (_context == null || _mb.length() == 0) {
return null; return null;
} }
Date startDate = new Date();
// Fetch Sent SMS Message from Built-in Content Provider // Fetch Sent SMS Message from Built-in Content Provider
Cursor c = (new SmsDataProvider(_context)).query(_mb);
//Cursor c = (new SmsDataProvider(_context)).query(_mb);
String existingIDs = buildExistingMessagesString();
Cursor c = (new SmsDataProvider(_context)).query(Uri.parse(_mb),
new String[] { "read", "date", "address", "seen", "body", "_id", "type", }, "_id NOT IN (" + existingIDs + ")", null, null);
// We create a list of strings to store results // We create a list of strings to store results
JSONArray results = new JSONArray(); JSONArray results = new JSONArray();
// Reading mailbox // Reading mailbox
if (c != null && c.getCount() > 0) { if (c != null && c.getCount() > 0) {
c.moveToFirst(); c.moveToFirst();
do { do {
JSONObject entry = new JSONObject(); JSONObject entry = new JSONObject();
@ -107,14 +116,15 @@ public class SmsFetcher {
// Mailbox ID is required by server // Mailbox ID is required by server
entry.put("mbox", _mbID.ordinal()); entry.put("mbox", _mbID.ordinal());
Log.d(TAG,"" + msgId);
/* /*
* Use the existing lists to verify if mail needs to be buffered * Use the existing lists to verify if mail needs to be buffered
* It's useful to decrease data use * It's useful to decrease data use
*/ */
if (_mbID == MailboxID.INBOX && isAnExistingInboxMessage(msgId) == false || if (_mbID == MailboxID.INBOX ||
_mbID == MailboxID.SENT && isAnExistingSentMessage(msgId) == false || _mbID == MailboxID.SENT ||
_mbID == MailboxID.DRAFTS && isAnExistingDraftsMessage(msgId) == false) { _mbID == MailboxID.DRAFTS) {
if (toTempBuffer) { if (toTempBuffer) {
_jsonTempDatas.put(entry); _jsonTempDatas.put(entry);
} }
@ -134,10 +144,15 @@ public class SmsFetcher {
c.close(); c.close();
} }
long diffInMs = (new Date()).getTime() - startDate.getTime();
Log.d(TAG, "SmsFetcher->getMailboxMessages() Time spent: " + diffInMs);
return results; return results;
} }
// Used by Content Observer
public JSONArray getLastMessage(String _mb) { public JSONArray getLastMessage(String _mb) {
if (_context == null || _mb.length() == 0) { if (_context == null || _mb.length() == 0) {
return null; return null;
@ -193,35 +208,50 @@ public class SmsFetcher {
return results; return results;
} }
private boolean isAnExistingInboxMessage(int msgId) { private String buildExistingMessagesString() {
return isExistingMessage(_existingInboxMessages, msgId); StringBuilder sb = new StringBuilder();
} if (_existingInboxMessages != null) {
int len = _existingInboxMessages.length();
private boolean isAnExistingSentMessage(int msgId) { for (int i = 0; i < len; i++) {
return isExistingMessage(_existingSentMessages, msgId); try {
} if (sb.length() > 0) {
sb.append(",");
private boolean isAnExistingDraftsMessage(int msgId) { }
return isExistingMessage(_existingDraftsMessages, msgId); sb.append(_existingInboxMessages.getInt(i));
} } catch (JSONException e) {
private boolean isExistingMessage(JSONArray msgList, int msgId) { }
if (msgList == null) { }
return false; }
if (_existingSentMessages != null) {
int len = _existingSentMessages.length();
for (int i = 0; i < len; i++) {
try {
if (sb.length() > 0) {
sb.append(",");
}
sb.append(_existingSentMessages.getInt(i));
} catch (JSONException e) {
}
}
} }
int len = msgList.length(); if (_existingDraftsMessages != null) {
for (int i = 0; i < len; i++) { int len = _existingDraftsMessages.length();
try { for (int i = 0; i < len; i++) {
if (msgList.getInt(i) == msgId) { try {
return true; if (sb.length() > 0) {
sb.append(",");
}
sb.append(_existingDraftsMessages.getInt(i));
} catch (JSONException e) {
} }
} catch (JSONException e) { }
return false; }
}
}
return false; return sb.toString();
} }
public void setExistingInboxMessages(JSONArray inboxMessages) { public void setExistingInboxMessages(JSONArray inboxMessages) {