packages feed

black-jewel-0.0.0.1: src/Quarry.hs

module Quarry where
import Text.Printf
import System.Console.ANSI
import Control.Monad(forM_)

data RetriveData = MagnetLinkURL { magnetLink :: String, magnetHash :: String } deriving (Show)



data Quarry = Quarry {
     seed :: Int,
     leech :: Int,
     retrive :: RetriveData,
     uploaded :: String,
     size :: String,
     files :: Int,
     meta :: String,
     title :: String
}
instance Show Quarry where
         show q = printf "%-30s (%d/%d) uploaded %s" (take 30 $ title q) (seed q) (leech q) (uploaded q)

class Show a => TerminalOutput a where
      termOutput :: a -> IO ()

instance TerminalOutput Quarry where
         termOutput q = do
                    setSGR [SetColor Foreground Vivid Magenta, SetConsoleIntensity BoldIntensity]
                    printf " %-50s " $ take 50 (title q) :: IO ()

                    setSGR [Reset, SetConsoleIntensity BoldIntensity] >> printf " %s " (uploaded q) :: IO ()

                    setSGR [] >> printf "    [" :: IO ()
                    setSGR [SetColor Foreground Vivid Green] >> printf "%d" (seed q) :: IO ()
                    setSGR [] >> printf "/" ::IO ()
                    setSGR [SetColor Foreground Dull Red] >> printf "%d" (leech q) :: IO ()
                    setSGR [] >> printf "]" :: IO ()

                    setSGR [] >> printf "\n" :: IO ()


instance TerminalOutput [Quarry] where
         termOutput list = forM_ (zip list [1..]) outputLine where
                  outputLine :: (Quarry, Int) -> IO ()
                  outputLine (q, n) = do
                         setSGR [SetConsoleIntensity BoldIntensity,
                                SetColor Foreground Dull Cyan]
                         printf "%-3d" n :: IO ()
                         termOutput q