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
 |