Add local search

This commit is contained in:
Rnhmjoj 2014-11-21 23:05:16 +01:00
parent c663cb0d3c
commit 4f497ae881

38
Main.hs
View File

@ -1,16 +1,24 @@
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE RecordWildCards, OverloadedStrings #-}
import Network.Wreq (get, responseBody)
import System.Console.ArgParser
import Network.Wreq (get, responseBody)
import Data.Aeson (decode, toJSON)
import Data.Maybe (fromJust)
import Data.HashMap.Strict (delete)
import Control.Monad (when)
import Control.Lens
import Data.Aeson
import qualified Data.ByteString.Lazy.Char8 as C
import System.Console.ArgParser
import System.Process
import Json
data Name = Name
{ name :: String
, url :: String
, local :: Bool
, raw :: Bool
, block :: Bool
, raw :: Bool
} deriving (Show)
parser :: ParserSpec Name
@ -18,6 +26,7 @@ parser = Name
`parsedBy` reqPos "name" `Descr` "Namecoin name id"
`andBy` optPos "http://dns.dnschain.net/" "url" `Descr` "Use custom dnschain API url"
`andBy` boolFlag "local" `Descr` "Use local namecoind db"
`andBy` boolFlag "block" `Descr` "Show blockchain data (require local connecton)"
`andBy` boolFlag "raw" `Descr` "Print raw JSON data"
main :: IO ()
@ -25,10 +34,23 @@ main = mkApp parser >>= flip runApp exec
exec :: Name -> IO ()
exec args@Name{..} =
if local then putStrLn "to do"
if local
then do
out <- readProcess "namecoind" ["name_show", name] ""
case decode $ C.pack out of
Just res -> do
putStrLn $ repr value
when block $ putStrLn (repr extra)
where
value = fromJust . decode . C.pack $ res |: "value"
extra = toJSON $ delete "value" res
Nothing -> putStrLn "Error parsing data"
else do
req <- get (url ++ name)
if raw then print $ req ^. responseBody
else case decode (req ^. responseBody) of
print args
let body = req ^. responseBody
if raw
then print body
else case decode body of
Just res -> putStrLn $ repr res
Nothing -> putStrLn "Error parsing data"