This commit is contained in:
senstella
2025-11-03 21:56:33 +09:00
parent b23a69df75
commit de13e895c8

View File

@@ -16,16 +16,24 @@ data ContentType
| Tv | Tv
deriving (Show, Eq, Generic, FromJSON, ToJSON) deriving (Show, Eq, Generic, FromJSON, ToJSON)
newtype ID = ID String deriving (Show, Eq, Generic, FromJSON, ToJSON) newtype ContentID = ContentID String deriving (Show, Eq, Generic, FromJSON, ToJSON)
newtype IDPrefix = IDPrefix String deriving (Show, Eq, Generic, FromJSON, ToJSON) newtype SubtitleID = SubtitleID String deriving (Show, Eq, Generic, FromJSON, ToJSON)
newtype ContentIDPrefix = ContentIDPrefix String deriving (Show, Eq, Generic, FromJSON, ToJSON)
newtype Url = Url String deriving (Show, Eq, Generic, FromJSON, ToJSON) newtype Url = Url String deriving (Show, Eq, Generic, FromJSON, ToJSON)
newtype BingeGroup = BingeGroup String deriving (Show, Eq, Generic, FromJSON, ToJSON)
newtype OpensubtitleHash = OpensubtitleHash String deriving (Show, Eq, Generic, FromJSON, ToJSON)
data ImageShape = Square | Poster | Landscape deriving (Show, Eq, Generic, FromJSON, ToJSON) data ImageShape = Square | Poster | Landscape deriving (Show, Eq, Generic, FromJSON, ToJSON)
data YearInfo = Single Int | Range Int Int deriving (Show, Eq, Generic, FromJSON, ToJSON) data YearInfo = Single Int | Range Int Int deriving (Show, Eq, Generic, FromJSON, ToJSON)
data Language = Language String deriving (Show, Eq, Generic, FromJSON, ToJSON)
data Trailer = Trailer String | Clip String deriving (Show, Eq, Generic, FromJSON, ToJSON) data Trailer = Trailer String | Clip String deriving (Show, Eq, Generic, FromJSON, ToJSON)
data MetaLink data MetaLink
@@ -36,10 +44,34 @@ data MetaLink
} }
deriving (Show, Generic, FromJSON, ToJSON) deriving (Show, Generic, FromJSON, ToJSON)
data Stream = UrlStream Url | YoutubeStream Url | TorrentStream | ExternalStream MetaLink deriving (Show, Generic, FromJSON, ToJSON) data StreamDetails = StreamDetails
{ name :: Maybe String,
title :: Maybe String,
description :: Maybe String,
subtitles :: Maybe [Subtitle],
-- we arent doing soruces cuz no torrent for now
bingeGroup :: Maybe BingeGroup,
vContentIDeoHash :: Maybe OpensubtitleHash,
vContentIDeoSize :: Maybe Int,
filename :: Maybe String
}
deriving (Show, Generic, FromJSON, ToJSON)
data Video = Video data StreamSource
{ id :: ID, = UrlSource Url
| YoutubeSource String
| TorrentSource
| ExternalSource MetaLink
deriving (Show, Generic, FromJSON, ToJSON)
data Stream = Stream
{ details :: StreamDetails,
source :: StreamSource
}
deriving (Show, Generic, FromJSON, ToJSON)
data Video = VContentIDeo
{ id :: ContentID,
title :: String, title :: String,
released :: UTCTime, released :: UTCTime,
thumbnail :: Maybe Url, thumbnail :: Maybe Url,
@@ -55,12 +87,12 @@ data Video = Video
data Feature data Feature
= Search = Search
{ required :: Bool, { required :: Bool,
options :: Maybe [IDPrefix], options :: Maybe [ContentIDPrefix],
optionsLimit :: Maybe Int optionsLimit :: Maybe Int
} }
| Genre | Genre
{ required :: Bool, { required :: Bool,
options :: Maybe [IDPrefix], options :: Maybe [ContentIDPrefix],
optionsLimit :: Maybe Int optionsLimit :: Maybe Int
} }
| Skip | Skip
@@ -69,28 +101,28 @@ data Feature
data Resource a where data Resource a where
MetaResource :: MetaResource ::
{ metaTypes :: [ContentType], { metaTypes :: [ContentType],
metaIdPrefix :: [IDPrefix] metaContentIDPrefix :: [ContentIDPrefix]
} -> } ->
Resource MetaData Resource MetaData
CatalogResource :: CatalogResource ::
{ catalogTypes :: [ContentType], { catalogTypes :: [ContentType],
catalogIdPrefix :: [IDPrefix], catalogContentIDPrefix :: [ContentIDPrefix],
catalogExtra :: [Feature] catalogExtra :: [Feature]
} -> } ->
Resource Catalog Resource Catalog
StreamResource :: StreamResource ::
{ streamTypes :: [ContentType], { streamTypes :: [ContentType],
streamIdPrefix :: [IDPrefix] streamContentIDPrefix :: [ContentIDPrefix]
} -> } ->
Resource Stream Resource Stream
SubtitleResource :: SubtitleResource ::
{ subtitleTypes :: [ContentType], { subtitleTypes :: [ContentType],
subtitleIdPrefix :: [IDPrefix] subtitleContentIDPrefix :: [ContentIDPrefix]
} -> } ->
Resource Subtitle Resource Subtitle
data MetaData = Meta data MetaData = Meta
{ id :: ID, { id :: ContentID,
contentType :: ContentType, contentType :: ContentType,
name :: String, name :: String,
genres :: Maybe [String], genres :: Maybe [String],
@@ -115,9 +147,14 @@ data MetaData = Meta
} }
deriving (Show, Generic, FromJSON, ToJSON) deriving (Show, Generic, FromJSON, ToJSON)
data Catalog = Catalog {} data Catalog = Catalog {} deriving (Show, Generic, FromJSON, ToJSON)
data Subtitle = Subtitle {} data Subtitle = Subtitle
{ id :: SubtitleID,
url :: Url,
language :: Language
}
deriving (Show, Generic, FromJSON, ToJSON)
main :: IO () main :: IO ()
main = putStrLn "Hello, Haskell!" main = putStrLn "Hello, Haskell!"