- Added api for show listing , made data model, updated the dropdown - Added api for category, made data model - Made the dynamic height tableview to show all the shows - On fav add remove , will refresh the mylist screen - Added default load on hindi - On category selection change, updating the show list data - Handled the fav category id as int, string , string seeprated with “,” - Modifying my list with bookmark id with above
193 lines
5.9 KiB
Swift
193 lines
5.9 KiB
Swift
//
|
|
// WebSeriesShowListDM.swift
|
|
// WOKA
|
|
//
|
|
// Created by MacBook Pro on 19/06/24.
|
|
//
|
|
|
|
import Foundation
|
|
|
|
|
|
// MARK: - WebSeriesShowListDM
|
|
struct WebSeriesShowListDM: Codable {
|
|
let showData: [ShowDatum]?
|
|
let totalRecords: Int?
|
|
|
|
enum CodingKeys: String, CodingKey {
|
|
case showData = "show_data"
|
|
case totalRecords = "total_records"
|
|
}
|
|
|
|
// MARK: - ShowDatum
|
|
struct ShowDatum: Codable {
|
|
let id: Int?
|
|
let title, description: String?
|
|
let thumbnailPath: String?
|
|
let showType: String?
|
|
let totalSeasons, totalEpisodes: Int?
|
|
let categoryMasterID: String?
|
|
let ageRangeMasterID, genderMasterID: String?
|
|
let contentMoreDetails: [MoreDetail]?
|
|
let seasonData: [SeasonDatum]?
|
|
let categoryData: [CategoryDatum]?
|
|
let ageRangeData: [AgeRangeDatum]?
|
|
let genderData: [GenderDatum]?
|
|
var markAsFavourite, isLiked: Bool?
|
|
let likedCategoryIDS: LikedCategoryIDS?
|
|
var favouriteCategoryIDS: ValueWrapper?
|
|
var likesCount : Int?
|
|
let viewsCount, bookmarkCount: Int?
|
|
|
|
enum CodingKeys: String, CodingKey {
|
|
case id, title, description
|
|
case thumbnailPath = "thumbnail_path"
|
|
case showType = "show_type"
|
|
case totalSeasons = "total_seasons"
|
|
case totalEpisodes = "total_episodes"
|
|
case categoryMasterID = "category_master_id"
|
|
case ageRangeMasterID = "age_range_master_id"
|
|
case genderMasterID = "gender_master_id"
|
|
case contentMoreDetails = "content_more_details"
|
|
case seasonData = "season_data"
|
|
case categoryData = "category_data"
|
|
case ageRangeData = "age_range_data"
|
|
case genderData = "gender_data"
|
|
case markAsFavourite = "mark_as_favourite"
|
|
case isLiked = "is_liked"
|
|
case likedCategoryIDS = "liked_category_ids"
|
|
case favouriteCategoryIDS = "favourite_category_ids"
|
|
case viewsCount = "views_count"
|
|
case likesCount = "likes_count"
|
|
case bookmarkCount = "bookmark_count"
|
|
}
|
|
}
|
|
|
|
// MARK: - AgeRangeDatum
|
|
struct AgeRangeDatum: Codable {
|
|
let id: Int?
|
|
let ageRange: String?
|
|
|
|
enum CodingKeys: String, CodingKey {
|
|
case id
|
|
case ageRange = "age_range"
|
|
}
|
|
}
|
|
|
|
// MARK: - CategoryDatum
|
|
struct CategoryDatum: Codable {
|
|
let id: Int?
|
|
let categoryName: CategoryName?
|
|
|
|
enum CodingKeys: String, CodingKey {
|
|
case id
|
|
case categoryName = "category_name"
|
|
}
|
|
}
|
|
|
|
enum CategoryName: String, Codable {
|
|
case english = "English"
|
|
case hindi = "Hindi"
|
|
}
|
|
|
|
// enum CategoryMasterID: String, Codable {
|
|
// case the118 = "1,18"
|
|
// }
|
|
|
|
// MARK: - MoreDetail
|
|
struct MoreDetail: Codable {
|
|
let id, contentID, postType, languageMasterID: Int?
|
|
let title, description, tagsKeywords: String?
|
|
let trailerHDURL, trailerSDURL: String?
|
|
|
|
enum CodingKeys: String, CodingKey {
|
|
case id
|
|
case contentID = "content_id"
|
|
case postType = "post_type"
|
|
case languageMasterID = "language_master_id"
|
|
case title, description
|
|
case tagsKeywords = "tags_keywords"
|
|
case trailerHDURL = "trailer_hd_url"
|
|
case trailerSDURL = "trailer_sd_url"
|
|
}
|
|
}
|
|
|
|
// MARK: - GenderDatum
|
|
struct GenderDatum: Codable {
|
|
let id: Int?
|
|
let genderName: String?
|
|
|
|
enum CodingKeys: String, CodingKey {
|
|
case id
|
|
case genderName = "gender_name"
|
|
}
|
|
}
|
|
|
|
enum LikedCategoryIDS: Codable {
|
|
case integer(Int)
|
|
case string(String)
|
|
case null
|
|
|
|
init(from decoder: Decoder) throws {
|
|
let container = try decoder.singleValueContainer()
|
|
if let x = try? container.decode(Int.self) {
|
|
self = .integer(x)
|
|
return
|
|
}
|
|
if let x = try? container.decode(String.self) {
|
|
self = .string(x)
|
|
return
|
|
}
|
|
if container.decodeNil() {
|
|
self = .null
|
|
return
|
|
}
|
|
throw DecodingError.typeMismatch(LikedCategoryIDS.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for LikedCategoryIDS"))
|
|
}
|
|
|
|
func encode(to encoder: Encoder) throws {
|
|
var container = encoder.singleValueContainer()
|
|
switch self {
|
|
case .integer(let x):
|
|
try container.encode(x)
|
|
case .string(let x):
|
|
try container.encode(x)
|
|
case .null:
|
|
try container.encodeNil()
|
|
}
|
|
}
|
|
}
|
|
|
|
// MARK: - SeasonDatum
|
|
struct SeasonDatum: Codable {
|
|
let id, watchShowsMasterID: Int?
|
|
let seasonNumber: String?
|
|
let noOfEpisodes: Int?
|
|
let seasonDescription: String?
|
|
let releaseYear: Int?
|
|
let seasonTitle: String?
|
|
let trailerURL: String?
|
|
let thumbnailPath: String?
|
|
let thumbnailImgURL: String?
|
|
let tagsKeyword, releaseDate: String?
|
|
let seasonMoreDetails: [MoreDetail]?
|
|
|
|
enum CodingKeys: String, CodingKey {
|
|
case id
|
|
case watchShowsMasterID = "watch_shows_master_id"
|
|
case seasonNumber = "season_number"
|
|
case noOfEpisodes = "no_of_episodes"
|
|
case seasonDescription = "season_description"
|
|
case releaseYear = "release_year"
|
|
case seasonTitle = "season_title"
|
|
case trailerURL = "trailer_url"
|
|
case thumbnailPath = "thumbnail_path"
|
|
case thumbnailImgURL = "thumbnail_img_url"
|
|
case tagsKeyword = "tags_keyword"
|
|
case releaseDate = "release_date"
|
|
case seasonMoreDetails = "season_more_details"
|
|
}
|
|
}
|
|
|
|
}
|
|
|