mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-11-04 16:18:55 +01:00 
			
		
		
		
	Check GitHub for preview release updates instead of inorichi's server
This commit is contained in:
		@@ -1,23 +0,0 @@
 | 
			
		||||
package eu.kanade.tachiyomi.data.updater
 | 
			
		||||
 | 
			
		||||
import eu.kanade.tachiyomi.BuildConfig
 | 
			
		||||
import eu.kanade.tachiyomi.data.updater.devrepo.DevRepoUpdateChecker
 | 
			
		||||
import eu.kanade.tachiyomi.data.updater.github.GithubUpdateChecker
 | 
			
		||||
 | 
			
		||||
abstract class UpdateChecker {
 | 
			
		||||
 | 
			
		||||
    companion object {
 | 
			
		||||
        fun getUpdateChecker(): UpdateChecker {
 | 
			
		||||
            return if (BuildConfig.DEBUG) {
 | 
			
		||||
                DevRepoUpdateChecker()
 | 
			
		||||
            } else {
 | 
			
		||||
                GithubUpdateChecker()
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns observable containing release information
 | 
			
		||||
     */
 | 
			
		||||
    abstract suspend fun checkForUpdate(): UpdateResult
 | 
			
		||||
}
 | 
			
		||||
@@ -13,6 +13,7 @@ import androidx.work.Worker
 | 
			
		||||
import androidx.work.WorkerParameters
 | 
			
		||||
import eu.kanade.tachiyomi.R
 | 
			
		||||
import eu.kanade.tachiyomi.data.notification.Notifications
 | 
			
		||||
import eu.kanade.tachiyomi.data.updater.github.GithubUpdateChecker
 | 
			
		||||
import eu.kanade.tachiyomi.util.system.notificationManager
 | 
			
		||||
import java.util.concurrent.TimeUnit
 | 
			
		||||
import kotlinx.coroutines.runBlocking
 | 
			
		||||
@@ -23,7 +24,7 @@ class UpdaterJob(private val context: Context, workerParams: WorkerParameters) :
 | 
			
		||||
    override fun doWork(): Result {
 | 
			
		||||
        return runBlocking {
 | 
			
		||||
            try {
 | 
			
		||||
                val result = UpdateChecker.getUpdateChecker().checkForUpdate()
 | 
			
		||||
                val result = GithubUpdateChecker().checkForUpdate()
 | 
			
		||||
 | 
			
		||||
                if (result is UpdateResult.NewUpdate<*>) {
 | 
			
		||||
                    val url = result.release.downloadLink
 | 
			
		||||
 
 | 
			
		||||
@@ -1,13 +0,0 @@
 | 
			
		||||
package eu.kanade.tachiyomi.data.updater.devrepo
 | 
			
		||||
 | 
			
		||||
import eu.kanade.tachiyomi.data.updater.Release
 | 
			
		||||
 | 
			
		||||
class DevRepoRelease(override val info: String) : Release {
 | 
			
		||||
 | 
			
		||||
    override val downloadLink: String
 | 
			
		||||
        get() = LATEST_URL
 | 
			
		||||
 | 
			
		||||
    companion object {
 | 
			
		||||
        const val LATEST_URL = "https://tachiyomi.kanade.eu/latest"
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,41 +0,0 @@
 | 
			
		||||
package eu.kanade.tachiyomi.data.updater.devrepo
 | 
			
		||||
 | 
			
		||||
import eu.kanade.tachiyomi.BuildConfig
 | 
			
		||||
import eu.kanade.tachiyomi.data.updater.UpdateChecker
 | 
			
		||||
import eu.kanade.tachiyomi.data.updater.UpdateResult
 | 
			
		||||
import eu.kanade.tachiyomi.network.GET
 | 
			
		||||
import eu.kanade.tachiyomi.network.NetworkHelper
 | 
			
		||||
import eu.kanade.tachiyomi.network.await
 | 
			
		||||
import kotlinx.coroutines.Dispatchers
 | 
			
		||||
import kotlinx.coroutines.withContext
 | 
			
		||||
import okhttp3.OkHttpClient
 | 
			
		||||
import uy.kohesive.injekt.Injekt
 | 
			
		||||
import uy.kohesive.injekt.api.get
 | 
			
		||||
 | 
			
		||||
class DevRepoUpdateChecker : UpdateChecker() {
 | 
			
		||||
 | 
			
		||||
    private val client: OkHttpClient by lazy {
 | 
			
		||||
        Injekt.get<NetworkHelper>().client.newBuilder()
 | 
			
		||||
            .followRedirects(false)
 | 
			
		||||
            .build()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private val versionRegex: Regex by lazy {
 | 
			
		||||
        Regex("tachiyomi-r(\\d+).apk")
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override suspend fun checkForUpdate(): UpdateResult {
 | 
			
		||||
        val response = withContext(Dispatchers.IO) {
 | 
			
		||||
            client.newCall(GET(DevRepoRelease.LATEST_URL)).await()
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Get latest repo version number from header in format "Location: tachiyomi-r1512.apk"
 | 
			
		||||
        val latestVersionNumber: String = versionRegex.find(response.header("Location")!!)!!.groupValues[1]
 | 
			
		||||
 | 
			
		||||
        return if (latestVersionNumber.toInt() > BuildConfig.COMMIT_COUNT.toInt()) {
 | 
			
		||||
            DevRepoUpdateResult.NewUpdate(DevRepoRelease("v$latestVersionNumber"))
 | 
			
		||||
        } else {
 | 
			
		||||
            DevRepoUpdateResult.NoNewUpdate()
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,9 +0,0 @@
 | 
			
		||||
package eu.kanade.tachiyomi.data.updater.devrepo
 | 
			
		||||
 | 
			
		||||
import eu.kanade.tachiyomi.data.updater.UpdateResult
 | 
			
		||||
 | 
			
		||||
sealed class DevRepoUpdateResult : UpdateResult() {
 | 
			
		||||
 | 
			
		||||
    class NewUpdate(release: DevRepoRelease) : UpdateResult.NewUpdate<DevRepoRelease>(release)
 | 
			
		||||
    class NoNewUpdate : UpdateResult.NoNewUpdate()
 | 
			
		||||
}
 | 
			
		||||
@@ -28,5 +28,5 @@ class GithubRelease(
 | 
			
		||||
     * Assets class containing download url.
 | 
			
		||||
     * @param downloadLink download url.
 | 
			
		||||
     */
 | 
			
		||||
    inner class Assets(@SerializedName("browser_download_url") val downloadLink: String)
 | 
			
		||||
    class Assets(@SerializedName("browser_download_url") val downloadLink: String)
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -4,11 +4,12 @@ import eu.kanade.tachiyomi.network.NetworkHelper
 | 
			
		||||
import retrofit2.Retrofit
 | 
			
		||||
import retrofit2.converter.gson.GsonConverterFactory
 | 
			
		||||
import retrofit2.http.GET
 | 
			
		||||
import retrofit2.http.Path
 | 
			
		||||
import uy.kohesive.injekt.Injekt
 | 
			
		||||
import uy.kohesive.injekt.api.get
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Used to connect with the GitHub API.
 | 
			
		||||
 * Used to connect with the GitHub API to get the latest release version from a repo.
 | 
			
		||||
 */
 | 
			
		||||
interface GithubService {
 | 
			
		||||
 | 
			
		||||
@@ -24,6 +25,6 @@ interface GithubService {
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @GET("/repos/inorichi/tachiyomi/releases/latest")
 | 
			
		||||
    suspend fun getLatestVersion(): GithubRelease
 | 
			
		||||
    @GET("/repos/{repo}/releases/latest")
 | 
			
		||||
    suspend fun getLatestVersion(@Path("repo", encoded = true) repo: String): GithubRelease
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,23 +1,43 @@
 | 
			
		||||
package eu.kanade.tachiyomi.data.updater.github
 | 
			
		||||
 | 
			
		||||
import eu.kanade.tachiyomi.BuildConfig
 | 
			
		||||
import eu.kanade.tachiyomi.data.updater.UpdateChecker
 | 
			
		||||
import eu.kanade.tachiyomi.data.updater.UpdateResult
 | 
			
		||||
 | 
			
		||||
class GithubUpdateChecker : UpdateChecker() {
 | 
			
		||||
class GithubUpdateChecker {
 | 
			
		||||
 | 
			
		||||
    private val service: GithubService = GithubService.create()
 | 
			
		||||
 | 
			
		||||
    override suspend fun checkForUpdate(): UpdateResult {
 | 
			
		||||
        val release = service.getLatestVersion()
 | 
			
		||||
    private val repo: String by lazy {
 | 
			
		||||
        if (BuildConfig.DEBUG) {
 | 
			
		||||
            "tachiyomiorg/android-app-preview"
 | 
			
		||||
        } else {
 | 
			
		||||
            "inorichi/tachiyomi"
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
        val newVersion = release.version.replace("[^\\d.]".toRegex(), "")
 | 
			
		||||
    suspend fun checkForUpdate(): UpdateResult {
 | 
			
		||||
        val release = service.getLatestVersion(repo)
 | 
			
		||||
 | 
			
		||||
        // Check if latest version is different from current version
 | 
			
		||||
        return if (newVersion != BuildConfig.VERSION_NAME) {
 | 
			
		||||
        return if (isNewVersion(release.version)) {
 | 
			
		||||
            GithubUpdateResult.NewUpdate(release)
 | 
			
		||||
        } else {
 | 
			
		||||
            GithubUpdateResult.NoNewUpdate()
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private fun isNewVersion(versionTag: String): Boolean {
 | 
			
		||||
        // Removes prefixes like "r" or "v"
 | 
			
		||||
        val newVersion = versionTag.replace("[^\\d.]".toRegex(), "")
 | 
			
		||||
 | 
			
		||||
        return if (BuildConfig.DEBUG) {
 | 
			
		||||
            // Preview builds: based on releases in "tachiyomiorg/android-app-preview" repo
 | 
			
		||||
            // tagged as something like "r1234"
 | 
			
		||||
            newVersion.toInt() > BuildConfig.COMMIT_COUNT.toInt()
 | 
			
		||||
        } else {
 | 
			
		||||
            // Release builds: based on releases in "inorichi/tachiyomi" repo
 | 
			
		||||
            // tagged as something like "v0.1.2"
 | 
			
		||||
            newVersion != BuildConfig.VERSION_NAME
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -10,9 +10,9 @@ import com.afollestad.materialdialogs.MaterialDialog
 | 
			
		||||
import com.mikepenz.aboutlibraries.LibsBuilder
 | 
			
		||||
import eu.kanade.tachiyomi.BuildConfig
 | 
			
		||||
import eu.kanade.tachiyomi.R
 | 
			
		||||
import eu.kanade.tachiyomi.data.updater.UpdateChecker
 | 
			
		||||
import eu.kanade.tachiyomi.data.updater.UpdateResult
 | 
			
		||||
import eu.kanade.tachiyomi.data.updater.UpdaterService
 | 
			
		||||
import eu.kanade.tachiyomi.data.updater.github.GithubUpdateChecker
 | 
			
		||||
import eu.kanade.tachiyomi.ui.base.controller.DialogController
 | 
			
		||||
import eu.kanade.tachiyomi.ui.setting.SettingsController
 | 
			
		||||
import eu.kanade.tachiyomi.util.lang.launchNow
 | 
			
		||||
@@ -35,7 +35,7 @@ class AboutController : SettingsController() {
 | 
			
		||||
    /**
 | 
			
		||||
     * Checks for new releases
 | 
			
		||||
     */
 | 
			
		||||
    private val updateChecker by lazy { UpdateChecker.getUpdateChecker() }
 | 
			
		||||
    private val updateChecker by lazy { GithubUpdateChecker() }
 | 
			
		||||
 | 
			
		||||
    private val dateFormat: DateFormat = preferences.dateFormat()
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user