only search text messages

This commit is contained in:
Daniel Gultsch 2018-05-01 09:58:43 +02:00
parent 438ae34988
commit 2505ac8b77
3 changed files with 7 additions and 8 deletions

View file

@ -725,7 +725,7 @@ public class DatabaseBackend extends SQLiteOpenHelper {
public Cursor getMessageSearchCursor(List<String> term) {
SQLiteDatabase db = this.getReadableDatabase();
String SQL = "SELECT "+Message.TABLENAME+".*,"+Conversation.TABLENAME+'.'+Conversation.CONTACTJID+','+Conversation.TABLENAME+'.'+Conversation.ACCOUNT+','+Conversation.TABLENAME+'.'+Conversation.MODE+" FROM "+Message.TABLENAME +" join "+Conversation.TABLENAME+" on "+Message.TABLENAME+'.'+Message.CONVERSATION+'='+Conversation.TABLENAME+'.'+Conversation.UUID+" join messages_index ON messages_index.uuid=messages.uuid where "+Message.ENCRYPTION+" NOT IN("+Message.ENCRYPTION_AXOLOTL_NOT_FOR_THIS_DEVICE+','+Message.ENCRYPTION_PGP+','+Message.ENCRYPTION_DECRYPTION_FAILED+") AND messages_index.body MATCH ? ORDER BY "+Message.TIME_SENT+" DESC limit "+Config.MAX_SEARCH_RESULTS;
String SQL = "SELECT "+Message.TABLENAME+".*,"+Conversation.TABLENAME+'.'+Conversation.CONTACTJID+','+Conversation.TABLENAME+'.'+Conversation.ACCOUNT+','+Conversation.TABLENAME+'.'+Conversation.MODE+" FROM "+Message.TABLENAME +" join "+Conversation.TABLENAME+" on "+Message.TABLENAME+'.'+Message.CONVERSATION+'='+Conversation.TABLENAME+'.'+Conversation.UUID+" join messages_index ON messages_index.uuid=messages.uuid where "+Message.ENCRYPTION+" NOT IN("+Message.ENCRYPTION_AXOLOTL_NOT_FOR_THIS_DEVICE+','+Message.ENCRYPTION_PGP+','+Message.ENCRYPTION_DECRYPTION_FAILED+") AND "+Message.TYPE+" IN("+Message.TYPE_TEXT+','+Message.TYPE_PRIVATE+") AND messages_index.body MATCH ? ORDER BY "+Message.TIME_SENT+" DESC limit "+Config.MAX_SEARCH_RESULTS;
Log.d(Config.LOGTAG,"search term: "+FtsUtils.toMatchString(term));
return db.rawQuery(SQL,new String[]{FtsUtils.toMatchString(term)});
}

View file

@ -87,6 +87,7 @@ public class MessageSearchTask implements Runnable, Cancellable {
final HashMap<String, Conversational> conversationCache = new HashMap<>();
final List<Message> result = new ArrayList<>();
cursor = xmppConnectionService.databaseBackend.getMessageSearchCursor(term);
long dbTimer = SystemClock.elapsedRealtime();
if (isCancelled) {
Log.d(Config.LOGTAG, "canceled search task");
return;
@ -99,10 +100,8 @@ public class MessageSearchTask implements Runnable, Cancellable {
return;
}
final String conversationUuid = cursor.getString(cursor.getColumnIndex(Message.CONVERSATION));
Conversational conversation;
if (conversationCache.containsKey(conversationUuid)) {
conversation = conversationCache.get(conversationUuid);
} else {
Conversational conversation = conversationCache.get(conversationUuid);
if (conversation == null) {
String accountUuid = cursor.getString(cursor.getColumnIndex(Conversation.ACCOUNT));
String contactJid = cursor.getString(cursor.getColumnIndex(Conversation.CONTACTJID));
int mode = cursor.getInt(cursor.getColumnIndex(Conversation.MODE));
@ -114,7 +113,7 @@ public class MessageSearchTask implements Runnable, Cancellable {
} while (cursor.moveToPrevious());
}
long stopTimestamp = SystemClock.elapsedRealtime();
Log.d(Config.LOGTAG, "found " + result.size() + " messages in " + (stopTimestamp - startTimestamp) + "ms");
Log.d(Config.LOGTAG, "found " + result.size() + " messages in " + (stopTimestamp - startTimestamp) + "ms"+ " (db was "+(dbTimer - startTimestamp)+"ms)");
onSearchResultsAvailable.onSearchResultsAvailable(term, result);
} catch (Exception e) {
Log.d(Config.LOGTAG, "exception while searching ", e);

View file

@ -46,7 +46,7 @@ public class FtsUtils {
continue;
}
final String cleaned = clean(part);
if (isKeyword(cleaned)) {
if (isKeyword(cleaned) || cleaned.contains("*")) {
term.add(part);
} else if (!cleaned.isEmpty()) {
term.add(cleaned);
@ -72,7 +72,7 @@ public class FtsUtils {
return builder.toString();
}
public static boolean isKeyword(String term) {
static boolean isKeyword(String term) {
return KEYWORDS.contains(term.toUpperCase(Locale.ENGLISH));
}