From 61fb302a373814380257eac5f0e03d2d96a3d99f Mon Sep 17 00:00:00 2001 From: reduplicated <110570621+reduplicated@users.noreply.github.com> Date: Sun, 9 Oct 2022 01:36:06 +0200 Subject: [PATCH 1/6] delay mainpage --- .../com/lagradost/cloudstream3/MainAPI.kt | 11 +++++++- .../cloudstream3/ui/APIRepository.kt | 27 +++++++++++++++++-- .../cloudstream3/ui/home/HomeViewModel.kt | 2 ++ 3 files changed, 37 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt b/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt index 47afbc42..416a7238 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt @@ -381,7 +381,16 @@ abstract class MainAPI { open var storedCredentials: String? = null open var canBeOverridden: Boolean = true - //open val uniqueId : Int by lazy { this.name.hashCode() } // in case of duplicate providers you can have a shared id + /** if this is turned on then it will request the homepage one after the other, + used to delay if they block many request at the same time*/ + open var sequentialMainPage : Boolean = false + /** in milliseconds, this can be used to add more delay between homepage requests + * on first load if sequentialMainPage is turned on */ + open var sequentialMainPageDelay : Long = 0L + /** in milliseconds, this can be used to add more delay between homepage requests when scrolling */ + open var sequentialMainPageScrollDelay : Long = 0L + /** used to keep track when last homepage request was in unixtime ms */ + var lastHomepageRequest : Long = 0L open var lang = "en" // ISO_639_1 check SubtitleHelper diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/APIRepository.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/APIRepository.kt index 34cb262c..b43b1434 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/APIRepository.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/APIRepository.kt @@ -1,10 +1,12 @@ package com.lagradost.cloudstream3.ui import com.lagradost.cloudstream3.* +import com.lagradost.cloudstream3.APIHolder.unixTimeMS import com.lagradost.cloudstream3.mvvm.Resource import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.mvvm.safeApiCall import com.lagradost.cloudstream3.utils.ExtractorLink +import kotlinx.coroutines.delay class APIRepository(val api: MainAPI) { companion object { @@ -62,12 +64,33 @@ class APIRepository(val api: MainAPI) { } } + suspend fun waitForHomeDelay() { + val delta = api.sequentialMainPageScrollDelay + api.lastHomepageRequest - unixTimeMS + if(delta < 0) return + delay(delta) + } + suspend fun getMainPage(page: Int, nameIndex: Int? = null): Resource> { return safeApiCall { + api.lastHomepageRequest = unixTimeMS + nameIndex?.let { api.mainPage.getOrNull(it) }?.let { data -> listOf(api.getMainPage(page, MainPageRequest(data.name, data.data))) - } ?: api.mainPage.apmap { data -> - api.getMainPage(page, MainPageRequest(data.name, data.data)) + } ?: run { + if (api.sequentialMainPage) { + var first = true + api.mainPage.map { data -> + if (!first) // dont want to sleep on first request + delay(api.sequentialMainPageDelay) + first = false + + api.getMainPage(page, MainPageRequest(data.name, data.data)) + } + } else { + api.mainPage.apmap { data -> + api.getMainPage(page, MainPageRequest(data.name, data.data)) + } + } } } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeViewModel.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeViewModel.kt index d8497876..30fd45c1 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeViewModel.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeViewModel.kt @@ -162,6 +162,8 @@ class HomeViewModel : ViewModel() { lock += name repo?.apply { + waitForHomeDelay() + expandable[name]?.let { current -> debugAssert({ !current.hasNext }) { "Expand called when not needed" From e2118c3271ef29dd7f1ebe3b30eea3fb12c60bf0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samet=20Mert=20Karata=C5=9F?= <107170849+samertkaratas@users.noreply.github.com> Date: Sun, 9 Oct 2022 00:35:19 +0000 Subject: [PATCH 2/6] Update Turkish translation (#143) * Update strings.xml and array.xml * Fix escape characters * Little changes --- app/src/main/res/values-tr/array.xml | 46 ++++++++++- app/src/main/res/values-tr/strings.xml | 105 ++++++++++++++++++++++++- 2 files changed, 145 insertions(+), 6 deletions(-) diff --git a/app/src/main/res/values-tr/array.xml b/app/src/main/res/values-tr/array.xml index 177be03b..dca01736 100644 --- a/app/src/main/res/values-tr/array.xml +++ b/app/src/main/res/values-tr/array.xml @@ -14,6 +14,41 @@ @id/cast_button_type_forward_30_seconds + + @string/none + Google + Cloudflare + + AdGuard + DNS.WATCH + Quad9 + + + 0 + 1 + 2 + + 4 + 5 + 6 + + + + @string/player_settings_play_in_app + @string/player_settings_play_in_vlc + @string/player_settings_play_in_mpv + @string/player_settings_play_in_web + @string/player_settings_play_in_browser + + + + 1 + 2 + 5 + 4 + 3 + + @string/resolution_and_title @string/title @@ -210,7 +245,7 @@ Parti Pembe Material You - Material You (Secondary) + Material You (İkincil) Normal @@ -233,7 +268,6 @@ Monet2 - Koyu Gri @@ -249,6 +283,14 @@ Monet + + Çöktü + + Ok + Yavaş + Beta + + @string/automatic diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 48e36013..54b9ebea 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -1,6 +1,16 @@ + %d %s | %s + %s • %s + %s / %s + %s %s + +%d + -%d + %d + %d + %.1f/10.0 + %d %s Ep %d Cast: %s Bölüm %d şu tarihte yayınlanacak: @@ -14,7 +24,9 @@ Episode Poster Main Poster Next Random + @string/play_episode Go back + @string/home_change_provider_img_des Change Provider Preview Background @@ -38,6 +50,7 @@ Veri yok Daha fazla seçenek Sonraki bölüm + @string/synopsis Türler Paylaş Tarayıcıda aç @@ -70,6 +83,7 @@ İndirme başarısız oldu İndirme iptal edildi İndirme bitti + %s - %s Yayınla Bağlantılar yüklenirken hata oluştu @@ -149,11 +163,15 @@ Chromecast alt yazı ayarları Eigengravy modu - Oynatıcıya bir hız seçeneği ekler + Oynatıcıya bir hız seçeneği ekle Gözlemek için kaydır Zamanı ayarlamak için sağa veya sola kaydır Ayarları değiştirmek için kaydır Sol ve sağ taraftan kaydırarak parlaklık ve sesi ayarla + + Sonraki bölümü otomatik oynat + Mevcut bölüm bittiğinde sonraki bölüme başla + Gözlemek için çift tıkla Durdurmak için çift tıkla Oynatıcı gözleme miktarı @@ -177,16 +195,18 @@ Ara Hesaplar Güncellemeler ve yedek - + Bilgi Gelişmiş arama - Sağlayıcılara göre ayrılmış arama sonuçlarını verir + Sağlayıcılara göre ayrılmış arama sonuçlarını ver Yalnızca çökmelerle ilgili verileri gönderir Hiç veri göndermez Anime için filler bölümleri gösterir Fragmanları göster Kitsu\'dan posterleri göster + Arama sonuçlarında seçilen video kalitelerini gizle + Otomatik eklenti güncellemeleri Uygulama güncellemelerini göster Başlangıçta yeni güncellemeleri otomatik olarak ara Ön sürümlere güncelle @@ -208,15 +228,19 @@ Üzgünüz, uygulama çöktü. Geliştiricilere isimsiz bir hata raporu gönderilecek Sezon + %s %d%s Sezon yok Bölüm Bölümler + %d-%d + %d %s S B Bölüm bulunamadı Dosyayı sil Sil + @string/sort_cancel Durdur Sürdür -30 @@ -251,6 +275,8 @@ OVA Asya dramaları Canlı yayınlar + NSFW + Diğerleri Film @@ -262,6 +288,8 @@ Belgesel Asya draması Canlı yayın + NSFW + Video Kaynak hatası Sunucu hatası @@ -272,7 +300,7 @@ Bölümü Chromecast ile yayınla Bağlantıyı Chromecast ile yayınla Uygulamada oynat - %s\'de oynat + %s\'de\/da oynat Tarayıcıda oynat Linki kopyala Otomatik indir @@ -284,6 +312,10 @@ Dublaj etiketi Alt yazı etiketi Başlık + show_hd_key + show_dub_key + show_sub_key + show_title_key Poster üzerindeki öğeler Güncelleme bulunamadı @@ -327,6 +359,7 @@ Yakınlaştır Disclaimer + legal_notice_key Any legal issues regarding the content on this application should be taken up with the actual file hosts and providers themselves as we are not affiliated with them. @@ -349,7 +382,9 @@ Sağlayıcı dilleri Uygulama düzeni Tercih edilen medya + Desteklenen sağlayıcılarda NSFW\'yi etkinleştir Alt yazı kodlaması + Sağlayıcılar Düzen Otomatik @@ -364,6 +399,10 @@ + anilist_key + mal_key + opensubtitles_key + nginx_key şifre123 HavalıKullanıcıAdı hello@world.com @@ -403,6 +442,7 @@ Hepsi Maksimum Minimum + @string/none Dış hat Çökmüş Gölge @@ -464,6 +504,7 @@ Hata Alt yazılardan seçmeli alt yazıyı kaldır Alt yazılardaki şişkinliği kaldır + Tercih edilen medya diline göre filtrele Ekstralar Fragman Yayına bağlan @@ -476,5 +517,61 @@ Çökme raporları Ne izlemek istiyorsunuz? Bitti + Eklentiler + Depo ekle + Depo ismi + Depo URL\'i + Eklenti yüklendi + Eklenti silindi + %s yüklenemedi + +18 + %d %s indirilmeye başlandı + %d %s başarıyla indirildi + %s\'nin tamamı zaten indirildi + Toplu indir + eklenti + eklentiler + Bu aynı zamanda tüm depo eklentilerini de siler + Depoyu sil + Kullanmak istediğiniz sitelerin listesini indirin + İndirilen: %d + Devre dışı: %d + İndirilmeyen: %d + %d eklenti(ler) güncellendi + Site eklentilerini yüklemek için bir depo ekleyin + Topluluk depolarını görüntüle + Herkese açık liste + Tüm alt yazılar büyük harf + + Bu depodaki tüm eklentiler indirilsin mi? + %s devre dışı bırakıldı + Parçalar + Ses parçaları + Video parçaları + Yeniden başlatmada uygula + + Güvenli mod etkin + Kurtarılamaz bir çökme meydana geldi ve soruna neden olan eklentiyi bulup kaldırabilmeniz için tüm eklentileri otomatik olarak devre dışı bıraktık. + Çökme bilgisini göster + + Puan: %s + Açıklama + Versiyon + Durum + Boyut + Geliştiriciler + Desteklenen + Dil + Önce eklentiyi yükleyin + + HLS Oynatma Listesi + + Tercih edilen video oynatıcısı + Dahili oynatıcı + VLC + MPV + Web Video Yayını + Tarayıcı + Uygulama bulunamadı From b3ff3ec086f2fd7aa62d545da06218f64c65a732 Mon Sep 17 00:00:00 2001 From: Thanasis Trispiotis <79643637+thanasistrisp@users.noreply.github.com> Date: Mon, 10 Oct 2022 22:42:59 +0300 Subject: [PATCH 3/6] update strings.xml Greek (#145) * update strings.xml Add new translations to greek language (el) and fix typos. * remove duplicate --- app/src/main/res/values-el/strings.xml | 401 +++++++++++++++++++++---- 1 file changed, 348 insertions(+), 53 deletions(-) diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index de9ac4f4..11b74938 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -5,39 +5,39 @@ Αναζήτηση Λήψεις Ρυθμίσεις - Ψάξε… + Άνοιγμα με CloudStream + Αναζήτηση… Πόστερ Χωρίς δεδομένα Περισσότερες Επιλογές Πίσω - Επόμενο Επισόδειο + Επόμενο Επεισόδιο Πόστερ - Πλοκή - Genres - Μοίρασε + Κατηγορίες + Κοινοποίηση Άνοιγμα στον περιηγητή - Προσπέραση φορτώματος + Παράλειψη φόρτωσης Φόρτωση… - Watching - On-Hold - Completed - Dropped - Plan to Watch - None + Παρακολούθηση + Σε αναμονή + Ολοκληρώθηκε + Διακόπηκε + Για παρακολούθηση + Τίποτα - Αναπαραγωγή Ταινείας + Αναπαραγωγή Ταινίας Μετάδοση Torrent Πηγές Υπότιτλοι - Ξανά φόρτωσε… + Προσπάθεια επανασύνδεσης… Πίσω Πόστερ - Αναπαραγωγή Επισοδείου - - Λήξη - Σφάλμα φόρτωσεις συνδέσμων - Εσωτερικός χώρος + Αναπαραγωγή Επεισοδίου + + Λήψη + Σφάλμα φόρτωσης συνδέσμων + Εσωτερικός χώρος αποθήκευσης Dub @@ -50,77 +50,372 @@ Λυπούμαστε, η εφαρμογή κατέρρευσε. Μια ανώνυμη αναφορά σφαλμάτων θα σταλεί στους προγραμματιστές Απενεργοποιήστε την αυτόματη αναφορά σφαλμάτων + Εμφάνιση logcat 🐈 Παραπάνω πληροφορίες - Κρύψιμο + Απόκρυψη Κύριο Πόστερ Αναπαραγωγή Πληροφορίες Next Random - Change Provider - Filter Bookmarks - Bookmarks - Remove - Αναπαραγωγή Episode + Αλλαγή Παρόχου + Φιλτράρισμα Σελιδοδεικτών + Σελιδοδείκτες + Αφαίρεση + Αναπαραγωγή Επεισοδίου Υποβολή Ακύρωση Ταχύτητα αναπαραγωγής Ρυθμίσεις υπότιτλων - Χρώμα κείμενου + Χρώμα κειμένου Χρώμα περιγράμματος Χρώμα φόντου Χρώμα παραθύρου Τύπος άκρων Ύψωση υπότιτλων - Επαναφορά στην προεπιλεγμένη τιμή + Επαναφορά στις προεπιλεγμένες τιμές Προεπισκόπηση φόντου Γραμματοσειρά - Αναζήτηση με τους παρόχους - Αναζήτηση με τύπους - %d Benenes given to devs - No Benenes given + Αναζήτηση βάσει παρόχων + Αναζήτηση βάσει τύπων + %d μπανάνες δόθηκαν στους προγραμματιστές + Καμία μπανάνα δεν δόθηκε Αυτόματη επιλογή γλώσσας Λήψη γλωσσών - Κρατήστε πατημένο για επαναφορά στα προεπιλεγμένα + Κρατήστε πατημένο για επαναφορά στις προεπιλεγμένες τιμές Συνέχεια Παρακολούθησης Αφαίρεση - Παραπάνω Πληροφορίες + Επιπλέον Πληροφορίες - A VPN might be needed for this provider to work correctly - This providers is a torrent, a VPN is recommended + Η χρήση ενός VPN ίσως χρειαστεί για την ομαλή λειτουργία του τρέχοντος παρόχου + Πρόκειται για torrent, η χρήση ενός VPN συνιστάται Περιγραφή Δεν βρέθηκε περιγραφή Δεν βρέθηκε περιγραφή - Picture-in-picture - Συνεχίζει την αναπαραγωγή σε ένα μίνι παίκτη πάνω από άλλες εφαρμογές - Αλλαγή μεγέθους παίκτη + Εικόνα-σε-Εικόνα + Συνεχίζει την αναπαραγωγή σε ένα μίνι παράθυρο πάνω από άλλες εφαρμογές + Αλλαγή μεγέθους παραθύρου Αφαίρεση μαύρων περιγραμμάτων Υπότιτλοι - Ρυθμίσεις υποτίτλων του παίκτη + Ρυθμίσεις υποτίτλων του προγράμματος αναπαραγωγής + Chromecast Υπότιτλοι + Ρυθμίσεις Chromecast υποτίτλων Eigengrau Mode - Προσθέτει την επιλογή ταχύτητας στον παίκτη - Σύρετε για seek - Σύρετε αριστερά ή δεξιά για να ελέγξετε τον χρόνο στον παίκτη + Προσθέτει την επιλογή ταχύτητας στο πρόγραμμα αναπαραγωγής + Σύρετε για αναζήτηση + Σύρετε αριστερά ή δεξιά για να ελέγξετε τον χρόνο στην κάτω μπάρα Σύρετε για να αλλάξετε ρυθμίσεις Σύρετε αριστερά ή δεξιά για να αλλάξετε τη φωτεινότητα ή την ένταση - Διπλό πάτημα για seek - Διπλό πάτημα στα αριστερά ή δεξιά για seek μπροστά ή πίσω + Διπλό πάτημα για αναζήτηση + Διπλό πάτημα στα αριστερά ή δεξιά για αναζήτηση μπροστά ή πίσω Αναζήτηση - Πληροφορείες + Πληροφορίες Προχωρημένη Αναζήτηση - Δίνει τα αποτελέσματα αναζήτησης χωρισμένα ανά πάροχο + Δίνει τα αποτελέσματα αναζήτησης ταξινομημένα ανά πάροχο Αποστέλλει δεδομένα μόνο για σφάλματα Δεν στέλνει δεδομένα Εμφάνιση ενημερώσεων Αυτόματη αναζήτηση νέων ενημερώσεων - Ενημέρωση σε προ-εκδόσεις - Αναζητήστε ενημερώσεις προ-εκδόσεων αντί για κανονικές εκδόσεις + Ενημέρωση σε προ-εκδόσεις (beta) + Αναζητήστε ενημερώσεις προ-εκδόσεων (beta) αντί για σταθερές εκδόσεις Github - Light novel app by the same devs - Anime app by the same devs - Join Discord - Δώσε benene στους devs - Βenene δώθηκε + Ελαφριά novel εφαρμογή από τους ίδιους προγραμματιστές + Anime εφαρμογή από τους ίδιους προγραμματιστές + Εγγραφείτε στο Discord + Δώστε μπανάνα στους προγραμματιστές + Μπανάνα δόθηκε δώθηκε + + Ταχύτητα (%.2fx) + Βαθμολογία: %.1f + Νέα ενημέρωση διαθέσιμη!\n%s -> %s + + Πάτημα στη μέση για παύση + Χρήση φωτεινότητας συστήματος + Χρήση φωτεινότητας συστήματος στο ενσωματωμένο πρόγραμμα αναπαραγωγής αντί να εφαρμοστεί το προεπιλεγμένο σκούρο επικάλυμμα + + + Ενημέρωση προόδου παρακολούθησης + Αυτόματος συγχρονισμός της προόδου του τρέχοντος επεισοδίου + + Επαναφορά δεδομένων από αντίγραφο ασφαλείας + + Αντίγραφα ασφαλείας + Τα αντίγραφα ασφαλείας φορτώθηκαν + Η επαναφορά αντιγράφων ασφαλαείας απέτυχε από το αρχείο %s + Επιτυχής αποθήκευση δεδομένων + Δεν έχει δοθεί άδεια για πρόσβαση στον αποθηκευτικό χώρο, προσπαθήστε ξανά + Σφάλμα δημιουργίας αντιγράφων ασφαλείας %s + + Λογαριασμοί + Ενημερώσεις και αντίγραφα ασφαλείας + + Εμφάνιση filler επεισοδίου για anime + Εμφάνιση trailers + Εμφάνιση posters από kitsu + Απόκρυψη επιλεγμένης ποιότητας βίντεο στα αποτελέσματα αναζήτησης + + App Language + + Αυτός ο πάροχος δεν έχει υποστήριξη Chromecast + Δεν βρέθηκαν διαθέσιμοι σύνδεσμοι + Ο σύνδεσμος αντιγράφηκε στο πρόχειρο + + Season + %s %d%s + No Season + Episode + Episodes + %d-%d + %d %s + S + E + No Episodes found + + Διαγραφή αρχείου + Διαγραφή + Πάυση + Συνέχιση + Αυτό θα διαγράψει μόνιμα το %s\nΕπιβεβαίωση; + %dm\nαπομένουν + + Σε εξέλιξη + Κατάσταση + Έτος + Διάρκεια + Ιστότοπος + Περίληψη + + προστέθηκε στην ουρά + Δεν υπάρχουν διαθέσιμοι υπότιτλοι + Προεπιλεγμένοι υπότιτλοι + + Ελέυθερος + Σε χρήση + Εφαρμογή + + Ταινίες + Τηλεοπτικές Σειρές + Κινούμενα σχέδια + Torrents + Ντοκιμαντέρ + Ασιατικά Δράμα + Ζωντανές ροές + Άλλα + + Ταινία + Σειρά + Cartoon + Ντοκιμαντέρ + Ασιατικό Δράμα + Ζωντανή ροή + Άλλο + + Σφάλμα πηγής + Απομακρυσμένο σφάλμα + Σφάλμα απόδοσης + Μη αναμενόμενο σφάλμα αναπαραγωγής + Σφάλμα λήψης, επιβεβαιώστε ότι η άδεια αποθήκευσης είναι ενεργοποιημένη + + Chromecast επεισόδο + Αναπαραγωγή εντός της εφαρμογής + Αναπαραγωγή σε %s + Αναπαραγωγή στον περιηγητή + Αντιγραφή συνδέσμου + Αυτόματη λήψη + Λήψη mirror + Επαναφόρτωση συνδέσμων + Λήψη υποτίτλων + + Ποιότητα + Dub + Sub + Τίτλος + Εναλλαγή των στοιχείων UI στο poster + + Κλείδωμα + Αλλαγή μεγέθους + Πηγή + Παράλειψη OP + + Να μην εμφανιστεί ξανά + Παράλειψη της τρέχουσας ενημέρωσης + Ενημέρωση + Προτίμηση ποιότητας παρακολούθησης + Μέγιστοι χαρακτήρες για τίτλο + Ανάλυση αναπαραγωγής βίντεο + + Μέγεθος buffer βίντεο + Μήκος buffer βίντεο + Προσωρινή μνήμη βίντεο στο δίσκο + Εκκαθάριση προσωρινής μνήμης βίντεο και εικόνων + + Θα προκαλέσει τυχαία σφάλματα εάν οριστεί πολύ ψηλά. Μην το αλλάξετε εάν έχετε χαμηλή ποσότητα μνήμης ram, όπως σε Android TV ή παλιό τηλέφωνο + Μπορεί να προκαλέσει προβλήματα σε συστήματα με χαμηλό αποθηκευτικό χώρο, όπως σε συσκευές Android TV, εάν τον ρυθμίσετε πολύ ψηλά + + Χρήσιμο για παράκαμψη μπλοκ ISP + + Αντίγραφο ιστοτόπου + Αφαίρεση ιστοτόπου + Προσθήκη αντιγράφου ενός υπάρχοντος ιστοτόπου, με έναν διαφορετικό σύνδεσμο + + Διαδρομή λήψης + + Εμφάνιση Dubbed/Subbed Anime + + Προσαρμογή στην οθόνη + Τέντωμα + Μεγέθυνση + + Αποποίηση ευθυνών + + Γενικά + Τυχαίο κουμπί + Εμφάνιση τυχαίου κουμπιού στην Αρχική οθόνη + Γλώσσες παρόχων + Διάταξη εφαρμογής + Προτιμώμενα μέσα + Ενεργοποίηση NSFW σε υποστηριζόμενους παρόχους + Κωδικοποίηση υποτίτλων + Πάροχοι + Διάταξη + + Αυτόματο + Διάταξη TV + Διάταξη τηλεφώνου + Διάταξη emulator + + Πρωτεύον χρώμα + Θέμα εφαρμογής + Τοποθεσία τίτλου Poster + Τοποθετήστε τον τίτλο κάτω από το poster + + Κωδικός γλώσσας (el) + + Λογαριασμός + Αποσύνδεση + Σύνδεση + Εναλλαγή λογαριασμού + Προσθήκη λογαριασμού + Δημιουργία λογαριασμού + Προσθήκη παρακολούθησης + Προστέθηκε %s + Συγχρονισμός + Βαθμολογήθηκε + Πιστοποιήθηκε %s + Αποτυχία πιστοποίησης σε %s + + Τίποτα + Κανονικά + Όλα + Μέγιστο + Ελάχιστο + Περίγραμμα + Σε κατάθλιψη + Σκιά + Ανεβασμένοι + Συγχρονισμός υποτίτλων + 1000ms + Καθυστέρηση υποτίτλων + Χρησιμοποιήστε αυτό αν οι υπότιτλοι εμφανίζονται %dms πολύ νωρίς + Χρησιμοποιήστε αυτό αν οι υπότιτλοι εμφανίζονται %dms πολύ αργά + Καμία καθυστέρηση υποτίτλων + + Συνιστώμενο + Φόρτωση %s + Φόρτωση από αρχείο + Φόρτωση από το Ίντερνετ + Λήψη αρχείου + Κύριο + Υποστηρίζεται + Φόντο + + Πηγή + Τυχαίο + + Έρχεται σύντομα… + + + Εικόνα Poster + Πρόγραμμα αναπαραγωγής + Ανάλυση και τίτλος + Τίτλος + Ανάλυση + Μη έγκυρο id + Μη έγκυρα δεδομένα + Μη έγκυρος σύνδεσμος + Σφάλμα + Αφαίρεση closed captions (για άτομα με προβλήματα ακοής) από τους υπότιτλους + Αφαίρεση bloat από τους υπότιτλους + Φιλτράρισμα ανά την προτεινόμενη γλώσσα του μέσου + Έξτρα + Τρέιλερ + Σύνδεσμος για stream + Παραπομπή + Επόμενο + Παρακολούθηση βίντεο σε αυτή την γλώσσα + Προηγούμενο + Παράλειψη διαμόρφωσης + Αλλαγή της εμφάνισης της συσκευής για να ταιριάζει με την συσκευή σας + Αναφορά κατάρρευσης + Τι θα θέλατε να δείτε + Έγινε + Πρόσθετα + Προσθήκη αποθετηρίου + Όνομα αποθετηρίου + Σύνδεσμος αποθετηρίου + Το πρόσθετο φορτώθηκε + Το πρόσθετο διαγράφηκε + Απέτυχε να φορτωθεί το %s + Ξεκίνησε η λήψη %d %s + Κατέβηκε το %d %s επιτυχώς + Όλα τα %s έχουν ήδη κατέβει + Μαζική λήψη + Πρόσθετο + Πρόσθετα + Αυτό θα διαγράψει όλα τα πρόσθετα του αποθετηρίου + Διαγραφή αποθετηρίου + Λήψη της λίστας των ιστοσελίδων που θέλετε να δείτε + Κατέβηκε: %d + Απενεργοποιήθηκε: %d + Δεν κατέβηκε: %d + Ενημερώθηκαν %d πρόσθετα + Προσθήκη ενός αποθετηρίου για να εγκαταστήσετε πρόσθετα ιστοσελίδας + Προβολή αποθετηρίων κοινότητας + Δημόσια λίστα + Κεφαλοποίηση υποτίτλων + + Λήψη όλων των προσθέτων από αυτό το αποθετήριο; + %s (Απενεργοποιήθηκε) + Κομμάτια + Ηχητικά κομμάτια + Κομμάτια βίντεο + Εφαρμογή στην επανεκκίνηση + + Η ασφαλής λειτουργία ενεργοποιήθηκε + Ένα μη αντιστρέψιμο σφάλμα συνέβη και απενεργοποιήσαμε όλα τα πρόσθετα, ώστε να μπορέσετε να διαπιστώσετε ποιο πρόσθετο προκάλεσε αυτή τη κατάρρευση. + Προβολή πληροφορίας κατάρρευσης + + Βαθμολογία: %s + Περιγραφή + Έκδοση + Κατάσταση + Μέγεθος + Συγγραφείς + Υποστηρίζονται + Γλώσσα + Εγκατάσταση προσθέτου πρώτα + + HLS Playlist + + Προτεινόμενο πρόγραμμα αναπαραγωγής + Ενσωματωμένο πρόγραμμα αναπαραγωγής + VLC + MPV + Web Video Cast + Περιηγητής + Η εφαρμογή δεν βρέθηκε + + From 98ef6a3f160d73f66095643892858a24f4ed43ce Mon Sep 17 00:00:00 2001 From: Hexated <37908684+hexated@users.noreply.github.com> Date: Tue, 11 Oct 2022 02:43:56 +0700 Subject: [PATCH 4/6] added Vidmoly & Voe (extractor) (#147) --- .../cloudstream3/extractors/Vidmoly.kt | 69 +++++++++++++++++++ .../lagradost/cloudstream3/extractors/Voe.kt | 32 +++++++++ .../cloudstream3/utils/ExtractorApi.kt | 30 ++++++-- 3 files changed, 127 insertions(+), 4 deletions(-) create mode 100644 app/src/main/java/com/lagradost/cloudstream3/extractors/Vidmoly.kt create mode 100644 app/src/main/java/com/lagradost/cloudstream3/extractors/Voe.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Vidmoly.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Vidmoly.kt new file mode 100644 index 00000000..615cfd74 --- /dev/null +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Vidmoly.kt @@ -0,0 +1,69 @@ +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.utils.* +import com.lagradost.cloudstream3.utils.AppUtils.tryParseJson + +class Vidmolyme : Vidmoly() { + override val mainUrl = "https://vidmoly.me" +} + +open class Vidmoly : ExtractorApi() { + override val name = "Vidmoly" + override val mainUrl = "https://vidmoly.to" + override val requiresReferer = true + + private fun String.addMarks(str: String): String { + return this.replace(Regex("\"?$str\"?"), "\"$str\"") + } + + override suspend fun getUrl( + url: String, + referer: String?, + subtitleCallback: (SubtitleFile) -> Unit, + callback: (ExtractorLink) -> Unit + ) { + + val script = app.get( + url, + referer = referer, + ).document.select("script") + .find { it.data().contains("sources:") }?.data() + val videoData = script?.substringAfter("sources: [") + ?.substringBefore("],")?.addMarks("file") + val subData = script?.substringAfter("tracks: [")?.substringBefore("]")?.addMarks("file") + ?.addMarks("label")?.addMarks("kind") + + tryParseJson(videoData)?.file?.let { m3uLink -> + M3u8Helper.generateM3u8( + name, + m3uLink, + "$mainUrl/" + ).forEach(callback) + } + + tryParseJson>("[${subData}]") + ?.filter { it.kind == "captions" }?.map { + subtitleCallback.invoke( + SubtitleFile( + it.label.toString(), + fixUrl(it.file.toString()) + ) + ) + } + + } + + private data class Source( + @JsonProperty("file") val file: String? = null, + ) + + private data class SubSource( + @JsonProperty("file") val file: String? = null, + @JsonProperty("label") val label: String? = null, + @JsonProperty("kind") val kind: String? = null, + ) + +} \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Voe.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Voe.kt new file mode 100644 index 00000000..12a76a9b --- /dev/null +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Voe.kt @@ -0,0 +1,32 @@ +package com.lagradost.cloudstream3.extractors + +import com.lagradost.cloudstream3.SubtitleFile +import com.lagradost.cloudstream3.app +import com.lagradost.cloudstream3.utils.ExtractorApi +import com.lagradost.cloudstream3.utils.ExtractorLink +import com.lagradost.cloudstream3.utils.M3u8Helper + +open class Voe : ExtractorApi() { + override val name = "Voe" + override val mainUrl = "https://voe.sx" + override val requiresReferer = true + + override suspend fun getUrl( + url: String, + referer: String?, + subtitleCallback: (SubtitleFile) -> Unit, + callback: (ExtractorLink) -> Unit + ) { + val res = app.get(url, referer = referer).document + val link = res.select("script").find { it.data().contains("const sources") }?.data() + ?.substringAfter("\"hls\": \"")?.substringBefore("\",") + + M3u8Helper.generateM3u8( + name, + link ?: return, + "$mainUrl/", + headers = mapOf("Origin" to "$mainUrl/") + ).forEach(callback) + + } +} \ 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 199f0398..ebaaa12b 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt @@ -1,10 +1,7 @@ package com.lagradost.cloudstream3.utils import android.net.Uri -import com.lagradost.cloudstream3.SubtitleFile -import com.lagradost.cloudstream3.TvType -import com.lagradost.cloudstream3.USER_AGENT -import com.lagradost.cloudstream3.app +import com.lagradost.cloudstream3.* import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.extractors.* import kotlinx.coroutines.delay @@ -323,6 +320,9 @@ val extractorApis: MutableList = arrayListOf( Embedgram(), Mvidoo(), Streamplay(), + Vidmoly(), + Vidmolyme(), + Voe(), Gdriveplayerapi(), Gdriveplayerapp(), @@ -399,6 +399,28 @@ suspend fun getPostForm(requestUrl: String, html: String): String? { ).text } +fun ExtractorApi.fixUrl(url: String): String { + if (url.startsWith("http") || + // Do not fix JSON objects when passed as urls. + url.startsWith("{\"") + ) { + return url + } + if (url.isEmpty()) { + return "" + } + + val startsWithNoHttp = url.startsWith("//") + if (startsWithNoHttp) { + return "https:$url" + } else { + if (url.startsWith('/')) { + return mainUrl + url + } + return "$mainUrl/$url" + } +} + abstract class ExtractorApi { abstract val name: String abstract val mainUrl: String From a43e950a488637873553d4a46f49a8bb80a86542 Mon Sep 17 00:00:00 2001 From: LagradOst <46196380+Blatzar@users.noreply.github.com> Date: Mon, 10 Oct 2022 21:51:03 +0200 Subject: [PATCH 5/6] Remove provider language (#141) --- .../com/lagradost/cloudstream3/MainAPI.kt | 30 ++++++++++++------- .../ui/setup/SetupFragmentExtensions.kt | 2 +- .../ui/setup/SetupFragmentLanguage.kt | 2 +- .../main/res/navigation/mobile_navigation.xml | 14 +++++++++ app/src/main/res/xml/settings_providers.xml | 1 + 5 files changed, 36 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt b/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt index 416a7238..a06dd95e 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt @@ -17,8 +17,7 @@ import com.lagradost.cloudstream3.ui.player.SubtitleData import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.isTvSettings import com.lagradost.cloudstream3.utils.AppUtils.toJson import com.lagradost.cloudstream3.utils.ExtractorLink -import com.lagradost.cloudstream3.utils.Qualities -import com.lagradost.cloudstream3.utils.loadExtractor +import com.lagradost.cloudstream3.utils.SubtitleHelper import okhttp3.Interceptor import java.text.SimpleDateFormat import java.util.* @@ -191,17 +190,26 @@ object APIHolder { return list.filter { names.contains(it) }.map { DubStatus.valueOf(it) }.toHashSet() } + /** + * Gets all the activated provider languages + * Used to obey the preference provider_lang_key + * but it turned out too complicated and unnecessary with extensions. + **/ fun Context.getApiProviderLangSettings(): HashSet { - val settingsManager = PreferenceManager.getDefaultSharedPreferences(this) - val hashSet = HashSet() - hashSet.add("en") // def is only en - val list = settingsManager.getStringSet( - this.getString(R.string.provider_lang_key), - hashSet.toMutableSet() - ) + val langs = apis.map { it.lang }.toSet() + .sortedBy { SubtitleHelper.fromTwoLettersToLanguage(it) } + return langs.toHashSet() - if (list.isNullOrEmpty()) return hashSet - return list.toHashSet() +// val settingsManager = PreferenceManager.getDefaultSharedPreferences(this) +// val hashSet = HashSet() +// hashSet.add("en") // def is only en +// val list = settingsManager.getStringSet( +// this.getString(R.string.provider_lang_key), +// hashSet.toMutableSet() +// ) +// +// if (list.isNullOrEmpty()) return hashSet +// return list.toHashSet() } fun Context.getApiTypeSettings(): HashSet { diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/setup/SetupFragmentExtensions.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/setup/SetupFragmentExtensions.kt index 43037038..0f11f214 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/setup/SetupFragmentExtensions.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/setup/SetupFragmentExtensions.kt @@ -100,7 +100,7 @@ class SetupFragmentExtensions : Fragment() { next_btt?.setOnClickListener { // Continue setup if (isSetup) - findNavController().navigate(R.id.action_navigation_setup_extensions_to_navigation_setup_provider_languages) + findNavController().navigate(R.id.action_navigation_setup_extensions_to_navigation_setup_media) else findNavController().navigate(R.id.navigation_home) } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/setup/SetupFragmentLanguage.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/setup/SetupFragmentLanguage.kt index 71472328..f9268d77 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/setup/SetupFragmentLanguage.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/setup/SetupFragmentLanguage.kt @@ -85,7 +85,7 @@ class SetupFragmentLanguage : Fragment() { && PluginManager.getPluginsLocal().isEmpty() //&& PREBUILT_REPOSITORIES.isNotEmpty() ) R.id.action_navigation_global_to_navigation_setup_extensions - else R.id.action_navigation_setup_language_to_navigation_setup_provider_languages + else R.id.action_navigation_setup_language_to_navigation_setup_media findNavController().navigate( nextDestination, diff --git a/app/src/main/res/navigation/mobile_navigation.xml b/app/src/main/res/navigation/mobile_navigation.xml index 3c45ee70..94d489fd 100644 --- a/app/src/main/res/navigation/mobile_navigation.xml +++ b/app/src/main/res/navigation/mobile_navigation.xml @@ -522,6 +522,13 @@ app:exitAnim="@anim/exit_anim" app:popEnterAnim="@anim/enter_anim" app:popExitAnim="@anim/exit_anim" /> + + From fc7e39e3ccd0a18ec2cf95a445d3f481a58b3473 Mon Sep 17 00:00:00 2001 From: SANCTI-afk <63229113+SANCTI-afk@users.noreply.github.com> Date: Mon, 10 Oct 2022 21:58:28 +0200 Subject: [PATCH 6/6] arabicLanguage (#118) * arabicLanguage100% * Update strings.xml * Arabic Full * translated(preffVplayerBtn) --- app/src/main/res/values-ar/strings.xml | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 3fb2e26c..edac2760 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -13,16 +13,16 @@ سرعة (%.2fx) - Rated: %.1f + تقييم: %.1f - !تم إيجاد تحديث جديد\n%s -> %s + !تم العثور علي تحديث جديد\n%s -> %s %d دقيقة CloudStream تشغيل بواسطة CloudStream الصفحة الرئيسية البحث - التحميلات + التنزيلات الإعدادات …بحث @@ -210,14 +210,14 @@ لا موسم حلقة حلقات - ح - م + م + ح لم يتم العثور على أي حلقات حذف الملف حذف إيقاف مؤقت - أكمل + إستئناف -٣٠ +٣٠ سوف يتم الحذف نهائيا %s\nهل أنت متأكد? @@ -292,7 +292,7 @@ show_title_key التحكم في عناصر الواجهة علي الملصق - لم يتم العثور على تحديث + لم يتم العثور على تحديثات تحقق من التحديثات قفل @@ -404,7 +404,7 @@ إضافة تتبع تم إضافة %s مزامنة - مقيّم + تقييم %d / 10 /?? /%d @@ -538,4 +538,5 @@ اللغة قائمة HLS + مُشغل الفيديو المفضل