X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Forg%2Fibex%2Fmail%2FQuery.java;h=4fded9d2781a1426d1943ed3894ddcc2509f0408;hb=80d159654238da2dc2f1dd1c946bcaf2785b7ffd;hp=560ac186ded83516d57c400effc0d260c17a1b4a;hpb=071000f577ab3a75dc06560dfa1983331df2bd98;p=org.ibex.mail.git diff --git a/src/org/ibex/mail/Query.java b/src/org/ibex/mail/Query.java index 560ac18..4fded9d 100644 --- a/src/org/ibex/mail/Query.java +++ b/src/org/ibex/mail/Query.java @@ -1,3 +1,7 @@ +// Copyright 2000-2005 the Contributors, as shown in the revision logs. +// Licensed under the Apache Public Source License 2.0 ("the License"). +// You may not use this file except in compliance with the License. + package org.ibex.mail; import java.util.*; import org.ibex.mail.target.*; @@ -22,7 +26,8 @@ public class Query { public static Query or(Query q1, Query q2) { return new Query(OR,new Query[] {q1,q2},0,0,0,null,null, null, null, null); } public static Query or(Query[] q) { return new Query(OR, q, 0, 0, 0, null, null, null, null, null); } public static Query uid(int min, int max) { return new Query(UID, null, min, max, 0, null, null, null, null, null); } - public static Query messagenum(int min,int max) { return new Query(NUM,null,min,max,0,null,null,null,null, null); } + public static Query imapNumber(int min,int max) { return new Query(IMAPNUM,null,min,max,0,null,null,null,null, null); } + public static Query nntpNumber(int min,int max) { return new Query(NNTPNUM,null,min,max,0,null,null,null,null, null); } public static Query sent(Date e, Date l) { return new Query(SENT,null,0,0,0,null,null,e,l,null); } public static Query arrival(Date e, Date l) { return new Query(ARRIVAL,null,0,0,0,null,null, e,l,null);} public static Query header(String k, String v) { return new Query(HEADER, null, 0, 0, 0, k, v, null, null, null);} @@ -30,7 +35,7 @@ public class Query { public static Query body(String text) { return new Query(BODY, null, 0, 0, 0, null, text, null, null, null);} public static Query full(String text) { return new Query(FULL, null, 0, 0, 0, null, text, null, null, null);} public static Query uid(int[] set) { return new Query(UID, null, 0 ,0 ,0, null, null, null, null, set);} - public static Query num(int[] set) { return new Query(NUM, null, 0 ,0 ,0, null, null, null, null, set);} + public static Query imapNumber(int[] set) { return new Query(IMAPNUM, null, 0 ,0 ,0, null, null, null, null, set);} public static Query all() { return new Query(ALL, null, 0, 0, 0, null, null, null, null, null); } public static Query deleted() { return new Query(DELETED, null, 0, 0, 0, null, null, null, null, null); } public static Query seen() { return new Query(SEEN, null, 0, 0, 0, null, null, null, null, null); } @@ -38,7 +43,7 @@ public class Query { public static Query draft() { return new Query(DRAFT, null, 0, 0, 0, null, null, null, null, null); } public static Query answered() { return new Query(ANSWERED, null, 0, 0, 0, null, null, null, null, null); } public static Query recent() { return new Query(RECENT, null, 0, 0, 0, null, null, null, null, null); } - public static Query set(boolean uid, int[] set) { return uid ? uid(set) : num(set); } + //public static Query set(boolean uid, int[] set) { return uid ? uid(set) : imapNumber(set); } private Query(int type, Query[] q,int min,int max, int flags, String key, String text, Date earliest, Date latest, int[] set) { this.type = type; this.q = q; this.min = min; this.max = max; this.flags = flags; this.key = key; this.text = text; @@ -55,13 +60,14 @@ public class Query { public static final int SIZE = 8; public static final int BODY = 9; public static final int FULL = 10; - public static final int NUM = 11; + public static final int IMAPNUM = 11; public static final int DELETED = 12; public static final int SEEN = 13; public static final int FLAGGED = 14; public static final int DRAFT = 15; public static final int ANSWERED = 16; public static final int RECENT = 17; + public static final int NNTPNUM = 18; public final int type; public final Query[] q; @@ -85,26 +91,33 @@ public class Query { if (set[i] <= it.uid() && set[i+1] >= it.uid()) return true; return false; } else return it.uid() >= min && it.uid() <= max; - case NUM: if (set != null) { - for(int i=0; i= it.num()) return true; + case IMAPNUM: if (set != null) { + for(int i=0; i= it.imapNumber()) return true; + return false; } + else return it.imapNumber() >= min && it.imapNumber() <= max; + case NNTPNUM: if (set != null) { + for(int i=0; i= it.nntpNumber()) return true; return false; } - else return it.num() >= min && it.num() <= max; + else return it.imapNumber() >= min && it.imapNumber() <= max; case SENT: return (latest==null||it.cur().date.before(latest)) && (earliest==null||it.cur().date.after(earliest)); case ARRIVAL: return (latest == null || it.cur().arrival.before(latest)) && (earliest == null || it.cur().arrival.after(earliest)); - case SIZE: return it.cur().size() >= min && it.cur().size() <= max; case HEADER: return it.cur().headers.get(key) != null && ((String)it.cur().headers.get(key)).toLowerCase().indexOf(text.toLowerCase()) != -1; - case BODY: return it.cur().body.toLowerCase().indexOf(text.toLowerCase()) != -1; - case FULL: return it.cur().body.toLowerCase().indexOf(text.toLowerCase()) != -1 || - it.cur().allHeaders.indexOf(text) != -1; - case DELETED: return it.deleted(); - case SEEN: return it.seen(); - case FLAGGED: return it.flagged(); - case DRAFT: return it.draft(); - case ANSWERED: return it.answered(); - case RECENT: return it.recent(); + case DELETED: return (it.getFlags() & Mailbox.Flag.DELETED) !=0; + case SEEN: return (it.getFlags() & Mailbox.Flag.SEEN)!=0; + case FLAGGED: return (it.getFlags() & Mailbox.Flag.FLAGGED)!=0; + case DRAFT: return (it.getFlags() & Mailbox.Flag.DRAFT)!=0; + case ANSWERED: return (it.getFlags() & Mailbox.Flag.ANSWERED)!=0; + case RECENT: return (it.getFlags() & Mailbox.Flag.RECENT)!=0; + + // FIXME: super inefficient + case BODY: throw new RuntimeException("BODY searches are not supported because they are slow"); + case FULL: throw new RuntimeException("FULL searches are not supported because they are slow"); + case SIZE: throw new RuntimeException("SIZE searches are not supported because Adam is lame"); + //return it.cur().size() >= min && it.cur().size() <= max; + default: throw new Error("this should not happen"); } }