forked from recloudstream/cloudstream
commit
c237b71f52
6 changed files with 160 additions and 38 deletions
37
.github/workflows/prerelease.yml
vendored
Normal file
37
.github/workflows/prerelease.yml
vendored
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
name: Pre-release
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [ master ]
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: "pre-release"
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: Set up JDK 8
|
||||||
|
uses: actions/setup-java@v2
|
||||||
|
with:
|
||||||
|
java-version: '8'
|
||||||
|
distribution: 'adopt'
|
||||||
|
- name: Grant execute permission for gradlew
|
||||||
|
run: chmod +x gradlew
|
||||||
|
- name: Update prerelease_commit_hash
|
||||||
|
run: |
|
||||||
|
COMMIT_HASH="$(git log -1 --format='%H')"
|
||||||
|
sed -i "s/<string name=\"prerelease_commit_hash\">unknown_prerelease<\/string>/<string name=\"prerelease_commit_hash\">$COMMIT_HASH<\/string>/g" app/src/main/res/values/strings.xml
|
||||||
|
- name: Run Gradle
|
||||||
|
run: ./gradlew assembleDebug
|
||||||
|
- name: Create pre-release
|
||||||
|
uses: "marvinpinto/action-automatic-releases@latest"
|
||||||
|
with:
|
||||||
|
repo_token: "${{ secrets.GITHUB_TOKEN }}"
|
||||||
|
automatic_release_tag: "pre-release"
|
||||||
|
prerelease: true
|
||||||
|
title: "Pre-release Build"
|
||||||
|
files: |
|
||||||
|
app/build/outputs/apk/debug/*.apk
|
23
.github/workflows/pull_request.yml
vendored
Normal file
23
.github/workflows/pull_request.yml
vendored
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
name: Artifact Build
|
||||||
|
|
||||||
|
on: [pull_request]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: Set up JDK 8
|
||||||
|
uses: actions/setup-java@v2
|
||||||
|
with:
|
||||||
|
java-version: '8'
|
||||||
|
distribution: 'adopt'
|
||||||
|
- name: Grant execute permission for gradlew
|
||||||
|
run: chmod +x gradlew
|
||||||
|
- name: Run Gradle
|
||||||
|
run: ./gradlew assembleDebug
|
||||||
|
- name: Upload Artifact
|
||||||
|
uses: actions/upload-artifact@v2
|
||||||
|
with:
|
||||||
|
name: pull-request-build
|
||||||
|
path: "app/build/outputs/apk/debug/*.apk"
|
|
@ -16,6 +16,7 @@ import com.fasterxml.jackson.module.kotlin.KotlinModule
|
||||||
import com.fasterxml.jackson.module.kotlin.readValue
|
import com.fasterxml.jackson.module.kotlin.readValue
|
||||||
import com.lagradost.cloudstream3.BuildConfig
|
import com.lagradost.cloudstream3.BuildConfig
|
||||||
import com.lagradost.cloudstream3.R
|
import com.lagradost.cloudstream3.R
|
||||||
|
import com.lagradost.cloudstream3.utils.InAppUpdater.Companion.runAutoUpdate
|
||||||
import java.io.*
|
import java.io.*
|
||||||
import java.net.URL
|
import java.net.URL
|
||||||
import java.net.URLConnection
|
import java.net.URLConnection
|
||||||
|
@ -38,8 +39,19 @@ class InAppUpdater {
|
||||||
@JsonProperty("body") val body: String, // Desc
|
@JsonProperty("body") val body: String, // Desc
|
||||||
@JsonProperty("assets") val assets: List<GithubAsset>,
|
@JsonProperty("assets") val assets: List<GithubAsset>,
|
||||||
@JsonProperty("target_commitish") val target_commitish: String, // branch
|
@JsonProperty("target_commitish") val target_commitish: String, // branch
|
||||||
|
@JsonProperty("prerelease") val prerelease: Boolean,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
data class GithubObject(
|
||||||
|
@JsonProperty("sha") val sha: String, // sha 256 hash
|
||||||
|
@JsonProperty("type") val type: String, // object type
|
||||||
|
@JsonProperty("url") val url: String,
|
||||||
|
)
|
||||||
|
|
||||||
|
data class GithubTag(
|
||||||
|
@JsonProperty("object") val github_object: GithubObject,
|
||||||
|
)
|
||||||
|
|
||||||
data class Update(
|
data class Update(
|
||||||
@JsonProperty("shouldUpdate") val shouldUpdate: Boolean,
|
@JsonProperty("shouldUpdate") val shouldUpdate: Boolean,
|
||||||
@JsonProperty("updateURL") val updateURL: String?,
|
@JsonProperty("updateURL") val updateURL: String?,
|
||||||
|
@ -52,51 +64,86 @@ class InAppUpdater {
|
||||||
|
|
||||||
private fun Activity.getAppUpdate(): Update {
|
private fun Activity.getAppUpdate(): Update {
|
||||||
try {
|
try {
|
||||||
val url = "https://api.github.com/repos/LagradOst/CloudStream-3/releases"
|
val settingsManager = PreferenceManager.getDefaultSharedPreferences(this)
|
||||||
val headers = mapOf("Accept" to "application/vnd.github.v3+json")
|
return if (settingsManager.getBoolean(getString(R.string.prerelease_update_key), false)) {
|
||||||
val response =
|
getPreReleaseUpdate()
|
||||||
mapper.readValue<List<GithubRelease>>(khttp.get(url, headers = headers).text)
|
|
||||||
|
|
||||||
val versionRegex = Regex("""(.*?((\d)\.(\d)\.(\d)).*\.apk)""")
|
|
||||||
|
|
||||||
/*
|
|
||||||
val releases = response.map { it.assets }.flatten()
|
|
||||||
.filter { it.content_type == "application/vnd.android.package-archive" }
|
|
||||||
val found =
|
|
||||||
releases.sortedWith(compareBy {
|
|
||||||
versionRegex.find(it.name)?.groupValues?.get(2)
|
|
||||||
}).toList().lastOrNull()*/
|
|
||||||
val found =
|
|
||||||
response.sortedWith(compareBy { release ->
|
|
||||||
release.assets.filter { it.content_type == "application/vnd.android.package-archive" }
|
|
||||||
.getOrNull(0)?.name?.let { it1 ->
|
|
||||||
versionRegex.find(
|
|
||||||
it1
|
|
||||||
)?.groupValues?.get(2)
|
|
||||||
}
|
|
||||||
}).toList().lastOrNull()
|
|
||||||
val foundAsset = found?.assets?.getOrNull(0)
|
|
||||||
val currentVersion = packageName?.let {
|
|
||||||
packageManager.getPackageInfo(it,
|
|
||||||
0)
|
|
||||||
}
|
|
||||||
|
|
||||||
val foundVersion = foundAsset?.name?.let { versionRegex.find(it) }
|
|
||||||
val shouldUpdate = if (found != null && foundAsset?.browser_download_url != "" && foundVersion != null) currentVersion?.versionName?.compareTo(
|
|
||||||
foundVersion.groupValues[2]
|
|
||||||
)!! < 0 else false
|
|
||||||
return if (foundVersion != null) {
|
|
||||||
Update(shouldUpdate, foundAsset.browser_download_url, foundVersion.groupValues[2], found.body)
|
|
||||||
} else {
|
} else {
|
||||||
Update(false, null, null, null)
|
getReleaseUpdate()
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
println(e)
|
println(e)
|
||||||
return Update(false, null, null, null)
|
return Update(false, null, null, null)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun Activity.getReleaseUpdate(): Update {
|
||||||
|
val url = "https://api.github.com/repos/LagradOst/CloudStream-3/releases"
|
||||||
|
val headers = mapOf("Accept" to "application/vnd.github.v3+json")
|
||||||
|
val response =
|
||||||
|
mapper.readValue<List<GithubRelease>>(khttp.get(url, headers = headers).text)
|
||||||
|
|
||||||
|
val versionRegex = Regex("""(.*?((\d)\.(\d)\.(\d)).*\.apk)""")
|
||||||
|
|
||||||
|
/*
|
||||||
|
val releases = response.map { it.assets }.flatten()
|
||||||
|
.filter { it.content_type == "application/vnd.android.package-archive" }
|
||||||
|
val found =
|
||||||
|
releases.sortedWith(compareBy {
|
||||||
|
versionRegex.find(it.name)?.groupValues?.get(2)
|
||||||
|
}).toList().lastOrNull()*/
|
||||||
|
val found =
|
||||||
|
response.filter { rel ->
|
||||||
|
!rel.prerelease
|
||||||
|
}.sortedWith(compareBy { release ->
|
||||||
|
release.assets.filter { it.content_type == "application/vnd.android.package-archive" }
|
||||||
|
.getOrNull(0)?.name?.let { it1 ->
|
||||||
|
versionRegex.find(
|
||||||
|
it1
|
||||||
|
)?.groupValues?.get(2)
|
||||||
|
}
|
||||||
|
}).toList().lastOrNull()
|
||||||
|
val foundAsset = found?.assets?.getOrNull(0)
|
||||||
|
val currentVersion = packageName?.let {
|
||||||
|
packageManager.getPackageInfo(it,
|
||||||
|
0)
|
||||||
|
}
|
||||||
|
|
||||||
|
val foundVersion = foundAsset?.name?.let { versionRegex.find(it) }
|
||||||
|
val shouldUpdate = if (found != null && foundAsset?.browser_download_url != "" && foundVersion != null) currentVersion?.versionName?.compareTo(
|
||||||
|
foundVersion.groupValues[2]
|
||||||
|
)!! < 0 else false
|
||||||
|
return if (foundVersion != null) {
|
||||||
|
Update(shouldUpdate, foundAsset.browser_download_url, foundVersion.groupValues[2], found.body)
|
||||||
|
} else {
|
||||||
|
Update(false, null, null, null)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun Activity.getPreReleaseUpdate(): Update {
|
||||||
|
val tagUrl = "https://api.github.com/repos/LagradOst/CloudStream-3/git/ref/tags/pre-release"
|
||||||
|
val releaseUrl = "https://api.github.com/repos/LagradOst/CloudStream-3/releases"
|
||||||
|
val headers = mapOf("Accept" to "application/vnd.github.v3+json")
|
||||||
|
val response =
|
||||||
|
mapper.readValue<List<GithubRelease>>(khttp.get(releaseUrl, headers = headers).text)
|
||||||
|
|
||||||
|
val found =
|
||||||
|
response.lastOrNull { rel ->
|
||||||
|
rel.prerelease
|
||||||
|
}
|
||||||
|
val foundAsset = found?.assets?.getOrNull(0)
|
||||||
|
|
||||||
|
val tagResponse =
|
||||||
|
mapper.readValue<GithubTag>(khttp.get(tagUrl, headers = headers).text)
|
||||||
|
|
||||||
|
val shouldUpdate = (getString(R.string.prerelease_commit_hash) != tagResponse.github_object.sha)
|
||||||
|
|
||||||
|
return if (foundAsset != null) {
|
||||||
|
Update(shouldUpdate, foundAsset.browser_download_url, tagResponse.github_object.sha, found.body)
|
||||||
|
} else {
|
||||||
|
Update(false, null, null, null)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun Activity.downloadUpdate(url: String): Boolean {
|
private fun Activity.downloadUpdate(url: String): Boolean {
|
||||||
println("DOWNLOAD UPDATE $url")
|
println("DOWNLOAD UPDATE $url")
|
||||||
var fullResume = false // IF FULL RESUME
|
var fullResume = false // IF FULL RESUME
|
||||||
|
@ -280,4 +327,4 @@ class InAppUpdater {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
<vector android:height="24dp" android:tint="#FFFFFF"
|
||||||
|
android:viewportHeight="24" android:viewportWidth="24"
|
||||||
|
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<path android:fillColor="@android:color/white" android:pathData="M7,5h10v2h2L19,3c0,-1.1 -0.9,-1.99 -2,-1.99L7,1c-1.1,0 -2,0.9 -2,2v4h2L7,5zM15.41,16.59L20,12l-4.59,-4.59L14,8.83 17.17,12 14,15.17l1.41,1.42zM10,15.17L6.83,12 10,8.83 8.59,7.41 4,12l4.59,4.59L10,15.17zM17,19L7,19v-2L5,17v4c0,1.1 0.9,2 2,2h10c1.1,0 2,-0.9 2,-2v-4h-2v2z"/>
|
||||||
|
</vector>
|
|
@ -84,5 +84,8 @@
|
||||||
<string name="search_provider_text_providers">Search using providers</string>
|
<string name="search_provider_text_providers">Search using providers</string>
|
||||||
<string name="search_provider_text_types">Search using types</string>
|
<string name="search_provider_text_types">Search using types</string>
|
||||||
<string name="auto_update_key">auto_update</string>
|
<string name="auto_update_key">auto_update</string>
|
||||||
|
<string name="prerelease_update_key">prerelease_update</string>
|
||||||
<string name="manual_check_update_key">manual_check_update</string>
|
<string name="manual_check_update_key">manual_check_update</string>
|
||||||
|
|
||||||
|
<string name="prerelease_commit_hash">unknown_prerelease</string>
|
||||||
</resources>
|
</resources>
|
|
@ -91,6 +91,13 @@
|
||||||
app:defaultValue="true"
|
app:defaultValue="true"
|
||||||
android:icon="@drawable/ic_baseline_notifications_active_24"
|
android:icon="@drawable/ic_baseline_notifications_active_24"
|
||||||
/>
|
/>
|
||||||
|
<SwitchPreference
|
||||||
|
app:key="@string/prerelease_update_key"
|
||||||
|
android:title="Update to prereleases"
|
||||||
|
android:summary="Search for prerelease updates instead of full releases only"
|
||||||
|
app:defaultValue="false"
|
||||||
|
android:icon="@drawable/ic_baseline_developer_mode_24"
|
||||||
|
/>
|
||||||
<Preference
|
<Preference
|
||||||
android:title="Check for Update"
|
android:title="Check for Update"
|
||||||
app:key="@string/manual_check_update_key"
|
app:key="@string/manual_check_update_key"
|
||||||
|
|
Loading…
Reference in a new issue