From c324eaf543cba9d916599852fcba99381564c6f9 Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Sat, 2 Dec 2023 08:04:30 +0100 Subject: [PATCH 1/7] Translated using Weblate (Hungarian) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 81.5% (539 of 661 strings) Translated using Weblate (Vietnamese) Currently translated at 100.0% (661 of 661 strings) Translated using Weblate (Arabic (Levantine)) Currently translated at 100.0% (661 of 661 strings) Translated using Weblate (Turkish) Currently translated at 100.0% (4 of 4 strings) Translated using Weblate (Arabic (Levantine)) Currently translated at 100.0% (661 of 661 strings) Translated using Weblate (Turkish) Currently translated at 100.0% (661 of 661 strings) Co-authored-by: Gyuri Bajzik Co-authored-by: Hosted Weblate Co-authored-by: Pizza Party Co-authored-by: ngocanhtve Co-authored-by: Ömer Faruk Sancak Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/apc/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/hu/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/tr/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/vi/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/fastlane/tr/ Translation: Cloudstream/App Translation: Cloudstream/Fastlane --- app/src/main/res/values-ajp/strings.xml | 30 +++++++++---------- app/src/main/res/values-hu/strings.xml | 5 +++- app/src/main/res/values-tr/strings.xml | 16 +++++----- app/src/main/res/values-vi/strings.xml | 10 +++---- .../android/tr-TR/full_description.txt | 5 ++-- 5 files changed, 35 insertions(+), 31 deletions(-) diff --git a/app/src/main/res/values-ajp/strings.xml b/app/src/main/res/values-ajp/strings.xml index e56cf825..87c9564e 100644 --- a/app/src/main/res/values-ajp/strings.xml +++ b/app/src/main/res/values-ajp/strings.xml @@ -11,9 +11,9 @@ بس بعات البيانات وقتما يتعطل الآپ شوف الخلفية مشّي الفيلم - ضلّ كابس لترجع الساتِنگز كيف كانة أول ما نزلتو الآپ + ضلّ كابس لترجع السَتِنگز كيف كانة أول ما نزلتو الآپ %1$s%2$d%3$s - رجِعت الساتِنيگز ل كيف كانت أساسًا + رجِعت السَتِنگز ل كيف كانت أساسًا نبش على تجديدات بالنسخة التجريبية كمان لون حدود الكتيبة پوستر @@ -37,7 +37,7 @@ نزل الترجمات مع الڤيديو عوزو المصادر لَ تنبّشو رجاع - انضم لگروپ \"كلودستريم\" ع الـ\"ديسكورد\" + انضم لگروپ \"كلود ستريم\" ع الـ\"ديسكورد\" بعد خيارات تسيّڤة النسخة الإحتياطية صرتو عاطين %d موزززة للمطورين! @@ -73,7 +73,7 @@ كَمِّل سِجِل ما نلاقى الوصف - ساتِنگز الترجمة + سَتِنگز الترجمة لون العلبة عمول ستريم للتورنت تلقائيًا نَزِل كل الإضافات من الريپويات يلي نزادِت. @@ -86,18 +86,18 @@ تنبيش منظّم ترجمة \"كروم كاست\" سحابو لتتحكمو بالصوت والضو - رايتيگ: %.1f - ستنگز تبع ترجمة \"كروم كاست\" + رايتينگ: %.1f + سَتِنگز تبع ترجمة \"كروم كاست\" متصفح الوَب كبوس مرتين على اليمين أو الشمال حتى تقرب أو ترَجِع الڤيديو ما نلاقى وصف الأحداث الحلقة يلي بَعدا فرجي تجديدات الآپ رفّ - آپ زغير من نفس المطورين للروايات بدل من الڤيديوات + آپ من نفس المطورين للروايات الخفيفة، بدل من الڤيديوات حدد الوضع لَتفَلتِر تنزيل الإضافات حلقة - مَشّي الحلقة يلي بعدا تلقائيًا بعد ما تُخلَص الحلقة + مَشّي الحلقة يلّي بعدا تلقائيًا بعد ما تُخلَص الحلقة لون الكتيبة مخلص عوز قوة ضوّ الشاشة تبع السيستام بدل من تغميئ الڤيديو @@ -139,7 +139,7 @@ الپوسر الأساسية المصادر كبوسو مرتين لتقفو - ثاتينگز + سَتِنگز التنبيش لودينگ… شيل @@ -147,17 +147,17 @@ التجديد والنسخات الاحتياطية خبي هيدي الجودات من نتائج التنبيش موقف موقتًا - كلاودستريم + كلود ستريم شيل الأسود من الأطراف ج طريقة تجديد الآپ - تقائيًا مشّي الحلقة ل بعدا + تلقائيًا مشّي الحلقة الّي بعدا كفي فوق غير آپ - ساتِنگز ترجمة الڤيديو + سَتِنگز ترجمة الڤيديو لغة الآپ فرجي المقاطع الدعائية نجح - مَشّي بـ\"كلاود ستريم\" + مَشّي بـ\"كلود ستريم\" إرتفاع الترجمة عوزو الأنواع ل تنبّشو حلقات @@ -536,7 +536,7 @@ عدد الإضافيات يلي تجددت: %d رح يتجدد الآپ وقتا تطلعو مِنو پلاي ليست \"ايش أل أس\" - زيد ريپوزيتاري + زيد ريپوزيتوري علم إنو حضرتو شو بَدَك تشوف شيل المعلومات يلي محطوطة بالترجمة ليلي عندن فقد سمعي @@ -588,4 +588,4 @@ \nعلامت المصدر والجودة تبعو بينجمعو مع بعض (8 + 1 = 9). يلي علامتو 10 أو أعلى، بينحط تلقائيًا، من دون ما ينعمل لود لكل المصادر! حطو الأرقام السرية الحالية صوت - + \ No newline at end of file diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 4cd322a9..3076ca54 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -510,4 +510,7 @@ Automatikus Az átugrás mértéke, amikor a lejátszó látható Válassza ki a módot a pluginek letöltésének szűréséhez - + Mentési gyakoriság + Értékelt + Kikapcsolás + \ No newline at end of file diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 2ee85d7c..bf56c731 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -11,11 +11,11 @@ %d %.1f/10.0 %d - %$1s B. %2$d + %1$s B. %2$d Cast: %s Bölüm %d şu tarihte yayınlanacak - %dg %ds %dd - %ds %dd + %1$dg %2$ds %3$dd + %1$ds %2$dd %dm Poster @@ -204,7 +204,7 @@ Dosyayı sil Sil İptal et - Durdur + Duraklat Sürdür -30 +30 @@ -537,11 +537,11 @@ Çok fazla metin. Panoya kaydedilemiyor. Kütüphane Tarayıcı - Görünüşe göre kütüphaneniz boş :( -\nBir kütüphane hesabına giriş yapın veya yerel kütüphanenize içerik ekleyin + Kütüphaneniz boş :( +\nBir kütüphane hesabında oturum açın veya yerel kütüphanenize programlar ekleyin. Güvenli mod dosyası bulundu! \nDosya kaldırılana kadar başlangıçta herhangi bir uzantı yüklenmiyor. - Sırala + Şuna Göre Sırala Sırala Güncellenme (Yeniden Eskiye) Güncellenme (Eskiden Yeniye) @@ -631,4 +631,4 @@ PIN girin PIN Geçerli PIN\'i Giriniz - + \ No newline at end of file diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 2d727462..51f26f91 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -181,8 +181,8 @@ Không có mùa nào Tập Tập - %1$ng-%2$ng - %d %s + %1$d-%2$d + %1$d %2$s M T Không có tập nào @@ -311,7 +311,7 @@ Địa chỉ trang web example.com Mã ngôn ngữ (vi) - %1$gi %2$gi + %1$s %2$s tài khoản Đăng xuất Đăng nhập @@ -444,7 +444,7 @@ Thiết lập lại Bộ cài APK Một số máy không hỗ trợ trình cài đặt gói mới. Hãy thử tùy chọn cũ nếu các bản cập nhật không cài đặt. - %s %d%s + %1$s %2$d%3$s Xem giới thiệu Tự động tải plugin còn thiếu. Bắt đầu cập nhật @@ -599,4 +599,4 @@ Bỏ qua lựa chọn tài khoản khi khởi động Quản lý tài khoản Chỉnh sửa tài khoản - + \ No newline at end of file diff --git a/fastlane/metadata/android/tr-TR/full_description.txt b/fastlane/metadata/android/tr-TR/full_description.txt index 450507ff..af6e80d6 100644 --- a/fastlane/metadata/android/tr-TR/full_description.txt +++ b/fastlane/metadata/android/tr-TR/full_description.txt @@ -1,6 +1,7 @@ -CloudStream-3 size film, dizi ve anime akışı yapma ve indirme olanağı sunar. +CloudStream-3, Filmleri, TV Dizilerini ve Animeleri izlemenize ve indirmenize olanak tanır. -Uygulama hiçbir reklam ve analitik yöntemleri barındırmaz ve birçok fragman & film sitelerini destekler, ve daha fazlası: +Uygulama herhangi bir reklam ve analitik içermez ve +birden fazla fragman & film sitesini ve daha fazlasını destekler, örneğin: Yer imleri From d4aefc4e64e2fdcbf9bbd509760515adf95ce2db Mon Sep 17 00:00:00 2001 From: IndusAryan <125901294+IndusAryan@users.noreply.github.com> Date: Fri, 8 Dec 2023 02:12:32 +0530 Subject: [PATCH 2/7] bump guava, json(tests), kgp, desugaring (#781) * bump guava(for ksp) * Update build.gradle.kts * . * Update kotlin gradle plugin --- app/build.gradle.kts | 14 +++++++------- build.gradle.kts | 4 ++-- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 8e1798d8..aa091f07 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -150,7 +150,7 @@ repositories { dependencies { // Testing testImplementation("junit:junit:4.13.2") - testImplementation("org.json:json:20230618") + testImplementation("org.json:json:20231013") androidTestImplementation("androidx.test:core") implementation("androidx.test.ext:junit-ktx:1.1.5") androidTestImplementation("androidx.test.ext:junit:1.1.5") @@ -178,7 +178,7 @@ dependencies { // For KSP -> Official Annotation Processors are Not Yet Supported for KSP ksp("dev.zacsweers.autoservice:auto-service-ksp:1.1.0") - implementation("com.google.guava:guava:32.1.2-android") + implementation("com.google.guava:guava:32.1.3-android") implementation("dev.zacsweers.autoservice:auto-service-ksp:1.1.0") // Media 3 (ExoPlayer) @@ -210,15 +210,15 @@ dependencies { implementation("com.github.discord:OverlappingPanels:0.1.5") // Gestures implementation("com.github.rubensousa:previewseekbar-media3:1.1.1.0") // SeekBar Preview - // Extensionns & Other Libs - implementation("org.mozilla:rhino:1.7.13") /* run JS - ^ Don't Bump RhinoJS to 1.7.14, since in 1.7.14 Rhino Uses the `SourceVersion` Class, Which is NOT - Available on Android (even with Desugaring) & `NoClassDefFoundError` Occurs. */ + // Extensions & Other Libs + implementation("org.mozilla:rhino:1.7.13") /* run JavaScript + ^ Don't Bump RhinoJS to 1.7.14,`NoClassDefFoundError` Occurs and Trailers won't play (even with Desugaring) + NewPipeExtractor Issue */ implementation("me.xdrop:fuzzywuzzy:1.4.0") // Library/Ext Searching with Levenshtein Distance implementation("com.github.LagradOst:SafeFile:0.0.5") // To Prevent the URI File Fu*kery implementation("org.conscrypt:conscrypt-android:2.5.2") // To Fix SSL Fu*kery on Android 9 implementation("com.uwetrottmann.tmdb2:tmdb-java:2.10.0") // TMDB API v3 Wrapper Made with RetroFit - coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:1.1.6") + coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.0.4") implementation("com.fasterxml.jackson.module:jackson-module-kotlin:2.13.1") /* JSON Parser ^ Don't Bump Jackson above 2.13.1 , Crashes on Android TV's and FireSticks that have Min API Level 25 or Less. */ diff --git a/build.gradle.kts b/build.gradle.kts index c12c9ab3..9b12621a 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -6,7 +6,7 @@ buildscript { } dependencies { classpath("com.android.tools.build:gradle:8.1.4") - classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.20") + classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.21") classpath("org.jetbrains.dokka:dokka-gradle-plugin:1.9.10") // NOTE: Do not place your application dependencies here; they belong @@ -27,4 +27,4 @@ plugins { tasks.register("clean") { delete(rootProject.layout.buildDirectory) -} \ No newline at end of file +} From 38cc121755960674ebc872cbc4c226fd6883e241 Mon Sep 17 00:00:00 2001 From: firelight <147925818+fire-light42@users.noreply.github.com> Date: Thu, 7 Dec 2023 20:43:52 +0000 Subject: [PATCH 3/7] Update build.gradle.kts (#797) --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index aa091f07..13cd828d 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -215,7 +215,7 @@ dependencies { ^ Don't Bump RhinoJS to 1.7.14,`NoClassDefFoundError` Occurs and Trailers won't play (even with Desugaring) NewPipeExtractor Issue */ implementation("me.xdrop:fuzzywuzzy:1.4.0") // Library/Ext Searching with Levenshtein Distance - implementation("com.github.LagradOst:SafeFile:0.0.5") // To Prevent the URI File Fu*kery + implementation("com.github.LagradOst:SafeFile:0.0.6") // To Prevent the URI File Fu*kery implementation("org.conscrypt:conscrypt-android:2.5.2") // To Fix SSL Fu*kery on Android 9 implementation("com.uwetrottmann.tmdb2:tmdb-java:2.10.0") // TMDB API v3 Wrapper Made with RetroFit coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.0.4") From f7bc83024a6a743a260fb625044c5d942bf31327 Mon Sep 17 00:00:00 2001 From: IndusAryan <125901294+IndusAryan@users.noreply.github.com> Date: Fri, 8 Dec 2023 02:14:12 +0530 Subject: [PATCH 4/7] upstream kotlin symbol processing (#788) --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 9b12621a..939c62a6 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -22,7 +22,7 @@ allprojects { } plugins { - id("com.google.devtools.ksp") version "1.9.20-1.0.14" apply false + id("com.google.devtools.ksp") version "1.9.21-1.0.15" apply false } tasks.register("clean") { From 25b042fb83618834a57ae989823e5e80e28c575e Mon Sep 17 00:00:00 2001 From: IndusAryan <125901294+IndusAryan@users.noreply.github.com> Date: Fri, 8 Dec 2023 02:21:42 +0530 Subject: [PATCH 5/7] refactor(bump): update glide module and fix regressions (#789) * upgrade glide module and glide ksp * fix glide breaking changes and regressions --- app/build.gradle.kts | 6 +++--- .../com/lagradost/cloudstream3/utils/GlideApp.kt | 2 +- .../com/lagradost/cloudstream3/utils/UIHelper.kt | 13 ++++++------- 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 13cd828d..73c1dd80 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -172,9 +172,9 @@ dependencies { implementation("androidx.swiperefreshlayout:swiperefreshlayout:1.1.0") // Glide Module - ksp("com.github.bumptech.glide:ksp:4.15.1") - implementation("com.github.bumptech.glide:glide:4.15.1") - implementation("com.github.bumptech.glide:okhttp3-integration:4.15.1") + ksp("com.github.bumptech.glide:ksp:4.16.0") + implementation("com.github.bumptech.glide:glide:4.16.0") + implementation("com.github.bumptech.glide:okhttp3-integration:4.16.0") // For KSP -> Official Annotation Processors are Not Yet Supported for KSP ksp("dev.zacsweers.autoservice:auto-service-ksp:1.1.0") diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/GlideApp.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/GlideApp.kt index 8d73db3d..38d3fe9e 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/GlideApp.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/GlideApp.kt @@ -30,7 +30,7 @@ class GlideModule : AppGlideModule() { .signature(ObjectKey(System.currentTimeMillis().toShort())) }.setDiskCache { // Possible to make this a setting in the future. - val memoryCacheSizeBytes: Long = 1024 * 1024 * 100; // 100mb + val memoryCacheSizeBytes: Long = 1024 * 1024 * 100 // 100mb InternalCacheDiskCacheFactory(context, memoryCacheSizeBytes).build() } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/UIHelper.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/UIHelper.kt index 134d7127..09ea151d 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/UIHelper.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/UIHelper.kt @@ -316,15 +316,15 @@ object UIHelper { if (colorCallback != null) { builder = builder.listener(object : RequestListener { - @SuppressLint("CheckResult") + override fun onResourceReady( - resource: Drawable?, - model: Any?, + resource: Drawable, + model: Any, target: Target?, - dataSource: DataSource?, + dataSource: DataSource, isFirstResource: Boolean ): Boolean { - resource?.toBitmapOrNull() + resource.toBitmapOrNull() ?.let { bitmap -> createPaletteAsync( identifier, @@ -335,11 +335,10 @@ object UIHelper { return false } - @SuppressLint("CheckResult") override fun onLoadFailed( e: GlideException?, model: Any?, - target: Target?, + target: Target, isFirstResource: Boolean ): Boolean { return false From dfd6ce7651dedce66557e6f24dcb3451f1697968 Mon Sep 17 00:00:00 2001 From: "recloudstream[bot]" <111277985+recloudstream[bot]@users.noreply.github.com> Date: Thu, 7 Dec 2023 20:54:23 +0000 Subject: [PATCH 6/7] chore(locales): fix locale issues --- app/src/main/res/values-ajp/strings.xml | 2 +- app/src/main/res/values-hu/strings.xml | 2 +- app/src/main/res/values-tr/strings.xml | 2 +- app/src/main/res/values-vi/strings.xml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/res/values-ajp/strings.xml b/app/src/main/res/values-ajp/strings.xml index 87c9564e..c6532ffa 100644 --- a/app/src/main/res/values-ajp/strings.xml +++ b/app/src/main/res/values-ajp/strings.xml @@ -588,4 +588,4 @@ \nعلامت المصدر والجودة تبعو بينجمعو مع بعض (8 + 1 = 9). يلي علامتو 10 أو أعلى، بينحط تلقائيًا، من دون ما ينعمل لود لكل المصادر! حطو الأرقام السرية الحالية صوت - \ No newline at end of file + diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 3076ca54..58afb665 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -513,4 +513,4 @@ Mentési gyakoriság Értékelt Kikapcsolás - \ No newline at end of file + diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index bf56c731..3445c57a 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -631,4 +631,4 @@ PIN girin PIN Geçerli PIN\'i Giriniz - \ No newline at end of file + diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 51f26f91..ff8af769 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -599,4 +599,4 @@ Bỏ qua lựa chọn tài khoản khi khởi động Quản lý tài khoản Chỉnh sửa tài khoản - \ No newline at end of file + From 6f3a8c1cd22e7e964ffa9206773d76fc26956372 Mon Sep 17 00:00:00 2001 From: Sofie <117321707+Sofie99@users.noreply.github.com> Date: Fri, 8 Dec 2023 23:28:16 +0700 Subject: [PATCH 7/7] extractor: added vidplay and fix few extractors (#795) * extractor: added Vidplay * fix id * fix Chillx * fix Linkbox * update m3u8helper in chillx * fix Dailymotion --------- Co-authored-by: Sofie99 --- .../cloudstream3/extractors/Chillx.kt | 30 +++--- .../cloudstream3/extractors/Dailymotion.kt | 22 ++--- .../cloudstream3/extractors/Linkbox.kt | 4 +- .../cloudstream3/extractors/Vidplay.kt | 92 +++++++++++++++++++ .../cloudstream3/utils/ExtractorApi.kt | 2 + 5 files changed, 120 insertions(+), 30 deletions(-) create mode 100644 app/src/main/java/com/lagradost/cloudstream3/extractors/Vidplay.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Chillx.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Chillx.kt index a9fafc39..cb234c5c 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Chillx.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Chillx.kt @@ -7,7 +7,7 @@ import com.lagradost.cloudstream3.extractors.helper.AesHelper.cryptoAESHandler import com.lagradost.cloudstream3.utils.AppUtils import com.lagradost.cloudstream3.utils.ExtractorApi import com.lagradost.cloudstream3.utils.ExtractorLink -import com.lagradost.cloudstream3.utils.Qualities +import com.lagradost.cloudstream3.utils.M3u8Helper class Moviesapi : Chillx() { override val name = "Moviesapi" @@ -23,13 +23,14 @@ class Watchx : Chillx() { override val name = "Watchx" override val mainUrl = "https://watchx.top" } + open class Chillx : ExtractorApi() { override val name = "Chillx" override val mainUrl = "https://chillx.top" override val requiresReferer = true companion object { - private const val KEY = "eN0^>\$^#M08uFv%c" + private const val KEY = "tSIsE8FgpRkv3QQQ" } override suspend fun getUrl( @@ -38,10 +39,14 @@ open class Chillx : ExtractorApi() { subtitleCallback: (SubtitleFile) -> Unit, callback: (ExtractorLink) -> Unit ) { - val master = Regex("MasterJS\\s*=\\s*'([^']+)").find( + val master = Regex("\\s*=\\s*'([^']+)").find( app.get( url, - referer = referer + referer = referer ?: "", + headers = mapOf( + "Accept" to "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8", + "Accept-Language" to "en-US,en;q=0.5", + ) ).text )?.groupValues?.get(1) val decrypt = cryptoAESHandler(master ?: return, KEY.toByteArray(), false)?.replace("\\", "") ?: throw ErrorLoadingException("failed to decrypt") @@ -59,17 +64,12 @@ open class Chillx : ExtractorApi() { "Origin" to mainUrl, ) - callback.invoke( - ExtractorLink( - name, - name, - source ?: return, - "$mainUrl/", - Qualities.P1080.value, - headers = headers, - isM3u8 = true - ) - ) + M3u8Helper.generateM3u8( + name, + source ?: return, + "$mainUrl/", + headers = headers + ).forEach(callback) AppUtils.tryParseJson>("[$tracks]") ?.filter { it.kind == "captions" }?.map { track -> diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Dailymotion.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Dailymotion.kt index 4b7cb19f..0df93dc5 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Dailymotion.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Dailymotion.kt @@ -7,7 +7,6 @@ import com.lagradost.cloudstream3.utils.AppUtils.tryParseJson import com.lagradost.cloudstream3.utils.ExtractorApi import com.lagradost.cloudstream3.utils.ExtractorLink import com.lagradost.cloudstream3.utils.M3u8Helper.Companion.generateM3u8 -import com.lagradost.cloudstream3.utils.Qualities import java.net.URL open class Dailymotion : ExtractorApi() { @@ -27,21 +26,16 @@ open class Dailymotion : ExtractorApi() { callback: (ExtractorLink) -> Unit ) { val embedUrl = getEmbedUrl(url) ?: return - val doc = app.get(embedUrl).document + val req = app.get(embedUrl) val prefix = "window.__PLAYER_CONFIG__ = " - val configStr = doc.selectFirst("script:containsData($prefix)")?.data() ?: return - val config = tryParseJson(configStr.substringAfter(prefix)) ?: return + val configStr = req.document.selectFirst("script:containsData($prefix)")?.data() ?: return + val config = tryParseJson(configStr.substringAfter(prefix).substringBefore(";").trim()) ?: return val id = getVideoId(embedUrl) ?: return val dmV1st = config.dmInternalData.v1st val dmTs = config.dmInternalData.ts - val metaDataUrl = - "$mainUrl/player/metadata/video/$id?locale=en&dmV1st=$dmV1st&dmTs=$dmTs&is_native_app=0" - val cookies = mapOf( - "v1st" to dmV1st, - "dmvk" to config.context.dmvk, - "ts" to dmTs.toString() - ) - val metaData = app.get(metaDataUrl, referer = embedUrl, cookies = cookies) + val embedder = config.context.embedder + val metaDataUrl = "$mainUrl/player/metadata/video/$id?embedder=$embedder&locale=en-US&dmV1st=$dmV1st&dmTs=$dmTs&is_native_app=0" + val metaData = app.get(metaDataUrl, referer = embedUrl, cookies = req.cookies) .parsedSafe() ?: return metaData.qualities.forEach { (_, video) -> video.forEach { @@ -84,13 +78,13 @@ open class Dailymotion : ExtractorApi() { ) data class InternalData( - val ts: Int, + val ts: Long, val v1st: String ) data class Context( @JsonProperty("access_token") val accessToken: String?, - val dmvk: String, + val embedder: String?, ) data class MetaData( diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Linkbox.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Linkbox.kt index 6a4945bb..04a9a6ac 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Linkbox.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Linkbox.kt @@ -18,7 +18,8 @@ open class Linkbox : ExtractorApi() { subtitleCallback: (SubtitleFile) -> Unit, callback: (ExtractorLink) -> Unit ) { - val id = Regex("""(?:/f/|/file/|\?id=)(\w+)""").find(url)?.groupValues?.get(1) + val token = Regex("""(?:/f/|/file/|\?id=)(\w+)""").find(url)?.groupValues?.get(1) + val id = app.get("$mainUrl/api/file/share_out_list/?sortField=utime&sortAsc=0&pageNo=1&pageSize=50&shareToken=$token").parsedSafe()?.data?.itemId app.get("$mainUrl/api/file/detail?itemId=$id", referer = url) .parsedSafe()?.data?.itemInfo?.resolutionList?.map { link -> callback.invoke( @@ -44,6 +45,7 @@ open class Linkbox : ExtractorApi() { data class Data( @JsonProperty("itemInfo") val itemInfo: ItemInfo? = null, + @JsonProperty("itemId") val itemId: String? = null, ) data class Responses( diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Vidplay.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Vidplay.kt new file mode 100644 index 00000000..6e3e16a2 --- /dev/null +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Vidplay.kt @@ -0,0 +1,92 @@ +package com.lagradost.cloudstream3.extractors + +import com.fasterxml.jackson.annotation.JsonProperty +import com.lagradost.cloudstream3.SubtitleFile +import com.lagradost.cloudstream3.app +import com.lagradost.cloudstream3.base64Encode +import com.lagradost.cloudstream3.utils.ExtractorApi +import com.lagradost.cloudstream3.utils.ExtractorLink +import com.lagradost.cloudstream3.utils.M3u8Helper +import javax.crypto.Cipher +import javax.crypto.spec.SecretKeySpec + +// Code found in https://github.com/Claudemirovsky/worstsource-keys +// special credits to @Claudemirovsky for providing key +open class Vidplay : ExtractorApi() { + override val name = "Vidplay" + override val mainUrl = "https://vidplay.site" + override val requiresReferer = true + + override suspend fun getUrl( + url: String, + referer: String?, + subtitleCallback: (SubtitleFile) -> Unit, + callback: (ExtractorLink) -> Unit + ) { + val id = url.substringBefore("?").substringAfterLast("/") + val encodeId = encodeId(id, getKeys()) + val mediaUrl = callFutoken(encodeId, url) + val res = app.get( + "$mediaUrl", headers = mapOf( + "Accept" to "application/json, text/javascript, */*; q=0.01", + "X-Requested-With" to "XMLHttpRequest", + ), referer = url + ).parsedSafe()?.result?.sources + + res?.map { + M3u8Helper.generateM3u8( + this.name, + it.file ?: return@map, + "$mainUrl/" + ).forEach(callback) + } + + } + + private suspend fun getKeys(): List { + return app.get("https://raw.githubusercontent.com/Claudemirovsky/worstsource-keys/keys/keys.json") + .parsed() + } + + private suspend fun callFutoken(id: String, url: String): String? { + val script = app.get("$mainUrl/futoken").text + val k = "k='(\\S+)'".toRegex().find(script)?.groupValues?.get(1) ?: return null + val a = mutableListOf(k) + for (i in id.indices) { + a.add((k[i % k.length].code + id[i].code).toString()) + } + return "$mainUrl/mediainfo/${a.joinToString(",")}?${url.substringAfter("?")}" + } + + private fun encodeId(id: String, keyList: List): String { + val cipher1 = Cipher.getInstance("RC4") + val cipher2 = Cipher.getInstance("RC4") + cipher1.init( + Cipher.DECRYPT_MODE, + SecretKeySpec(keyList[0].toByteArray(), "RC4"), + cipher1.parameters + ) + cipher2.init( + Cipher.DECRYPT_MODE, + SecretKeySpec(keyList[1].toByteArray(), "RC4"), + cipher2.parameters + ) + var input = id.toByteArray() + input = cipher1.doFinal(input) + input = cipher2.doFinal(input) + return base64Encode(input).replace("/", "_") + } + + data class Sources( + @JsonProperty("file") val file: String? = null, + ) + + data class Result( + @JsonProperty("sources") val sources: ArrayList? = arrayListOf(), + ) + + data class Response( + @JsonProperty("result") val result: Result? = null, + ) + +} \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt index 923c3531..2e9dd691 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt @@ -167,6 +167,7 @@ import com.lagradost.cloudstream3.extractors.Vidgomunimesb import com.lagradost.cloudstream3.extractors.Vidmoly import com.lagradost.cloudstream3.extractors.Vidmolyme import com.lagradost.cloudstream3.extractors.Vido +import com.lagradost.cloudstream3.extractors.Vidplay import com.lagradost.cloudstream3.extractors.Vidstreamz import com.lagradost.cloudstream3.extractors.Vizcloud import com.lagradost.cloudstream3.extractors.Vizcloud2 @@ -793,6 +794,7 @@ val extractorApis: MutableList = arrayListOf( VidSrcExtractor2(), PlayLtXyz(), AStreamHub(), + Vidplay(), Cda(), Dailymotion(),