diff --git a/.github/workflows/issue_action.yml b/.github/workflows/issue_action.yml
index a81c4b42..28b737b3 100644
--- a/.github/workflows/issue_action.yml
+++ b/.github/workflows/issue_action.yml
@@ -41,7 +41,7 @@ jobs:
wget --output-document check_issue.py "https://raw.githubusercontent.com/recloudstream/.github/master/.github/check_issue.py"
pip3 install httpx
RES="$(python3 ./check_issue.py)"
- echo "::set-output name=name::${RES}"
+ echo "name=${RES}" >> $GITHUB_OUTPUT
- name: Comment if issue mentions a provider
if: steps.provider_check.outputs.name != 'none'
uses: actions-cool/issues-helper@v3
diff --git a/.github/workflows/prerelease.yml b/.github/workflows/prerelease.yml
index 37161d6b..4ce7dba1 100644
--- a/.github/workflows/prerelease.yml
+++ b/.github/workflows/prerelease.yml
@@ -40,7 +40,7 @@ jobs:
curl -H "Authorization: token ${{ steps.generate_token.outputs.token }}" -o "keystore_password.txt" "https://raw.githubusercontent.com/recloudstream/secrets/master/keystore_password.txt"
KEY_PWD="$(cat keystore_password.txt)"
echo "::add-mask::${KEY_PWD}"
- echo "::set-output name=key_pwd::$KEY_PWD"
+ echo "key_pwd=$KEY_PWD" >> $GITHUB_OUTPUT
- name: Run Gradle
run: |
./gradlew assemblePrerelease makeJar androidSourcesJar
@@ -56,6 +56,6 @@ jobs:
prerelease: true
title: "Pre-release Build"
files: |
- app/build/outputs/apk/prerelease/*.apk
+ app/build/outputs/apk/prerelease/release/*.apk
app/build/libs/app-sources.jar
app/build/classes.jar
diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml
index 1a4db134..36199cd6 100644
--- a/.github/workflows/pull_request.yml
+++ b/.github/workflows/pull_request.yml
@@ -15,9 +15,9 @@ jobs:
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Run Gradle
- run: ./gradlew assembleDebug
+ run: ./gradlew assemblePrereleaseDebug
- name: Upload Artifact
uses: actions/upload-artifact@v2
with:
name: pull-request-build
- path: "app/build/outputs/apk/debug/*.apk"
+ path: "app/build/outputs/apk/prerelease/debug/*.apk"
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
index 652d9f3f..333d4937 100644
--- a/.idea/jarRepositories.xml
+++ b/.idea/jarRepositories.xml
@@ -31,5 +31,10 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/README.md b/README.md
index e7221440..5e961c61 100644
--- a/README.md
+++ b/README.md
@@ -19,6 +19,7 @@
***The list of supported languages:***
* 🇱🇧 Arabic
+* 🇧🇬 Bulgarian
* 🇭🇷 Croatian
* 🇨🇿 Czech
* 🇳🇱 Dutch
diff --git a/app/build.gradle b/app/build.gradle
deleted file mode 100644
index 9df01079..00000000
--- a/app/build.gradle
+++ /dev/null
@@ -1,233 +0,0 @@
-plugins {
- id 'com.android.application'
- id 'kotlin-android'
- id 'kotlin-kapt'
- id 'kotlin-android-extensions'
- id 'org.jetbrains.dokka'
-}
-
-def tmpFilePath = System.getProperty("user.home") + "/work/_temp/keystore/"
-def allFilesFromDir = new File(tmpFilePath).listFiles()
-def prereleaseStoreFile = null
-if (allFilesFromDir != null) {
- prereleaseStoreFile = allFilesFromDir.first()
-}
-
-android {
- testOptions {
- unitTests.returnDefaultValues = true
- }
- signingConfigs {
- prerelease {
- if (prereleaseStoreFile != null) {
- storeFile = file(prereleaseStoreFile)
- storePassword System.getenv("SIGNING_STORE_PASSWORD")
- keyAlias System.getenv("SIGNING_KEY_ALIAS")
- keyPassword System.getenv("SIGNING_KEY_PASSWORD")
- }
- }
- }
- compileSdkVersion 31
- buildToolsVersion "30.0.3"
-
- defaultConfig {
- applicationId "com.lagradost.cloudstream3"
- minSdkVersion 21
- targetSdkVersion 30
-
- versionCode 52
- versionName "3.1.6"
-
- resValue "string", "app_version",
- "${defaultConfig.versionName}${versionNameSuffix ?: ""}"
-
- resValue "string", "commit_hash",
- ("git rev-parse --short HEAD".execute().text.trim() ?: "")
-
- resValue "bool", "is_prerelease", "false"
-
- buildConfigField("String", "BUILDDATE", "new java.text.SimpleDateFormat(\"yyyy-MM-dd HH:mm\").format(new java.util.Date(" + System.currentTimeMillis() + "L));")
-
- testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
-
- kapt {
- includeCompileClasspath = true
- }
- }
-
- buildTypes {
- // release {
- // debuggable false
- // minifyEnabled false
- // shrinkResources false
- // proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
- // resValue "bool", "is_prerelease", "false"
- // }
- prerelease {
- applicationIdSuffix ".prerelease"
- buildConfigField("boolean", "BETA", "true")
- signingConfig signingConfigs.prerelease
- versionNameSuffix '-PRE'
- debuggable false
- minifyEnabled false
- shrinkResources false
- proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
- resValue "bool", "is_prerelease", "true"
- }
- debug {
- debuggable true
- applicationIdSuffix ".debug"
- proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
- resValue "bool", "is_prerelease", "true"
- }
- }
- compileOptions {
- coreLibraryDesugaringEnabled true
-
- sourceCompatibility JavaVersion.VERSION_1_8
- targetCompatibility JavaVersion.VERSION_1_8
- }
- kotlinOptions {
- jvmTarget = '1.8'
- freeCompilerArgs = ['-Xjvm-default=compatibility']
- }
- lintOptions {
- checkReleaseBuilds false
- abortOnError false
- }
-}
-
-repositories {
- maven { url 'https://jitpack.io' }
-}
-
-dependencies {
- implementation 'com.google.android.mediahome:video:1.0.0'
- implementation 'androidx.test.ext:junit-ktx:1.1.3'
- testImplementation 'org.json:json:20180813'
-
- implementation 'androidx.core:core-ktx:1.8.0'
- implementation 'androidx.appcompat:appcompat:1.4.2' // need target 32 for 1.5.0
-
- // dont change this to 1.6.0 it looks ugly af
- implementation 'com.google.android.material:material:1.5.0'
- implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
- implementation 'androidx.navigation:navigation-fragment-ktx:2.5.1'
- implementation 'androidx.navigation:navigation-ui-ktx:2.5.1'
- implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.5.1'
- implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.1'
- testImplementation 'junit:junit:4.13.2'
- androidTestImplementation 'androidx.test.ext:junit:1.1.3'
- androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
-
- //implementation "io.karn:khttp-android:0.1.2" //okhttp instead
-// implementation 'org.jsoup:jsoup:1.13.1'
- implementation "com.fasterxml.jackson.module:jackson-module-kotlin:2.13.1"
-
- implementation "androidx.preference:preference-ktx:1.2.0"
-
- implementation 'com.github.bumptech.glide:glide:4.13.1'
- kapt 'com.github.bumptech.glide:compiler:4.13.1'
- implementation 'com.github.bumptech.glide:okhttp3-integration:4.13.0'
-
- implementation 'jp.wasabeef:glide-transformations:4.3.0'
-
- implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
-
- // implementation "androidx.leanback:leanback-paging:1.1.0-alpha09"
-
- // Exoplayer
- implementation 'com.google.android.exoplayer:exoplayer:2.16.1'
- implementation 'com.google.android.exoplayer:extension-cast:2.16.1'
- implementation "com.google.android.exoplayer:extension-mediasession:2.16.1"
- implementation 'com.google.android.exoplayer:extension-okhttp:2.16.1'
-
- //implementation "com.google.android.exoplayer:extension-leanback:2.14.0"
-
- // Bug reports
- implementation "ch.acra:acra-core:5.8.4"
- implementation "ch.acra:acra-toast:5.8.4"
-
- compileOnly "com.google.auto.service:auto-service-annotations:1.0"
- //either for java sources:
- annotationProcessor "com.google.auto.service:auto-service:1.0"
- //or for kotlin sources (requires kapt gradle plugin):
- kapt "com.google.auto.service:auto-service:1.0"
-
- // subtitle color picker
- implementation 'com.jaredrummler:colorpicker:1.1.0'
-
- //run JS
- implementation 'org.mozilla:rhino:1.7.14'
-
- // TorrentStream
- //implementation 'com.github.TorrentStream:TorrentStream-Android:2.7.0'
-
- // Downloading
- implementation "androidx.work:work-runtime:2.7.1"
- implementation "androidx.work:work-runtime-ktx:2.7.1"
-
- // Networking
-// implementation "com.squareup.okhttp3:okhttp:4.9.2"
-// implementation "com.squareup.okhttp3:okhttp-dnsoverhttps:4.9.1"
- implementation 'com.github.Blatzar:NiceHttp:0.3.3'
-
- // Util to skip the URI file fuckery 🙏
- implementation "com.github.tachiyomiorg:unifile:17bec43"
-
- // API because cba maintaining it myself
- implementation "com.uwetrottmann.tmdb2:tmdb-java:2.6.0"
-
- implementation 'com.github.discord:OverlappingPanels:0.1.3'
- // debugImplementation because LeakCanary should only run in debug builds.
- // debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.7'
-
- // for shimmer when loading
- implementation 'com.facebook.shimmer:shimmer:0.5.0'
-
- implementation "androidx.tvprovider:tvprovider:1.0.0"
-
- // used for subtitle decoding https://github.com/albfernandez/juniversalchardet
- implementation 'com.github.albfernandez:juniversalchardet:2.4.0'
-
- // slow af yt
- //implementation 'com.github.HaarigerHarald:android-youtubeExtractor:master-SNAPSHOT'
-
- // newpipe yt
- implementation 'com.github.TeamNewPipe:NewPipeExtractor:dev-SNAPSHOT'
- coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5'
-
- // Library/extensions searching with Levenshtein distance
- implementation 'me.xdrop:fuzzywuzzy:1.4.0'
-}
-
-task androidSourcesJar(type: Jar) {
- getArchiveClassifier().set('sources')
- from android.sourceSets.main.java.srcDirs//full sources
-}
-
-// this is used by the gradlew plugin
-task makeJar(type: Copy) {
- from('build/intermediates/compile_app_classes_jar/debug')
- into('build')
- include('classes.jar')
- dependsOn('build')
-}
-
-dokkaHtml {
- moduleName.set("Cloudstream")
- dokkaSourceSets {
- main {
- sourceLink {
- // Unix based directory relative path to the root of the project (where you execute gradle respectively).
- localDirectory.set(file("src/main/java"))
-
- // URL showing where the source code can be accessed through the web browser
- remoteUrl.set(new URL(
- "https://github.com/recloudstream/cloudstream/tree/master/app/src/main/java"))
- // Suffix which is used to append the line number to the URL. Use #L for GitHub
- remoteLineSuffix.set("#L")
- }
- }
- }
-}
\ No newline at end of file
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
new file mode 100644
index 00000000..42ca93fd
--- /dev/null
+++ b/app/build.gradle.kts
@@ -0,0 +1,250 @@
+import com.android.build.gradle.api.BaseVariantOutput
+import org.jetbrains.dokka.gradle.DokkaTask
+import java.io.ByteArrayOutputStream
+import java.net.URL
+
+plugins {
+ id("com.android.application")
+ id("kotlin-android")
+ id("kotlin-kapt")
+ id("kotlin-android-extensions")
+ id("org.jetbrains.dokka")
+}
+
+val tmpFilePath = System.getProperty("user.home") + "/work/_temp/keystore/"
+val prereleaseStoreFile: File? = File(tmpFilePath).listFiles()?.first()
+
+fun String.execute() = ByteArrayOutputStream().use { baot ->
+ if (project.exec {
+ workingDir = projectDir
+ commandLine = this@execute.split(Regex("\\s"))
+ standardOutput = baot
+ }.exitValue == 0)
+ String(baot.toByteArray()).trim()
+ else null
+}
+
+android {
+ testOptions {
+ unitTests.isReturnDefaultValues = true
+ }
+ signingConfigs {
+ create("prerelease") {
+ if (prereleaseStoreFile != null) {
+ storeFile = file(prereleaseStoreFile)
+ storePassword = System.getenv("SIGNING_STORE_PASSWORD")
+ keyAlias = System.getenv("SIGNING_KEY_ALIAS")
+ keyPassword = System.getenv("SIGNING_KEY_PASSWORD")
+ }
+ }
+ }
+
+ compileSdk = 31
+ buildToolsVersion = "30.0.3"
+
+ defaultConfig {
+ applicationId = "com.lagradost.cloudstream3"
+ minSdk = 21
+ targetSdk = 30
+
+ versionCode = 52
+ versionName = "3.1.6"
+
+ resValue("string", "app_version", "${defaultConfig.versionName}${versionNameSuffix ?: ""}")
+
+ resValue("string", "commit_hash", "git rev-parse --short HEAD".execute() ?: "")
+
+ resValue("bool", "is_prerelease", "false")
+
+ buildConfigField(
+ "String",
+ "BUILDDATE",
+ "new java.text.SimpleDateFormat(\"yyyy-MM-dd HH:mm\").format(new java.util.Date(" + System.currentTimeMillis() + "L));"
+ )
+
+ testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
+
+ kapt {
+ includeCompileClasspath = true
+ }
+ }
+
+ buildTypes {
+ release {
+ isDebuggable = false
+ isMinifyEnabled = false
+ isShrinkResources = false
+ proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
+ }
+ debug {
+ isDebuggable = true
+ applicationIdSuffix = ".debug"
+ proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
+ }
+ }
+ flavorDimensions.add("state")
+ productFlavors {
+ create("stable") {
+ dimension = "state"
+ resValue("bool", "is_prerelease", "false")
+ }
+ create("prerelease") {
+ dimension = "state"
+ resValue("bool", "is_prerelease", "true")
+ buildConfigField("boolean", "BETA", "true")
+ applicationIdSuffix = ".prerelease"
+ signingConfig = signingConfigs.getByName("prerelease")
+ versionNameSuffix = "-PRE"
+ versionCode = (System.currentTimeMillis() / 60000).toInt()
+ }
+ }
+ compileOptions {
+ isCoreLibraryDesugaringEnabled = true
+
+ sourceCompatibility = JavaVersion.VERSION_1_8
+ targetCompatibility = JavaVersion.VERSION_1_8
+ }
+ kotlinOptions {
+ jvmTarget = "1.8"
+ freeCompilerArgs = listOf("-Xjvm-default=compatibility")
+ }
+ lint {
+ abortOnError = false
+ checkReleaseBuilds = false
+ }
+ namespace = "com.lagradost.cloudstream3"
+}
+
+repositories {
+ maven("https://jitpack.io")
+}
+
+dependencies {
+ implementation("com.google.android.mediahome:video:1.0.0")
+ implementation("androidx.test.ext:junit-ktx:1.1.3")
+ testImplementation("org.json:json:20180813")
+
+ implementation("androidx.core:core-ktx:1.8.0")
+ implementation("androidx.appcompat:appcompat:1.4.2") // need target 32 for 1.5.0
+
+ // dont change this to 1.6.0 it looks ugly af
+ implementation("com.google.android.material:material:1.5.0")
+ implementation("androidx.constraintlayout:constraintlayout:2.1.4")
+ implementation("androidx.navigation:navigation-fragment-ktx:2.5.1")
+ implementation("androidx.navigation:navigation-ui-ktx:2.5.1")
+ implementation("androidx.lifecycle:lifecycle-livedata-ktx:2.5.1")
+ implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.1")
+ testImplementation("junit:junit:4.13.2")
+ androidTestImplementation("androidx.test.ext:junit:1.1.3")
+ androidTestImplementation("androidx.test.espresso:espresso-core:3.4.0")
+
+ //implementation("io.karn:khttp-android:0.1.2") //okhttp instead
+// implementation("org.jsoup:jsoup:1.13.1")
+ implementation("com.fasterxml.jackson.module:jackson-module-kotlin:2.13.1")
+
+ implementation("androidx.preference:preference-ktx:1.2.0")
+
+ implementation("com.github.bumptech.glide:glide:4.13.1")
+ kapt("com.github.bumptech.glide:compiler:4.13.1")
+ implementation("com.github.bumptech.glide:okhttp3-integration:4.13.0")
+
+ implementation("jp.wasabeef:glide-transformations:4.3.0")
+
+ implementation("androidx.swiperefreshlayout:swiperefreshlayout:1.1.0")
+
+ // implementation("androidx.leanback:leanback-paging:1.1.0-alpha09")
+
+ // Exoplayer
+ implementation("com.google.android.exoplayer:exoplayer:2.16.1")
+ implementation("com.google.android.exoplayer:extension-cast:2.16.1")
+ implementation("com.google.android.exoplayer:extension-mediasession:2.16.1")
+ implementation("com.google.android.exoplayer:extension-okhttp:2.16.1")
+
+ //implementation("com.google.android.exoplayer:extension-leanback:2.14.0")
+
+ // Bug reports
+ implementation("ch.acra:acra-core:5.8.4")
+ implementation("ch.acra:acra-toast:5.8.4")
+
+ compileOnly("com.google.auto.service:auto-service-annotations:1.0")
+ //either for java sources:
+ annotationProcessor("com.google.auto.service:auto-service:1.0")
+ //or for kotlin sources (requires kapt gradle plugin):
+ kapt("com.google.auto.service:auto-service:1.0")
+
+ // subtitle color picker
+ implementation("com.jaredrummler:colorpicker:1.1.0")
+
+ //run JS
+ implementation("org.mozilla:rhino:1.7.14")
+
+ // TorrentStream
+ //implementation("com.github.TorrentStream:TorrentStream-Android:2.7.0")
+
+ // Downloading
+ implementation("androidx.work:work-runtime:2.7.1")
+ implementation("androidx.work:work-runtime-ktx:2.7.1")
+
+ // Networking
+// implementation("com.squareup.okhttp3:okhttp:4.9.2")
+// implementation("com.squareup.okhttp3:okhttp-dnsoverhttps:4.9.1")
+ implementation("com.github.Blatzar:NiceHttp:0.3.3")
+
+ // Util to skip the URI file fuckery 🙏
+ implementation("com.github.tachiyomiorg:unifile:17bec43")
+
+ // API because cba maintaining it myself
+ implementation("com.uwetrottmann.tmdb2:tmdb-java:2.6.0")
+
+ implementation("com.github.discord:OverlappingPanels:0.1.3")
+ // debugImplementation because LeakCanary should only run in debug builds.
+ // debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.7'
+
+ // for shimmer when loading
+ implementation("com.facebook.shimmer:shimmer:0.5.0")
+
+ implementation("androidx.tvprovider:tvprovider:1.0.0")
+
+ // used for subtitle decoding https://github.com/albfernandez/juniversalchardet
+ implementation("com.github.albfernandez:juniversalchardet:2.4.0")
+
+ // slow af yt
+ //implementation("com.github.HaarigerHarald:android-youtubeExtractor:master-SNAPSHOT")
+
+ // newpipe yt
+ implementation("com.github.TeamNewPipe:NewPipeExtractor:dev-SNAPSHOT")
+ coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:1.1.5")
+
+ // Library/extensions searching with Levenshtein distance
+ implementation("me.xdrop:fuzzywuzzy:1.4.0")
+}
+
+tasks.register("androidSourcesJar", Jar::class) {
+ archiveClassifier.set("sources")
+ from(android.sourceSets.getByName("main").java.srcDirs) //full sources
+}
+
+// this is used by the gradlew plugin
+tasks.register("makeJar", Copy::class) {
+ from("build/intermediates/compile_app_classes_jar/prereleaseDebug")
+ into("build")
+ include("classes.jar")
+ dependsOn("build")
+}
+
+tasks.withType().configureEach {
+ moduleName.set("Cloudstream")
+ dokkaSourceSets {
+ named("main") {
+ sourceLink {
+ // Unix based directory relative path to the root of the project (where you execute gradle respectively).
+ localDirectory.set(file("src/main/java"))
+
+ // URL showing where the source code can be accessed through the web browser
+ remoteUrl.set(URL("https://github.com/recloudstream/cloudstream/tree/master/app/src/main/java"))
+ // Suffix which is used to append the line number to the URL. Use #L for GitHub
+ remoteLineSuffix.set("#L")
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro
index 481bb434..ff59496d 100644
--- a/app/proguard-rules.pro
+++ b/app/proguard-rules.pro
@@ -1,6 +1,6 @@
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
-# proguardFiles setting in build.gradle.
+# proguardFiles setting in build.gradle.kts.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d22e95c0..47676059 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -1,7 +1,6 @@
+ xmlns:tools="http://schemas.android.com/tools">
diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsGeneral.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsGeneral.kt
index 57074e74..8ea76cda 100644
--- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsGeneral.kt
+++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsGeneral.kt
@@ -79,6 +79,7 @@ val appLanguages = arrayListOf(
Triple("\uD83C\uDDEE\uD83C\uDDE9", "Indonesian", "in"),
Triple("", "Czech", "cs"),
Triple("", "Croatian", "hr"),
+ Triple("", "Bulgarian", "bg"),
).sortedBy { it.second } //ye, we go alphabetical, so ppl don't put their lang on top
class SettingsGeneral : PreferenceFragmentCompat() {
diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml
new file mode 100644
index 00000000..e32d3d93
--- /dev/null
+++ b/app/src/main/res/values-bg/strings.xml
@@ -0,0 +1,533 @@
+
+
+
+
+ %s еп. %d
+ Актьори: %s
+ Епизод %d ще бъде пуснат след
+ %DD %dh %dm
+ %dh %dm
+ %dm
+
+
+ Плакат
+ @string/result_poster_img_des
+ Плакат на епизод
+ Основен плакат
+ Следващ произволен
+ Върни се
+ Смяна на доставчика
+ Визуализация на фона
+
+
+ Скорост (%.2fx)
+ Оценка: %.1f
+ Намерена е нова актуализация!\n%s -> %s
+ Шаблон
+ %d мин
+
+ CloudStream
+ Пусни с CloudStream
+ Начало
+ Търсене
+ Изтегляния
+ Настройки
+
+ Търсене…
+ Търсете %s...
+
+ Няма данни
+ Още опций
+ Следващ епизод
+ Жанрове
+ Сподели
+ Отвори в браузъра
+ Пропусни зареждането
+ Зареждане…
+
+ Гледане
+ На изчакване
+ Завършено
+ Изпуснат
+ План за гледане
+ Нито един
+ Повторно гледане
+
+ Пускане на филм
+ Възпроизвеждане на живо
+ Поточно предаване на торент
+ Източници
+ субтитри
+ Повторен опит за свързване...
+ Върни се
+ Пусни епизод
+
+
+ Изтегли
+ Изтеглено
+ Изтегля се
+ Изтеглянето е на пауза
+ Изтеглянето започна
+ Изтеглянето се провали
+ Изтеглянето е отменено
+ Изтеглянето е завършено
+ Поток
+
+ Грешка при зареждане на връзки
+ Вътрешна памет
+
+ Дублаж
+ Субтитри
+
+ Изтрий файла
+ Възпроизвеждане на файл
+ Възобновете изтеглянето
+ Пауза на изтеглянето
+
+ Деактивирайте автоматичното докладване на грешки
+ Повече информация
+ Скрий
+ Пусни
+ Информация
+ Филтриране на отметки
+ Отметки
+ Премахване
+ Задайте статус на гледане
+ Приложи
+ Отказ
+ Копирай
+ Затвори
+ Изчисти
+ Запазване
+
+ Скорост на възпроизвеждане
+
+ Настройки на субтитрите
+ Цвят на текста
+ Цвят на контура
+ Цвят на фона
+ Цвят на прозореца
+ Тип ръб
+ Височина на субтитрите
+ Шрифт
+ Размер на шрифта
+
+ Търсене чрез доставчици
+ Търсене с помощта на типове
+
+ %d Банан/а даден/и на разработчиците
+ Не е/са даден/и Банан/и
+
+ Автоматичен избор на език
+ Изтегляне на езици
+ Език на субтитрите
+ Задръжте, за да нулирате по подразбиране
+ Импортирайте шрифтове, като ги поставите в %s
+ Продължете да гледате
+
+ Премахване
+ Повече информация
+ @string/home_play
+
+ Може да е необходим VPN, за да работи правилно този доставчик
+ Този доставчик е торент, препоръчва се VPN
+
+ Метаданните не се предоставят от сайта, зареждането на видео ще бъде неуспешно, ако не съществува на сайта.
+
+ Описание
+ Няма намерен съдържание
+ Няма намерено описание
+
+ Покажи logcat 🐈
+
+ Картина в картина
+ Продължава възпроизвеждането в миниатюрен плейър върху други приложения
+ Бутон за преоразмеряване на плейъра
+ Премахнете черните граници
+ Субтитри
+ Настройки на субтитрите на плейъра
+ Chromecast субтитри
+ Настройки за субтитри на Chromecast
+
+ Режим Eigengravy (промяна скорост на възпроизвеждане)
+ Добавя опция за скорост в плейъра
+ Плъзнете за преместване
+ Плъзнете наляво или надясно, за да контролирате времето във видеоплейъра
+ Плъзнете, за да промените настройките
+ Плъзнете наляво или надясно, за да промените яркостта или силата на звука
+
+ Автоматично пускане на следващ епизод
+ Започнете следващия епизод, когато текущият приключи
+
+ Докоснете двукратно за превъртане
+ Докоснете два пъти за пауза
+ Размер на превъртане
+ Докоснете два пъти от дясната или лявата страна, за да превъртите напред или назад
+ Докоснете в средата, за да направите пауза
+ Използвайте яркостта на системата
+ Използвайте системна яркост в плейъра на приложението вместо тъмно
+ наслагване
+
+ Актуализирайте прогреса на гледане
+ Автоматично синхронизирайте прогреса на текущия си епизод
+
+ Възстановете данните от архив
+
+ Архивиране на данни
+ Зареден архивен файл
+ Неуспешно възстановяване на данни от файл %s
+ Успешно съхранени данни
+ Липсват разрешения за съхранение, моля, опитайте отново
+ Грешка при архивирането на %s
+
+ Търсене
+ Акаунти
+ Актуализации и архивиране
+
+ Информация
+ Подробно търсене
+ Дава ви резултатите от търсенето, разделени по доставчик
+ Изпраща данни само за сривове
+ Не изпраща данни
+ Показване заместващ епизод за аниме
+ Показване на трейлъри
+ Покажете плакати от kitsu
+ Скриване на избраното видео качество в резултатите от търсенето
+
+ Автоматични актуализации на плъгини
+ Показвай актуализации на приложението
+ Автоматично търси нови актуализации при стартиране
+ Актуализация до експериментални версии
+ Търсете експериментални актуализации вместо само пълни версии
+ Github
+ Light novel - приложение от същите разработчици
+ Приложение за аниме от същите разработчици
+ Присъединете се към Discord
+ Дайте банан/и разработчиците
+ Даден/и банан/и
+
+ Език на приложението
+
+ Този доставчик няма поддръжка за Chromecast
+ Няма намерени връзки
+ Връзката е копирана в клипборда
+ Пусни епизода
+ Възстановяване на стойността по подразбиране
+ За съжаление приложението се срина. Анонимен доклад за грешка ще бъде изпратен до
+ разработчиците
+
+ Сезон
+ %s %d%s
+ Без сезон
+ Епизод
+ Епизоди
+ %d-%d
+ %d %s
+ С
+ Е
+ Няма намерени епизоди
+
+ Изтрий файла
+ Изтрий
+ Пауза
+ Продължи
+ -30
+ 30
+ Това ще изтрие за постоянно %s\nСигурни ли сте?
+ %dm\nостава
+
+
+ Продължава
+ Завършен
+ Статус
+ Година
+ Рейтинг
+ Продължителност
+ Уебсайт
+ Синопсис
+
+ На опашката
+ Без субтитри
+ По подразбиране
+
+ Безплатно
+ Използвано
+ Приложения
+
+
+ Филми
+ Телевизионен сериал
+ Анимационни филми
+ Аниме
+ Торенти
+ Документални
+ OVA
+ Азиатски драми
+ На живо
+ Разпоретини
+ други
+
+
+ Филм
+ Серия
+ Анимационен филм
+ @string/anime
+ @string/ova
+ Торент
+ Документален филм
+ Азиатска драма
+ Поток на живо
+ Разпоретинa
+ Видео
+
+ Грешка в източника
+ Дистанционна грешка
+ Грешка в рендъра
+ Неочаквана грешка на плеъра
+ Грешка при изтегляне, проверете разрешенията за съхранение
+
+ Епизод за Chromecast
+ Chromecast огледало
+ Пусни в приложението
+ Пусни в %s
+ Пусни в браузър
+ Копирай връзка
+ Автоматично изтегляне
+ Изтегляне на огледало
+ Презареждане на връзки
+ Изтегляне на субтитри
+
+ покажи качество
+ Покажи дублаж
+ Покажи субтитри
+ Заглавие
+ Превключване на елементите на потребителския интерфейс на плаката
+
+ Няма намерена актуализация
+ Проверка за актуализация
+
+ Заключен
+ Преоразмеряване
+ Източник
+ Пропусни
+
+ Не показвай отново
+ Пропуснете тази актуализация
+ Актуализация
+ Предпочитано качество за гледане
+ Максимален брой знаци за заглавие във видеоплейъра
+ Разделителна способност на видео плейъра
+
+ Размер на видео буфера
+ Дължина на видео буфера
+ Видео кеш на диск
+ Изчистете кеша за видео и изображения
+
+ Ще предизвика случайни сривове, ако е зададено твърде високо. Не променяйте, ако имате малко количество RAM, като Android TV или стар телефон
+ Може да причини проблеми на системи с малко място за съхранение, като устройства с Android TV, ако го зададете твърде високо
+
+ DNS през HTTPS
+ Полезно за заобикаляне на блокирания от ISP доставчик
+
+ Сайт за клониране
+ Премахване на сайта
+ Добавяне на клонинг на съществуващ сайт с различен URL адрес
+
+ Път за изтегляне
+
+ URL адрес на сървъра на Nginx
+
+ Показване на дублирани/субирани аниме
+
+ Побиране в екрана
+ Разтягане
+ Мащабиране
+
+ Опровержение
+
+ Общ
+ Случаен бутон
+ Показване на произволен бутон на началната страница
+ Езици на доставчика
+ Оформление на приложението
+ Предпочитана медия
+ Активирайте разпоретините на поддържани доставчици
+ Кодиране на субтитрите
+ Доставчици
+ Оформление
+
+ Автоматично
+ ТВ оформление
+ Оформление като телефон
+ Оформление като емулатор
+
+ Основен цвят
+ Тема на приложението
+ Местоположение на заглавието на плаката
+ Поставете заглавието под плаката
+
+ парола123
+ MyCoolUsername
+ hello@world.com
+ 127.0.0.1
+ MyCoolSite
+ example.com
+ Езиков код (en)
+
+
+ %s %s
+ Акаунт
+ Излизане
+ Влизане
+ Превключване на акаунт
+ Добавяне на акаунт
+ Създай акаунт
+ Добавете проследяване
+ Добавен %s
+ Синхронизиране
+ Оценен
+ %d / 10
+ /??
+ /%d
+ Удостоверен %s
+ Неуспешно удостоверяване на %s
+
+
+ Нито един
+ Нормално
+ Всичко
+ Макс
+ Мин
+ Контур
+ Удвоени
+ Сянка
+ Повдигнати
+ Синхронизиране на суб
+ 1000ms
+ Забавяне на субтитрите
+ Използвайте това, ако субтитрите се показват %dms твърде рано
+ Използвайте това, ако субтитрите се показват %dms твърде късно
+ Без забавяне на субтитрите
+
+
+
+ Бързата кафява лисица прескача мързеливото куче
+
+ Препоръчва се
+ Заредено %s
+ Зареди от файл
+ Зареди от Интернет
+ Изтеглен файл
+ Главен
+ Поддържащ
+ Заден план
+
+ Източник
+ Случаен
+
+ Очаквайте скоро…
+
+ Cam
+ Cam
+ Cam
+ HQ
+ HD
+ TS
+ TC
+ BlueRay
+ WP
+ DVD
+ 4K
+ SD
+ UHD
+ HDR
+ SDR
+ Web
+
+ Снимка на плакат
+ Плеър
+ Резолюция и заглавие
+ Заглавие
+ Резолюция
+ Невалиден идентификатор
+ Невалидни данни
+ Невалиден адрес
+ Грешка
+ Премахнете затворените надписи от субтитрите
+ Премахнете рекламирането в субтитрите
+ Филтриране по предпочитан медиен език
+ Екстри
+ Трейлър
+ Връзка към потока
+ Обратно към
+ Следващ
+ Гледайте видеоклипове на тези езици
+ Предишен
+ Пропуснете настройката
+ Променете външния вид на приложението, за да отговаря на вашето устройство
+ Докладване за сривове
+ Какво искате да видите
+ Край
+ Разширения
+ Добавяне на хранилище
+ Име на хранилище
+ URL адрес на хранилището
+ Приставката е заредена
+ Приставката е изтрита
+ Неуспешно зареждане %s
+ 18+
+ Започна да изтегля %d %s
+ Изтеглено %d %s успешно
+ Всички %s вече са изтеглени
+ Пакетно изтегляне
+ Плъгин
+ Плъгини
+ Това също ще изтрие всички хранилища за плъгини
+ Изтриване на хранилище
+ Изтеглете списъка със сайтове, които искате да използвате
+ Изтеглено: %d
+ Деактивирано: %d
+ Не е изтеглено: %d
+ Актуализирани %d плъгини
+ CloudStream няма инсталирани сайтове по подразбиране. Трябва да инсталирате сайтовете от хранилища.\n\nПоради безмозъчно премахване на DMCA от Sky Uk Limited 🤮 не можем да свържем сайтовете на хранилищата в приложението.\n\nПрисъединете се към нашия дискорд за връзки или търсете онлайн.
+ Вижте хранилищата на общността
+ Публичен списък
+ Всички субтитри с главни букви
+
+ Изтегляне на всички добавки от това хранилище?
+ %s (Disabled)
+ Потоци
+ Аудио потоци
+ Видео потоци
+ Приложете при рестартиране
+
+ Безопасният режим е активиран
+ Възникна непоправим срив и ние автоматично деактивирахме всички разширения, така че можете да намерите и премахнете разширението, което причинява проблеми.
+ Вижте информация за срива
+
+ Оценка: %s
+ Описание
+ Версия
+ Статус
+ Размер
+ Автори
+ Поддържани
+ език
+ Първо инсталирайте разширението
+
+ HLS плейлист
+
+ Предпочитан видео плеър
+ Вътрешен плеър
+ VLC
+ MPV
+ Уеб видео предаване
+ Браузър
+ Приложението не е намерено
+
\ No newline at end of file
diff --git a/build.gradle b/build.gradle
deleted file mode 100644
index 90f9ac32..00000000
--- a/build.gradle
+++ /dev/null
@@ -1,27 +0,0 @@
-// Top-level build file where you can add configuration options common to all sub-projects/modules.
-buildscript {
- ext.kotlin_version = "1.7.10"
- repositories {
- google()
- jcenter()
- }
- dependencies {
- classpath 'com.android.tools.build:gradle:7.2.1'
- classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
- classpath "org.jetbrains.dokka:dokka-gradle-plugin:1.5.0"
-
- // NOTE: Do not place your application dependencies here; they belong
- // in the individual module build.gradle files
- }
-}
-
-allprojects {
- repositories {
- google()
- jcenter()
- }
-}
-
-task clean(type: Delete) {
- delete rootProject.buildDir
-}
\ No newline at end of file
diff --git a/build.gradle.kts b/build.gradle.kts
new file mode 100644
index 00000000..6e2a24f3
--- /dev/null
+++ b/build.gradle.kts
@@ -0,0 +1,26 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
+buildscript {
+ repositories {
+ google()
+ mavenCentral()
+ }
+ dependencies {
+ classpath("com.android.tools.build:gradle:7.3.1")
+ classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.7.20")
+ classpath("org.jetbrains.dokka:dokka-gradle-plugin:1.5.0")
+
+ // NOTE: Do not place your application dependencies here; they belong
+ // in the individual module build.gradle.kts files
+ }
+}
+
+allprojects {
+ repositories {
+ google()
+ mavenCentral()
+ }
+}
+
+tasks.register("clean", Delete::class) {
+ delete(rootProject.buildDir)
+}
\ No newline at end of file
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index a2c4ced7..baa28c97 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
#Fri Apr 30 17:11:15 CEST 2021
distributionBase=GRADLE_USER_HOME
-distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip
distributionPath=wrapper/dists
zipStorePath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
diff --git a/settings.gradle b/settings.gradle
deleted file mode 100644
index 5d77faec..00000000
--- a/settings.gradle
+++ /dev/null
@@ -1,2 +0,0 @@
-include ':app'
-rootProject.name = "CloudStream"
\ No newline at end of file
diff --git a/settings.gradle.kts b/settings.gradle.kts
new file mode 100644
index 00000000..17070047
--- /dev/null
+++ b/settings.gradle.kts
@@ -0,0 +1,3 @@
+rootProject.name = "CloudStream"
+
+include(":app")
\ No newline at end of file