From 8e92e6e11d2b3b0bfb5ac9d68f347219493e6380 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kier=C3=A1n=20Meinhardt?= Date: Wed, 23 Sep 2020 17:44:40 +0200 Subject: split into library + executables --- TagUtils.hs | 62 ------------------------------------------------------------- 1 file changed, 62 deletions(-) delete mode 100644 TagUtils.hs (limited to 'TagUtils.hs') diff --git a/TagUtils.hs b/TagUtils.hs deleted file mode 100644 index 99d957d..0000000 --- a/TagUtils.hs +++ /dev/null @@ -1,62 +0,0 @@ -{-# LANGUAGE LambdaCase #-} - -module TagUtils where - -import qualified Data.Set as Set -import qualified Data.Text as T -import Data.Char -import Data.List.Split (wordsBy) -import Data.Tree -import Notmuch.Message -import Notmuch.SearchResult -import TreeView.Types - - -type Tag = T.Text - - -data TagOp = AddTag Tag | DelTag Tag - - -parseTags :: String -> [Tag] -parseTags = - mconcat . map (map T.pack . wordsBy isSpace . takeWhile (/='#')) . lines - - -diffTags :: [Tag] -> [Tag] -> [TagOp] -diffTags old new = - let oldTags = Set.fromList old - newTags = Set.fromList new - in map DelTag (Set.toList $ oldTags `Set.difference` newTags) ++ - map AddTag (Set.toList $ newTags `Set.difference` oldTags) - - -patchRootLabelTags :: [TagOp] -> Tree TreeView -> Tree TreeView -patchRootLabelTags tagOps x = - x { rootLabel = patchTags tagOps $ rootLabel x } - - -patchTreeTags :: [TagOp] -> Tree TreeView -> Tree TreeView -patchTreeTags tagOps = - fmap (patchTags tagOps) - - -tagOpsToArgs :: [TagOp] -> [String] -tagOpsToArgs = map $ \case - AddTag t -> '+' : T.unpack t - DelTag t -> '-' : T.unpack t - - -patchTags :: [TagOp] -> TreeView -> TreeView -patchTags tagOps = \case - TVSearchResult sr -> - TVSearchResult sr { searchTags = foldr applyTagOp (searchTags sr) tagOps } - TVMessage m -> - TVMessage m { messageTags = foldr applyTagOp (messageTags m) tagOps } - x -> x -- nop - - -applyTagOp :: TagOp -> [Tag] -> [Tag] -applyTagOp = \case - AddTag t -> (t:) - DelTag t -> filter (/=t) -- cgit v1.2.3