@@ -26,17 +26,20 @@ open class Dmax : MainAPI() {
2626
2727 override var name: String = " Dmax"
2828 override var mainUrl: String = " https://dmax.de"
29- open var serviceIdentifier: String = " dmax"
3029 open var apiUrl: String = " https://eu1-prod.disco-api.com"
3130 open var metadataApiUrl: String = " https://de-api.loma-cms.com"
32- open var mediathekSlug: String = " sendungen"
3331
34- private suspend fun obtainToken (realm : String ): String {
32+ // service specific configuration
33+ open var serviceIdentifier: String = " dmax" // used for metadataApiUrl
34+ open var mediathekSlug: String = " sendungen" // used for metadataApiUrl
35+ open var apiTokenRealm = " dmaxde" // used for obtaining tokens from apiUrl
36+
37+ private suspend fun obtainApiToken (): String {
3538 return app.get(
36- " $apiUrl /token?realm=$realm " , headers = mapOf (
39+ " $apiUrl /token?realm=$apiTokenRealm " , headers = mapOf (
3740 " X-Device-Info" to " STONEJS/1 (Unknown/Unknown; Linux/undefined; Unknown)" ,
3841 " X-disco-client" to " WEB:UNKNOWN:wbdatv:2.1.9" ,
39- " X-disco-params" to " realm=$realm " ,
42+ " X-disco-params" to " realm=$apiTokenRealm " ,
4043 )
4144 ).parsed<TokenResponse >().data.attributes.token
4245 }
@@ -46,12 +49,15 @@ open class Dmax : MainAPI() {
4649 app.get(" $metadataApiUrl /feloma/page/homepage/?environment=$serviceIdentifier &v=2" )
4750 .parsed<MediaResult >()
4851
49- val pages = response.blocks.filter { it.items.isNotEmpty() }.map { block ->
50- HomePageList (
51- name = block.title.orEmpty(),
52- list = block.items.filter { it.videoType != " CLIP" }.map { it.toSearchResponse() }
53- )
54- }.filter { it.list.isNotEmpty() }
52+ val pages =
53+ response.blocks.filter { it.items.isNotEmpty() }
54+ .map { block ->
55+ HomePageList (
56+ name = block.title.orEmpty(),
57+ list = block.items.filter { it.pageType == " showpage" }
58+ .map { it.toSearchResponse() }
59+ )
60+ }.filter { it.list.isNotEmpty() }
5561
5662 return newHomePageResponse(pages, hasNext = false )
5763 }
@@ -67,7 +73,7 @@ open class Dmax : MainAPI() {
6773 private fun MediaResult.toSearchResponse (): SearchResponse {
6874 return newMovieSearchResponse(
6975 name = title,
70- url = " $mainUrl /mediathek /$slug " ,
76+ url = " $mainUrl /$mediathekSlug /$slug " ,
7177 type = TvType .Movie
7278 ) {
7379 this .posterUrl = image?.url
@@ -78,7 +84,7 @@ open class Dmax : MainAPI() {
7884 private fun EpisodeInfo.toSearchResponse (): SearchResponse {
7985 return newMovieSearchResponse(
8086 name = title.orEmpty(),
81- url = fixUrl(link?.url ? : " /mediathek /${alternateId ? : url} " ),
87+ url = fixUrl(link?.url ? : " /$mediathekSlug /${alternateId ? : url} " ),
8288 type = TvType .Movie
8389 ) {
8490 this .posterUrl = poster?.src ? : image?.url
@@ -87,7 +93,7 @@ open class Dmax : MainAPI() {
8793 }
8894
8995 override suspend fun load (url : String ): LoadResponse ? {
90- val slug = url.substringAfterLast(" /" )
96+ val slug = url.removeSuffix( " / " ). substringAfterLast(" /" )
9197 val response =
9298 app.get(" $metadataApiUrl /feloma/page/$slug /?environment=$serviceIdentifier &parent_slug=$mediathekSlug &v=2" )
9399 .parsed<MediaResult >()
@@ -145,7 +151,7 @@ open class Dmax : MainAPI() {
145151 ): Boolean {
146152 val videoId = AppUtils .parseJson<StreamInfo >(data).id
147153
148- val authToken = obtainToken( " dmaxde " )
154+ val authToken = obtainApiToken( )
149155
150156 val response = app.post(
151157 " $apiUrl /playback/v3/videoPlaybackInfo" ,
@@ -227,6 +233,7 @@ open class Dmax : MainAPI() {
227233
228234 private data class Block (
229235 val title : String? ,
236+ val type : String? ,
230237 val videoId : String? ,
231238 val showId : String? ,
232239 val items : List <EpisodeInfo > = emptyList()
@@ -252,6 +259,7 @@ open class Dmax : MainAPI() {
252259 val image : Image ? ,
253260 val link : Link ? ,
254261 val url : String? ,
262+ val pageType : String?
255263 )
256264
257265 private data class Link (
@@ -340,9 +348,7 @@ open class Dmax : MainAPI() {
340348 )
341349
342350 private data class VendorAttributes (
343- val breaks : List <Any ?>,
344351 val interstitialUrl : String ,
345- val nonLinearAds : List <Any ?>,
346352 val pingUrl : String ,
347353 val sessionId : String ,
348354 )
@@ -361,7 +367,6 @@ open class Dmax : MainAPI() {
361367 private data class Protection (
362368 val clearkeyEnabled : Boolean ,
363369 val drmEnabled : Boolean ,
364- val schemes : Any? ,
365370 )
366371
367372 private data class UserInfo (
@@ -376,6 +381,3 @@ open class Dmax : MainAPI() {
376381 val id : String
377382 )
378383}
379-
380-
381-
0 commit comments