more refactoring
authorRamakrishnan Muthukrishnan <ram@rkrishnan.org>
Mon, 16 Feb 2015 05:27:52 +0000 (10:57 +0530)
committerRamakrishnan Muthukrishnan <ram@rkrishnan.org>
Mon, 16 Feb 2015 05:27:52 +0000 (10:57 +0530)
src/Bencode.hs
src/Main.hs
src/Metainfo.hs

index 16e4a2b789edf3a87b87f661ca6e70c8c080254f..e07799e525adf0102c7711168c7404df096a39af 100644 (file)
@@ -133,6 +133,6 @@ encode (Bstr bs) = let s = BC.unpack bs
 encode (Bint i) = "i" ++ show i ++ "e"
 encode (Blist xs) = "l" ++ encodeList xs ++ "e"
   where encodeList [] = ""
-        encodeList (x:xs) = encode x ++ encodeList xs
+        encodeList (x:xs') = encode x ++ encodeList xs'
 encode (Bdict d) = "d" ++ encodeDict d ++ "e"
   where encodeDict m = concat [encode k ++ encode (m M.! k) | k <- M.keys m]
index f5a0a50318be8799ed69a9567e12c0b32bcaa1d4..10aa2874a4eaac64489c914dea40bf23c14739c9 100644 (file)
@@ -1,6 +1,7 @@
 module Main where
 
 import System.Environment (getArgs)
+import System.Exit
 import qualified Data.ByteString.Char8 as BC
 import qualified Bencode as Benc
 import qualified Metainfo as MInfo
@@ -14,10 +15,21 @@ printError e = putStrLn $ "parse error: " ++ show e
 genPeerId :: String
 genPeerId = "-HS0001-20150215"
 
+exit :: IO BC.ByteString
+exit = exitWith ExitSuccess
+
+usage :: IO ()
+usage = putStrLn "usage: deluge torrent-file"
+
+parse :: [String] -> IO (BC.ByteString)
+parse [] = usage >> exit
+parse [a] = BC.readFile a
+parse _ = exit
+
 main :: IO ()
 main = do
   args <- getArgs
-  torrentStr <- BC.readFile (head args)
+  torrentStr <- parse args
   case (Benc.decode torrentStr) of
    Right d -> case (MInfo.mkMetaInfo d) of
                Nothing -> putStrLn "parse error"
index 47a134cd811d16064ebd713897bcafbb1ea2000f..4c614d6096f57e7d010f067b49741f2b15f91d67 100644 (file)
@@ -3,9 +3,6 @@ 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
 
 -- only single file mode supported for the time being.
 data Info = Info { pieceLength :: !Integer