module Vimeta.UI.Term.TV
( tvSearch
) where
import Data.Monoid
import qualified Data.Text as Text
import Network.API.TheMovieDB
import System.Console.Byline
import Vimeta.Core hiding (ask)
import Vimeta.UI.Common.Util
import Vimeta.UI.Term.Common
tvSearch :: Vimeta (Byline IO) TV
tvSearch = do
let prompt = "search (series name): "
mprompt = "Which is the correct TV series? "
sprompt = "a search term is required" <> fg red
eprompt = "please choose a TV series" <> fg red
name <- byline (askUntil prompt Nothing $ notEmpty sprompt)
series <- tmdb (searchTV name)
answer <- byline $ askWithMenuRepeatedly (mkMenu series) mprompt eprompt
case answer of
Match tv -> logID tv >> tmdb (fetchFullTVSeries (tvID tv))
_ -> die "you need to pick a valid TV series"
where
mkMenu series = banner "Choose a TV series:" (menu series displayTV)
displayTV series =
mconcat [ text (tvName series)
, text (parens $ dayRange (tvFirstAirDate series) (tvLastAirDate series))
]
logID tv = verbose $ "using TV ID: " <> Text.pack (show $ tvID tv)