module Metainfo where
-import qualified Bencode as Benc
-import qualified Data.ByteString.Char8 as BC
-import qualified Data.Map as M
+import Prelude hiding (lookup)
+import Bencode (BVal(..))
+import Data.ByteString.Char8 (ByteString, pack, unpack)
+import Data.Map as M ((!), lookup)
-- only single file mode supported for the time being.
data Info = Info { pieceLength :: !Integer
- , pieces :: !BC.ByteString
+ , pieces :: !ByteString
, private :: !(Maybe Integer)
, name :: !String
, lengthInBytes :: !Integer
, encoding :: !(Maybe String)
} deriving (Eq, Show)
-mkInfo :: Benc.BVal -> Maybe Info
-mkInfo (Benc.Bdict m) = let (Benc.Bint pieceLength') = m M.! Benc.Bstr (BC.pack "piece length")
- (Benc.Bstr pieces') = m M.! Benc.Bstr (BC.pack "pieces")
- private' = Nothing
- (Benc.Bstr name') = m M.! Benc.Bstr (BC.pack "name")
- (Benc.Bint length') = m M.! Benc.Bstr (BC.pack "length")
- md5sum' = Nothing
- in Just Info { pieceLength = pieceLength'
- , pieces = pieces'
- , private = private'
- , name = BC.unpack name'
- , lengthInBytes = length'
- , md5sum = md5sum'
- }
+mkInfo :: BVal -> Maybe Info
+mkInfo (Bdict m) = let (Bint pieceLength') = m ! Bstr (pack "piece length")
+ (Bstr pieces') = m ! Bstr (pack "pieces")
+ private' = Nothing
+ (Bstr name') = m ! Bstr (pack "name")
+ (Bint length') = m ! Bstr (pack "length")
+ md5sum' = Nothing
+ in Just Info { pieceLength = pieceLength'
+ , pieces = pieces'
+ , private = private'
+ , name = unpack name'
+ , lengthInBytes = length'
+ , md5sum = md5sum'}
mkInfo _ = Nothing
-maybeBstrToString :: Maybe Benc.BVal -> Maybe String
+maybeBstrToString :: Maybe BVal -> Maybe String
maybeBstrToString Nothing = Nothing
-maybeBstrToString (Just s) = let (Benc.Bstr bs) = s
- in Just (BC.unpack bs)
+maybeBstrToString (Just s) = let (Bstr bs) = s
+ in Just (unpack bs)
-mkMetaInfo :: Benc.BVal -> Maybe Metainfo
-mkMetaInfo (Benc.Bdict m) = let (Just info') = mkInfo (m M.! Benc.Bstr (BC.pack "info"))
- (Benc.Bstr announce') = m M.! Benc.Bstr (BC.pack "announce")
--- announceList = M.lookup (Benc.Bstr (BC.pack "announce list"))
- announceList' = Nothing
- -- creationDate = M.lookup (Benc.Bstr (BC.pack "creation date")) m
- creationDate' = Nothing
- comment' = M.lookup (Benc.Bstr (BC.pack "comment")) m
- createdBy' = M.lookup (Benc.Bstr (BC.pack "created by")) m
- encoding' = M.lookup (Benc.Bstr (BC.pack "encoding")) m
- in Just Metainfo { info = info'
- , announce = BC.unpack announce'
- , announceList = announceList'
- , creationDate = creationDate'
- , comment = maybeBstrToString comment'
- , createdBy = maybeBstrToString createdBy'
- , encoding = maybeBstrToString encoding'
- }
+mkMetaInfo :: BVal -> Maybe Metainfo
+mkMetaInfo (Bdict m) = let (Just info') = mkInfo (m ! Bstr (pack "info"))
+ (Bstr announce') = m ! Bstr (pack "announce")
+ -- announceList = lookup (Bstr (pack "announce list"))
+ announceList' = Nothing
+ -- creationDate = lookup (Bstr (pack "creation date")) m
+ creationDate' = Nothing
+ comment' = lookup (Bstr (pack "comment")) m
+ createdBy' = lookup (Bstr (pack "created by")) m
+ encoding' = lookup (Bstr (pack "encoding")) m
+ in Just Metainfo { info = info'
+ , announce = unpack announce'
+ , announceList = announceList'
+ , creationDate = creationDate'
+ , comment = maybeBstrToString comment'
+ , createdBy = maybeBstrToString createdBy'
+ , encoding = maybeBstrToString encoding'
+ }
mkMetaInfo _ = Nothing