mirror of
https://github.com/moparisthebest/k-9
synced 2024-11-27 19:52:17 -05:00
Try harder not to use "special folders" as count sources
This commit is contained in:
parent
890564b926
commit
6504d592ea
@ -1,230 +1,230 @@
|
||||
package com.fsck.k9.helper;
|
||||
|
||||
import android.text.*;
|
||||
import android.util.Log;
|
||||
import com.fsck.k9.K9;
|
||||
import org.xml.sax.XMLReader;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.StringReader;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.regex.Matcher;
|
||||
|
||||
/**
|
||||
* Contains common routines to convert html to text and vice versa.
|
||||
*/
|
||||
public class HtmlConverter
|
||||
{
|
||||
/**
|
||||
* When generating previews, Spannable objects that can't be converted into a String are
|
||||
* represented as 0xfffc. When displayed, these show up as undisplayed squares. These constants
|
||||
* define the object character and the replacement character.
|
||||
*/
|
||||
private static final char PREVIEW_OBJECT_CHARACTER = (char)0xfffc;
|
||||
private static final char PREVIEW_OBJECT_REPLACEMENT = (char)0x20; // space
|
||||
|
||||
/**
|
||||
* toHtml() converts non-breaking spaces into the UTF-8 non-breaking space, which doesn't get
|
||||
* rendered properly in some clients. Replace it with a simple space.
|
||||
*/
|
||||
private static final char NBSP_CHARACTER = (char)0x00a0; // utf-8 non-breaking space
|
||||
private static final char NBSP_REPLACEMENT = (char)0x20; // space
|
||||
|
||||
/**
|
||||
* Convert an HTML string to a plain text string.
|
||||
* @param html HTML string to convert.
|
||||
* @return Plain text result.
|
||||
*/
|
||||
public static String htmlToText(final String html)
|
||||
{
|
||||
return Html.fromHtml(html, null, new HtmlToTextTagHandler()).toString()
|
||||
.replace(PREVIEW_OBJECT_CHARACTER, PREVIEW_OBJECT_REPLACEMENT)
|
||||
.replace(NBSP_CHARACTER, NBSP_REPLACEMENT);
|
||||
}
|
||||
|
||||
/**
|
||||
* Custom tag handler to use when converting HTML messages to text. It currently handles text
|
||||
* representations of HTML tags that Android's built-in parser doesn't understand and hides code
|
||||
* contained in STYLE and SCRIPT blocks.
|
||||
*/
|
||||
private static class HtmlToTextTagHandler implements Html.TagHandler
|
||||
{
|
||||
// List of tags whose content should be ignored.
|
||||
private static final Set<String> TAGS_WITH_IGNORED_CONTENT = Collections.unmodifiableSet(new HashSet<String>()
|
||||
{
|
||||
{
|
||||
add("style");
|
||||
add("script");
|
||||
add("title");
|
||||
add("!"); // comments
|
||||
}
|
||||
});
|
||||
|
||||
@Override
|
||||
public void handleTag(boolean opening, String tag, Editable output, XMLReader xmlReader)
|
||||
{
|
||||
tag = tag.toLowerCase();
|
||||
if (tag.equals("hr") && opening)
|
||||
{
|
||||
// In the case of an <hr>, replace it with a bunch of underscores. This is roughly
|
||||
// the behaviour of Outlook in Rich Text mode.
|
||||
output.append("_____________________________________________\n");
|
||||
}
|
||||
else if (TAGS_WITH_IGNORED_CONTENT.contains(tag))
|
||||
{
|
||||
handleIgnoredTag(opening, output);
|
||||
}
|
||||
}
|
||||
|
||||
private static final String IGNORED_ANNOTATION_KEY = "K9_ANNOTATION";
|
||||
private static final String IGNORED_ANNOTATION_VALUE = "hiddenSpan";
|
||||
|
||||
/**
|
||||
* When we come upon an ignored tag, we mark it with an Annotation object with a specific key
|
||||
* and value as above. We don't really need to be checking these values since Html.fromHtml()
|
||||
* doesn't use Annotation spans, but we should do it now to be safe in case they do start using
|
||||
* it in the future.
|
||||
* @param opening If this is an opening tag or not.
|
||||
* @param output Spannable string that we're working with.
|
||||
*/
|
||||
private void handleIgnoredTag(boolean opening, Editable output)
|
||||
{
|
||||
int len = output.length();
|
||||
if (opening)
|
||||
{
|
||||
output.setSpan(new Annotation(IGNORED_ANNOTATION_KEY, IGNORED_ANNOTATION_VALUE), len,
|
||||
len, Spannable.SPAN_MARK_MARK);
|
||||
}
|
||||
else
|
||||
{
|
||||
Object start = getOpeningAnnotation(output);
|
||||
if (start != null)
|
||||
{
|
||||
int where = output.getSpanStart(start);
|
||||
// Remove the temporary Annotation span.
|
||||
output.removeSpan(start);
|
||||
// Delete everything between the start of the Annotation and the end of the string
|
||||
// (what we've generated so far).
|
||||
output.delete(where, len);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetch the matching opening Annotation object and verify that it's the one added by K9.
|
||||
* @param output Spannable string we're working with.
|
||||
* @return Starting Annotation object.
|
||||
*/
|
||||
private Object getOpeningAnnotation(Editable output)
|
||||
{
|
||||
Object[] objs = output.getSpans(0, output.length(), Annotation.class);
|
||||
for (int i = objs.length - 1; i >= 0; i--)
|
||||
{
|
||||
Annotation span = (Annotation) objs[i];
|
||||
if (output.getSpanFlags(objs[i]) == Spannable.SPAN_MARK_MARK
|
||||
&& span.getKey().equals(IGNORED_ANNOTATION_KEY)
|
||||
&& span.getValue().equals(IGNORED_ANNOTATION_VALUE))
|
||||
{
|
||||
return objs[i];
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private static final int MAX_SMART_HTMLIFY_MESSAGE_LENGTH = 1024 * 256 ;
|
||||
|
||||
/**
|
||||
* Convert a text string into an HTML document. Attempts to do smart replacement for large
|
||||
* documents to prevent OOM errors. This method adds headers and footers to create a proper HTML
|
||||
* document. To convert to a fragment, use {@link #textToHtmlFragment(String)}.
|
||||
* @param text Plain text string.
|
||||
* @return HTML string.
|
||||
*/
|
||||
public static String textToHtml(String text)
|
||||
{
|
||||
// Our HTMLification code is somewhat memory intensive
|
||||
// and was causing lots of OOM errors on the market
|
||||
// if the message is big and plain text, just do
|
||||
// a trivial htmlification
|
||||
if (text.length() > MAX_SMART_HTMLIFY_MESSAGE_LENGTH)
|
||||
{
|
||||
return "<html><head/><body>" +
|
||||
htmlifyMessageHeader() +
|
||||
text +
|
||||
htmlifyMessageFooter() +
|
||||
"</body></html>";
|
||||
}
|
||||
StringReader reader = new StringReader(text);
|
||||
StringBuilder buff = new StringBuilder(text.length() + 512);
|
||||
int c;
|
||||
try
|
||||
{
|
||||
while ((c = reader.read()) != -1)
|
||||
{
|
||||
switch (c)
|
||||
{
|
||||
case '&':
|
||||
buff.append("&");
|
||||
break;
|
||||
case '<':
|
||||
buff.append("<");
|
||||
break;
|
||||
case '>':
|
||||
buff.append(">");
|
||||
break;
|
||||
case '\r':
|
||||
break;
|
||||
default:
|
||||
buff.append((char)c);
|
||||
}//switch
|
||||
}
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
//Should never happen
|
||||
Log.e(K9.LOG_TAG, "Could not read string to convert text to HTML:", e);
|
||||
}
|
||||
text = buff.toString();
|
||||
text = text.replaceAll("\\s*([-=_]{30,}+)\\s*","<hr />");
|
||||
text = text.replaceAll("(?m)^([^\r\n]{4,}[\\s\\w,:;+/])(?:\r\n|\n|\r)(?=[a-z]\\S{0,10}[\\s\\n\\r])","$1 ");
|
||||
text = text.replaceAll("(?m)(\r\n|\n|\r){4,}","\n\n");
|
||||
|
||||
Matcher m = Regex.WEB_URL_PATTERN.matcher(text);
|
||||
StringBuffer sb = new StringBuffer(text.length() + 512);
|
||||
sb.append("<html><head></head><body>");
|
||||
sb.append(htmlifyMessageHeader());
|
||||
while (m.find())
|
||||
{
|
||||
int start = m.start();
|
||||
if (start == 0 || (start != 0 && text.charAt(start - 1) != '@'))
|
||||
{
|
||||
if (m.group().indexOf(':') > 0) // With no URI-schema we may get "http:/" links with the second / missing
|
||||
{
|
||||
m.appendReplacement(sb, "<a href=\"$0\">$0</a>");
|
||||
}
|
||||
else
|
||||
{
|
||||
m.appendReplacement(sb, "<a href=\"http://$0\">$0</a>");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
m.appendReplacement(sb, "$0");
|
||||
}
|
||||
}
|
||||
|
||||
m.appendTail(sb);
|
||||
sb.append(htmlifyMessageFooter());
|
||||
sb.append("</body></html>");
|
||||
text = sb.toString();
|
||||
|
||||
return text;
|
||||
}
|
||||
|
||||
package com.fsck.k9.helper;
|
||||
|
||||
import android.text.*;
|
||||
import android.util.Log;
|
||||
import com.fsck.k9.K9;
|
||||
import org.xml.sax.XMLReader;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.StringReader;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.regex.Matcher;
|
||||
|
||||
/**
|
||||
* Contains common routines to convert html to text and vice versa.
|
||||
*/
|
||||
public class HtmlConverter
|
||||
{
|
||||
/**
|
||||
* When generating previews, Spannable objects that can't be converted into a String are
|
||||
* represented as 0xfffc. When displayed, these show up as undisplayed squares. These constants
|
||||
* define the object character and the replacement character.
|
||||
*/
|
||||
private static final char PREVIEW_OBJECT_CHARACTER = (char)0xfffc;
|
||||
private static final char PREVIEW_OBJECT_REPLACEMENT = (char)0x20; // space
|
||||
|
||||
/**
|
||||
* toHtml() converts non-breaking spaces into the UTF-8 non-breaking space, which doesn't get
|
||||
* rendered properly in some clients. Replace it with a simple space.
|
||||
*/
|
||||
private static final char NBSP_CHARACTER = (char)0x00a0; // utf-8 non-breaking space
|
||||
private static final char NBSP_REPLACEMENT = (char)0x20; // space
|
||||
|
||||
/**
|
||||
* Convert an HTML string to a plain text string.
|
||||
* @param html HTML string to convert.
|
||||
* @return Plain text result.
|
||||
*/
|
||||
public static String htmlToText(final String html)
|
||||
{
|
||||
return Html.fromHtml(html, null, new HtmlToTextTagHandler()).toString()
|
||||
.replace(PREVIEW_OBJECT_CHARACTER, PREVIEW_OBJECT_REPLACEMENT)
|
||||
.replace(NBSP_CHARACTER, NBSP_REPLACEMENT);
|
||||
}
|
||||
|
||||
/**
|
||||
* Custom tag handler to use when converting HTML messages to text. It currently handles text
|
||||
* representations of HTML tags that Android's built-in parser doesn't understand and hides code
|
||||
* contained in STYLE and SCRIPT blocks.
|
||||
*/
|
||||
private static class HtmlToTextTagHandler implements Html.TagHandler
|
||||
{
|
||||
// List of tags whose content should be ignored.
|
||||
private static final Set<String> TAGS_WITH_IGNORED_CONTENT = Collections.unmodifiableSet(new HashSet<String>()
|
||||
{
|
||||
{
|
||||
add("style");
|
||||
add("script");
|
||||
add("title");
|
||||
add("!"); // comments
|
||||
}
|
||||
});
|
||||
|
||||
@Override
|
||||
public void handleTag(boolean opening, String tag, Editable output, XMLReader xmlReader)
|
||||
{
|
||||
tag = tag.toLowerCase();
|
||||
if (tag.equals("hr") && opening)
|
||||
{
|
||||
// In the case of an <hr>, replace it with a bunch of underscores. This is roughly
|
||||
// the behaviour of Outlook in Rich Text mode.
|
||||
output.append("_____________________________________________\n");
|
||||
}
|
||||
else if (TAGS_WITH_IGNORED_CONTENT.contains(tag))
|
||||
{
|
||||
handleIgnoredTag(opening, output);
|
||||
}
|
||||
}
|
||||
|
||||
private static final String IGNORED_ANNOTATION_KEY = "K9_ANNOTATION";
|
||||
private static final String IGNORED_ANNOTATION_VALUE = "hiddenSpan";
|
||||
|
||||
/**
|
||||
* When we come upon an ignored tag, we mark it with an Annotation object with a specific key
|
||||
* and value as above. We don't really need to be checking these values since Html.fromHtml()
|
||||
* doesn't use Annotation spans, but we should do it now to be safe in case they do start using
|
||||
* it in the future.
|
||||
* @param opening If this is an opening tag or not.
|
||||
* @param output Spannable string that we're working with.
|
||||
*/
|
||||
private void handleIgnoredTag(boolean opening, Editable output)
|
||||
{
|
||||
int len = output.length();
|
||||
if (opening)
|
||||
{
|
||||
output.setSpan(new Annotation(IGNORED_ANNOTATION_KEY, IGNORED_ANNOTATION_VALUE), len,
|
||||
len, Spannable.SPAN_MARK_MARK);
|
||||
}
|
||||
else
|
||||
{
|
||||
Object start = getOpeningAnnotation(output);
|
||||
if (start != null)
|
||||
{
|
||||
int where = output.getSpanStart(start);
|
||||
// Remove the temporary Annotation span.
|
||||
output.removeSpan(start);
|
||||
// Delete everything between the start of the Annotation and the end of the string
|
||||
// (what we've generated so far).
|
||||
output.delete(where, len);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetch the matching opening Annotation object and verify that it's the one added by K9.
|
||||
* @param output Spannable string we're working with.
|
||||
* @return Starting Annotation object.
|
||||
*/
|
||||
private Object getOpeningAnnotation(Editable output)
|
||||
{
|
||||
Object[] objs = output.getSpans(0, output.length(), Annotation.class);
|
||||
for (int i = objs.length - 1; i >= 0; i--)
|
||||
{
|
||||
Annotation span = (Annotation) objs[i];
|
||||
if (output.getSpanFlags(objs[i]) == Spannable.SPAN_MARK_MARK
|
||||
&& span.getKey().equals(IGNORED_ANNOTATION_KEY)
|
||||
&& span.getValue().equals(IGNORED_ANNOTATION_VALUE))
|
||||
{
|
||||
return objs[i];
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private static final int MAX_SMART_HTMLIFY_MESSAGE_LENGTH = 1024 * 256 ;
|
||||
|
||||
/**
|
||||
* Convert a text string into an HTML document. Attempts to do smart replacement for large
|
||||
* documents to prevent OOM errors. This method adds headers and footers to create a proper HTML
|
||||
* document. To convert to a fragment, use {@link #textToHtmlFragment(String)}.
|
||||
* @param text Plain text string.
|
||||
* @return HTML string.
|
||||
*/
|
||||
public static String textToHtml(String text)
|
||||
{
|
||||
// Our HTMLification code is somewhat memory intensive
|
||||
// and was causing lots of OOM errors on the market
|
||||
// if the message is big and plain text, just do
|
||||
// a trivial htmlification
|
||||
if (text.length() > MAX_SMART_HTMLIFY_MESSAGE_LENGTH)
|
||||
{
|
||||
return "<html><head/><body>" +
|
||||
htmlifyMessageHeader() +
|
||||
text +
|
||||
htmlifyMessageFooter() +
|
||||
"</body></html>";
|
||||
}
|
||||
StringReader reader = new StringReader(text);
|
||||
StringBuilder buff = new StringBuilder(text.length() + 512);
|
||||
int c;
|
||||
try
|
||||
{
|
||||
while ((c = reader.read()) != -1)
|
||||
{
|
||||
switch (c)
|
||||
{
|
||||
case '&':
|
||||
buff.append("&");
|
||||
break;
|
||||
case '<':
|
||||
buff.append("<");
|
||||
break;
|
||||
case '>':
|
||||
buff.append(">");
|
||||
break;
|
||||
case '\r':
|
||||
break;
|
||||
default:
|
||||
buff.append((char)c);
|
||||
}//switch
|
||||
}
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
//Should never happen
|
||||
Log.e(K9.LOG_TAG, "Could not read string to convert text to HTML:", e);
|
||||
}
|
||||
text = buff.toString();
|
||||
text = text.replaceAll("\\s*([-=_]{30,}+)\\s*","<hr />");
|
||||
text = text.replaceAll("(?m)^([^\r\n]{4,}[\\s\\w,:;+/])(?:\r\n|\n|\r)(?=[a-z]\\S{0,10}[\\s\\n\\r])","$1 ");
|
||||
text = text.replaceAll("(?m)(\r\n|\n|\r){4,}","\n\n");
|
||||
|
||||
Matcher m = Regex.WEB_URL_PATTERN.matcher(text);
|
||||
StringBuffer sb = new StringBuffer(text.length() + 512);
|
||||
sb.append("<html><head></head><body>");
|
||||
sb.append(htmlifyMessageHeader());
|
||||
while (m.find())
|
||||
{
|
||||
int start = m.start();
|
||||
if (start == 0 || (start != 0 && text.charAt(start - 1) != '@'))
|
||||
{
|
||||
if (m.group().indexOf(':') > 0) // With no URI-schema we may get "http:/" links with the second / missing
|
||||
{
|
||||
m.appendReplacement(sb, "<a href=\"$0\">$0</a>");
|
||||
}
|
||||
else
|
||||
{
|
||||
m.appendReplacement(sb, "<a href=\"http://$0\">$0</a>");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
m.appendReplacement(sb, "$0");
|
||||
}
|
||||
}
|
||||
|
||||
m.appendTail(sb);
|
||||
sb.append(htmlifyMessageFooter());
|
||||
sb.append("</body></html>");
|
||||
text = sb.toString();
|
||||
|
||||
return text;
|
||||
}
|
||||
|
||||
/*
|
||||
* Lightweight method to check whether the message contains emoji or not.
|
||||
* Useful to avoid calling the heavyweight convertEmoji2Img method.
|
||||
@ -233,20 +233,20 @@ public class HtmlConverter
|
||||
private static boolean hasEmoji(String html)
|
||||
{
|
||||
for (int i = 0; i < html.length(); ++i)
|
||||
{
|
||||
{
|
||||
char c = html.charAt(i);
|
||||
if (c >= 0xDBB8 && c < 0xDBBC)
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
public static String convertEmoji2Img(String html)
|
||||
{
|
||||
if (!hasEmoji(html))
|
||||
{
|
||||
{
|
||||
return html;
|
||||
|
||||
|
||||
}
|
||||
StringBuilder buff = new StringBuilder(html.length() + 512);
|
||||
for (int i = 0; i < html.length(); i = html.offsetByCodePoints(i, 1))
|
||||
@ -257,8 +257,8 @@ public class HtmlConverter
|
||||
buff.append("<img src=\"file:///android_asset/emoticons/" + emoji + ".gif\" alt=\"" + emoji + "\" />");
|
||||
else
|
||||
buff.appendCodePoint(codePoint);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
return buff.toString();
|
||||
}
|
||||
private static String getEmojiForCodePoint(int codePoint)
|
||||
@ -266,7 +266,7 @@ public class HtmlConverter
|
||||
// Derived from http://code.google.com/p/emoji4unicode/source/browse/trunk/data/emoji4unicode.xml
|
||||
// XXX: This doesn't cover all the characters. More emoticons are wanted.
|
||||
switch (codePoint)
|
||||
{
|
||||
{
|
||||
case 0xFE000:
|
||||
return "sun";
|
||||
case 0xFE001:
|
||||
@ -1093,47 +1093,47 @@ public class HtmlConverter
|
||||
return "movie";
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
private static String htmlifyMessageHeader()
|
||||
{
|
||||
if (K9.messageViewFixedWidthFont())
|
||||
{
|
||||
return "<pre style=\"white-space: pre-wrap; word-wrap:break-word; \">";
|
||||
}
|
||||
else
|
||||
{
|
||||
return "<div style=\"white-space: pre-wrap; word-wrap:break-word; \">";
|
||||
}
|
||||
}
|
||||
|
||||
private static String htmlifyMessageFooter()
|
||||
{
|
||||
if (K9.messageViewFixedWidthFont())
|
||||
{
|
||||
return "</pre>";
|
||||
}
|
||||
else
|
||||
{
|
||||
return "</div>";
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert a plain text string into an HTML fragment.
|
||||
* @param text Plain text.
|
||||
* @return HTML fragment.
|
||||
*/
|
||||
public static String textToHtmlFragment(final String text)
|
||||
{
|
||||
// Escape the entities and add newlines.
|
||||
// TODO - Perhaps use LocalStore.htmlifyString?
|
||||
String result = TextUtils.htmlEncode(text).replace("\n", "<br>\n");
|
||||
// For some reason, TextUtils.htmlEncode escapes ' into ', which is technically part of the XHTML 1.0
|
||||
// standard, but Gmail doesn't recognize it as an HTML entity. We unescape that here.
|
||||
return result.replace("'", "'");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
private static String htmlifyMessageHeader()
|
||||
{
|
||||
if (K9.messageViewFixedWidthFont())
|
||||
{
|
||||
return "<pre style=\"white-space: pre-wrap; word-wrap:break-word; \">";
|
||||
}
|
||||
else
|
||||
{
|
||||
return "<div style=\"white-space: pre-wrap; word-wrap:break-word; \">";
|
||||
}
|
||||
}
|
||||
|
||||
private static String htmlifyMessageFooter()
|
||||
{
|
||||
if (K9.messageViewFixedWidthFont())
|
||||
{
|
||||
return "</pre>";
|
||||
}
|
||||
else
|
||||
{
|
||||
return "</div>";
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert a plain text string into an HTML fragment.
|
||||
* @param text Plain text.
|
||||
* @return HTML fragment.
|
||||
*/
|
||||
public static String textToHtmlFragment(final String text)
|
||||
{
|
||||
// Escape the entities and add newlines.
|
||||
// TODO - Perhaps use LocalStore.htmlifyString?
|
||||
String result = TextUtils.htmlEncode(text).replace("\n", "<br>\n");
|
||||
// For some reason, TextUtils.htmlEncode escapes ' into ', which is technically part of the XHTML 1.0
|
||||
// standard, but Gmail doesn't recognize it as an HTML entity. We unescape that here.
|
||||
return result.replace("'", "'");
|
||||
}
|
||||
}
|
||||
|
@ -586,30 +586,76 @@ public class LocalStore extends Store implements Serializable
|
||||
Cursor cursor = null;
|
||||
try
|
||||
{
|
||||
String baseQuery = "SELECT SUM(unread_count), SUM(flagged_count) FROM folders";
|
||||
String baseQuery = "SELECT SUM(unread_count), SUM(flagged_count) FROM folders WHERE ( name != ? AND name != ? AND name != ? AND name != ? AND name != ? ) ";
|
||||
|
||||
|
||||
|
||||
if (displayMode == Account.FolderMode.NONE)
|
||||
{
|
||||
cursor = db.rawQuery(baseQuery, new String[] { K9.INBOX});
|
||||
cursor = db.rawQuery(baseQuery+ "AND (name = ? )", new String[]
|
||||
{
|
||||
mAccount.getTrashFolderName(),
|
||||
mAccount.getDraftsFolderName(),
|
||||
mAccount.getSpamFolderName(),
|
||||
mAccount.getOutboxFolderName(),
|
||||
mAccount.getSentFolderName(),
|
||||
|
||||
|
||||
K9.INBOX
|
||||
});
|
||||
}
|
||||
else if (displayMode == Account.FolderMode.FIRST_CLASS )
|
||||
{
|
||||
cursor = db.rawQuery(baseQuery + " WHERE name = ? OR display_class = ?", new String[] { K9.INBOX, Folder.FolderClass.FIRST_CLASS.name()});
|
||||
cursor = db.rawQuery(baseQuery + " AND ( name = ? OR display_class = ?)", new String[]
|
||||
{
|
||||
|
||||
mAccount.getTrashFolderName(),
|
||||
mAccount.getDraftsFolderName(),
|
||||
mAccount.getSpamFolderName(),
|
||||
mAccount.getOutboxFolderName(),
|
||||
mAccount.getSentFolderName(),
|
||||
K9.INBOX, Folder.FolderClass.FIRST_CLASS.name()
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
else if (displayMode == Account.FolderMode.FIRST_AND_SECOND_CLASS)
|
||||
{
|
||||
cursor = db.rawQuery(baseQuery + " WHERE name = ? OR display_class = ? OR display_class = ? ", new String[] { K9.INBOX, Folder.FolderClass.FIRST_CLASS.name(), Folder.FolderClass.SECOND_CLASS.name()});
|
||||
cursor = db.rawQuery(baseQuery + " AND ( name = ? OR display_class = ? OR display_class = ? )", new String[]
|
||||
{
|
||||
mAccount.getTrashFolderName(),
|
||||
mAccount.getDraftsFolderName(),
|
||||
mAccount.getSpamFolderName(),
|
||||
mAccount.getOutboxFolderName(),
|
||||
mAccount.getSentFolderName(),
|
||||
K9.INBOX, Folder.FolderClass.FIRST_CLASS.name(), Folder.FolderClass.SECOND_CLASS.name()
|
||||
});
|
||||
}
|
||||
else if (displayMode == Account.FolderMode.NOT_SECOND_CLASS)
|
||||
{
|
||||
cursor = db.rawQuery(baseQuery + " WHERE name = ? OR display_class != ?", new String[] { K9.INBOX, Folder.FolderClass.SECOND_CLASS.name()});
|
||||
cursor = db.rawQuery(baseQuery + " AND ( name = ? OR display_class != ?)", new String[]
|
||||
{
|
||||
|
||||
mAccount.getTrashFolderName(),
|
||||
mAccount.getDraftsFolderName(),
|
||||
mAccount.getSpamFolderName(),
|
||||
mAccount.getOutboxFolderName(),
|
||||
mAccount.getSentFolderName(),
|
||||
K9.INBOX, Folder.FolderClass.SECOND_CLASS.name()
|
||||
});
|
||||
}
|
||||
else if (displayMode == Account.FolderMode.ALL)
|
||||
{
|
||||
cursor = db.rawQuery(baseQuery, new String[] { });
|
||||
cursor = db.rawQuery(baseQuery, new String[]
|
||||
{
|
||||
|
||||
mAccount.getTrashFolderName(),
|
||||
mAccount.getDraftsFolderName(),
|
||||
mAccount.getSpamFolderName(),
|
||||
mAccount.getOutboxFolderName(),
|
||||
mAccount.getSentFolderName()
|
||||
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user