]> git.rkrishnan.org Git - functorrent.git/blobdiff - src/Metainfo.hs
Merge pull request #10 from jaseemabid/master
[functorrent.git] / src / Metainfo.hs
index 47a134cd811d16064ebd713897bcafbb1ea2000f..c77b127d02e0368239f29bcc7d67c9cdbeea9c23 100644 (file)
@@ -1,15 +1,13 @@
 module Metainfo where
 
-import qualified Bencode as Benc
-import qualified Data.ByteString.Char8 as BC
-import qualified Data.Map as M
-import qualified Crypto.Hash as H
-import qualified Crypto.Hash.SHA1 as SHA1
-import Data.Time.Clock
+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
@@ -25,43 +23,42 @@ data Metainfo = Metainfo { info :: !Info
                          , 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