@@ -236,22 +236,24 @@ func readSearchKeyWithAtom(criteria *imap.SearchCriteria, dec *imapwire.Decoder,
236236 if err != nil {
237237 return err
238238 }
239+ var dateCriteria imap.SearchCriteria
239240 switch key {
240241 case "SINCE" :
241- criteria .Since = intersectSince ( criteria . Since , t )
242+ dateCriteria .Since = t
242243 case "BEFORE" :
243- criteria .Before = intersectBefore ( criteria . Before , t )
244+ dateCriteria .Before = t
244245 case "ON" :
245- criteria .Since = intersectSince ( criteria . Since , t )
246- criteria .Before = intersectBefore ( criteria . Before , t .Add (24 * time .Hour ) )
246+ dateCriteria .Since = t
247+ dateCriteria .Before = t .Add (24 * time .Hour )
247248 case "SENTSINCE" :
248- criteria .SentSince = intersectSince ( criteria . SentSince , t )
249+ dateCriteria .SentSince = t
249250 case "SENTBEFORE" :
250- criteria .SentBefore = intersectBefore ( criteria . SentBefore , t )
251+ dateCriteria .SentBefore = t
251252 case "SENTON" :
252- criteria .SentSince = intersectSince ( criteria . SentSince , t )
253- criteria .SentBefore = intersectBefore ( criteria . SentBefore , t .Add (24 * time .Hour ) )
253+ dateCriteria .SentSince = t
254+ dateCriteria .SentBefore = t .Add (24 * time .Hour )
254255 }
256+ criteria .And (& dateCriteria )
255257 case "BODY" :
256258 var body string
257259 if ! dec .ExpectSP () || ! dec .ExpectAString (& body ) {
@@ -271,13 +273,9 @@ func readSearchKeyWithAtom(criteria *imap.SearchCriteria, dec *imapwire.Decoder,
271273 }
272274 switch key {
273275 case "LARGER" :
274- if criteria .Larger == 0 || n > criteria .Larger {
275- criteria .Larger = n
276- }
276+ criteria .And (& imap.SearchCriteria {Larger : n })
277277 case "SMALLER" :
278- if criteria .Smaller == 0 || n < criteria .Smaller {
279- criteria .Smaller = n
280- }
278+ criteria .And (& imap.SearchCriteria {Smaller : n })
281279 }
282280 case "NOT" :
283281 if ! dec .ExpectSP () {
@@ -316,29 +314,3 @@ func readSearchKeyWithAtom(criteria *imap.SearchCriteria, dec *imapwire.Decoder,
316314func searchKeyFlag (key string ) imap.Flag {
317315 return imap .Flag ("\\ " + strings .Title (strings .ToLower (key )))
318316}
319-
320- func intersectSince (t1 , t2 time.Time ) time.Time {
321- switch {
322- case t1 .IsZero ():
323- return t2
324- case t2 .IsZero ():
325- return t1
326- case t1 .After (t2 ):
327- return t1
328- default :
329- return t2
330- }
331- }
332-
333- func intersectBefore (t1 , t2 time.Time ) time.Time {
334- switch {
335- case t1 .IsZero ():
336- return t2
337- case t2 .IsZero ():
338- return t1
339- case t1 .Before (t2 ):
340- return t1
341- default :
342- return t2
343- }
344- }
0 commit comments