diff --git a/configs/aliases b/configs/aliases index bd59ab52..9e0712e6 100644 --- a/configs/aliases +++ b/configs/aliases @@ -1,4 +1,4 @@ alias jen Jennifer Charles -alias el "Elwood B.Mack" +alias el "鈴木 一郎" alias bob Robby Cullen alias addy "Addy Mc. Donald" diff --git a/flake.lock b/flake.lock index ecd469ad..52f8cd45 100644 --- a/flake.lock +++ b/flake.lock @@ -2,11 +2,11 @@ "nodes": { "nixpkgs": { "locked": { - "lastModified": 1757981991, - "narHash": "sha256-vR6xwDIpFHAd+YhJaVK58mVsbgXEUm+8ORCEsOqy5lM=", + "lastModified": 1764807826, + "narHash": "sha256-cE0scP4elwDbHL9CgfTZPcmfOL0rejdZ4jfElgPOevo=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "65fd15657ce8467349506b07cda778e867bc09e0", + "rev": "7984c035744372e4ce676f8550368fc5ade44709", "type": "github" }, "original": { diff --git a/purebred.cabal b/purebred.cabal index deb67860..9045428e 100644 --- a/purebred.cabal +++ b/purebred.cabal @@ -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 diff --git a/src/Purebred.hs b/src/Purebred.hs index 613dafcb..f9fb5ec1 100644 --- a/src/Purebred.hs +++ b/src/Purebred.hs @@ -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, @@ -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 diff --git a/src/Purebred/Storage/AddressBook/MuttAliasFile.hs b/src/Purebred/Storage/AddressBook/MuttAliasFile.hs index 5a91e1c9..2ae30b14 100644 --- a/src/Purebred/Storage/AddressBook/MuttAliasFile.hs +++ b/src/Purebred/Storage/AddressBook/MuttAliasFile.hs @@ -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(..)) @@ -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 = @@ -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 diff --git a/test/TestAddressBook.hs b/test/TestAddressBook.hs index 42854e85..6d93ea0f 100644 --- a/test/TestAddressBook.hs +++ b/test/TestAddressBook.hs @@ -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 @@ -50,11 +50,11 @@ testParseMuttAlias = } ] , testCase "with long names" $ - parseMuttAliasFile "alias nick1 Mr Nick Name \nalias nick2 Nick Test Name " + parseMuttAliasFile "alias nick1 Mr Nück Name \nalias nick2 Nick Test Name " @?= Right [ MuttAlias { _muttAliasNick = "nick1" - , _muttAliasAddress = Single "Mr Nick Name " + , _muttAliasAddress = Single "Mr Nück Name " } , MuttAlias { _muttAliasNick = "nick2" diff --git a/test/TestUserAcceptance.hs b/test/TestUserAcceptance.hs index 158350f6..0aefb5f8 100644 --- a/test/TestUserAcceptance.hs +++ b/test/TestUserAcceptance.hs @@ -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:") @@ -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\" ,.*鈴木") assertRegexS "Bcc:[[:space:]]+$" assertRegexS "Cc:[[:space:]]+$" @@ -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")