Skip to content

Instantly share code, notes, and snippets.

@mshenoy83
Created September 7, 2025 00:13
Show Gist options
  • Select an option

  • Save mshenoy83/334e1fff6fce931beb72c041b4b34fa0 to your computer and use it in GitHub Desktop.

Select an option

Save mshenoy83/334e1fff6fce931beb72c041b4b34fa0 to your computer and use it in GitHub Desktop.
public class Episode
{
[JsonPropertyName("id")]
public string Id;
[JsonPropertyName("episode_num")]
public int EpisodeNum;
[JsonPropertyName("title")]
public string Title;
[JsonPropertyName("container_extension")]
public string ContainerExtension;
[JsonPropertyName("info")]
public EpisodeInfo Info;
[JsonPropertyName("custom_sid")]
public string CustomSid;
[JsonPropertyName("added")]
public string Added;
[JsonPropertyName("season")]
public int Season;
[JsonPropertyName("direct_source")]
public string DirectSource;
}
public class EpisodeInfo
{
[JsonPropertyName("tmdb_id")]
public int TmdbId;
[JsonPropertyName("releasedate")]
public string Releasedate;
[JsonPropertyName("duration_secs")]
public int DurationSecs;
[JsonPropertyName("duration")]
public string Duration;
[JsonPropertyName("movie_image")]
public string MovieImage;
[JsonPropertyName("video")]
public VideoInfo Video;
[JsonPropertyName("audio")]
public AudioInfo Audio;
[JsonPropertyName("bitrate")]
public int Bitrate;
[JsonPropertyName("rating")]
public decimal Rating;
[JsonPropertyName("season")]
public string Season;
}
public class Season
{
[JsonPropertyName("air_date")]
public string AirDate;
[JsonPropertyName("episode_count")]
public int EpisodeCount;
[JsonPropertyName("id")]
public int Id;
[JsonPropertyName("name")]
public string Name;
[JsonPropertyName("overview")]
public string Overview;
[JsonPropertyName("season_number")]
public int SeasonNumber;
[JsonPropertyName("vote_average")]
public double VoteAverage;
[JsonPropertyName("cover")]
public string Cover;
[JsonPropertyName("cover_big")]
public string CoverBig;
}
public class SeriesData
{
[JsonPropertyName("seasons")]
public List<Season> Seasons;
[JsonPropertyName("info")]
public SeriesInfo Info;
[JsonPropertyName("episodes")]
public Dictionary<string, List<Episode>> Episodes { get; set; }
}
public class SeriesInfo
{
[JsonPropertyName("name")]
public string Name;
[JsonPropertyName("cover")]
public string Cover;
[JsonPropertyName("plot")]
public string Plot;
[JsonPropertyName("cast")]
public string Cast;
[JsonPropertyName("director")]
public string Director;
[JsonPropertyName("genre")]
public string Genre;
[JsonPropertyName("releaseDate")]
public string ReleaseDate;
[JsonPropertyName("last_modified")]
public string LastModified;
[JsonPropertyName("rating")]
public string Rating;
[JsonPropertyName("rating_5based")]
public int Rating5based;
[JsonPropertyName("backdrop_path")]
public List<string> BackdropPath;
[JsonPropertyName("youtube_trailer")]
public string YoutubeTrailer;
[JsonPropertyName("episode_run_time")]
public string EpisodeRunTime;
[JsonPropertyName("category_id")]
public string CategoryId;
}
public class MovieData
{
[JsonPropertyName("stream_id")]
public int StreamId;
[JsonPropertyName("name")]
public string Name;
[JsonPropertyName("added")]
public string Added;
[JsonPropertyName("category_id")]
public string CategoryId;
[JsonPropertyName("container_extension")]
public string ContainerExtension;
[JsonPropertyName("custom_sid")]
public string CustomSid;
[JsonPropertyName("direct_source")]
public string DirectSource;
}
public class VideoData
{
[JsonPropertyName("info")]
public VideoOnDemandInfo Info;
[JsonPropertyName("movie_data")]
public MovieData MovieData;
}
public class VideoOnDemandInfo
{
[JsonPropertyName("kinopoisk_url")]
public string KinopoiskUrl;
[JsonPropertyName("tmdb_id")]
public string TmdbId;
[JsonPropertyName("name")]
public string Name;
[JsonPropertyName("o_name")]
public string OName;
[JsonPropertyName("cover_big")]
public string CoverBig;
[JsonPropertyName("movie_image")]
public string MovieImage;
[JsonPropertyName("releasedate")]
public string Releasedate;
[JsonPropertyName("episode_run_time")]
public string EpisodeRunTime;
[JsonPropertyName("youtube_trailer")]
public string YoutubeTrailer;
[JsonPropertyName("director")]
public string Director;
[JsonPropertyName("actors")]
public string Actors;
[JsonPropertyName("cast")]
public string Cast;
[JsonPropertyName("description")]
public string Description;
[JsonPropertyName("plot")]
public string Plot;
[JsonPropertyName("age")]
public string Age;
[JsonPropertyName("mpaa_rating")]
public string MpaaRating;
[JsonPropertyName("rating_count_kinopoisk")]
public int RatingCountKinopoisk;
[JsonPropertyName("country")]
public string Country;
[JsonPropertyName("genre")]
public string Genre;
[JsonPropertyName("backdrop_path")]
public List<string> BackdropPath;
[JsonPropertyName("duration_secs")]
public int DurationSecs;
[JsonPropertyName("duration")]
public string Duration;
[JsonPropertyName("video")]
public VideoInfo Video;
[JsonPropertyName("audio")]
public AudioInfo Audio;
[JsonPropertyName("bitrate")]
public int Bitrate;
[JsonPropertyName("rating")]
public string Rating;
}
public class AudioInfo
{
[JsonPropertyName("index")]
public int Index { get; set; }
[JsonPropertyName("codec_name")]
public string CodecName { get; set; }
[JsonPropertyName("codec_long_name")]
public string CodecLongName { get; set; }
[JsonPropertyName("profile")]
public string Profile { get; set; }
[JsonPropertyName("codec_type")]
public string CodecType { get; set; }
[JsonPropertyName("codec_time_base")]
public string CodecTimeBase { get; set; } // present in some APIs
[JsonPropertyName("codec_tag_string")]
public string CodecTagString { get; set; }
[JsonPropertyName("codec_tag")]
public string CodecTag { get; set; }
[JsonPropertyName("sample_fmt")]
public string SampleFmt { get; set; }
[JsonPropertyName("sample_rate")]
public string SampleRate { get; set; }
[JsonPropertyName("channels")]
public int Channels { get; set; }
[JsonPropertyName("channel_layout")]
public string ChannelLayout { get; set; }
[JsonPropertyName("bits_per_sample")]
public int BitsPerSample { get; set; }
[JsonPropertyName("initial_padding")]
public int? InitialPadding { get; set; }
[JsonPropertyName("extradata_size")]
public int? ExtradataSize { get; set; }
[JsonPropertyName("r_frame_rate")]
public string RFrameRate { get; set; }
[JsonPropertyName("avg_frame_rate")]
public string AvgFrameRate { get; set; }
[JsonPropertyName("time_base")]
public string TimeBase { get; set; }
[JsonPropertyName("start_pts")]
public int StartPts { get; set; }
[JsonPropertyName("start_time")]
public string StartTime { get; set; }
[JsonPropertyName("disposition")]
public Disposition Disposition { get; set; }
[JsonPropertyName("tags")]
public Tags Tags { get; set; }
}
public class Category
{
[JsonPropertyName("category_id")]
public string? CategoryId;
[JsonPropertyName("category_name")]
public string? CategoryName;
[JsonPropertyName("parent_id")]
public int? ParentId;
}
public class Disposition
{
[JsonPropertyName("default")]
public int Default { get; set; }
[JsonPropertyName("dub")]
public int Dub { get; set; }
[JsonPropertyName("original")]
public int Original { get; set; }
[JsonPropertyName("comment")]
public int Comment { get; set; }
[JsonPropertyName("lyrics")]
public int Lyrics { get; set; }
[JsonPropertyName("karaoke")]
public int Karaoke { get; set; }
[JsonPropertyName("forced")]
public int Forced { get; set; }
[JsonPropertyName("hearing_impaired")]
public int HearingImpaired { get; set; }
[JsonPropertyName("visual_impaired")]
public int VisualImpaired { get; set; }
[JsonPropertyName("clean_effects")]
public int CleanEffects { get; set; }
[JsonPropertyName("attached_pic")]
public int AttachedPic { get; set; }
[JsonPropertyName("timed_thumbnails")]
public int TimedThumbnails { get; set; }
[JsonPropertyName("captions")]
public int? Captions { get; set; }
[JsonPropertyName("descriptions")]
public int? Descriptions { get; set; }
[JsonPropertyName("metadata")]
public int? Metadata { get; set; }
[JsonPropertyName("dependent")]
public int? Dependent { get; set; }
[JsonPropertyName("still_image")]
public int? StillImage { get; set; }
}
public class MediaCategoryInfo
{
[JsonPropertyName("num")]
public int Num { get; set; }
[JsonPropertyName("name")]
public string? Name { get; set; }
[JsonPropertyName("category_id")]
public required string CategoryId { get; set; }
// 🔹 Stream-specific
[JsonPropertyName("stream_type")]
public string? StreamType { get; set; }
[JsonPropertyName("stream_id")]
public int? StreamId { get; set; }
[JsonPropertyName("stream_icon")]
public string? StreamIcon { get; set; }
[JsonPropertyName("epg_channel_id")]
public string? EpgChannelId { get; set; }
[JsonPropertyName("added")]
public string? Added { get; set; }
[JsonPropertyName("custom_sid")]
public string? CustomSid { get; set; }
[JsonPropertyName("tv_archive")]
public int? TvArchive { get; set; }
[JsonPropertyName("direct_source")]
public string? DirectSource { get; set; }
[JsonPropertyName("tv_archive_duration")]
public object? TvArchiveDuration { get; set; }
// 🔹 Series-specific
[JsonPropertyName("series_id")]
public int? SeriesId { get; set; }
[JsonPropertyName("cover")]
public string? Cover { get; set; }
[JsonPropertyName("plot")]
public string? Plot { get; set; }
[JsonPropertyName("cast")]
public string? Cast { get; set; }
[JsonPropertyName("director")]
public string? Director { get; set; }
[JsonPropertyName("genre")]
public string? Genre { get; set; }
[JsonPropertyName("releaseDate")]
public string? ReleaseDate { get; set; }
[JsonPropertyName("last_modified")]
public string? LastModified { get; set; }
[JsonPropertyName("rating")]
public string? Rating { get; set; }
[JsonPropertyName("rating_5based")]
public double? Rating5based { get; set; }
[JsonPropertyName("backdrop_path")]
public List<string>? BackdropPath { get; set; }
[JsonPropertyName("youtube_trailer")]
public string? YoutubeTrailer { get; set; }
[JsonPropertyName("episode_run_time")]
public string? EpisodeRunTime { get; set; }
[JsonIgnore]
public bool IsSeries => SeriesId.HasValue;
[JsonIgnore]
public bool IsStream => StreamId.HasValue;
}
public class Tags :Dictionary<string, string> { }
public class VideoInfo
{
[JsonPropertyName("index")]
public int Index { get; set; }
[JsonPropertyName("codec_name")]
public string CodecName { get; set; }
[JsonPropertyName("codec_long_name")]
public string CodecLongName { get; set; }
[JsonPropertyName("profile")]
public string Profile { get; set; }
[JsonPropertyName("codec_type")]
public string CodecType { get; set; }
[JsonPropertyName("codec_time_base")]
public string CodecTimeBase { get; set; }
[JsonPropertyName("codec_tag_string")]
public string CodecTagString { get; set; }
[JsonPropertyName("codec_tag")]
public string CodecTag { get; set; }
[JsonPropertyName("width")]
public int Width { get; set; }
[JsonPropertyName("height")]
public int Height { get; set; }
[JsonPropertyName("coded_width")]
public int CodedWidth { get; set; }
[JsonPropertyName("coded_height")]
public int CodedHeight { get; set; }
[JsonPropertyName("closed_captions")]
public int? ClosedCaptions { get; set; } // only sometimes present
[JsonPropertyName("film_grain")]
public int? FilmGrain { get; set; }
[JsonPropertyName("has_b_frames")]
public int HasBFrames { get; set; }
[JsonPropertyName("sample_aspect_ratio")]
public string SampleAspectRatio { get; set; }
[JsonPropertyName("display_aspect_ratio")]
public string DisplayAspectRatio { get; set; }
[JsonPropertyName("pix_fmt")]
public string PixFmt { get; set; }
[JsonPropertyName("level")]
public int Level { get; set; }
[JsonPropertyName("chroma_location")]
public string ChromaLocation { get; set; }
[JsonPropertyName("field_order")]
public string FieldOrder { get; set; }
[JsonPropertyName("refs")]
public int Refs { get; set; }
[JsonPropertyName("is_avc")]
public string IsAvc { get; set; }
[JsonPropertyName("nal_length_size")]
public string NalLengthSize { get; set; }
[JsonPropertyName("r_frame_rate")]
public string RFrameRate { get; set; }
[JsonPropertyName("avg_frame_rate")]
public string AvgFrameRate { get; set; }
[JsonPropertyName("time_base")]
public string TimeBase { get; set; }
[JsonPropertyName("start_pts")]
public int StartPts { get; set; }
[JsonPropertyName("start_time")]
public string StartTime { get; set; }
[JsonPropertyName("bits_per_raw_sample")]
public string BitsPerRawSample { get; set; }
[JsonPropertyName("extradata_size")]
public int? ExtradataSize { get; set; }
[JsonPropertyName("disposition")]
public Disposition Disposition { get; set; }
[JsonPropertyName("tags")]
public Tags Tags { get; set; }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment