Skip to content

Commit 13010a2

Browse files
committed
fix: allow parsing of mutt aliases using non-ASCII characters
1 parent 550ccad commit 13010a2

File tree

4 files changed

+16
-13
lines changed

4 files changed

+16
-13
lines changed

configs/purebred.hs

+2-1
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ import System.Environment (lookupEnv)
3737
import System.Exit (die)
3838
import System.IO.Unsafe
3939

40+
import Data.MIME (defaultCharsets)
4041
import Purebred
4142
import Purebred.Storage.AddressBook.MuttAliasFile
4243

@@ -86,7 +87,7 @@ main = do
8687

8788
let addrsFile = fromMaybe cwd confdir <> "/aliases"
8889
addressBook <-
89-
initMuttAliasFileAddressBook addrsFile
90+
initMuttAliasFileAddressBook defaultCharsets addrsFile
9091
>>= either (die . show) pure
9192

9293
purebred

src/Purebred.hs

+2
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,7 @@ module Purebred
129129
, module Purebred.Plugin,
130130
module Purebred.Plugin.TweakConfig,
131131
module Purebred.Storage.Tags,
132+
module Purebred.Storage.AddressBook.MuttAliasFile,
132133
module Purebred.Types,
133134
module Purebred.Types.Error,
134135
module Purebred.UI.Actions,
@@ -187,6 +188,7 @@ import Purebred.Plugin.Internal
187188
import Purebred.Plugin.TweakConfig
188189
import Purebred.Storage.Server
189190
import Purebred.Storage.Tags (TagOp(..))
191+
import Purebred.Storage.AddressBook.MuttAliasFile
190192
import Purebred.Types.Error
191193

192194
-- re-exports for configuration

src/Purebred/Storage/AddressBook/MuttAliasFile.hs

+9-9
Original file line numberDiff line numberDiff line change
@@ -31,16 +31,16 @@ module Purebred.Storage.AddressBook.MuttAliasFile
3131
, parseMuttAliasFile
3232
) where
3333

34-
import Data.Attoparsec.ByteString (Parser, parseOnly, sepBy, string, takeTill)
35-
import Data.Attoparsec.ByteString.Char8 (endOfLine, isSpace_w8, skipSpace, space)
34+
import Data.Attoparsec.Text (Parser, parseOnly, sepBy, string, takeTill, space, skipSpace, endOfLine)
35+
import Data.Char (isSpace)
3636
import Data.Bifunctor (bimap)
3737
import qualified Data.ByteString as B
3838
import qualified Data.Text as T
3939
import qualified Data.Text.Internal.Search as T
4040
import Control.Lens (Lens', lens, toListOf, folded, filtered, view)
4141

42-
import Data.MIME (defaultCharsets)
43-
import Data.IMF (address, Address)
42+
import Data.MIME (Address)
43+
import Data.IMF.Text (address)
4444

4545
import Purebred.Types.Error (Error(ParseError))
4646
import Purebred.Types.AddressBook (AddressBook(..))
@@ -59,7 +59,7 @@ initMuttAliasFileAddressBook filePath = do
5959
let mk addrs = AddressBook
6060
(\substr -> pure $ filterMuttAliases substr addrs)
6161
Nothing
62-
pure $ bimap ParseError mk $ parseMuttAliasFile contents
62+
pure $ bimap ParseError mk $ parseMuttAliasFile (decodeLenient contents)
6363

6464
filterMuttAliases :: T.Text -> [MuttAlias] -> [Address]
6565
filterMuttAliases substr =
@@ -73,14 +73,14 @@ matchesSubstring :: T.Text -> T.Text -> Bool
7373
matchesSubstring needle haystack = not $ null $ T.indices needle haystack
7474

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

7979
muttalias :: Parser MuttAlias
8080
muttalias = do
81-
nick <- string "alias" *> space *> takeTill isSpace_w8
82-
add <- skipSpace *> address defaultCharsets
83-
pure $ MuttAlias (decodeLenient nick) add
81+
nick <- string "alias" *> space *> takeTill isSpace
82+
add <- skipSpace *> address
83+
pure $ MuttAlias nick add
8484

8585
-- | Parser Datatypes
8686
data MuttAlias = MuttAlias

test/TestAddressBook.hs

+3-3
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ module TestAddressBook (
2323
import Test.Tasty (TestTree, testGroup)
2424
import Test.Tasty.HUnit ((@?=), testCase)
2525

26-
import Data.IMF (Address(..))
26+
import Data.MIME (Address(..))
2727

2828
import Purebred.Storage.AddressBook.MuttAliasFile
2929

@@ -50,11 +50,11 @@ testParseMuttAlias =
5050
}
5151
]
5252
, testCase "with long names" $
53-
parseMuttAliasFile "alias nick1 Mr Nick Name <[email protected]>\nalias nick2 Nick Test Name <[email protected]>"
53+
parseMuttAliasFile "alias nick1 Mr Nück Name <[email protected]>\nalias nick2 Nick Test Name <[email protected]>"
5454
@?= Right [
5555
MuttAlias {
5656
_muttAliasNick = "nick1"
57-
, _muttAliasAddress = Single "Mr Nick Name <[email protected]>"
57+
, _muttAliasAddress = Single "Mr Nück Name <[email protected]>"
5858
}
5959
, MuttAlias {
6060
_muttAliasNick = "nick2"

0 commit comments

Comments
 (0)