mirror of
https://github.com/recloudstream/cloudstream.git
synced 2024-08-15 01:53:11 +00:00
Merge remote-tracking branch 'origin/master'
This commit is contained in:
commit
e7d7639776
16 changed files with 471 additions and 408 deletions
|
@ -200,8 +200,12 @@ class OpenSubtitlesApi(index: Int) : InAppAuthAPIManager(index), AbstractSubApi
|
|||
it.data?.forEach { item ->
|
||||
val attr = item.attributes ?: return@forEach
|
||||
val featureDetails = attr.featDetails
|
||||
//Use filename as name, if its valid
|
||||
val filename = attr.files?.firstNotNullOfOrNull { subfile ->
|
||||
subfile.fileName
|
||||
}
|
||||
//Use any valid name/title in hierarchy
|
||||
val name = featureDetails?.movieName ?: featureDetails?.title
|
||||
val name = filename ?: featureDetails?.movieName ?: featureDetails?.title
|
||||
?: featureDetails?.parentTitle ?: attr.release ?: ""
|
||||
val lang = fixLanguageReverse(attr.language)?: ""
|
||||
val resEpNum = featureDetails?.episodeNumber ?: query.epNumber
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package com.lagradost.cloudstream3.ui
|
||||
|
||||
import com.lagradost.cloudstream3.*
|
||||
import com.lagradost.cloudstream3.APIHolder.unixTime
|
||||
import com.lagradost.cloudstream3.APIHolder.unixTimeMS
|
||||
import com.lagradost.cloudstream3.mvvm.Resource
|
||||
import com.lagradost.cloudstream3.mvvm.logError
|
||||
|
@ -31,26 +32,47 @@ class APIRepository(val api: MainAPI) {
|
|||
return data.isEmpty() || data == "[]" || data == "about:blank"
|
||||
}
|
||||
|
||||
private val cacheHash: HashMap<Pair<String, String>, LoadResponse> = hashMapOf()
|
||||
data class SavedLoadResponse(
|
||||
val unixTime: Long,
|
||||
val response: LoadResponse,
|
||||
val hash: Pair<String, String>
|
||||
)
|
||||
|
||||
|
||||
private val cache: ArrayList<SavedLoadResponse> = arrayListOf()
|
||||
private var cacheIndex: Int = 0
|
||||
const val cacheSize = 20
|
||||
}
|
||||
|
||||
val hasMainPage = api.hasMainPage
|
||||
val providerType = api.providerType
|
||||
val name = api.name
|
||||
val mainUrl = api.mainUrl
|
||||
val mainPage = api.mainPage
|
||||
val hasQuickSearch = api.hasQuickSearch
|
||||
val vpnStatus = api.vpnStatus
|
||||
val providerType = api.providerType
|
||||
|
||||
suspend fun load(url: String): Resource<LoadResponse> {
|
||||
return safeApiCall {
|
||||
if (isInvalidData(url)) throw ErrorLoadingException()
|
||||
val fixedUrl = api.fixUrl(url)
|
||||
val key = Pair(api.name, url)
|
||||
cacheHash[key] ?: api.load(fixedUrl)?.also {
|
||||
// we cache 20 responses because ppl often go back to the same shit + 20 because I dont want to cause too much memory leak
|
||||
if (cacheHash.size > 20) cacheHash.remove(cacheHash.keys.random())
|
||||
cacheHash[key] = it
|
||||
val lookingForHash = Pair(api.name, fixedUrl)
|
||||
|
||||
for (item in cache) {
|
||||
// 10 min save
|
||||
if (item.hash == lookingForHash && (unixTime - item.unixTime) < 60 * 10) {
|
||||
return@safeApiCall item.response
|
||||
}
|
||||
}
|
||||
|
||||
api.load(fixedUrl)?.also { response ->
|
||||
val add = SavedLoadResponse(unixTime, response, lookingForHash)
|
||||
if (cache.size > cacheSize) {
|
||||
cache[cacheIndex] = add // rolling cache
|
||||
cacheIndex = (cacheIndex + 1) % cacheSize
|
||||
} else {
|
||||
cache.add(add)
|
||||
}
|
||||
} ?: throw ErrorLoadingException()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -443,6 +443,7 @@ class HomeFragment : Fragment() {
|
|||
home_main_poster_recyclerview?.isVisible = visible
|
||||
}
|
||||
|
||||
@SuppressLint("NotifyDataSetChanged") // we need to notify to change poster
|
||||
private fun fixGrid() {
|
||||
activity?.getSpanCount()?.let {
|
||||
currentSpan = it
|
||||
|
@ -465,6 +466,7 @@ class HomeFragment : Fragment() {
|
|||
|
||||
override fun onConfigurationChanged(newConfig: Configuration) {
|
||||
super.onConfigurationChanged(newConfig)
|
||||
(home_preview_viewpager?.adapter as? HomeScrollAdapter)?.notifyDataSetChanged()
|
||||
fixGrid()
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package com.lagradost.cloudstream3.ui.home
|
||||
|
||||
import android.content.res.Configuration
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
|
@ -16,7 +17,7 @@ class HomeScrollAdapter : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
|
|||
private var items: MutableList<LoadResponse> = mutableListOf()
|
||||
var hasMoreItems: Boolean = false
|
||||
|
||||
fun getItem(position: Int) : LoadResponse? {
|
||||
fun getItem(position: Int): LoadResponse? {
|
||||
return items.getOrNull(position)
|
||||
}
|
||||
|
||||
|
@ -59,6 +60,10 @@ class HomeScrollAdapter : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
|
|||
|
||||
fun bind(card: LoadResponse) {
|
||||
card.apply {
|
||||
val isHorizontal =
|
||||
itemView.resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE
|
||||
val posterUrl = if (isHorizontal) backgroundPosterUrl ?: posterUrl else posterUrl
|
||||
?: backgroundPosterUrl
|
||||
itemView.home_scroll_preview_tags?.text = tags?.joinToString(" • ") ?: ""
|
||||
itemView.home_scroll_preview_tags?.isGone = tags.isNullOrEmpty()
|
||||
itemView.home_scroll_preview?.setImage(posterUrl, posterHeaders)
|
||||
|
|
|
@ -16,8 +16,6 @@ import com.lagradost.cloudstream3.utils.USER_SELECTED_HOMEPAGE_API
|
|||
import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showMultiDialog
|
||||
import com.lagradost.cloudstream3.utils.SubtitleHelper
|
||||
import com.lagradost.cloudstream3.utils.UIHelper.hideKeyboard
|
||||
import kotlin.reflect.jvm.internal.impl.descriptors.deserialization.PlatformDependentDeclarationFilter.All
|
||||
|
||||
|
||||
class SettingsProviders : PreferenceFragmentCompat() {
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
|
|
|
@ -323,6 +323,7 @@
|
|||
app:iconifiedByDefault="true"
|
||||
app:queryBackground="@color/transparent"
|
||||
app:queryHint="@string/search"
|
||||
app:closeIcon="@drawable/ic_baseline_close_24"
|
||||
|
||||
app:searchIcon="@drawable/search_icon"
|
||||
tools:ignore="RtlSymmetry" />
|
||||
|
@ -405,11 +406,11 @@
|
|||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
</FrameLayout>
|
||||
|
||||
<View
|
||||
android:id="@+id/home_fix_padding"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp">
|
||||
</View>
|
||||
android:layout_height="0dp"></View>
|
||||
<!--
|
||||
All padding in home_watch_holder is determined in runtime
|
||||
This is because the home poster can be invisible which forces
|
||||
|
|
|
@ -26,10 +26,7 @@
|
|||
android:contentDescription="@string/search_poster_img_des" />
|
||||
|
||||
<TextView
|
||||
tools:text="@string/quality_hd"
|
||||
android:id="@+id/text_quality"
|
||||
style="@style/SearchBox"
|
||||
android:background="@drawable/type_bg_color" />
|
||||
style="@style/TypeButton" />
|
||||
<!--
|
||||
<LinearLayout
|
||||
android:orientation="vertical"
|
||||
|
|
|
@ -3,71 +3,71 @@
|
|||
<!-- android:layout_width="114dp"
|
||||
android:layout_height="180dp"-->
|
||||
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:foreground="@drawable/outline_drawable"
|
||||
android:layout_margin="2dp"
|
||||
android:layout_width="114dp"
|
||||
android:layout_height="180dp"
|
||||
android:layout_marginBottom="2dp"
|
||||
android:elevation="10dp"
|
||||
app:cardCornerRadius="@dimen/rounded_image_radius"
|
||||
android:id="@+id/background_card"
|
||||
app:cardBackgroundColor="?attr/primaryGrayBackground">
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/background_card"
|
||||
android:layout_width="114dp"
|
||||
android:layout_height="180dp"
|
||||
android:layout_margin="2dp"
|
||||
android:layout_marginBottom="2dp"
|
||||
android:elevation="10dp"
|
||||
android:foreground="@drawable/outline_drawable"
|
||||
app:cardBackgroundColor="?attr/primaryGrayBackground"
|
||||
app:cardCornerRadius="@dimen/rounded_image_radius">
|
||||
|
||||
<ImageView
|
||||
android:duplicateParentState="true"
|
||||
android:id="@+id/imageView"
|
||||
tools:src="@drawable/example_poster"
|
||||
android:scaleType="centerCrop"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:foreground="?android:attr/selectableItemBackgroundBorderless"
|
||||
android:contentDescription="@string/search_poster_img_des" />
|
||||
android:id="@+id/imageView"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:contentDescription="@string/search_poster_img_des"
|
||||
android:duplicateParentState="true"
|
||||
android:foreground="?android:attr/selectableItemBackgroundBorderless"
|
||||
android:scaleType="centerCrop"
|
||||
tools:src="@drawable/example_poster" />
|
||||
|
||||
<ImageView
|
||||
android:focusable="false"
|
||||
android:clickable="false"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="50dp"
|
||||
android:id="@+id/title_shadow"
|
||||
android:src="@drawable/title_shadow"
|
||||
android:layout_gravity="bottom"
|
||||
tools:ignore="ContentDescription" />
|
||||
android:id="@+id/title_shadow"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="50dp"
|
||||
android:layout_gravity="bottom"
|
||||
android:clickable="false"
|
||||
android:focusable="false"
|
||||
android:src="@drawable/title_shadow"
|
||||
tools:ignore="ContentDescription" />
|
||||
|
||||
<TextView
|
||||
tools:text="The Perfect Run"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center"
|
||||
android:layout_gravity="bottom"
|
||||
android:paddingBottom="5dp"
|
||||
android:paddingTop="5dp"
|
||||
android:textColor="@color/textColor"
|
||||
android:id="@+id/imageText"
|
||||
android:textStyle="bold"
|
||||
android:maxLines="2"
|
||||
android:paddingStart="5dp"
|
||||
android:paddingEnd="5dp"
|
||||
android:ellipsize="end" />
|
||||
android:id="@+id/imageText"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="bottom"
|
||||
android:ellipsize="end"
|
||||
android:gravity="center"
|
||||
android:maxLines="2"
|
||||
android:paddingStart="5dp"
|
||||
android:paddingTop="5dp"
|
||||
android:paddingEnd="5dp"
|
||||
android:paddingBottom="5dp"
|
||||
android:textColor="@color/textColor"
|
||||
android:textStyle="bold"
|
||||
tools:text="The Perfect Run" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/search_item_download_play"
|
||||
android:layout_gravity="center"
|
||||
android:src="@drawable/play_button"
|
||||
android:layout_width="60dp"
|
||||
android:layout_height="60dp" />
|
||||
android:id="@+id/search_item_download_play"
|
||||
android:layout_width="60dp"
|
||||
android:layout_height="60dp"
|
||||
android:layout_gravity="center"
|
||||
android:src="@drawable/play_button" />
|
||||
|
||||
<androidx.core.widget.ContentLoadingProgressBar
|
||||
android:layout_marginBottom="-1.5dp"
|
||||
android:id="@+id/watchProgress"
|
||||
android:progressTint="?attr/colorPrimary"
|
||||
android:progressBackgroundTint="?attr/colorPrimary"
|
||||
style="@android:style/Widget.Material.ProgressBar.Horizontal"
|
||||
android:layout_width="match_parent"
|
||||
tools:progress="50"
|
||||
android:layout_gravity="bottom"
|
||||
android:layout_height="5dp" />
|
||||
android:id="@+id/watchProgress"
|
||||
style="@android:style/Widget.Material.ProgressBar.Horizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="5dp"
|
||||
android:layout_gravity="bottom"
|
||||
android:layout_marginBottom="-1.5dp"
|
||||
android:progressBackgroundTint="?attr/colorPrimary"
|
||||
android:progressTint="?attr/colorPrimary"
|
||||
tools:progress="50" />
|
||||
|
||||
<!--<View
|
||||
android:id="@+id/search_result_lang"
|
||||
|
@ -86,17 +86,13 @@
|
|||
android:layout_width="30dp"
|
||||
android:layout_height="30dp">
|
||||
</ImageView>-->
|
||||
<TextView
|
||||
tools:text="@string/quality_hd"
|
||||
android:id="@+id/text_quality"
|
||||
style="@style/SearchBox"
|
||||
android:background="@drawable/type_bg_color" />
|
||||
<TextView android:id="@+id/text_quality" style="@style/TypeButton" />
|
||||
|
||||
<LinearLayout
|
||||
android:orientation="vertical"
|
||||
android:layout_gravity="end"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_gravity="end"
|
||||
android:orientation="vertical">
|
||||
|
||||
<!--
|
||||
<ImageView android:id="@+id/text_is_dub" android:tint="?attr/colorPrimary"
|
||||
|
@ -105,27 +101,23 @@
|
|||
|
||||
</ImageView>-->
|
||||
<TextView
|
||||
android:text="@string/app_dubbed_text"
|
||||
android:id="@+id/text_is_dub"
|
||||
style="@style/SearchBox"
|
||||
android:layout_gravity="end"
|
||||
android:background="@drawable/dub_bg_color" />
|
||||
android:id="@+id/text_is_dub"
|
||||
style="@style/DubButton"
|
||||
android:layout_gravity="end" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/text_is_sub"
|
||||
android:text="@string/app_subbed_text"
|
||||
style="@style/SearchBox"
|
||||
android:layout_gravity="end"
|
||||
android:background="@drawable/sub_bg_color" />
|
||||
android:id="@+id/text_is_sub"
|
||||
style="@style/SubButton"
|
||||
android:layout_gravity="end" />
|
||||
|
||||
<TextView
|
||||
tools:visibility="visible"
|
||||
android:visibility="gone"
|
||||
android:textSize="20sp"
|
||||
android:id="@+id/text_flag"
|
||||
tools:text="🇸🇪"
|
||||
style="@style/SearchBox"
|
||||
android:layout_gravity="end"
|
||||
android:background="@color/transparent" />
|
||||
android:id="@+id/text_flag"
|
||||
style="@style/SearchBox"
|
||||
android:layout_gravity="end"
|
||||
android:background="@color/transparent"
|
||||
android:textSize="20sp"
|
||||
android:visibility="gone"
|
||||
tools:text="🇸🇪"
|
||||
tools:visibility="visible" />
|
||||
</LinearLayout>
|
||||
</androidx.cardview.widget.CardView>
|
||||
|
|
|
@ -5,58 +5,58 @@
|
|||
|
||||
|
||||
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:backgroundTint="@color/transparent"
|
||||
android:foreground="@drawable/outline_drawable"
|
||||
app:cardElevation="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
app:cardCornerRadius="@dimen/rounded_image_radius"
|
||||
android:layout_margin="2dp"
|
||||
android:id="@+id/background_card"
|
||||
android:layout_width="wrap_content">
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/background_card"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="2dp"
|
||||
android:backgroundTint="@color/transparent"
|
||||
android:foreground="@drawable/outline_drawable"
|
||||
app:cardCornerRadius="@dimen/rounded_image_radius"
|
||||
app:cardElevation="0dp">
|
||||
|
||||
<LinearLayout
|
||||
android:orientation="vertical"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content">
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical">
|
||||
|
||||
<androidx.cardview.widget.CardView
|
||||
android:id="@+id/image_holder"
|
||||
android:layout_width="114dp"
|
||||
android:layout_height="180dp"
|
||||
android:elevation="10dp"
|
||||
app:cardCornerRadius="@dimen/rounded_image_radius"
|
||||
app:cardBackgroundColor="?attr/primaryGrayBackground">
|
||||
android:id="@+id/image_holder"
|
||||
android:layout_width="114dp"
|
||||
android:layout_height="180dp"
|
||||
android:elevation="10dp"
|
||||
app:cardBackgroundColor="?attr/primaryGrayBackground"
|
||||
app:cardCornerRadius="@dimen/rounded_image_radius">
|
||||
|
||||
<ImageView
|
||||
android:duplicateParentState="true"
|
||||
android:id="@+id/imageView"
|
||||
tools:src="@drawable/example_poster"
|
||||
android:scaleType="centerCrop"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:foreground="?android:attr/selectableItemBackgroundBorderless"
|
||||
android:contentDescription="@string/search_poster_img_des" />
|
||||
android:id="@+id/imageView"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:contentDescription="@string/search_poster_img_des"
|
||||
android:duplicateParentState="true"
|
||||
android:foreground="?android:attr/selectableItemBackgroundBorderless"
|
||||
android:scaleType="centerCrop"
|
||||
tools:src="@drawable/example_poster" />
|
||||
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/search_item_download_play"
|
||||
android:layout_gravity="center"
|
||||
android:src="@drawable/play_button"
|
||||
android:layout_width="60dp"
|
||||
android:layout_height="60dp" />
|
||||
android:id="@+id/search_item_download_play"
|
||||
android:layout_width="60dp"
|
||||
android:layout_height="60dp"
|
||||
android:layout_gravity="center"
|
||||
android:src="@drawable/play_button" />
|
||||
|
||||
<androidx.core.widget.ContentLoadingProgressBar
|
||||
android:layout_marginBottom="-1.5dp"
|
||||
android:id="@+id/watchProgress"
|
||||
android:progressTint="?attr/colorPrimary"
|
||||
android:progressBackgroundTint="?attr/colorPrimary"
|
||||
style="@android:style/Widget.Material.ProgressBar.Horizontal"
|
||||
android:layout_width="match_parent"
|
||||
tools:progress="50"
|
||||
android:layout_gravity="bottom"
|
||||
android:layout_height="5dp" />
|
||||
android:id="@+id/watchProgress"
|
||||
style="@android:style/Widget.Material.ProgressBar.Horizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="5dp"
|
||||
android:layout_gravity="bottom"
|
||||
android:layout_marginBottom="-1.5dp"
|
||||
android:progressBackgroundTint="?attr/colorPrimary"
|
||||
android:progressTint="?attr/colorPrimary"
|
||||
tools:progress="50" />
|
||||
|
||||
<!--<View
|
||||
android:id="@+id/search_result_lang"
|
||||
|
@ -75,17 +75,13 @@
|
|||
android:layout_width="30dp"
|
||||
android:layout_height="30dp">
|
||||
</ImageView>-->
|
||||
<TextView
|
||||
tools:text="@string/quality_hd"
|
||||
android:id="@+id/text_quality"
|
||||
style="@style/SearchBox"
|
||||
android:background="@drawable/type_bg_color" />
|
||||
<TextView android:id="@+id/text_quality" style="@style/TypeButton" />
|
||||
|
||||
<LinearLayout
|
||||
android:orientation="vertical"
|
||||
android:layout_gravity="end"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_gravity="end"
|
||||
android:orientation="vertical">
|
||||
|
||||
<!--
|
||||
<ImageView android:id="@+id/text_is_dub" android:tint="?attr/colorPrimary"
|
||||
|
@ -94,46 +90,42 @@
|
|||
|
||||
</ImageView>-->
|
||||
<TextView
|
||||
android:text="@string/app_dubbed_text"
|
||||
android:id="@+id/text_is_dub"
|
||||
style="@style/SearchBox"
|
||||
android:layout_gravity="end"
|
||||
android:background="@drawable/dub_bg_color" />
|
||||
android:id="@+id/text_is_dub"
|
||||
style="@style/DubButton"
|
||||
android:layout_gravity="end" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/text_is_sub"
|
||||
android:text="@string/app_subbed_text"
|
||||
style="@style/SearchBox"
|
||||
android:layout_gravity="end"
|
||||
android:background="@drawable/sub_bg_color" />
|
||||
android:id="@+id/text_is_sub"
|
||||
style="@style/SubButton"
|
||||
android:layout_gravity="end" />
|
||||
|
||||
<TextView
|
||||
tools:visibility="visible"
|
||||
android:visibility="gone"
|
||||
android:textSize="20sp"
|
||||
android:id="@+id/text_flag"
|
||||
tools:text="🇸🇪"
|
||||
style="@style/SearchBox"
|
||||
android:layout_gravity="end"
|
||||
android:background="@color/transparent" />
|
||||
android:id="@+id/text_flag"
|
||||
style="@style/SearchBox"
|
||||
android:layout_gravity="end"
|
||||
android:background="@color/transparent"
|
||||
android:textSize="20sp"
|
||||
android:visibility="gone"
|
||||
tools:text="🇸🇪"
|
||||
tools:visibility="visible" />
|
||||
</LinearLayout>
|
||||
</androidx.cardview.widget.CardView>
|
||||
|
||||
<TextView
|
||||
tools:text="The Perfect Run\nThe Perfect Run\nhello"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:textSize="13sp"
|
||||
android:gravity="center"
|
||||
android:layout_gravity="bottom"
|
||||
android:paddingBottom="5dp"
|
||||
android:paddingTop="5dp"
|
||||
android:textColor="?attr/textColor"
|
||||
android:id="@+id/imageText"
|
||||
android:minLines="2"
|
||||
android:maxLines="2"
|
||||
android:paddingStart="5dp"
|
||||
android:paddingEnd="5dp"
|
||||
android:ellipsize="end" />
|
||||
android:id="@+id/imageText"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="bottom"
|
||||
android:ellipsize="end"
|
||||
android:gravity="center"
|
||||
android:maxLines="2"
|
||||
android:minLines="2"
|
||||
android:paddingStart="5dp"
|
||||
android:paddingTop="5dp"
|
||||
android:paddingEnd="5dp"
|
||||
android:paddingBottom="5dp"
|
||||
android:textColor="?attr/textColor"
|
||||
android:textSize="13sp"
|
||||
tools:text="The Perfect Run\nThe Perfect Run\nhello" />
|
||||
</LinearLayout>
|
||||
</androidx.cardview.widget.CardView>
|
||||
|
|
|
@ -1,98 +1,89 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/search_result_root"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
|
||||
android:foreground="@drawable/outline_drawable"
|
||||
android:focusable="true"
|
||||
android:clickable="true"
|
||||
android:id="@+id/search_result_root">
|
||||
android:clickable="true"
|
||||
android:focusable="true"
|
||||
android:foreground="@drawable/outline_drawable"
|
||||
android:orientation="vertical">
|
||||
|
||||
<androidx.cardview.widget.CardView
|
||||
android:layout_margin="2dp"
|
||||
android:id="@+id/background_card"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_margin="2dp"
|
||||
android:layout_marginBottom="2dp"
|
||||
android:elevation="10dp"
|
||||
app:cardBackgroundColor="?attr/primaryGrayBackground"
|
||||
app:cardCornerRadius="@dimen/rounded_image_radius">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/imageView"
|
||||
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginBottom="2dp"
|
||||
android:elevation="10dp"
|
||||
app:cardCornerRadius="@dimen/rounded_image_radius"
|
||||
android:id="@+id/background_card"
|
||||
app:cardBackgroundColor="?attr/primaryGrayBackground">
|
||||
android:contentDescription="@string/search_poster_img_des"
|
||||
android:duplicateParentState="true"
|
||||
android:foreground="?android:attr/selectableItemBackgroundBorderless"
|
||||
android:scaleType="centerCrop" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/imageView"
|
||||
|
||||
android:duplicateParentState="true"
|
||||
android:scaleType="centerCrop"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:foreground="?android:attr/selectableItemBackgroundBorderless"
|
||||
android:contentDescription="@string/search_poster_img_des" />
|
||||
|
||||
<ImageView
|
||||
android:focusable="false"
|
||||
android:clickable="false"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="50dp"
|
||||
android:id="@+id/title_shadow"
|
||||
android:src="@drawable/title_shadow"
|
||||
android:layout_gravity="bottom"
|
||||
tools:ignore="ContentDescription" />
|
||||
android:id="@+id/title_shadow"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="50dp"
|
||||
android:layout_gravity="bottom"
|
||||
android:clickable="false"
|
||||
android:focusable="false"
|
||||
android:src="@drawable/title_shadow"
|
||||
tools:ignore="ContentDescription" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/imageText"
|
||||
android:id="@+id/imageText"
|
||||
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center"
|
||||
android:layout_gravity="bottom"
|
||||
android:paddingBottom="5dp"
|
||||
android:paddingTop="5dp"
|
||||
android:textColor="@color/textColor"
|
||||
android:textStyle="bold"
|
||||
android:maxLines="2"
|
||||
android:paddingStart="5dp"
|
||||
android:paddingEnd="5dp"
|
||||
android:ellipsize="end" />
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="bottom"
|
||||
android:ellipsize="end"
|
||||
android:gravity="center"
|
||||
android:maxLines="2"
|
||||
android:paddingStart="5dp"
|
||||
android:paddingTop="5dp"
|
||||
android:paddingEnd="5dp"
|
||||
android:paddingBottom="5dp"
|
||||
android:textColor="@color/textColor"
|
||||
android:textStyle="bold" />
|
||||
|
||||
<TextView
|
||||
tools:text="@string/quality_hd"
|
||||
android:id="@+id/text_quality"
|
||||
android:textColor="@color/textColor"
|
||||
style="@style/SearchBox"
|
||||
android:background="@drawable/type_bg_color" />
|
||||
<TextView android:id="@+id/text_quality" style="@style/TypeButton" />
|
||||
|
||||
<LinearLayout
|
||||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_gravity="end"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/text_is_dub"
|
||||
style="@style/DubButton"
|
||||
android:layout_gravity="end" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/text_is_sub"
|
||||
style="@style/SubButton"
|
||||
android:layout_gravity="end" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/text_flag"
|
||||
style="@style/SearchBox"
|
||||
android:layout_gravity="end"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<TextView
|
||||
android:text="@string/app_dubbed_text"
|
||||
android:id="@+id/text_is_dub"
|
||||
android:layout_gravity="end"
|
||||
style="@style/SearchBox"
|
||||
android:background="@drawable/dub_bg_color" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/text_is_sub"
|
||||
android:text="@string/app_subbed_text"
|
||||
android:layout_gravity="end"
|
||||
style="@style/SearchBox"
|
||||
android:background="@drawable/sub_bg_color" />
|
||||
|
||||
<TextView
|
||||
tools:visibility="visible"
|
||||
android:visibility="gone"
|
||||
android:textSize="20sp"
|
||||
android:id="@+id/text_flag"
|
||||
tools:text="🇸🇪"
|
||||
style="@style/SearchBox"
|
||||
android:layout_gravity="end"
|
||||
android:background="@color/transparent" />
|
||||
android:background="@color/transparent"
|
||||
android:textSize="20sp"
|
||||
android:visibility="gone"
|
||||
tools:text="🇸🇪"
|
||||
tools:visibility="visible" />
|
||||
</LinearLayout>
|
||||
</androidx.cardview.widget.CardView>
|
||||
|
||||
|
|
|
@ -1,90 +1,81 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/search_result_root"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
|
||||
android:foreground="@drawable/outline_drawable"
|
||||
android:focusable="true"
|
||||
android:clickable="true"
|
||||
android:id="@+id/search_result_root">
|
||||
android:clickable="true"
|
||||
android:focusable="true"
|
||||
android:foreground="@drawable/outline_drawable"
|
||||
android:orientation="vertical">
|
||||
|
||||
<androidx.cardview.widget.CardView
|
||||
android:layout_margin="2dp"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginBottom="2dp"
|
||||
android:elevation="10dp"
|
||||
app:cardCornerRadius="@dimen/rounded_image_radius"
|
||||
android:id="@+id/background_card"
|
||||
app:cardBackgroundColor="?attr/primaryGrayBackground">
|
||||
android:id="@+id/background_card"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_margin="2dp"
|
||||
android:layout_marginBottom="2dp"
|
||||
android:elevation="10dp"
|
||||
app:cardBackgroundColor="?attr/primaryGrayBackground"
|
||||
app:cardCornerRadius="@dimen/rounded_image_radius">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/imageView"
|
||||
tools:src="@drawable/example_poster"
|
||||
android:id="@+id/imageView"
|
||||
android:layout_width="match_parent"
|
||||
|
||||
android:duplicateParentState="true"
|
||||
android:scaleType="centerCrop"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:foreground="?android:attr/selectableItemBackgroundBorderless"
|
||||
android:contentDescription="@string/search_poster_img_des" />
|
||||
android:layout_height="match_parent"
|
||||
android:contentDescription="@string/search_poster_img_des"
|
||||
android:duplicateParentState="true"
|
||||
android:foreground="?android:attr/selectableItemBackgroundBorderless"
|
||||
android:scaleType="centerCrop"
|
||||
tools:src="@drawable/example_poster" />
|
||||
|
||||
<TextView
|
||||
tools:text="@string/quality_hd"
|
||||
android:id="@+id/text_quality"
|
||||
android:textColor="@color/textColor"
|
||||
style="@style/SearchBox"
|
||||
android:background="@drawable/type_bg_color" />
|
||||
<TextView android:id="@+id/text_quality" style="@style/TypeButton" />
|
||||
|
||||
<LinearLayout
|
||||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_gravity="end"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/text_is_dub"
|
||||
style="@style/DubButton"
|
||||
android:layout_gravity="end" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/text_is_sub"
|
||||
style="@style/SubButton"
|
||||
android:layout_gravity="end" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/text_flag"
|
||||
style="@style/SearchBox"
|
||||
android:layout_gravity="end"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<TextView
|
||||
android:text="@string/app_dubbed_text"
|
||||
android:id="@+id/text_is_dub"
|
||||
android:layout_gravity="end"
|
||||
style="@style/SearchBox"
|
||||
android:background="@drawable/dub_bg_color" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/text_is_sub"
|
||||
android:text="@string/app_subbed_text"
|
||||
android:layout_gravity="end"
|
||||
style="@style/SearchBox"
|
||||
android:background="@drawable/sub_bg_color" />
|
||||
|
||||
<TextView
|
||||
tools:visibility="visible"
|
||||
android:visibility="gone"
|
||||
android:textSize="20sp"
|
||||
android:id="@+id/text_flag"
|
||||
tools:text="🇸🇪"
|
||||
style="@style/SearchBox"
|
||||
android:layout_gravity="end"
|
||||
android:background="@color/transparent" />
|
||||
android:background="@color/transparent"
|
||||
android:textSize="20sp"
|
||||
android:visibility="gone"
|
||||
tools:text="🇸🇪"
|
||||
tools:visibility="visible" />
|
||||
</LinearLayout>
|
||||
</androidx.cardview.widget.CardView>
|
||||
|
||||
<TextView
|
||||
tools:text="The Perfect Run\nThe Perfect Run"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:textSize="13sp"
|
||||
android:gravity="center"
|
||||
android:layout_gravity="bottom"
|
||||
android:paddingBottom="5dp"
|
||||
android:paddingTop="5dp"
|
||||
android:textColor="?attr/textColor"
|
||||
android:id="@+id/imageText"
|
||||
android:minLines="2"
|
||||
android:maxLines="2"
|
||||
android:paddingStart="5dp"
|
||||
android:paddingEnd="5dp"
|
||||
android:ellipsize="end" />
|
||||
android:id="@+id/imageText"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="bottom"
|
||||
android:ellipsize="end"
|
||||
android:gravity="center"
|
||||
android:maxLines="2"
|
||||
android:minLines="2"
|
||||
android:paddingStart="5dp"
|
||||
android:paddingTop="5dp"
|
||||
android:paddingEnd="5dp"
|
||||
android:paddingBottom="5dp"
|
||||
android:textColor="?attr/textColor"
|
||||
android:textSize="13sp"
|
||||
tools:text="The Perfect Run\nThe Perfect Run" />
|
||||
</LinearLayout>
|
|
@ -6,7 +6,7 @@
|
|||
<string name="home_main_poster_img_des">الملصق الرئيسي</string>
|
||||
<string name="home_next_random_img_des">التالي عشوائي</string>
|
||||
|
||||
<string name="go_back_img_des">ارجع للخلف</string>
|
||||
<string name="go_back_img_des">رجوع</string>
|
||||
|
||||
<string name="home_change_provider_img_des">تغيير المصدر</string>
|
||||
<string name="preview_background_img_des">معاينة الخلفية</string>
|
||||
|
@ -38,7 +38,7 @@
|
|||
<string name="loading">…تحميل</string>
|
||||
|
||||
<string name="type_watching">أشاهده</string>
|
||||
<string name="type_on_hold">في الانتظار</string>
|
||||
<string name="type_on_hold">في الإنتظار</string>
|
||||
<string name="type_completed">مكتمل</string>
|
||||
<string name="type_dropped">مهمل</string>
|
||||
<string name="type_plan_to_watch">أخطط لمشاهدته</string>
|
||||
|
@ -100,7 +100,7 @@
|
|||
<string name="subs_background_color">لون الخلفية</string>
|
||||
<string name="subs_window_color">لون النافذة</string>
|
||||
<string name="subs_edge_type">نوع الحافة</string>
|
||||
<string name="subs_subtitle_elevation">ارتفاع الترجمة</string>
|
||||
<string name="subs_subtitle_elevation">إرتفاع الترجمة</string>
|
||||
<string name="subs_font">الخط</string>
|
||||
<string name="subs_font_size">حجم الخط</string>
|
||||
|
||||
|
@ -111,7 +111,7 @@
|
|||
<string name="benene_count_text_none">لم يتم إعطاء موز</string>
|
||||
|
||||
<string name="subs_auto_select_language">تحديد اللغة تلقائيًا</string>
|
||||
<string name="subs_download_languages">تحميل اللغات</string>
|
||||
<string name="subs_download_languages">لغات التحميل</string>
|
||||
<string name="subs_subtitle_languages">لغة الترجمة</string>
|
||||
<string name="subs_hold_to_reset_to_default">إضغط بإستمرار لإعادة التعيين للإعدادات الافتراضية</string>
|
||||
<string name="subs_import_text" formatted="true">إستيراد خطوط بوضعها هنا %s</string>
|
||||
|
@ -185,9 +185,10 @@
|
|||
<string name="pref_filter_search_quality">إخفاء جودة الفيديو المختارة من نتائج البحث</string>
|
||||
|
||||
<string name="automatic_plugin_updates">تحديث الإضافات تلقائيًا</string>
|
||||
<string name="automatic_plugin_download">تنزيل الإضافات تلقائيًا</string>
|
||||
<string name="updates_settings">التحديث التلقائي</string>
|
||||
<string name="updates_settings_des">البحث تلقائيًا عن التحديثات الجديدة عند البداية</string>
|
||||
<string name="uprereleases_settings">التحديث إلى الاصدارات التجريبيه (بيتا)</string>
|
||||
<string name="uprereleases_settings">التحديث إلى الاصدارات التجريبية (بيتا)</string>
|
||||
<string name="uprereleases_settings_des">البحث عن التحديثات التجريبية بدلاً من الإصدارات الكاملة فقط</string>
|
||||
<string name="github">Github</string>
|
||||
<string name="lightnovel">تطبيق روايات خفيف من نفس المطورين</string>
|
||||
|
@ -255,7 +256,7 @@
|
|||
<!--singular-->
|
||||
<string name="movies_singular">فيلم</string>
|
||||
<string name="tv_series_singular">مسلسل</string>
|
||||
<string name="cartoons_singular">كارتون</string>
|
||||
<string name="cartoons_singular">كرتون</string>
|
||||
<string name="anime_singular">@string/anime</string>
|
||||
<string name="ova_singular">@string/ova</string>
|
||||
<string name="torrent_singular">تورنت</string>
|
||||
|
@ -353,7 +354,7 @@
|
|||
<string name="category_general">عام</string>
|
||||
<string name="random_button_settings">زر العشوائي</string>
|
||||
<string name="random_button_settings_desc">إظهار زر العشوائي علي الشاشة الرئيسية</string>
|
||||
<string name="provider_lang_settings">لغات الموفر</string>
|
||||
<string name="provider_lang_settings">لغات المزود</string>
|
||||
<string name="app_layout">واجهة التطبيق</string>
|
||||
<string name="preferred_media_settings">المحتوي المفضل</string>
|
||||
<string name="enable_nsfw_on_providers">تفعيل محتوي البالغين داخل المزودين المدعومين</string>
|
||||
|
@ -378,13 +379,13 @@
|
|||
<string name="mal_key" translatable="false">mal_key</string>
|
||||
<string name="opensubtitles_key" translatable="false">opensubtitles_key</string>
|
||||
<string name="nginx_key" translatable="false">nginx_key</string>
|
||||
<string name="example_password">password123</string>
|
||||
<string name="example_username">MyCoolUsername</string>
|
||||
<string name="example_email">hello@world.com</string>
|
||||
<string name="example_password">كلمة المرور</string>
|
||||
<string name="example_username">إسم المستخدم</string>
|
||||
<string name="example_email">البريد الإلكتروني</string>
|
||||
<string name="example_ip">127.0.0.1</string>
|
||||
<string name="example_site_name">MyCoolSite</string>
|
||||
<string name="example_site_url">example.com</string>
|
||||
<string name="example_lang_name">Language code (en)</string>
|
||||
<string name="example_site_name">إسم الموقع</string>
|
||||
<string name="example_site_url">رابط الموقع</string>
|
||||
<string name="example_lang_name">اللغة (الإنجليزية)</string>
|
||||
|
||||
<!--
|
||||
<string name="mal_account_settings" translatable="false">MAL</string>
|
||||
|
@ -489,7 +490,7 @@
|
|||
<string name="previous">السابق</string>
|
||||
<string name="skip_setup">تخطي الإعداد</string>
|
||||
<string name="app_layout_subtext">تغيير شكل البرنامح حتي يلائم جهازك</string>
|
||||
<string name="crash_reporting_title">ابلاغ الاعطال</string>
|
||||
<string name="crash_reporting_title">إبلاغ الأعطال</string>
|
||||
<string name="preferred_media_subtext">ماذا تريد ان تري</string>
|
||||
<string name="setup_done">تم</string>
|
||||
<string name="extensions">الإضافات</string>
|
||||
|
@ -522,7 +523,7 @@
|
|||
<string name="tracks">المسارات</string>
|
||||
<string name="audio_tracks">مسار الصوت</string>
|
||||
<string name="video_tracks">مسار الفيديو</string>
|
||||
<string name="apply_on_restart">تطبيق بعد إعادة الفتح</string>
|
||||
<string name="apply_on_restart">تطبيق بعد إعادة التشغيل</string>
|
||||
|
||||
<string name="safe_mode_title">وضع الامان مفعل</string>
|
||||
<string name="safe_mode_description">An unrecoverable crash occurred and we\'ve automatically disabled all extensions, so you can find and remove the extension which is causing trouble.</string>
|
||||
|
@ -539,4 +540,7 @@
|
|||
|
||||
<string name="hls_playlist">قائمة HLS</string>
|
||||
<string name="player_pref">مُشغل الفيديو المفضل</string>
|
||||
<string name="clear_history">مسح السجل</string>
|
||||
<string name="history">السجل</string>
|
||||
<string name="enable_skip_op_from_database_des">عرض زر تخطي المقدمة/الخاتمة</string>
|
||||
</resources>
|
||||
|
|
|
@ -7,7 +7,6 @@
|
|||
<string name="duration_format" formatted="true">%d min</string>
|
||||
|
||||
<string name="app_dub_sub_episode_text_format">%s Odc. %d</string>
|
||||
<string name="next_episode_format">Odcinek %d będzie udostępniony</string>
|
||||
<string name="result_poster_img_des">Plakat</string>
|
||||
<string name="episode_poster_img_des">Plakat odcinka</string>
|
||||
<string name="home_main_poster_img_des">Główny plakat</string>
|
||||
|
@ -23,10 +22,12 @@
|
|||
<string name="title_settings">Ustawienia</string>
|
||||
|
||||
<string name="search_hint">Szukaj…</string>
|
||||
<string name="search_hint_site">Szukaj %s…</string>
|
||||
<string name="search_hint_site" formatted="true">Szukaj %s…</string>
|
||||
|
||||
<string name="no_data">Brak danych</string>
|
||||
<string name="episode_more_options_des">Więcej opcji</string>
|
||||
<string name="next_episode">Następny odcinek</string>
|
||||
<string name="next_episode_format">Odcinek %d będzie udostępniony</string>
|
||||
<string name="result_tags">Gatunki</string>
|
||||
<string name="result_share">Udostępnij</string>
|
||||
<string name="result_open_in_browser">Otwórz w przeglądarce</string>
|
||||
|
@ -49,7 +50,6 @@
|
|||
<string name="reload_error">Połącz ponownie…</string>
|
||||
<string name="go_back">Wstecz</string>
|
||||
<string name="play_episode">Odtwórz odcinek</string>
|
||||
<!--<string name="need_storage">Allow to download episodes</string>-->
|
||||
|
||||
<string name="download">Pobierz</string>
|
||||
<string name="downloaded">Pobrane</string>
|
||||
|
@ -61,6 +61,7 @@
|
|||
<string name="download_done">Zakończono pobieranie</string>
|
||||
|
||||
<string name="stream">Stream</string>
|
||||
|
||||
<string name="error_loading_links_toast">Błąd przy ładowaniu linków</string>
|
||||
<string name="download_storage_text">Pamięć wewnętrzna</string>
|
||||
|
||||
|
@ -87,6 +88,7 @@
|
|||
<string name="sort_close">Zamknij</string>
|
||||
<string name="sort_clear">Wyczyść</string>
|
||||
<string name="sort_save">Zapisz</string>
|
||||
|
||||
<string name="player_speed">Prędkość odtwarzania</string>
|
||||
|
||||
<string name="subtitles_settings">Ustawienia napisów</string>
|
||||
|
@ -108,8 +110,8 @@
|
|||
<string name="subs_auto_select_language">Wybierz język automatycznie</string>
|
||||
<string name="subs_download_languages">Pobieranie języków</string>
|
||||
<string name="subs_subtitle_languages">Język napisów</string>
|
||||
<string name="subs_hold_to_reset_to_default">Przytrzymaj aby zresetować</string>
|
||||
<string name="subs_import_text">Importuj czcionki umieszczając je w %s</string>
|
||||
<string name="subs_hold_to_reset_to_default">Przytrzymaj, aby zresetować</string>
|
||||
<string name="subs_import_text" formatted="true">Importuj czcionki umieszczając je w %s</string>
|
||||
<string name="continue_watching">Kontyntynuj oglądanie</string>
|
||||
|
||||
<string name="action_remove_watching">Usuń</string>
|
||||
|
@ -125,6 +127,7 @@
|
|||
<string name="torrent_no_plot">Nie znaleziono opisu</string>
|
||||
|
||||
<string name="show_log_cat">Pokaż logcat 🐈</string>
|
||||
|
||||
<string name="picture_in_picture">Obraz-w-obrazie</string>
|
||||
<string name="picture_in_picture_des">Oglądaj w małym, pływającym okienku</string>
|
||||
<string name="player_size_settings">Przycisk zmiany rozmiaru</string>
|
||||
|
@ -140,17 +143,23 @@
|
|||
<string name="swipe_to_seek_settings_des">Przesuwaj w lewo lub prawo aby kontrolować czas</string>
|
||||
<string name="swipe_to_change_settings">Przesuwaj aby zmienić ustawienia</string>
|
||||
<string name="swipe_to_change_settings_des">Przesuwaj po lewej lub prawej stronie aby zmienić jasność i głośność</string>
|
||||
<string name="double_tap_to_seek_settings">Podwójne stuknięcie aby przeglądać</string>
|
||||
<string name="double_tap_to_pause_settings">Stuknij dwukrotnie, aby wstrzymać</string>
|
||||
|
||||
<string name="autoplay_next_settings">Autoodtwarzanie następnego odcinka</string>
|
||||
<string name="autoplay_next_settings_des">Rozpocznij następny odcinek po zakończeniu bieżącego</string>
|
||||
|
||||
<string name="double_tap_to_seek_amount_settings">Wielkość skoku przy podwójnym stuknięciu</string>
|
||||
<string name="double_tap_to_seek_settings">Podwójne stuknięcie aby przeglądać</string>
|
||||
<string name="double_tap_to_seek_settings_des">Stuknij 2 razy z prawej lub lewej strony aby przeglądać</string>
|
||||
|
||||
<string name="double_tap_to_pause_settings">Stuknij dwukrotnie, aby wstrzymać</string>
|
||||
<string name="double_tap_to_pause_settings_des">Stuknij na środku, aby wstrzymać</string>
|
||||
|
||||
<string name="use_system_brightness_settings">Użyj jasności systemowej</string>
|
||||
<string name="use_system_brightness_settings_des">Użyj jasności systemowej w odtwarzaczu aplikacji zamiast ciemnej nakładki
|
||||
</string>
|
||||
<string name="use_system_brightness_settings_des">Użyj jasności systemowej w odtwarzaczu aplikacji zamiast ciemnej nakładki</string>
|
||||
|
||||
<string name="episode_sync_settings">Aktualizuj postęp oglądania</string>
|
||||
<string name="episode_sync_settings_des">Automatycznie synchronizuj postęp aktualnego odcinka</string>
|
||||
|
||||
<string name="restore_settings">Przywracanie danych z kopii zapasowej</string>
|
||||
|
||||
<string name="backup_settings">Kopia zapasowa danych</string>
|
||||
|
@ -172,6 +181,10 @@
|
|||
<string name="show_fillers_settings">Pokaż odcinek wypełniający dla anime</string>
|
||||
<string name="show_trailers_settings">Pokaż zwiastuny</string>
|
||||
<string name="kitsu_settings">Pokaż plakaty z Kitsu</string>
|
||||
<string name="pref_filter_search_quality">Ukryj wybraną jakość wideo w wynikach wyszukiwania</string>
|
||||
|
||||
<string name="automatic_plugin_updates">Automatyczne aktualizacje rozszerzeń</string>
|
||||
<string name="automatic_plugin_download">Automatyczne pobieranie rozszerzeń</string>
|
||||
<string name="updates_settings">Pokazuj aktualizacje</string>
|
||||
<string name="updates_settings_des">Automatycznie wyszukuj aktualizacji przy starcie</string>
|
||||
<string name="uprereleases_settings">Aktualizuj do wersji beta</string>
|
||||
|
@ -193,13 +206,16 @@
|
|||
<string name="acra_report_toast">Awaria aplikacji. Anonimowe zgłoszenie błedu zostanie wysłane programistom</string>
|
||||
|
||||
<string name="season">Sezon</string>
|
||||
<string name="season_format">%s %d%s</string>
|
||||
<string name="no_season">Brak sezonu</string>
|
||||
<string name="episode">Odcinek</string>
|
||||
<string name="episodes">Odcinki</string>
|
||||
<string name="episodes_range">%d-%d</string>
|
||||
<string name="episode_format" formatted="true">%d %s</string>
|
||||
<string name="season_short">S</string>
|
||||
<string name="episode_short">O</string>
|
||||
|
||||
<string name="no_episodes_found">Nie znaleziono odcinków</string>
|
||||
|
||||
<string name="delete_file">Usuń plik</string>
|
||||
<string name="delete">Usuń</string>
|
||||
<string name="pause">Wstrzymaj</string>
|
||||
|
@ -226,6 +242,7 @@
|
|||
<string name="used_storage">W użyciu</string>
|
||||
<string name="app_storage">Aplikacja</string>
|
||||
|
||||
<!--plural-->
|
||||
<string name="movies">Filmy</string>
|
||||
<string name="tv_series">Serial telewizyjny</string>
|
||||
<string name="cartoons">Kreskówki</string>
|
||||
|
@ -234,14 +251,20 @@
|
|||
<string name="documentaries">Filmy dokumentalne</string>
|
||||
<string name="ova">OVA</string>
|
||||
<string name="asian_drama">Filmy azjatyckie</string>
|
||||
|
||||
<string name="livestreams">Transmisje na żywo</string>
|
||||
<string name="nsfw">NSFW</string>
|
||||
<string name="others">Inne</string>
|
||||
|
||||
<!--singular-->
|
||||
<string name="movies_singular">Film</string>
|
||||
<string name="tv_series_singular">Serial telewizyjny</string>
|
||||
<string name="cartoons_singular">Kreskówka</string>
|
||||
<string name="torrent_singular">Torrent</string>
|
||||
<string name="documentaries_singular">Film dokumentalny</string>
|
||||
<string name="asian_drama_singular">Film azjatycki</string>
|
||||
<string name="live_singular">Transmisja na żywo</string>
|
||||
<string name="nsfw_singular">NSFW</string>
|
||||
<string name="other_singular">Inne</string>
|
||||
|
||||
<string name="source_error">Błąd żródła</string>
|
||||
<string name="remote_error">Zdalny błąd</string>
|
||||
|
@ -258,13 +281,14 @@
|
|||
<string name="episode_action_auto_download">Automatyczne pobieranie</string>
|
||||
<string name="episode_action_download_mirror">Pobierz mirror</string>
|
||||
<string name="episode_action_reload_links">Odświerz linki</string>
|
||||
|
||||
<string name="episode_action_download_subtitle">Pobierz napisy</string>
|
||||
|
||||
<string name="show_hd">Etykieta jakości</string>
|
||||
<string name="show_dub">Etykieta dubbingu</string>
|
||||
<string name="show_sub">Etykieta napisów</string>
|
||||
<string name="show_title">Tytuł</string>
|
||||
<string name="poster_ui_settings">Włącz elementy interfejsu na plakatach</string>
|
||||
|
||||
<string name="no_update_found">Nie znaleziono aktualizacji</string>
|
||||
<string name="check_for_update">Sprawdź czy jest aktualizacja</string>
|
||||
|
||||
|
@ -279,6 +303,7 @@
|
|||
<string name="watch_quality_pref">Domyślna jakość</string>
|
||||
<string name="limit_title">Maksymalna ilość znaków tytułu w odtwarzaczu</string>
|
||||
<string name="limit_title_rez">Zawartość tytułu w odtwarzaczu</string>
|
||||
|
||||
<string name="video_buffer_size_settings">Rozmiar bufora wideo</string>
|
||||
<string name="video_buffer_length_settings">Długość bufora wideo</string>
|
||||
<string name="video_buffer_disk_settings">Pamięć podręczna wideo na dysku</string>
|
||||
|
@ -293,8 +318,11 @@
|
|||
<string name="add_site_pref">Sklonuj stronę</string>
|
||||
<string name="remove_site_pref">Usuń stronę</string>
|
||||
<string name="add_site_summary">Dodaj klona istniejącej strony z innym adresem url</string>
|
||||
|
||||
<string name="download_path_pref">Ścieżka pobierania</string>
|
||||
|
||||
<string name="nginx_url_pref">Url serwera Nginx</string>
|
||||
|
||||
<string name="display_subbed_dubbed_settings">Wyświetlanie Anime z dubbingiem/subbingiem</string>
|
||||
|
||||
<string name="resize_fit">Dopasuj do ekranu</string>
|
||||
|
@ -303,15 +331,17 @@
|
|||
|
||||
<string name="legal_notice">Zastrzeżenie</string>
|
||||
|
||||
<string name="category_general">Ogólne</string>
|
||||
<string name="random_button_settings">Przycisk do losowania</string>
|
||||
<string name="random_button_settings_desc">Pokaż przycisk do losowania na stronie głównej</string>
|
||||
<string name="provider_lang_settings">Języki dostawców</string>
|
||||
<string name="category_general">Ogólne</string>
|
||||
<string name="app_layout">Układ aplikacji</string>
|
||||
<string name="preferred_media_settings">Preferowane media</string>
|
||||
|
||||
<string name="enable_nsfw_on_providers">Włącz NSFW u obsługiwanych dostawców</string>
|
||||
<string name="subtitles_encoding">Kodowanie napisów</string>
|
||||
<string name="category_providers">Dostawcy</string>
|
||||
<string name="category_ui">Układ interfejsu</string>
|
||||
|
||||
<string name="automatic">Automatyczny</string>
|
||||
<string name="tv_layout">Układ dla telewizorów</string>
|
||||
<string name="phone_layout">Układ dla telefonów</string>
|
||||
|
@ -319,10 +349,12 @@
|
|||
|
||||
<string name="primary_color_settings">Kolor podstawowy</string>
|
||||
<string name="app_theme_settings">Motyw aplikacji</string>
|
||||
|
||||
|
||||
<string name="bottom_title_settings">Pozycja tytułu względem plakatu</string>
|
||||
<string name="bottom_title_settings_des">Ustaw tytuł pod plakatem</string>
|
||||
|
||||
<string name="example_lang_name">Kod języka (pl)</string>
|
||||
|
||||
<string name="login_format" formatted="true">%s %s</string>
|
||||
<string name="account">konto</string>
|
||||
<string name="logout">Wyloguj się</string>
|
||||
<string name="login">Logowanie</string>
|
||||
|
@ -332,9 +364,12 @@
|
|||
<string name="add_sync">Dodaj synchronizację</string>
|
||||
<string name="added_sync_format" formatted="true">Dodano %s</string>
|
||||
<string name="upload_sync">Synchronizacja</string>
|
||||
<string name="sync_score">Ocenione</string>
|
||||
<string name="sync_score_format" formatted="true">%d na 10</string>
|
||||
<string name="authenticated_user" formatted="true">Uwierzytelniono %s</string>
|
||||
<string name="authenticated_user_fail" formatted="true">Nie udało się uwierzytelnić w %s</string>
|
||||
|
||||
<string name="authenticated_user">Uwierzytelniono %s</string>
|
||||
<string name="authenticated_user_fail">Nie udało się uwierzytelnić w %s</string>
|
||||
<!-- ============ -->
|
||||
<string name="none">Brak</string>
|
||||
<string name="normal">Normalne</string>
|
||||
<string name="all">Wszystkie</string>
|
||||
|
@ -366,6 +401,7 @@
|
|||
<string name="home_random">Losowy</string>
|
||||
|
||||
<string name="coming_soon">Już wkrótce…</string>
|
||||
|
||||
<string name="quality_cam">Cam</string>
|
||||
<string name="quality_cam_rip">Cam</string>
|
||||
<string name="quality_cam_hd">Cam</string>
|
||||
|
@ -376,6 +412,13 @@
|
|||
<string name="quality_blueray">BlueRay</string>
|
||||
<string name="quality_workprint">WP</string>
|
||||
<string name="quality_dvd">DVD</string>
|
||||
<string name="quality_4k">4K</string>
|
||||
<string name="quality_sd">SD</string>
|
||||
<string name="quality_uhd">UHD</string>
|
||||
<string name="quality_hdr">HDR</string>
|
||||
<string name="quality_sdr">SDR</string>
|
||||
<string name="quality_webrip">Web</string>
|
||||
|
||||
<string name="poster_image">Obraz plakatu</string>
|
||||
<string name="category_player">Odtwarzacz</string>
|
||||
<string name="resolution_and_title">Rozdzielczość i tytuł</string>
|
||||
|
@ -387,30 +430,27 @@
|
|||
<string name="error">Błąd</string>
|
||||
<string name="subtitles_remove_captions">Usuń informacje dla niesłyszących z napisów</string>
|
||||
<string name="subtitles_remove_bloat">Usuń nadmiarowe informacje z napisów</string>
|
||||
<string name="subtitles_filter_lang">Filtrowanie wg preferowanego języka mediów</string>
|
||||
<string name="extras">Dodatki</string>
|
||||
<string name="trailer">Zwiastun</string>
|
||||
<string name="referer">Odsyłacz</string>
|
||||
<string name="next">Dalej</string>
|
||||
<string name="provider_languages_tip">Wyświetlaj filmy w wybranych językach</string>
|
||||
<string name="previous">Cofnij</string>
|
||||
<string name="skip_setup">Pomiń</string>
|
||||
<string name="app_layout_subtext">Dostosuj wygląd aplikacji do urządzenia</string>
|
||||
<string name="crash_reporting_title">Przekazywanie błędów</string>
|
||||
<string name="preferred_media_subtext">Preferowany rodzaj filmów</string>
|
||||
<string name="setup_done">Gotowe</string>
|
||||
<string name="extras">Dodatki</string>
|
||||
<string name="trailer">Zwiastun</string>
|
||||
<string name="play_with_app_name">Odtwórz w CloudStream</string>
|
||||
<string name="live_singular">Transmisja na żywo</string>
|
||||
<string name="network_adress_example">Link to streamu</string>
|
||||
<string name="referer">Odsyłacz</string>
|
||||
<string name="crash_reporting_title">Przekazywanie błędów</string>
|
||||
<string name="automatic_plugin_updates">Automatyczne aktualizacje rozszerzeń</string>
|
||||
<string name="extensions">Rozszerzenia</string>
|
||||
<string name="extensions">Dodatki</string>
|
||||
<string name="add_repository">Dodaj repozytorium</string>
|
||||
<string name="repository_name_hint">Nazwa repozytorium</string>
|
||||
<string name="repository_url_hint">Adres url repozytorium</string>
|
||||
<string name="plugin_loaded">Rozszerzenie załadowane</string>
|
||||
<string name="plugin_deleted">Rozszerzenie usunięte</string>
|
||||
<string name="plugin_load_fail" formatted="true">Błąd ładowania %s</string>
|
||||
<string name="is_adult">+18</string>
|
||||
<string name="batch_download_start_format" formatted="true">Zaczęto pobieranie %d %s</string>
|
||||
<string name="is_adult">18+</string>
|
||||
<string name="batch_download_start_format" formatted="true">Rozpoczęto pobieranie %d %s</string>
|
||||
<string name="batch_download_finish_format" formatted="true">Pobrano %d %s</string>
|
||||
<string name="batch_download_nothing_to_download_format" formatted="true">Wszystkie %s już pobrane</string>
|
||||
<string name="batch_download">Pobierz wszystko</string>
|
||||
|
@ -418,34 +458,27 @@
|
|||
<string name="plugin">rozszerzenia</string>
|
||||
<string name="delete_repository_plugins">Ta akcja usunie także wszystkie rozszerzenia z repozytorium</string>
|
||||
<string name="delete_repository">Usuń repozytorium</string>
|
||||
<string name="setup_extensions_subtext">Pobierz strony które Cię interesują</string>
|
||||
<string name="setup_extensions_subtext">Pobierz strony, które Cię interesują</string>
|
||||
<string name="plugins_downloaded" formatted="true">Pobrano: %d</string>
|
||||
<string name="plugins_disabled" formatted="true">Wyłączono: %d</string>
|
||||
<string name="plugins_not_downloaded" formatted="true">Nie pobrano: %d</string>
|
||||
<string name="plugins_updated">Zaaktualizowano %d rozszerzeń</string>
|
||||
<string name="blank_repo_message">Dodaj repozytorium aby zainstalować rozszerzenia</string>
|
||||
<string name="sync_score">Ocenione</string>
|
||||
<string name="sync_score_format" formatted="true">%d na 10</string>
|
||||
<string name="others">Inne</string>
|
||||
<string name="other_singular">Wideo</string>
|
||||
<string name="view_public_repositories_button">Zobacz repozytoria społeczności</string>
|
||||
<string name="view_public_repositories_button_short">Publiczna lista</string>
|
||||
<string name="example_lang_name">Kod języka (en)</string>
|
||||
<string name="subtitles_filter_lang">Filtrowanie wg preferowanego języka mediów</string>
|
||||
<string name="uppercase_all_subtitles">Wszystkie napisy wielką literą</string>
|
||||
|
||||
<string name="download_all_plugins_from_repo">Pobrać wszystkie rozszerzenia z tego repozytorium?</string>
|
||||
<string name="single_plugin_disabled" formatted="true">%s (Wyłączone)</string>
|
||||
<string name="pref_filter_search_quality">Ukryj wybraną jakość wideo w wynikach wyszukiwania</string>
|
||||
<string name="enable_nsfw_on_providers">Włącz NSFW u obsługiwanych dostawców</string>
|
||||
<string name="category_providers">Dostawcy</string>
|
||||
<string name="tracks">Ścieżki</string>
|
||||
<string name="audio_tracks">Ścieżki audio</string>
|
||||
<string name="video_tracks">Ścieżki wideo</string>
|
||||
<string name="apply_on_restart">Zastosuj po ponownym uruchomieniu</string>
|
||||
|
||||
<string name="safe_mode_title">Tryb bezpieczny włączony</string>
|
||||
<string name="safe_mode_description">Wystąpiła nieoczekiwana awaria i automatycznie wyłączyliśmy wszystkie rozszerzenia, abyś mógł znaleźć i usunąć rozszerzenie, które powoduje problemy.</string>
|
||||
<string name="safe_mode_crash_info">Wyświetl informacje o awarii</string>
|
||||
<string name="audio_tracks">Ścieżki audio</string>
|
||||
<string name="video_tracks">Ścieżki wideo</string>
|
||||
<string name="tracks">Ścieżki</string>
|
||||
<string name="apply_on_restart">Zastosuj po ponownym uruchomieniu</string>
|
||||
<string name="autoplay_next_settings_des">Rozpocznij następny odcinek po zakończeniu bieżącego</string>
|
||||
<string name="autoplay_next_settings">Autoodtwarzanie następnego odcinka</string>
|
||||
|
||||
<string name="extension_rating" formatted="true">Ocena: %s</string>
|
||||
<string name="extension_description">Opis</string>
|
||||
<string name="extension_version">Versja</string>
|
||||
|
@ -455,5 +488,19 @@
|
|||
<string name="extension_types">Wspierane</string>
|
||||
<string name="extension_language">Język</string>
|
||||
<string name="extension_install_first">Najpierw zainstaluj rozszerzenie</string>
|
||||
<string name="plugins_updated">Zaaktualizowano %d rozszerzeń</string>
|
||||
|
||||
<string name="hls_playlist">Playlista HLS</string>
|
||||
|
||||
<string name="player_pref">Preferowany odtwarzacz wideo</string>
|
||||
<string name="player_settings_play_in_app">Odtwarzacz wewnętrzny</string>
|
||||
<string name="player_settings_play_in_vlc">VLC</string>
|
||||
<string name="player_settings_play_in_mpv">MPV</string>
|
||||
<string name="player_settings_play_in_web">Web Video Cast</string>
|
||||
<string name="player_settings_play_in_browser">Przeglądarka</string>
|
||||
<string name="app_not_found_error">Aplikacja nie została znaleziona</string>
|
||||
<string name="all_languages_preference">Wszystkie języki</string>
|
||||
|
||||
<string name="clear_history">Wyczyść historię</string>
|
||||
<string name="history">Historia</string>
|
||||
<string name="clipboard_too_large">Za dużo tekstu. Nie można skopiować do schowka.</string>
|
||||
</resources>
|
||||
|
|
|
@ -25,13 +25,13 @@
|
|||
<color name="whiteText">#FFF</color>
|
||||
<color name="blackText">#000</color>
|
||||
|
||||
<color name="dubColor">#3d50fa</color> <!--3b65f5 f18c82 8294F1-->
|
||||
<color name="dubColorText">#121950</color> <!--3b65f5 f18c82 8294F1-->
|
||||
<color name="amoledModeLight">#121213</color>
|
||||
|
||||
<color name="dubColorBg">#3B65F5</color>
|
||||
<color name="subColor">#F54A3B</color> <!--F53B66 FA3D79-->
|
||||
<color name="subColorText">#571711</color> <!--F53B66 FA3D79-->
|
||||
<color name="subColorBg">#F53B66</color>
|
||||
<color name="typeColor">#3BF585</color>
|
||||
<color name="typeColorText">#BEC8FF</color>
|
||||
<color name="typeColorBg">?attr/colorPrimaryDark</color>
|
||||
|
||||
<color name="adultColor">#FF6F63</color> <!-- same as sub color -->
|
||||
|
|
|
@ -16,5 +16,4 @@
|
|||
<integer name="loading_time">2000</integer>
|
||||
|
||||
<dimen name="storage_radius">3dp</dimen>
|
||||
|
||||
</resources>
|
|
@ -98,6 +98,24 @@
|
|||
<item name="colorOnPrimary">@color/whiteText</item>
|
||||
</style>
|
||||
|
||||
<style name="DubButton" parent="@style/SearchBox">
|
||||
<item name="android:background">@drawable/dub_bg_color</item>
|
||||
<item name="android:text">@string/app_dubbed_text</item>
|
||||
<item name="android:textColor">@color/dubColorText</item>
|
||||
</style>
|
||||
|
||||
<style name="SubButton" parent="@style/SearchBox">
|
||||
<item name="android:background">@drawable/sub_bg_color</item>
|
||||
<item name="android:text">@string/app_subbed_text</item>
|
||||
<item name="android:textColor">@color/subColorText</item>
|
||||
</style>
|
||||
|
||||
<style name="TypeButton" parent="@style/SearchBox">
|
||||
<item name="android:background">@drawable/type_bg_color</item>
|
||||
<item name="android:text">@string/quality_hd</item>
|
||||
<item name="android:textColor">@color/typeColorText</item>
|
||||
</style>
|
||||
|
||||
<style name="LightMode">
|
||||
<item name="primaryGrayBackground">@color/lightPrimaryGrayBackground</item>
|
||||
<item name="primaryBlackBackground">@color/lightBitDarkerGrayBackground</item>
|
||||
|
@ -461,10 +479,10 @@
|
|||
<item name="android:layout_width">wrap_content</item>
|
||||
<item name="android:layout_height">wrap_content</item>
|
||||
<item name="android:layout_marginBottom">5dp</item>
|
||||
<item name="android:paddingLeft">10dp</item>
|
||||
<item name="android:paddingRight">10dp</item>
|
||||
<item name="android:paddingTop">5dp</item>
|
||||
<item name="android:paddingBottom">5dp</item>
|
||||
<item name="android:paddingLeft">7dp</item>
|
||||
<item name="android:paddingRight">7dp</item>
|
||||
<item name="android:paddingTop">3dp</item>
|
||||
<item name="android:paddingBottom">3dp</item>
|
||||
<item name="android:textSize">12sp</item>
|
||||
<item name="textColor">@color/textColor</item>
|
||||
<item name="android:textColor">@color/textColor</item>
|
||||
|
|
Loading…
Reference in a new issue