X-Git-Url: https://git.rkrishnan.org/?a=blobdiff_plain;f=src%2FFuncTorrent%2FMagnetURI.hs;fp=src%2FFuncTorrent%2FMagnetURI.hs;h=7a9b20ed01a89dc67e2564b16724627f3422cb72;hb=7e0cd0b7f1286a39ddb86c7a78609ebb55680126;hp=e0fd5450b47f07614eebef7360356cbbbfd0bace;hpb=80db01395c5440ca6bdeb3160070f6213c5e52e7;p=functorrent.git diff --git a/src/FuncTorrent/MagnetURI.hs b/src/FuncTorrent/MagnetURI.hs index e0fd545..7a9b20e 100644 --- a/src/FuncTorrent/MagnetURI.hs +++ b/src/FuncTorrent/MagnetURI.hs @@ -45,6 +45,7 @@ module FuncTorrent.MagnetURI where import Text.ParserCombinators.Parsec import qualified Text.Parsec.ByteString as ParsecBS import Data.ByteString.Char8 (ByteString, pack) +import Network.HTTP.Base (urlDecode) data Magnetinfo = Magnetinfo { infoHash :: ByteString , trackerlist :: [String] @@ -60,7 +61,7 @@ kvpair :: ParsecBS.Parser (String, String) kvpair = do k <- many1 letter _ <- char '=' - v <- many1 (letter <|> digit <|> (char ':')) + v <- many1 (noneOf "&") return (k, v) magnetBody :: ParsecBS.Parser Magnetinfo @@ -72,8 +73,8 @@ magnetBody = do case k of "xt" -> magnetRecord { infoHash = pack v } "tr" -> let trVal = trackerlist magnetRecord in - magnetRecord { trackerlist = trVal ++ [v] } - "dn" -> magnetRecord { name = v } + magnetRecord { trackerlist = trVal ++ [urlDecode v] } + "dn" -> magnetRecord { name = urlDecode v } "xl" -> magnetRecord { xlen = Just (read v :: Integer) } magnetInfo = Magnetinfo { infoHash = mempty , trackerlist = mempty