blob: 0dd1290e65103307bd757c72b982ed82bf75c1f4 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
{-# LANGUAGE LambdaCase #-}
module TreeView.Types where
import qualified Data.CaseInsensitive as CI
import qualified Data.Text as T
import Notmuch.Message
import Notmuch.SearchResult
type LineNr = Int
data TreeView
= TVMessage Message
| TVMessageHeaderField Message (CI.CI T.Text)
| TVMessagePart Message MessagePart
| TVMessageQuoteLine Message MessagePart LineNr String
| TVMessageLine Message MessagePart LineNr String
| TVSearch String
| TVSearchResult SearchResult
deriving (Show)
instance Eq TreeView where
x1 == x2 = treeViewId x1 == treeViewId x2
data TreeViewId
= TVIDMessage T.Text
| TVIDMessageHeaderField T.Text T.Text
| TVIDMessagePart T.Text Int
| TVIDMessageLine T.Text Int Int
| TVIDSearch T.Text
| TVIDSearchResult T.Text
deriving (Eq,Show)
treeViewId :: TreeView -> TreeViewId
treeViewId = \case
TVMessage m ->
TVIDMessage (fromMessage m)
TVMessageHeaderField m mhf ->
TVIDMessageHeaderField (fromMessage m) (CI.foldedCase mhf)
TVMessagePart m mp ->
TVIDMessagePart (fromMessage m) (partID mp)
TVMessageLine m mp lineNr _ ->
TVIDMessageLine (fromMessage m) (partID mp) lineNr
TVMessageQuoteLine m mp lineNr _ ->
TVIDMessageLine (fromMessage m) (partID mp) lineNr
TVSearch s ->
TVIDSearch (T.pack s)
TVSearchResult sr ->
TVIDSearchResult (T.pack $ unThreadID $ searchThread sr)
where
fromMessage = T.pack . unMessageID . messageId
|