Skip to content

Commit 7578263

Browse files
committed
imapserver: simplify readSearchKeyWithAtom
1 parent 56b0ebc commit 7578263

File tree

1 file changed

+12
-40
lines changed

1 file changed

+12
-40
lines changed

imapserver/search.go

Lines changed: 12 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -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,
316314
func 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

Comments
 (0)