forked from recloudstream/cloudstream
		
	kdramahood: add default source and subtitle (#629)
* kdramahood: add default source and subtitle * applied PR changes
This commit is contained in:
		
							parent
							
								
									d1278f97e7
								
							
						
					
					
						commit
						56fb9fcb7c
					
				
					 1 changed files with 78 additions and 18 deletions
				
			
		|  | @ -1,11 +1,15 @@ | |||
| package com.lagradost.cloudstream3.movieproviders | ||||
| 
 | ||||
| import com.fasterxml.jackson.module.kotlin.readValue | ||||
| import android.util.Log | ||||
| import com.fasterxml.jackson.annotation.JsonProperty | ||||
| import com.lagradost.cloudstream3.* | ||||
| import com.lagradost.cloudstream3.extractors.* | ||||
| import com.lagradost.cloudstream3.extractors.helper.AsianEmbedHelper | ||||
| import com.lagradost.cloudstream3.mvvm.logError | ||||
| import com.lagradost.cloudstream3.utils.AppUtils.parseJson | ||||
| import com.lagradost.cloudstream3.utils.AppUtils.toJson | ||||
| import com.lagradost.cloudstream3.utils.ExtractorLink | ||||
| import com.lagradost.cloudstream3.utils.getQualityFromName | ||||
| import com.lagradost.cloudstream3.utils.loadExtractor | ||||
| import org.jsoup.Jsoup | ||||
| 
 | ||||
|  | @ -18,6 +22,11 @@ class KdramaHoodProvider : MainAPI() { | |||
|     override val hasDownloadSupport = true | ||||
|     override val supportedTypes = setOf(TvType.TvSeries, TvType.Movie) | ||||
| 
 | ||||
|     private data class ResponseDatas( | ||||
|         @JsonProperty("label") val label: String, | ||||
|         @JsonProperty("file") val file: String | ||||
|     ) | ||||
| 
 | ||||
|     override suspend fun getMainPage(): HomePageResponse { | ||||
|         val doc = app.get("$mainUrl/home2").document | ||||
|         val home = ArrayList<HomePageList>() | ||||
|  | @ -154,6 +163,16 @@ class KdramaHoodProvider : MainAPI() { | |||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|                 //Fetch default source and subtitles | ||||
|                 epVidLinkEl.select("div.embed2")?.forEach { defsrc -> | ||||
|                     if (defsrc == null) { return@forEach } | ||||
|                     val scriptstring = defsrc.toString() | ||||
|                     if (scriptstring.contains("sources: [{")) { | ||||
|                         "(?<=playerInstance2.setup\\()([\\s\\S]*?)(?=\\);)".toRegex().find(scriptstring)?.value?.let { itemjs -> | ||||
|                             listOfLinks.add("$mainUrl$itemjs") | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|             TvSeriesEpisode( | ||||
|                 name = null, | ||||
|  | @ -199,27 +218,68 @@ class KdramaHoodProvider : MainAPI() { | |||
|         callback: (ExtractorLink) -> Unit | ||||
|     ): Boolean { | ||||
|         var count = 0 | ||||
|         mapper.readValue<List<String>>(data).apmap { item -> | ||||
|         parseJson<List<String>>(data).apmap { item -> | ||||
|             if (item.isNotBlank()) { | ||||
|                 count++ | ||||
|                 var url = item.trim() | ||||
|                 if (url.startsWith("//")) { | ||||
|                     url = "https:$url" | ||||
|                 } | ||||
|                 //Log.i(this.name, "Result => (url) ${url}") | ||||
|                 when { | ||||
|                     url.startsWith("https://asianembed.io") -> { | ||||
|                         AsianEmbedHelper.getUrls(url, callback) | ||||
|                     } | ||||
|                     url.startsWith("https://embedsito.com") -> { | ||||
|                         val extractor = XStreamCdn() | ||||
|                         extractor.domainUrl = "embedsito.com" | ||||
|                         extractor.getUrl(url).forEach { link -> | ||||
|                             callback.invoke(link) | ||||
|                 if (item.startsWith(mainUrl)) { | ||||
|                     val text = item.substring(mainUrl.length) | ||||
|                     //Log.i(this.name, "Result => (text) $text") | ||||
|                     //Find video files | ||||
|                     try { | ||||
|                         "(?<=sources: )([\\s\\S]*?)(?<=])".toRegex().find(text)?.value?.let { vid -> | ||||
|                             parseJson<List<ResponseDatas>>(vid).forEach { src -> | ||||
|                                 //Log.i(this.name, "Result => (src) ${src.toJson()}") | ||||
|                                 callback( | ||||
|                                     ExtractorLink( | ||||
|                                         name = "$name ${src.label}", | ||||
|                                         url = src.file, | ||||
|                                         quality = getQualityFromName(src.label), | ||||
|                                         referer = mainUrl, | ||||
|                                         source = name | ||||
|                                     ) | ||||
|                                 ) | ||||
|                             } | ||||
|                         } | ||||
|                     } catch (e: Exception) { | ||||
|                         logError(e) | ||||
|                     } | ||||
|                     else -> { | ||||
|                         loadExtractor(url, mainUrl, callback) | ||||
|                     //Find subtitles | ||||
|                     try { | ||||
|                         "(?<=tracks: )([\\s\\S]*?)(?<=])".toRegex().find(text)?.value?.let { sub -> | ||||
|                             val subtext = sub.replace("file:", "\"file\":") | ||||
|                                 .replace("label:", "\"label\":") | ||||
|                                 .replace("kind:", "\"kind\":") | ||||
|                             parseJson<List<ResponseDatas>>(subtext).forEach { src -> | ||||
|                                 //Log.i(this.name, "Result => (sub) ${src.toJson()}") | ||||
|                                 subtitleCallback( | ||||
|                                     SubtitleFile( | ||||
|                                         lang = src.label, | ||||
|                                         url = src.file | ||||
|                                     ) | ||||
|                                 ) | ||||
|                             } | ||||
|                         } | ||||
|                     } catch (e: Exception) { | ||||
|                         logError(e) | ||||
|                     } | ||||
| 
 | ||||
|                 } else { | ||||
|                     val url = fixUrl(item.trim()) | ||||
|                     //Log.i(this.name, "Result => (url) $url") | ||||
|                     when { | ||||
|                         url.startsWith("https://asianembed.io") -> { | ||||
|                             AsianEmbedHelper.getUrls(url, callback) | ||||
|                         } | ||||
|                         url.startsWith("https://embedsito.com") -> { | ||||
|                             val extractor = XStreamCdn() | ||||
|                             extractor.domainUrl = "embedsito.com" | ||||
|                             extractor.getUrl(url).forEach { link -> | ||||
|                                 callback.invoke(link) | ||||
|                             } | ||||
|                         } | ||||
|                         else -> { | ||||
|                             loadExtractor(url, mainUrl, callback) | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue