the goal is to speed up the getMainPage

This commit is contained in:
Eddy 2022-10-24 02:56:38 +02:00
parent a92a735d39
commit e24f323f96

View file

@ -65,22 +65,46 @@ data class Channel(
var id: String?, var id: String?,
var tv_genre_id: String?, var tv_genre_id: String?,
var ch_id: String?, var ch_id: String?,
) { )
fun toSearchResponseHomePage(
provider: MacIPTVProvider,
): SearchResponse {
val media = this
val groupName = cleanTitle(media.title).replace(provider.rgxcodeCountry, "").trim()
return LiveSearchResponse(
groupName,
"$provider.mainUrl/-${media.id}-",
provider.name,
TvType.Live,
media.url_image,
)
}
}
fun toSearchResponseHomePage(
channels: List<Channel>,
provider: MacIPTVProvider, GenreId: String
): List<SearchResponse> {
val groupChannel = ArrayList<String>()
var b_new: String
var newgroupChannel: Boolean
val home = channels.mapNotNull { media ->
val groupName = cleanTitle(media.title).replace(provider.rgxcodeCountry, "").trim()
val rgxcodeCountry = provider.rgxcodeCountry
val b = cleanTitle(media.title).replace(rgxcodeCountry, "").trim()
b_new = b.take(6)
newgroupChannel = true
for (nameChannel in groupChannel) {
if (nameChannel.contains(b_new) && media.tv_genre_id == GenreId) {
newgroupChannel = false
break
}
}
if (newgroupChannel && media.tv_genre_id == GenreId) {
groupChannel.add(b_new)
LiveSearchResponse(
groupName,
"$provider.mainUrl/-${media.id}-",
provider.name,
TvType.Live,
media.url_image,
)
} else {
null
}
}
return home
}
class MacIPTVProvider(override var lang: String) : MainAPI() { class MacIPTVProvider(override var lang: String) : MainAPI() {
private val defaulmac_adresse = private val defaulmac_adresse =
@ -97,6 +121,17 @@ class MacIPTVProvider(override var lang: String) : MainAPI() {
private var firstInitDone = false private var firstInitDone = false
private var key: String? = "" private var key: String? = ""
companion object {
var companionName: String? = null
var loginMac: String? = null
var overrideUrl: String? = null
fun List<Channel>.toHomePageList(name: String, provider: MacIPTVProvider, GenreId: String) =
HomePageList(
name, toSearchResponseHomePage(this, provider, GenreId),
isHorizontalImages = true
)
}
private fun accountInfoNotGood(url: String, mac: String?): Boolean { private fun accountInfoNotGood(url: String, mac: String?): Boolean {
return url.uppercase().trim() == "NONE" || url.isBlank() || mac?.uppercase() return url.uppercase().trim() == "NONE" || url.isBlank() || mac?.uppercase()
?.trim() == "NONE" || mac.isNullOrBlank() ?.trim() == "NONE" || mac.isNullOrBlank()
@ -154,6 +189,7 @@ class MacIPTVProvider(override var lang: String) : MainAPI() {
} }
private fun List<Channel>.sortByname(query: String?): List<Channel> { private fun List<Channel>.sortByname(query: String?): List<Channel> {
return if (query == null) { return if (query == null) {
// Return list to base state if no query // Return list to base state if no query
@ -483,53 +519,57 @@ class MacIPTVProvider(override var lang: String) : MainAPI() {
val rgxcodeCountry = findKeyWord(codeCountry) val rgxcodeCountry = findKeyWord(codeCountry)
override suspend fun getMainPage(page: Int, request: MainPageRequest): HomePageResponse { override suspend fun getMainPage(page: Int, request: MainPageRequest): HomePageResponse {
val headerIPTV = getAuthHeader() var arrayHomepage = mutableListOf<HomePageList>()
val url_info = if (page == 1) {
"$mainUrl/portal.php?type=account_info&action=get_main_info&JsHttpRequest=1-xml" val headerIPTV = getAuthHeader()
val urlGetGenre = val url_info =
"$mainUrl/portal.php?type=itv&action=get_genres&JsHttpRequest=1-xml" "$mainUrl/portal.php?type=account_info&action=get_main_info&JsHttpRequest=1-xml"
val urlGetallchannels = val urlGetGenre =
"$mainUrl/portal.php?type=itv&action=get_all_channels&JsHttpRequest=1-xml" "$mainUrl/portal.php?type=itv&action=get_genres&JsHttpRequest=1-xml"
val urlGetallchannels =
"$mainUrl/portal.php?type=itv&action=get_all_channels&JsHttpRequest=1-xml"
var reponseGetInfo: NiceResponse? = null var reponseGetInfo: NiceResponse? = null
var responseGetgenre: NiceResponse? = null var responseGetgenre: NiceResponse? = null
var responseAllchannels: NiceResponse? = null var responseAllchannels: NiceResponse? = null
listOf( listOf(
url_info, url_info,
urlGetGenre, urlGetGenre,
urlGetallchannels urlGetallchannels
).apmap { url -> ).apmap { url ->
val response = app.get(url, headers = headerIPTV) val response = app.get(url, headers = headerIPTV)
when (true) { when (true) {
url.contains("action=get_main_info") -> { url.contains("action=get_main_info") -> {
reponseGetInfo = response reponseGetInfo = response
} }
url.contains("action=get_genre") -> { url.contains("action=get_genre") -> {
responseGetgenre = response responseGetgenre = response
} }
url.contains("action=get_all_channels") -> { url.contains("action=get_all_channels") -> {
responseAllchannels = response responseAllchannels = response
} }
else -> { else -> {
"" ""
}
} }
} }
} ///////////// GET EXPIRATION
///////////// GET EXPIRATION val infoExpirationJson = reponseGetInfo!!.parsed<GetExpiration>()
val infoExpirationJson = reponseGetInfo!!.parsed<GetExpiration>() val expiration = infoExpirationJson.js?.phone.toString()
val expiration = infoExpirationJson.js?.phone.toString() ////////////////////////// GET ALL GENRES
////////////////////////// GET ALL GENRES val responseGetGenretoJSON = responseGetgenre!!.parsed<JsonGetGenre>()
val responseGetGenretoJSON = responseGetgenre!!.parsed<JsonGetGenre>() ////////////////////////// GET ALL CHANNELS
////////////////////////// GET ALL CHANNELS val responseAllchannelstoJSON = responseAllchannels!!.parsed<Root>()
val responseAllchannelstoJSON = responseAllchannels!!.parsed<Root>() val AllchannelstoJSON = responseAllchannelstoJSON.js!!.data.sortByTitleNumber()
val AllchannelstoJSON = responseAllchannelstoJSON.js!!.data.sortByTitleNumber() arrayHomepage = HomeResponse(
return HomePageResponse(
HomeResponse(
responseGetGenretoJSON, responseGetGenretoJSON,
AllchannelstoJSON, AllchannelstoJSON,
expiration, expiration,
).getHomePageLists(this), false ).getHomePageLists(this)
}
return HomePageResponse(
arrayHomepage, false
) )
} }
@ -642,8 +682,6 @@ class MacIPTVProvider(override var lang: String) : MainAPI() {
provider provider
) )
) { ) {
flag = getFlag(categoryTitle) flag = getFlag(categoryTitle)
val nameGenre = if (firstCat) { val nameGenre = if (firstCat) {
firstCat = false firstCat = false
@ -656,9 +694,6 @@ class MacIPTVProvider(override var lang: String) : MainAPI() {
arrayHomepage.add( arrayHomepage.add(
arraychannel.toHomePageList(nameGenre, provider, idGenre) arraychannel.toHomePageList(nameGenre, provider, idGenre)
) )
if (provider.groupMedia.isNotEmpty()) {
provider.groupMedia.clear()
}
} }
} }
@ -666,38 +701,4 @@ class MacIPTVProvider(override var lang: String) : MainAPI() {
} }
} }
var groupMedia = mutableListOf<String>() }
companion object {
var companionName: String? = null
var loginMac: String? = null
var overrideUrl: String? = null
fun List<Channel>.toHomePageList(name: String, provider: MacIPTVProvider, GenreId: String) =
HomePageList(
name, this.mapNotNull {
var b_new: String
var newgroupMedia: Boolean
val rgxcodeCountry = provider.rgxcodeCountry
val media = it
val b = cleanTitle(media.title).replace(rgxcodeCountry, "").trim()
b_new = b.take(6)
newgroupMedia = true
for (nameMedia in provider.groupMedia) {
if (nameMedia.contains(b_new) && media.tv_genre_id == GenreId) {
newgroupMedia = false
break
}
}
if (newgroupMedia && media.tv_genre_id == GenreId) { //
provider.groupMedia.add(b_new)
it.toSearchResponseHomePage(provider)
} else {
null
}
},
isHorizontalImages = true
)
}
}