Skip to content

Commit

Permalink
fix: allow parsing of mutt aliases using non-ASCII characters
Browse files Browse the repository at this point in the history
  • Loading branch information
romanofski committed Dec 29, 2024
1 parent 550ccad commit 7a4a2c0
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 10 deletions.
3 changes: 2 additions & 1 deletion configs/purebred.hs
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ import System.Environment (lookupEnv)
import System.Exit (die)
import System.IO.Unsafe

import Data.MIME (defaultCharsets)
import Purebred
import Purebred.Storage.AddressBook.MuttAliasFile

Expand Down Expand Up @@ -86,7 +87,7 @@ main = do

let addrsFile = fromMaybe cwd confdir <> "/aliases"
addressBook <-
initMuttAliasFileAddressBook addrsFile
initMuttAliasFileAddressBook defaultCharsets addrsFile
>>= either (die . show) pure

purebred
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 @@ -39,7 +39,7 @@ 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.MIME (CharsetLookup)
import Data.IMF (address, Address)

import Purebred.Types.Error (Error(ParseError))
Expand All @@ -53,13 +53,13 @@ import Purebred.Types.String (decodeLenient)
--
-- https://gitlab.com/muttmua/mutt/-/wikis/MuttGuide/Aliases

initMuttAliasFileAddressBook :: FilePath -> IO (Either Error AddressBook)
initMuttAliasFileAddressBook filePath = do
initMuttAliasFileAddressBook :: CharsetLookup -> FilePath -> IO (Either Error AddressBook)
initMuttAliasFileAddressBook charsets filePath = do
contents <- B.readFile filePath
let mk addrs = AddressBook
(\substr -> pure $ filterMuttAliases substr addrs)
Nothing
pure $ bimap ParseError mk $ parseMuttAliasFile contents
pure $ bimap ParseError mk $ parseMuttAliasFile charsets contents

filterMuttAliases :: T.Text -> [MuttAlias] -> [Address]
filterMuttAliases substr =
Expand All @@ -73,13 +73,13 @@ 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 = parseOnly (muttalias `sepBy` endOfLine)
parseMuttAliasFile :: CharsetLookup -> B.ByteString -> Either String [MuttAlias]
parseMuttAliasFile charsets = parseOnly (muttalias charsets `sepBy` endOfLine)

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

-- | Parser Datatypes
Expand Down

0 comments on commit 7a4a2c0

Please sign in to comment.