summaryrefslogtreecommitdiffstats
path: root/TreeView/Types.hs
diff options
context:
space:
mode:
Diffstat (limited to 'TreeView/Types.hs')
-rw-r--r--TreeView/Types.hs63
1 files changed, 63 insertions, 0 deletions
diff --git a/TreeView/Types.hs b/TreeView/Types.hs
new file mode 100644
index 0000000..0dd1290
--- /dev/null
+++ b/TreeView/Types.hs
@@ -0,0 +1,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