From 74c79cc3657917bf33e04da63aa1e26b29d0f2bb Mon Sep 17 00:00:00 2001 From: Danny Baumann Date: Thu, 31 Jan 2013 10:56:31 +0100 Subject: [PATCH] Aggregate some more thread columns properly. - show thread as starred if at least one message in it is starred - use arrival date of last message as thread arrival date - use sum of message attachment counts in thread as thread attachment count - show thread as answered/forwarded if all messages in thread were answered/forwarded --- src/com/fsck/k9/provider/EmailProvider.java | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/com/fsck/k9/provider/EmailProvider.java b/src/com/fsck/k9/provider/EmailProvider.java index 708b2a598..0186a075f 100644 --- a/src/com/fsck/k9/provider/EmailProvider.java +++ b/src/com/fsck/k9/provider/EmailProvider.java @@ -89,6 +89,16 @@ public class EmailProvider extends ContentProvider { InternalMessageColumns.MIME_TYPE }; + private static final Map THREAD_AGGREGATION_FUNCS = new HashMap(); + static { + THREAD_AGGREGATION_FUNCS.put(MessageColumns.DATE, "MAX"); + THREAD_AGGREGATION_FUNCS.put(MessageColumns.INTERNAL_DATE, "MAX"); + THREAD_AGGREGATION_FUNCS.put(MessageColumns.ATTACHMENT_COUNT, "SUM"); + THREAD_AGGREGATION_FUNCS.put(MessageColumns.READ, "MIN"); + THREAD_AGGREGATION_FUNCS.put(MessageColumns.FLAGGED, "MAX"); + THREAD_AGGREGATION_FUNCS.put(MessageColumns.ANSWERED, "MIN"); + THREAD_AGGREGATION_FUNCS.put(MessageColumns.FORWARDED, "MIN"); + } private static final String[] FIXUP_MESSAGES_COLUMNS = { MessageColumns.ID }; @@ -395,12 +405,12 @@ public class EmailProvider extends ContentProvider { first = false; } + final String aggregationFunc = THREAD_AGGREGATION_FUNCS.get(columnName); + if (MessageColumns.ID.equals(columnName)) { query.append("u." + MessageColumns.ID + " AS " + MessageColumns.ID); - } else if (MessageColumns.READ.equals(columnName)) { - query.append("MIN(read) AS " + MessageColumns.READ); - } else if (MessageColumns.DATE.equals(columnName)) { - query.append("MAX(date) AS " + MessageColumns.DATE); + } else if (aggregationFunc != null) { + query.append(aggregationFunc + "(" + columnName + ") AS " + columnName); } else if (SpecialColumns.THREAD_COUNT.equals(columnName)) { query.append("COUNT(g) AS " + SpecialColumns.THREAD_COUNT); } else {