More consistency of types between magneturi/metainfo parsing
authorRamakrishnan Muthukrishnan <ram@rkrishnan.org>
Mon, 31 Jul 2017 17:18:06 +0000 (22:48 +0530)
committerRamakrishnan Muthukrishnan <ram@rkrishnan.org>
Mon, 31 Jul 2017 17:18:06 +0000 (22:48 +0530)
src/FuncTorrent/MagnetURI.hs
src/FuncTorrent/Metainfo.hs

index 7a9b20ed01a89dc67e2564b16724627f3422cb72..506a169e156e88d43ade708efb772570e05098eb 100644 (file)
@@ -69,13 +69,17 @@ magnetBody = do
   pairs <- kvpair `sepBy1` (char '&')
   -- walk through pairs, populate Magnetinfo (fold?)
   return $ foldl f magnetInfo pairs
-    where f magnetRecord pair = let (k, v) = pair in
-            case k of
-              "xt" -> magnetRecord { infoHash = pack v }
-              "tr" -> let trVal = trackerlist magnetRecord in
-                        magnetRecord { trackerlist = trVal ++ [urlDecode v] }
-              "dn" -> magnetRecord { name = urlDecode v }
-              "xl" -> magnetRecord { xlen = Just (read v :: Integer) }
+    where f magnetRecord pair =
+            let (k, v) = pair
+            in
+              case k of
+                "xt" -> magnetRecord { infoHash = pack v }
+                "tr" -> let trVal = trackerlist magnetRecord
+                        in
+                          magnetRecord { trackerlist = trVal ++ [urlDecode v] }
+                "dn" -> magnetRecord { name = urlDecode v }
+                "xl" -> magnetRecord { xlen = Just (read v :: Integer) }
+                _    -> magnetInfo
           magnetInfo = Magnetinfo { infoHash = mempty
                                   , trackerlist = mempty
                                   , name = mempty
@@ -84,5 +88,8 @@ magnetBody = do
 magnetUri :: ParsecBS.Parser Magnetinfo
 magnetUri = magnetHdr >> magnetBody
 
-parseMagneturi :: ByteString -> Either ParseError Magnetinfo
-parseMagneturi input = parse magnetUri "magnetParse" input
+parseMagneturi :: ByteString -> Either String Magnetinfo
+parseMagneturi input =
+  case parse magnetUri "magnetParse" input of
+    Right minfo -> Right minfo
+    Left e -> Left $ "Cannot parse the magnet URI: " ++ show e
index 05c9de571097142b861f88f1fd50e071ca075ca2..93540823fc47a97a6606342c71fa2d7525764f99 100644 (file)
@@ -129,5 +129,6 @@ getAnnounceList (Just (Bdict _)) = []
 torrentToMetainfo :: ByteString -> Either String Metainfo
 torrentToMetainfo s =
   case decode s of
-   Right d -> mkMetaInfo d
-   Left e -> Left $ show e
+    Right d -> mkMetaInfo d
+    Left e -> Left (show "Cannot parse the torrent file: " ++ show e)
+