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"