{-# LANGUAGE OverloadedStrings #-} module Text.Hastily.Types ( MovieInfo(MovieInfo), imdb, year, name, movieType, SubtitleDialog(SubtitleDialog), start_time, end_time, digest, dialog, Subtitle (Subtitle), subtitle_movieinfo, subtitle_dialogs, subtitle_file ) where import Data.Aeson import Data.String.Conversions import Data.Text import System.FilePath import Text.Printf import Control.Applicative import Data.Functor data MovieInfo = MovieInfo {imdb::Text, year::Text, name::Text, movieType::Text} data SubtitleDialog = SubtitleDialog {start_time::Text, end_time::Text, dialog::Text, digest::Text} deriving (Show) data Subtitle = Subtitle {subtitle_movieinfo::MovieInfo, subtitle_file::FilePath, subtitle_dialogs::[SubtitleDialog]} deriving (Show) instance Eq SubtitleDialog where (==) a b = digest a == digest b instance Ord SubtitleDialog where compare a b = compare (digest a) (digest b) instance Show MovieInfo where show movie_info = printf "%s , Year: %s, Imdb: %s, Type: %s" movie_name movie_year movie_imdb movie_type where movie_name = (cs $ name movie_info)::String movie_imdb = (cs $ imdb movie_info)::String movie_year = (cs $ year movie_info)::String movie_type = (cs $ movieType movie_info)::String instance FromJSON MovieInfo where parseJSON (Object v) = MovieInfo <$> v .: "imdbID" <*> v .: "Year"<*> v .: "Title"<*> v .: "Type"