@@ -60,15 +60,18 @@ open class GDFlix : ExtractorApi() {
6060 subtitleCallback : (SubtitleFile ) -> Unit ,
6161 callback : (ExtractorLink ) -> Unit
6262 ) {
63+ val parts = referer?.split(" |" )
64+ val httpReferer = parts?.getOrNull(0 )?.takeIf { it.startsWith(" http" , ignoreCase = true ) }
65+ val displayName = parts?.getOrNull(1 ) ? : referer?.takeIf { ! it.startsWith(" http" , ignoreCase = true ) } ? : " "
6366
64- val newUrl = try { app.get(url).document.selectFirst(" meta[http-equiv=refresh]" )?.attr(" content" )
67+ val newUrl = try { app.get(url, referer = httpReferer ).document.selectFirst(" meta[http-equiv=refresh]" )?.attr(" content" )
6568 ?.substringAfter(" url=" )
6669 } catch (e: Exception ) {
6770 Log .e(" GDFlix" , " Redirect error: ${e.localizedMessage} " )
6871 return
6972 } ? : url
7073
71- val document = app.get(newUrl).document
74+ val document = app.get(newUrl, referer = httpReferer ).document
7275
7376 val fileName = document.select(" ul > li.list-group-item:contains(Name)" )
7477 .text()
@@ -77,11 +80,11 @@ open class GDFlix : ExtractorApi() {
7780 val fileSize = document.select(" ul > li.list-group-item:contains(Size)" )
7881 .text()
7982 .substringAfter(" Size : " )
83+ .substringBefore(" |" )
84+ .trim()
8085
8186 val quality = getIndexQuality(fileName)
82- val sourcename = referer
83- ?.takeIf { it.isNotEmpty() && ! it.startsWith(" http" , ignoreCase = true ) }
84- ? : " "
87+ val sourcename = displayName
8588
8689 document.select(" div.text-center a" ).amap { anchor ->
8790 val text = anchor.text()
@@ -96,7 +99,6 @@ open class GDFlix : ExtractorApi() {
9699 link
97100 ) {
98101 this .quality = quality
99- this .referer = newUrl
100102 }
101103 )
102104 }
@@ -112,7 +114,6 @@ open class GDFlix : ExtractorApi() {
112114 instantLink
113115 ) {
114116 this .quality = quality
115- this .referer = newUrl
116117 }
117118 )
118119 }
@@ -142,7 +143,6 @@ open class GDFlix : ExtractorApi() {
142143 finalURL
143144 ) {
144145 this .quality = quality
145- this .referer = baseUrlLink
146146 }
147147 )
148148 }
@@ -170,7 +170,6 @@ open class GDFlix : ExtractorApi() {
170170 sourceurl
171171 ) {
172172 this .quality = quality
173- this .referer = newUrl
174173 }
175174 )
176175 }
@@ -204,6 +203,10 @@ open class HubCloud : ExtractorApi() {
204203 callback : (ExtractorLink ) -> Unit
205204 ) {
206205 val tag = " HubCloud"
206+ val parts = referer?.split(" |" )
207+ val httpReferer = parts?.getOrNull(0 )?.takeIf { it.startsWith(" http" , ignoreCase = true ) }
208+ val displayName = parts?.getOrNull(1 ) ? : referer?.takeIf { ! it.startsWith(" http" , ignoreCase = true ) } ? : " "
209+
207210 val uri = runCatching { URI (url) }.getOrElse {
208211 Log .e(tag, " Invalid URL: ${it.message} " )
209212 return
@@ -216,7 +219,7 @@ open class HubCloud : ExtractorApi() {
216219 if (" hubcloud.php" in realUrl) {
217220 realUrl
218221 } else {
219- val raw = app.get(realUrl).document
222+ val raw = app.get(realUrl, referer = httpReferer ).document
220223 .selectFirst(" #download" )
221224 ?.attr(" href" )
222225 .orEmpty()
@@ -231,7 +234,7 @@ open class HubCloud : ExtractorApi() {
231234
232235 if (href.isBlank()) return
233236
234- val document = app.get(href).document
237+ val document = app.get(href, referer = realUrl ).document
235238 val size = document.selectFirst(" i#size" )?.text().orEmpty()
236239 val header = document.selectFirst(" div.card-header" )?.text().orEmpty()
237240
@@ -260,7 +263,6 @@ open class HubCloud : ExtractorApi() {
260263 link
261264 ) {
262265 this .quality = quality
263- this .referer = href
264266 }
265267 )
266268 }
@@ -273,7 +275,6 @@ open class HubCloud : ExtractorApi() {
273275 link
274276 ) {
275277 this .quality = quality
276- this .referer = href
277278 }
278279 )
279280 }
@@ -286,7 +287,6 @@ open class HubCloud : ExtractorApi() {
286287 link
287288 ) {
288289 this .quality = quality
289- this .referer = href
290290 }
291291 )
292292 }
@@ -304,7 +304,6 @@ open class HubCloud : ExtractorApi() {
304304 dlink
305305 ) {
306306 this .quality = quality
307- this .referer = link
308307 }
309308 )
310309 } else {
@@ -325,7 +324,6 @@ open class HubCloud : ExtractorApi() {
325324 finalUrl
326325 ) {
327326 this .quality = quality
328- this .referer = href
329327 }
330328 )
331329 }
@@ -338,7 +336,6 @@ open class HubCloud : ExtractorApi() {
338336 link
339337 ) {
340338 this .quality = quality
341- this .referer = href
342339 }
343340 )
344341 }
@@ -351,7 +348,6 @@ open class HubCloud : ExtractorApi() {
351348 link
352349 ) {
353350 this .quality = quality
354- this .referer = href
355351 }
356352 )
357353 }
@@ -364,7 +360,6 @@ open class HubCloud : ExtractorApi() {
364360 link
365361 ) {
366362 this .quality = quality
367- this .referer = href
368363 }
369364 )
370365 }
@@ -386,3 +381,37 @@ open class HubCloud : ExtractorApi() {
386381 return extractCleanTitle(title)
387382 }
388383}
384+
385+ open class Hubdrive : ExtractorApi () {
386+ override val name = " Hubdrive"
387+ override val mainUrl = " https://hubdrive.space"
388+ override val requiresReferer = false
389+
390+ override suspend fun getUrl (
391+ url : String ,
392+ referer : String? ,
393+ subtitleCallback : (SubtitleFile ) -> Unit ,
394+ callback : (ExtractorLink ) -> Unit
395+ ) {
396+ val parts = referer?.split(" |" )
397+ val httpReferer = parts?.getOrNull(0 )?.takeIf { it.startsWith(" http" , ignoreCase = true ) }
398+
399+ val href = try {
400+ app.get(url, referer = httpReferer, timeout = 5000L )
401+ .document
402+ .select(" .btn.btn-primary.btn-user.btn-success1.m-1" )
403+ .attr(" href" )
404+ } catch (e: Exception ) {
405+ Log .e(" Hubdrive" , " Failed to fetch Hubdrive link: ${e.message} " )
406+ return
407+ }
408+
409+ if (href.isBlank()) return
410+
411+ if (href.contains(" hubcloud" , ignoreCase = true )) {
412+ HubCloud ().getUrl(href, referer, subtitleCallback, callback)
413+ } else {
414+ loadExtractor(href, referer, subtitleCallback, callback)
415+ }
416+ }
417+ }
0 commit comments