update votes to sha256 and add github link

This commit is contained in:
Cloudburst 2022-09-05 19:09:27 +02:00
parent 37c9be96bb
commit 8172696d1a
4 changed files with 42 additions and 21 deletions

View file

@ -20,47 +20,45 @@ object VotingApi { // please do not cheat the votes lol
private fun transformUrl(url: String): String = // dont touch or all votes get reset private fun transformUrl(url: String): String = // dont touch or all votes get reset
MessageDigest MessageDigest
.getInstance("SHA-1") .getInstance("SHA-256")
.digest("${url}#funny-salt".toByteArray()) .digest("${url}#funny-salt".toByteArray())
.fold("") { str, it -> str + "%02x".format(it) } .fold("") { str, it -> str + "%02x".format(it) }
suspend fun SitePlugin.getVotes(): Int { suspend fun SitePlugin.getVotes(): Int {
if (repositoryUrl == null) return 0 return getVotes(url)
return getVotes(repositoryUrl, url)
} }
suspend fun SitePlugin.vote(requestType: VoteType): Int { suspend fun SitePlugin.vote(requestType: VoteType): Int {
if (repositoryUrl == null) return 0 return vote(url, requestType)
return vote(repositoryUrl, url, requestType)
} }
fun SitePlugin.getVoteType(): VoteType { fun SitePlugin.getVoteType(): VoteType {
if (repositoryUrl == null) return VoteType.NONE if (repositoryUrl == null) return VoteType.NONE
return getVoteType(repositoryUrl, url) return getVoteType(url)
} }
suspend fun getVotes(repositoryUrl: String, pluginUrl: String): Int { suspend fun getVotes(pluginUrl: String): Int {
val url = "${apiDomain}/get/cs3-votes-${transformUrl(repositoryUrl)}/${transformUrl(pluginUrl)}" val url = "${apiDomain}/get/cs3-votes/${transformUrl(pluginUrl)}"
Log.d(LOGKEY, "Requesting: $url") Log.d(LOGKEY, "Requesting: $url")
return app.get(url).parsedSafe<Result>()?.value ?: (0.also { return app.get(url).parsedSafe<Result>()?.value ?: (0.also {
ioSafe { ioSafe {
createBucket(repositoryUrl, pluginUrl) createBucket(pluginUrl)
} }
}) })
} }
fun getVoteType(repositoryUrl: String, pluginUrl: String): VoteType { fun getVoteType(pluginUrl: String): VoteType {
return getKey("cs3-votes-${transformUrl(repositoryUrl)}/${transformUrl(pluginUrl)}") ?: VoteType.NONE return getKey("cs3-votes/${transformUrl(pluginUrl)}") ?: VoteType.NONE
} }
private suspend fun createBucket(repositoryUrl: String, pluginUrl: String) { private suspend fun createBucket(pluginUrl: String) {
val url = "${apiDomain}/create?namespace=cs3-votes-${transformUrl(repositoryUrl)}&key=${transformUrl(pluginUrl)}&value=0&update_lowerbound=-2&update_upperbound=2&enable_reset=0" val url = "${apiDomain}/create?namespace=cs3-votes&key=${transformUrl(pluginUrl)}&value=0&update_lowerbound=-2&update_upperbound=2&enable_reset=0"
Log.d(LOGKEY, "Requesting: $url") Log.d(LOGKEY, "Requesting: $url")
app.get(url) app.get(url)
} }
suspend fun vote(repositoryUrl: String, pluginUrl: String, requestType: VoteType): Int { suspend fun vote(pluginUrl: String, requestType: VoteType): Int {
val savedType: VoteType = getKey("cs3-votes-${transformUrl(repositoryUrl)}/${transformUrl(pluginUrl)}") ?: VoteType.NONE val savedType: VoteType = getKey("cs3-votes/${transformUrl(pluginUrl)}") ?: VoteType.NONE
var newType: VoteType = requestType var newType: VoteType = requestType
var changeValue = 0 var changeValue = 0
if (requestType == savedType) { if (requestType == savedType) {
@ -71,11 +69,11 @@ object VotingApi { // please do not cheat the votes lol
} else if (savedType != requestType) { } else if (savedType != requestType) {
changeValue = -savedType.value + requestType.value changeValue = -savedType.value + requestType.value
} }
val url = "${apiDomain}/update/cs3-votes-${transformUrl(repositoryUrl)}/${transformUrl(pluginUrl)}?amount=${changeValue}" val url = "${apiDomain}/update/cs3-votes/${transformUrl(pluginUrl)}?amount=${changeValue}"
Log.d(LOGKEY, "Requesting: $url") Log.d(LOGKEY, "Requesting: $url")
val res = app.get(url).parsedSafe<Result>()?.value val res = app.get(url).parsedSafe<Result>()?.value
if (res != null) { if (res != null) {
setKey("cs3-votes-${transformUrl(repositoryUrl)}/${transformUrl(pluginUrl)}", newType) setKey("cs3-votes/${transformUrl(pluginUrl)}", newType)
} }
return res ?: 0 return res ?: 0
} }

View file

@ -135,7 +135,7 @@ class PluginAdapter(
val metadata = data.plugin.second val metadata = data.plugin.second
val disabled = metadata.status == PROVIDER_STATUS_DOWN val disabled = metadata.status == PROVIDER_STATUS_DOWN
val alpha = if (disabled) 0.6f else 1f val alpha = if (disabled) 0.6f else 1f
val isLocal = data.plugin.second.repositoryUrl == null val isLocal = !data.plugin.second.url.startsWith("http")
itemView.main_text?.alpha = alpha itemView.main_text?.alpha = alpha
itemView.sub_text?.alpha = alpha itemView.sub_text?.alpha = alpha
@ -216,11 +216,17 @@ class PluginAdapter(
itemView.lang_icon.text = fromTwoLettersToLanguage(metadata.language) itemView.lang_icon.text = fromTwoLettersToLanguage(metadata.language)
} }
if (isLocal) {
itemView.ext_votes?.isVisible = false
} else {
itemView.ext_votes?.isVisible = true
ioSafe { ioSafe {
metadata.getVotes().main { metadata.getVotes().main {
itemView.ext_votes?.setText(txt(R.string.votes_format, prettyCount(it))) itemView.ext_votes?.setText(txt(R.string.votes_format, prettyCount(it)))
} }
} }
}
if (metadata.fileSize != null) { if (metadata.fileSize != null) {
itemView.ext_filesize?.isVisible = true itemView.ext_filesize?.isVisible = true

View file

@ -18,6 +18,7 @@ import com.lagradost.cloudstream3.plugins.VotingApi.vote
import com.lagradost.cloudstream3.utils.Coroutines.ioSafe import com.lagradost.cloudstream3.utils.Coroutines.ioSafe
import com.lagradost.cloudstream3.utils.Coroutines.main import com.lagradost.cloudstream3.utils.Coroutines.main
import com.lagradost.cloudstream3.utils.UIHelper.colorFromAttribute import com.lagradost.cloudstream3.utils.UIHelper.colorFromAttribute
import com.lagradost.cloudstream3.AcraApplication.Companion.openBrowser
class PluginDetailsFragment(val data: PluginViewData) : BottomSheetDialogFragment() { class PluginDetailsFragment(val data: PluginViewData) : BottomSheetDialogFragment() {
@ -68,6 +69,13 @@ class PluginDetailsFragment(val data: PluginViewData) : BottomSheetDialogFragmen
plugin_status?.text = resources.getStringArray(R.array.extension_statuses)[metadata.status] plugin_status?.text = resources.getStringArray(R.array.extension_statuses)[metadata.status]
plugin_types?.text = if ((metadata.tvTypes == null) || metadata.tvTypes.isEmpty()) getString(R.string.no_data) else metadata.tvTypes.joinToString(", ") plugin_types?.text = if ((metadata.tvTypes == null) || metadata.tvTypes.isEmpty()) getString(R.string.no_data) else metadata.tvTypes.joinToString(", ")
github_btn.setOnClickListener {
if (metadata.repositoryUrl != null) {
openBrowser(metadata.repositoryUrl)
}
}
upvote.setOnClickListener { upvote.setOnClickListener {
ioSafe { ioSafe {
metadata.vote(VotingApi.VoteType.UPVOTE).main { metadata.vote(VotingApi.VoteType.UPVOTE).main {

View file

@ -34,6 +34,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center_vertical" android:layout_gravity="center_vertical"
android:layout_weight="1"
android:gravity="center_vertical" android:gravity="center_vertical"
android:paddingStart="10dp" android:paddingStart="10dp"
android:paddingEnd="10dp" android:paddingEnd="10dp"
@ -41,6 +42,14 @@
android:textSize="20sp" android:textSize="20sp"
android:textStyle="normal" android:textStyle="normal"
tools:text="Hello world" /> tools:text="Hello world" />
<ImageView
android:id="@+id/github_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|end"
android:background="?attr/selectableItemBackgroundBorderless"
android:src="@drawable/ic_github_logo" />
</LinearLayout> </LinearLayout>
<LinearLayout <LinearLayout