]> git.rkrishnan.org Git - functorrent.git/blobdiff - src/FuncTorrent/Metainfo.hs
Metainfo: Info may or may not be present
[functorrent.git] / src / FuncTorrent / Metainfo.hs
index daf008f25181b5237ca485891e5bb252cde32271..e555074ac110076f675462ae133434ed183a39f4 100644 (file)
@@ -1,7 +1,26 @@
+{-
+ - Copyright (C) 2015-2016 Ramakrishnan Muthukrishnan <ram@rkrishnan.org>
+ -
+ - This file is part of FuncTorrent.
+ -
+ - FuncTorrent is free software; you can redistribute it and/or modify
+ - it under the terms of the GNU General Public License as published by
+ - the Free Software Foundation; either version 3 of the License, or
+ - (at your option) any later version.
+ -
+ - FuncTorrent is distributed in the hope that it will be useful,
+ - but WITHOUT ANY WARRANTY; without even the implied warranty of
+ - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ - GNU General Public License for more details.
+ -
+ - You should have received a copy of the GNU General Public License
+ - along with FuncTorrent; if not,  see <http://www.gnu.org/licenses/>
+ -}
+
+{-# LANGUAGE OverloadedStrings #-}
 module FuncTorrent.Metainfo
     (Info(..),
      Metainfo(..),
-     mkInfo,
      torrentToMetainfo
     ) where
 
@@ -22,7 +41,7 @@ data Info = Info { pieceLength :: !Integer
                  , md5sum :: !(Maybe String)
                  } deriving (Eq, Show)
 
-data Metainfo = Metainfo { info :: !Info
+data Metainfo = Metainfo { info :: !(Maybe Info)
                          , announceList :: ![String]
                          , creationDate :: !(Maybe Integer)
                          , comment :: !(Maybe String)
@@ -48,7 +67,7 @@ mkInfo _ = Nothing
 
 mkMetaInfo :: BVal   -> Either String Metainfo
 mkMetaInfo (Bdict m)  =
-    let (Just info')  = mkInfo $ m ! "info"
+    let info'         = mkInfo $ m ! "info"
         announce'     = lookup "announce" m
         announceList' = lookup "announce-list" m
         creationDate' = lookup "creation date" m
@@ -65,7 +84,6 @@ mkMetaInfo (Bdict m)  =
              , encoding     = bstrToString  =<< encoding'
              , infoHash     = hash . encode $ (m ! "info")
              }
-
 mkMetaInfo _ = Left "mkMetaInfo: expect an input dict"
 
 getAnnounceList :: Maybe BVal -> [String]
@@ -78,13 +96,10 @@ getAnnounceList (Just (Blist l)) = map (\s -> case s of
                                                               [Bstr s''] -> unpack s''
                                                               _ -> ""
                                                _ -> "") l
-
 getAnnounceList (Just (Bdict _)) = []
 
 torrentToMetainfo :: ByteString -> Either String Metainfo
 torrentToMetainfo s =
-  case (decode s) of
-   Right d ->
-     mkMetaInfo d
-   Left e ->
-     Left $ show e
+  case decode s of
+   Right d -> mkMetaInfo d
+   Left e -> Left $ show e