imap 0.3.0.2 → 0.3.0.3
raw patch · 6 files changed
+41/−16 lines, 6 filesdep ~list-t
Dependency ranges changed: list-t
Files
- imap.cabal +3/−3
- src/Network/IMAP.hs +6/−5
- src/Network/IMAP/Parsers/Fetch.hs +3/−2
- src/Network/IMAP/Parsers/Untagged.hs +12/−0
- src/Network/IMAP/Parsers/Utils.hs +13/−6
- src/Network/IMAP/Types.hs +4/−0
imap.cabal view
@@ -2,7 +2,7 @@ -- see http://haskell.org/cabal/users-guide/ name: imap-version: 0.3.0.2+version: 0.3.0.3 synopsis: An efficient IMAP client library, with SSL and streaming license: BSD3 license-file: LICENSE@@ -118,7 +118,7 @@ either == 4.4.*, hslogger == 1.2.*, transformers == 0.5.*,- list-t == 1,+ list-t == 1.0.0.*, derive == 2.6.*, stm-delay == 0.1.*, exceptions == 0.8.*,@@ -154,7 +154,7 @@ either == 4.4.*, hslogger == 1.2.*, transformers == 0.5.*,- list-t == 1,+ list-t == 1.0.0.*, derive == 2.6.*, stm-delay == 0.1.*, exceptions == 0.8.*,
src/Network/IMAP.hs view
@@ -206,11 +206,13 @@ select :: (MonadPlus m, MonadIO m, Universe m) => IMAPConnection -> T.Text -> m CommandResult-select = oneParamCommand "SELECT"+select conn mboxName = oneParamCommand "SELECT" conn escapedMailbox+ where escapedMailbox = T.concat ["\"", mboxName, "\""] examine :: (MonadPlus m, MonadIO m, Universe m) => IMAPConnection -> T.Text -> m CommandResult-examine = oneParamCommand "EXAMINE"+examine conn mboxName = oneParamCommand "EXAMINE" conn escapedMailbox+ where escapedMailbox = T.concat ["\"", mboxName, "\""] create :: (MonadPlus m, MonadIO m, Universe m) => IMAPConnection -> T.Text -> m CommandResult@@ -347,6 +349,5 @@ oneParamCommand :: (MonadPlus m, MonadIO m, Universe m) => T.Text -> IMAPConnection -> T.Text -> m CommandResult-oneParamCommand commandName conn mailboxName = sendCommand conn wholeCommand- where wholeCommand = encodeUtf8 $ T.intercalate " " [commandName, escapedMailbox]- escapedMailbox = T.concat ["\"", mailboxName, "\""]+oneParamCommand commandName conn params = sendCommand conn wholeCommand+ where wholeCommand = encodeUtf8 $ T.intercalate " " [commandName, params]
src/Network/IMAP/Parsers/Fetch.hs view
@@ -2,7 +2,7 @@ import Network.IMAP.Types import Network.IMAP.Parsers.Utils-import Network.IMAP.Parsers.Untagged (parseFlags)+import Network.IMAP.Parsers.Untagged (parseFlags, parseExtension) import Data.Attoparsec.ByteString import qualified Data.Attoparsec.ByteString as AP@@ -39,7 +39,8 @@ ((string "BODY[" <|> string "RFC822.HEADER" <|> string "RFC822.TEXT" <|> string "RFC822") *> parseBody) <|> parseNumber UID "UID" "" <|>- Right <$> parseBodyStructure+ (Right <$> parseBodyStructure) <|>+ parseExtension (nextRes:) <$> (AP.anyWord8 *> parseSpecifiers)
src/Network/IMAP/Parsers/Untagged.hs view
@@ -19,6 +19,18 @@ contents <- AP.takeWhile (/= '\r') return . OKResult . decodeUtf8 $ contents +parseExtension :: Parser (Either ErrorMessage UntaggedResult)+parseExtension = do+ extensionName <- AP.takeWhile1 isAtomChar+ char ' '++ payload <- ((liftA ExtLabels <$> Right) <$>+ (char '(' *> AP.sepBy parseLabel (char ' ') <* char ')')+ )+ <|>+ (liftA ExtInt <$> parseNumber id "" "")+ return $! (Extension extensionName) <$> payload+ parseFlag :: Parser Flag parseFlag = do char '\\'
src/Network/IMAP/Parsers/Utils.hs view
@@ -9,6 +9,7 @@ import qualified Data.ByteString.Char8 as BSC import Data.Either.Combinators (rightToMaybe) import Control.Monad (liftM)+import Control.Applicative ((<|>)) import Data.Set (Set) import qualified Data.Set as Set@@ -54,13 +55,14 @@ nilOrValue :: Parser a -> Parser (Maybe a) nilOrValue parser = rightToMaybe <$> AP.eitherP (string "NIL") parser -parseQuotedText :: Parser T.Text-parseQuotedText = do- char '"'- date <- AP.takeWhile1 (/= '"')- char '"'+parseQuoted :: Parser BSC.ByteString+parseQuoted =+ (string "\\\"" *> (BSC.init <$> AP.takeWhile1 (/= '"')) <* char '"')+ <|>+ (char '"' *> AP.takeWhile (/= '"') <* char '"') - return . decodeUtf8 $ date+parseQuotedText :: Parser T.Text+parseQuotedText = decodeUtf8 <$> parseQuoted parseNameAttribute :: Parser NameAttribute parseNameAttribute = do@@ -113,3 +115,8 @@ else return BSC.empty return $ liftM constructor (toInt parsedNumber)++parseLabel :: Parser BSC.ByteString+parseLabel = parseQuoted <|>+ (char '\\' *> AP.takeWhile1 isAtomChar) <|>+ (AP.takeWhile1 isAtomChar)
src/Network/IMAP/Types.hs view
@@ -176,7 +176,11 @@ | Unknown BSC.ByteString -- ^ An unsupported value | Body BSC.ByteString -- ^ Message body, or headers | BodyStructure BSC.ByteString -- ^ An unparsed bodystructure+ | Extension BSC.ByteString ExtensionPayload -- ^ A format extension deriving (Show, Eq)++data ExtensionPayload = ExtInt Integer | ExtLabels [BSC.ByteString]+ deriving (Show, Eq) data NameAttribute = Noinferiors | Noselect