From 4f497ae881d5e365249d3b260d11a16da12fea13 Mon Sep 17 00:00:00 2001 From: Rnhmjoj Date: Fri, 21 Nov 2014 23:05:16 +0100 Subject: [PATCH] Add local search --- Main.hs | 38 ++++++++++++++++++++++++++++++-------- 1 file changed, 30 insertions(+), 8 deletions(-) diff --git a/Main.hs b/Main.hs index 76d17aa..0e282d3 100644 --- a/Main.hs +++ b/Main.hs @@ -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"