X-Git-Url: https://git.rkrishnan.org/?a=blobdiff_plain;f=src%2FFuncTorrent%2FMetainfo.hs;h=9a7d7a869fd7bd4dac5b6bd6bcc5d38e71adcfdb;hb=978e83a701a905714dbe5c921111d8ec9b0cd5b7;hp=ec65294d852fca3125d0f1ec5db08e27ddbfcc01;hpb=3d131e0e70c8feab94301b969874239b8e60b747;p=functorrent.git diff --git a/src/FuncTorrent/Metainfo.hs b/src/FuncTorrent/Metainfo.hs index ec65294..9a7d7a8 100644 --- a/src/FuncTorrent/Metainfo.hs +++ b/src/FuncTorrent/Metainfo.hs @@ -22,7 +22,6 @@ module FuncTorrent.Metainfo (Info(..) , Metainfo(..) - , DynamicInfo(..) , FileInfo(..) , torrentToMetainfo ) where @@ -40,15 +39,9 @@ import FuncTorrent.Bencode (BVal(..), encode, decode, bstrToString, bValToIntege data Info = Info { pieceLength :: !Integer , pieces :: !ByteString , private :: !(Maybe Integer) - , dyninfo :: !DynamicInfo + , files :: ![FileInfo] } deriving (Eq, Show) -data DynamicInfo = SingleFileInfo { file :: FileInfo } - | MultiFileInfo { dname :: String - , files :: [FileInfo] - } - deriving (Eq, Show) - data FileInfo = FileInfo { lengthInBytes :: Integer , md5sum :: Maybe String , path :: String @@ -63,8 +56,8 @@ data Metainfo = Metainfo { info :: !Info , infoHash :: !ByteString } deriving (Eq, Show) -mkPath :: [BVal] -> String -mkPath xs = intercalate "/" $ map (\b -> let (Just s) = bstrToString b in s) xs +mkPath :: String -> [BVal] -> String +mkPath base xs = base ++ "/" ++ (intercalate "/" $ map (\b -> let (Just s) = bstrToString b in s) xs) mkInfo :: BVal -> Maybe Info mkInfo (Bdict m) = let (Bint pieceLength') = m ! "piece length" @@ -75,24 +68,22 @@ mkInfo (Bdict m) = let (Bint pieceLength') = m ! "piece length" case bdictfiles of Just fs -> let (Blist files') = fs (Bstr name') = m ! "name" + dname' = unpack name' in Just Info { pieceLength = pieceLength' , pieces = pieces' , private = private' - , dyninfo = MultiFileInfo { - dname = unpack name', - files = - map (\(Bdict f) -> - let (Just len') = bValToInteger (f ! "length") - (Blist ds) = f ! "path" - path' = mkPath ds - in - FileInfo { lengthInBytes = len', - md5sum = Nothing, - path = path' - }) - files' } - } + , files = + map (\(Bdict f) -> + let (Just len') = bValToInteger (f ! "length") + (Blist ds) = f ! "path" + path' = mkPath dname' ds + in + FileInfo { lengthInBytes = len', + md5sum = Nothing, + path = path' + }) + files' } Nothing -> let (Bstr name') = m ! "name" (Bint length') = m ! "length" md5sum' = Nothing @@ -100,13 +91,12 @@ mkInfo (Bdict m) = let (Bint pieceLength') = m ! "piece length" Just Info { pieceLength = pieceLength' , pieces = pieces' , private = private' - , dyninfo = SingleFileInfo { - file = FileInfo { - path = unpack name', - lengthInBytes = length', - md5sum = md5sum' - } - } + , files = [ FileInfo { + path = unpack name', + lengthInBytes = length', + md5sum = md5sum' + } + ] } mkInfo _ = Nothing