Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion configs/aliases
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
alias jen Jennifer Charles <[email protected]>
alias el "Elwood B.Mack" <[email protected]>
alias el "鈴木 一郎" <[email protected]>
alias bob Robby Cullen <[email protected]>
alias addy "Addy Mc. Donald" <[email protected]>
6 changes: 3 additions & 3 deletions flake.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion purebred.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ library
, filepath
, mtl >= 2.2 && < 2.4
, exceptions
, purebred-email >= 0.5 && <= 0.7
, purebred-email >= 0.7 && <= 0.8
, attoparsec
, containers
, mime-types
Expand Down
2 changes: 2 additions & 0 deletions src/Purebred.hs
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,7 @@ module Purebred
, module Purebred.Plugin,
module Purebred.Plugin.TweakConfig,
module Purebred.Storage.Tags,
module Purebred.Storage.AddressBook.MuttAliasFile,
module Purebred.Types,
module Purebred.Types.Error,
module Purebred.UI.Actions,
Expand Down Expand Up @@ -188,6 +189,7 @@ import Purebred.Plugin.Internal
import Purebred.Plugin.TweakConfig
import Purebred.Storage.Server
import Purebred.Storage.Tags (TagOp(..))
import Purebred.Storage.AddressBook.MuttAliasFile
import Purebred.Types.Error

-- re-exports for configuration
Expand Down
18 changes: 9 additions & 9 deletions src/Purebred/Storage/AddressBook/MuttAliasFile.hs
Original file line number Diff line number Diff line change
Expand Up @@ -30,16 +30,16 @@ module Purebred.Storage.AddressBook.MuttAliasFile
, parseMuttAliasFile
) where

import Data.Attoparsec.ByteString (Parser, parseOnly, sepBy, string, takeTill)
import Data.Attoparsec.ByteString.Char8 (endOfLine, isSpace_w8, skipSpace, space)
import Data.Attoparsec.Text (Parser, parseOnly, sepBy, string, takeTill, space, skipSpace, endOfLine)
import Data.Char (isSpace)
import Data.Bifunctor (bimap)
import qualified Data.ByteString as B
import qualified Data.Text as T
import qualified Data.Text.Internal.Search as T
import Control.Lens (Lens', lens, toListOf, folded, filtered, view)

import Data.MIME (defaultCharsets)
import Data.IMF (address, Address)
import Data.MIME (Address)
import Data.IMF.Text (address)

import Purebred.Types.Error (Error(ParseError))
import Purebred.Types.AddressBook (AddressBook(..))
Expand All @@ -58,7 +58,7 @@ initMuttAliasFileAddressBook filePath = do
let mk addrs = AddressBook
(\substr -> pure $ filterMuttAliases substr addrs)
Nothing
pure $ bimap ParseError mk $ parseMuttAliasFile contents
pure $ bimap ParseError mk $ parseMuttAliasFile (decodeLenient contents)

filterMuttAliases :: T.Text -> [MuttAlias] -> [Address]
filterMuttAliases substr =
Expand All @@ -72,14 +72,14 @@ matchesSubstring :: T.Text -> T.Text -> Bool
matchesSubstring needle haystack = not $ null $ T.indices needle haystack

-- | Parser functions to parse a mutt alias file
parseMuttAliasFile :: B.ByteString -> Either String [MuttAlias]
parseMuttAliasFile :: T.Text -> Either String [MuttAlias]
parseMuttAliasFile = parseOnly (muttalias `sepBy` endOfLine)

muttalias :: Parser MuttAlias
muttalias = do
nick <- string "alias" *> space *> takeTill isSpace_w8
add <- skipSpace *> address defaultCharsets
pure $ MuttAlias (decodeLenient nick) add
nick <- string "alias" *> space *> takeTill isSpace
add <- skipSpace *> address
pure $ MuttAlias nick add

-- | Parser Datatypes
data MuttAlias = MuttAlias
Expand Down
6 changes: 3 additions & 3 deletions test/TestAddressBook.hs
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ module TestAddressBook (
import Test.Tasty (TestTree, testGroup)
import Test.Tasty.HUnit ((@?=), testCase)

import Data.IMF (Address(..))
import Data.MIME (Address(..))

import Purebred.Storage.AddressBook.MuttAliasFile

Expand All @@ -50,11 +50,11 @@ testParseMuttAlias =
}
]
, testCase "with long names" $
parseMuttAliasFile "alias nick1 Mr Nick Name <[email protected]>\nalias nick2 Nick Test Name <[email protected]>"
parseMuttAliasFile "alias nick1 Mr Nück Name <[email protected]>\nalias nick2 Nick Test Name <[email protected]>"
@?= Right [
MuttAlias {
_muttAliasNick = "nick1"
, _muttAliasAddress = Single "Mr Nick Name <[email protected]>"
, _muttAliasAddress = Single "Mr Nück Name <[email protected]>"
}
, MuttAlias {
_muttAliasNick = "nick2"
Expand Down
8 changes: 4 additions & 4 deletions test/TestUserAcceptance.hs
Original file line number Diff line number Diff line change
Expand Up @@ -149,10 +149,10 @@ testAddressBookExpansion = purebredTmuxSession "addressbook expands To: by nick
assertRegexS ("To:[[:blank:]]+" <> buildAnsiRegex ["37"] [] [] <> "[[:blank:]]+[[:space:]]")

step "enter substring nick alias"
sendKeys "j\t" (Substring "Jennifer Charles")
sendKeys "je\t" (Substring "Jennifer Charles")

step "add an additional address"
sendKeys ", el\t" (Regex "jencharles.*Elwood")
sendKeys ", el\t" (Regex "jencharles.*elwood")

step "accept receipients"
sendKeys "\r" (Substring "Subject:")
Expand All @@ -170,7 +170,7 @@ testAddressBookExpansion = purebredTmuxSession "addressbook expands To: by nick
sendKeys ": x\r" (Regex "To:\\s\"Jennifer")

capture >>= put
assertRegexS "To: \"Jennifer Charles\".*, \"Elwood B.Mack\""
assertRegexS (T.encodeUtf8 "To: \"Jennifer Charles\" <jencharles@example\\.test>,.*鈴木")
assertRegexS "Bcc:[[:space:]]+$"
assertRegexS "Cc:[[:space:]]+$"

Expand Down Expand Up @@ -1414,7 +1414,7 @@ testShowsAndClearsError = purebredTmuxSession "shows and clears error" $

step "shows error message"
sendKeys "Enter" (Substring "FileReadError")
>>= assertRegex "(open|with)(Binary)?File:.*does not exist"
>>= assertRegex "(open|with)(Binary)?File:.*\\s*does not exist"

step "error is cleared with next registered keybinding"
sendKeys "Up" (Substring "Purebred: Item 1 of 4")
Expand Down
Loading