mirror of
https://github.com/nerzhul/ownCloud-SMS-App.git
synced 2025-06-07 16:06:18 +00:00
Another massive sync performance improvement.
* Check mailbox validity before cursor iterations, 3 tests * msgNumber removed * Build messageIDs string only for current checked mailbox * Don't call push HTTP method if there is no messages to sync
This commit is contained in:
parent
deaf93ff8a
commit
9093f69a57
@ -133,7 +133,12 @@ public class OCSMSOwnCloudClient {
|
|||||||
fetcher.setExistingSentMessages(sentSmsList);
|
fetcher.setExistingSentMessages(sentSmsList);
|
||||||
fetcher.setExistingDraftsMessages(draftsSmsList);
|
fetcher.setExistingDraftsMessages(draftsSmsList);
|
||||||
|
|
||||||
smsList = fetcher.getJSONMessages();
|
smsList = fetcher.fetchAllMessages();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (smsList.length() == 0) {
|
||||||
|
Log.d(TAG, "No new SMS to sync, sync done");
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
PostMethod post = createPushRequest(smsList);
|
PostMethod post = createPushRequest(smsList);
|
||||||
@ -190,7 +195,7 @@ public class OCSMSOwnCloudClient {
|
|||||||
|
|
||||||
public PostMethod createPushRequest() throws OCSyncException {
|
public PostMethod createPushRequest() throws OCSyncException {
|
||||||
SmsFetcher fetcher = new SmsFetcher(_context);
|
SmsFetcher fetcher = new SmsFetcher(_context);
|
||||||
JSONArray smsList = fetcher.getJSONMessages();
|
JSONArray smsList = fetcher.fetchAllMessages();
|
||||||
return createPushRequest(smsList);
|
return createPushRequest(smsList);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -18,8 +18,6 @@ package fr.unix_experience.owncloud_sms.engine;
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import java.util.Date;
|
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;
|
||||||
@ -40,50 +38,53 @@ public class SmsFetcher {
|
|||||||
_existingDraftsMessages = null;
|
_existingDraftsMessages = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public JSONArray getJSONMessages() {
|
public JSONArray fetchAllMessages() {
|
||||||
_jsonTempDatas = new JSONArray();
|
_jsonDataDump = new JSONArray();
|
||||||
|
fetchInboxMessages();
|
||||||
getInboxMessages(true);
|
fetchSentMessages();
|
||||||
getSentMessages(true);
|
fetchDraftMessages();
|
||||||
getDraftMessages(true);
|
return _jsonDataDump;
|
||||||
|
|
||||||
return _jsonTempDatas;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public JSONArray getInboxMessages(Boolean toTempBuffer) {
|
public void fetchInboxMessages() {
|
||||||
return getMailboxMessages("content://sms/inbox", toTempBuffer, MailboxID.INBOX);
|
bufferizeMailboxMessages("content://sms/inbox", MailboxID.INBOX);
|
||||||
}
|
}
|
||||||
|
|
||||||
public JSONArray getSentMessages(Boolean toTempBuffer) {
|
public void fetchSentMessages() {
|
||||||
return getMailboxMessages("content://sms/sent", toTempBuffer, MailboxID.SENT);
|
bufferizeMailboxMessages("content://sms/sent", MailboxID.SENT);
|
||||||
}
|
}
|
||||||
|
|
||||||
public JSONArray getDraftMessages(Boolean toTempBuffer) {
|
public void fetchDraftMessages() {
|
||||||
return getMailboxMessages("content://sms/drafts", toTempBuffer, MailboxID.DRAFTS);
|
bufferizeMailboxMessages("content://sms/drafts", MailboxID.DRAFTS);
|
||||||
}
|
}
|
||||||
|
|
||||||
private JSONArray getMailboxMessages(String _mb, Boolean toTempBuffer, MailboxID _mbID) {
|
private void bufferizeMailboxMessages(String _mb, MailboxID _mbID) {
|
||||||
if (_context == null || _mb.length() == 0) {
|
if (_context == null || _mb.length() == 0) {
|
||||||
return null;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_mbID != MailboxID.INBOX && _mbID != MailboxID.SENT &&
|
||||||
|
_mbID != MailboxID.DRAFTS) {
|
||||||
|
Log.e(TAG,"Unhandled MailboxID " + _mbID.ordinal());
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Date startDate = new Date();
|
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);
|
// We generate a ID list for this message box
|
||||||
|
String existingIDs = buildExistingMessagesString(_mbID);
|
||||||
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
|
|
||||||
JSONArray results = new JSONArray();
|
|
||||||
|
|
||||||
|
Cursor c = null;
|
||||||
|
if (existingIDs.length() > 0) {
|
||||||
|
c = (new SmsDataProvider(_context)).query(_mb, "_id NOT IN (" + existingIDs + ")");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
c = (new SmsDataProvider(_context)).query(_mb);
|
||||||
|
}
|
||||||
|
|
||||||
// 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();
|
||||||
@ -116,22 +117,8 @@ 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);
|
|
||||||
|
|
||||||
/*
|
_jsonDataDump.put(entry);
|
||||||
* Use the existing lists to verify if mail needs to be buffered
|
|
||||||
* It's useful to decrease data use
|
|
||||||
*/
|
|
||||||
if (_mbID == MailboxID.INBOX ||
|
|
||||||
_mbID == MailboxID.SENT ||
|
|
||||||
_mbID == MailboxID.DRAFTS) {
|
|
||||||
if (toTempBuffer) {
|
|
||||||
_jsonTempDatas.put(entry);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
results.put(entry);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
} catch (JSONException e) {
|
} catch (JSONException e) {
|
||||||
Log.e(TAG, "JSON Exception when reading SMS Mailbox", e);
|
Log.e(TAG, "JSON Exception when reading SMS Mailbox", e);
|
||||||
@ -147,9 +134,7 @@ public class SmsFetcher {
|
|||||||
|
|
||||||
long diffInMs = (new Date()).getTime() - startDate.getTime();
|
long diffInMs = (new Date()).getTime() - startDate.getTime();
|
||||||
|
|
||||||
Log.d(TAG, "SmsFetcher->getMailboxMessages() Time spent: " + diffInMs);
|
Log.d(TAG, "SmsFetcher->getMailboxMessages() Time spent: " + diffInMs + "ms");
|
||||||
|
|
||||||
return results;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Used by Content Observer
|
// Used by Content Observer
|
||||||
@ -208,43 +193,26 @@ public class SmsFetcher {
|
|||||||
return results;
|
return results;
|
||||||
}
|
}
|
||||||
|
|
||||||
private String buildExistingMessagesString() {
|
private String buildExistingMessagesString(MailboxID _mbID) {
|
||||||
StringBuilder sb = new StringBuilder();
|
JSONArray existingMessages = null;
|
||||||
if (_existingInboxMessages != null) {
|
if (_mbID == MailboxID.INBOX) {
|
||||||
int len = _existingInboxMessages.length();
|
existingMessages = _existingInboxMessages;
|
||||||
for (int i = 0; i < len; i++) {
|
} else if (_mbID == MailboxID.DRAFTS) {
|
||||||
try {
|
existingMessages = _existingDraftsMessages;
|
||||||
if (sb.length() > 0) {
|
} else if (_mbID == MailboxID.SENT) {
|
||||||
sb.append(",");
|
existingMessages = _existingSentMessages;
|
||||||
}
|
|
||||||
sb.append(_existingInboxMessages.getInt(i));
|
|
||||||
} catch (JSONException e) {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
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) {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
// Note: The default case isn't possible, we check the mailbox before
|
||||||
|
|
||||||
if (_existingDraftsMessages != null) {
|
StringBuilder sb = new StringBuilder();
|
||||||
int len = _existingDraftsMessages.length();
|
if (existingMessages != null) {
|
||||||
|
int len = existingMessages.length();
|
||||||
for (int i = 0; i < len; i++) {
|
for (int i = 0; i < len; i++) {
|
||||||
try {
|
try {
|
||||||
if (sb.length() > 0) {
|
if (sb.length() > 0) {
|
||||||
sb.append(",");
|
sb.append(",");
|
||||||
}
|
}
|
||||||
sb.append(_existingDraftsMessages.getInt(i));
|
sb.append(existingMessages.getInt(i));
|
||||||
} catch (JSONException e) {
|
} catch (JSONException e) {
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -267,7 +235,7 @@ public class SmsFetcher {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private Context _context;
|
private Context _context;
|
||||||
private JSONArray _jsonTempDatas;
|
private JSONArray _jsonDataDump;
|
||||||
private JSONArray _existingInboxMessages;
|
private JSONArray _existingInboxMessages;
|
||||||
private JSONArray _existingSentMessages;
|
private JSONArray _existingSentMessages;
|
||||||
private JSONArray _existingDraftsMessages;
|
private JSONArray _existingDraftsMessages;
|
||||||
|
@ -42,6 +42,13 @@ public class SmsDataProvider extends ContentProvider {
|
|||||||
null, null, null
|
null, null, null
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Cursor query(String mailBox, String condition) {
|
||||||
|
return query(Uri.parse(mailBox),
|
||||||
|
new String[] { "read", "date", "address", "seen", "body", "_id", "type", },
|
||||||
|
condition, null, null
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Cursor query(Uri uri, String[] projection, String selection,
|
public Cursor query(Uri uri, String[] projection, String selection,
|
||||||
@ -52,6 +59,8 @@ public class SmsDataProvider extends ContentProvider {
|
|||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getType(Uri uri) {
|
public String getType(Uri uri) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user