mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-10-30 22:07:57 +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