feat(Updater): handle errors graciously
This commit is contained in:
parent
ba8b4c48af
commit
1b53c72153
38 changed files with 140 additions and 91 deletions
|
|
@ -59,6 +59,11 @@ interface IDownloadManager {
|
|||
* If null is returned, then the [getDebugReason] will be used instead.
|
||||
*/
|
||||
open fun getLocalizedReason(context: Context): String? = null
|
||||
|
||||
/**
|
||||
* Gets the underlying raw error (if available).
|
||||
*/
|
||||
open fun getError(): Throwable? = null
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -117,7 +117,7 @@ class KtorDownloadManager(
|
|||
) : Result.Error() {
|
||||
override fun toString(): String = error.stackTraceToString()
|
||||
override fun getDebugReason(): String = error.message ?: "Unknown exception"
|
||||
override fun getLocalizedReason(context: Context): String? =
|
||||
localizedError?.let(context::getString)
|
||||
override fun getLocalizedReason(context: Context): String? = localizedError?.let(context::getString)
|
||||
override fun getError(): Throwable? = error
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -38,5 +38,6 @@ class AliucordGithubService(
|
|||
const val MANAGER_REPO = "Manager"
|
||||
|
||||
const val DATA_JSON_URL = "https://raw.githubusercontent.com/$ORG/$MAIN_REPO/builds/data.json"
|
||||
const val LATEST_RELEASE_HTML_URL = "https://github.com/$ORG/$MANAGER_REPO/releases/latest"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,8 +1,10 @@
|
|||
package com.aliucord.manager.ui.widgets.updater
|
||||
|
||||
import android.app.Application
|
||||
import android.content.Intent
|
||||
import android.util.Log
|
||||
import androidx.compose.runtime.*
|
||||
import androidx.core.net.toUri
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import com.aliucord.manager.BuildConfig
|
||||
|
|
@ -10,6 +12,7 @@ import com.aliucord.manager.R
|
|||
import com.aliucord.manager.installers.InstallerResult
|
||||
import com.aliucord.manager.manager.InstallerManager
|
||||
import com.aliucord.manager.manager.InstallerSetting
|
||||
import com.aliucord.manager.manager.download.IDownloadManager
|
||||
import com.aliucord.manager.manager.download.KtorDownloadManager
|
||||
import com.aliucord.manager.network.services.AliucordGithubService
|
||||
import com.aliucord.manager.network.utils.SemVer
|
||||
|
|
@ -39,7 +42,7 @@ class UpdaterViewModel(
|
|||
fetchInfo()
|
||||
} catch (t: Throwable) {
|
||||
Log.e(BuildConfig.TAG, "Failed to check for updates!", t)
|
||||
application.showToast(R.string.updater_fail)
|
||||
application.showToast(R.string.updater_check_fail)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -55,31 +58,60 @@ class UpdaterViewModel(
|
|||
viewModelScope.launch {
|
||||
isWorking = true
|
||||
|
||||
val apkFile = application.cacheDir.resolve("manager.apk").apply { delete() }
|
||||
val installer = installers.getInstaller(InstallerSetting.PM)
|
||||
val apkFile = application.cacheDir.resolve("manager.apk")
|
||||
|
||||
downloader.download(url, apkFile)
|
||||
|
||||
val installResult = installer.waitInstall(
|
||||
apks = listOf(apkFile),
|
||||
silent = true,
|
||||
)
|
||||
|
||||
when (installResult) {
|
||||
InstallerResult.Success -> {
|
||||
Log.w(BuildConfig.TAG, "Update completed without restarting app!")
|
||||
exitProcess(1)
|
||||
try {
|
||||
apkFile.apply {
|
||||
parentFile!!.mkdirs()
|
||||
exists() && delete()
|
||||
}
|
||||
|
||||
is InstallerResult.Cancelled ->
|
||||
Log.i(BuildConfig.TAG, "Update cancelled")
|
||||
val installer = installers.getInstaller(InstallerSetting.PM)
|
||||
|
||||
is InstallerResult.Error ->
|
||||
Log.e(BuildConfig.TAG, "Failed to update: ${installResult.getDebugReason()}")
|
||||
when (val downloadResult = downloader.download(url, apkFile)) {
|
||||
is IDownloadManager.Result.Success ->
|
||||
Log.d(BuildConfig.TAG, "Downloaded update")
|
||||
|
||||
is IDownloadManager.Result.Cancelled -> {
|
||||
Log.i(BuildConfig.TAG, "Update cancelled")
|
||||
return@launch
|
||||
}
|
||||
|
||||
is IDownloadManager.Result.Error ->
|
||||
throw IllegalStateException("Failed to download update: ${downloadResult.getDebugReason()}", downloadResult.getError())
|
||||
}
|
||||
|
||||
val installResult = installer.waitInstall(
|
||||
apks = listOf(apkFile),
|
||||
silent = true,
|
||||
)
|
||||
|
||||
when (installResult) {
|
||||
InstallerResult.Success -> {
|
||||
Log.w(BuildConfig.TAG, "Update completed without restarting app!")
|
||||
exitProcess(1)
|
||||
}
|
||||
|
||||
is InstallerResult.Cancelled ->
|
||||
Log.i(BuildConfig.TAG, "Update cancelled")
|
||||
|
||||
is InstallerResult.Error ->
|
||||
throw Exception("Failed to install update: ${installResult.getDebugReason()}")
|
||||
}
|
||||
} catch (t: Throwable) {
|
||||
Log.e(BuildConfig.TAG, "Failed to perform update!")
|
||||
t.printStackTrace()
|
||||
application.showToast(R.string.updater_update_fail)
|
||||
launchReleasesPage()
|
||||
} finally {
|
||||
isWorking = false
|
||||
|
||||
try {
|
||||
apkFile.apply { exists() && delete() }
|
||||
} catch (t: Throwable) {
|
||||
Log.w(BuildConfig.TAG, "Failed to clean up installed update!", t)
|
||||
}
|
||||
}
|
||||
|
||||
apkFile.delete()
|
||||
isWorking = false
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -124,4 +156,14 @@ class UpdaterViewModel(
|
|||
showDialog = true
|
||||
Log.d(BuildConfig.TAG, "Found an update! $targetVersion $targetApkUrl")
|
||||
}
|
||||
|
||||
private fun launchReleasesPage() {
|
||||
try {
|
||||
Intent(Intent.ACTION_VIEW, AliucordGithubService.LATEST_RELEASE_HTML_URL.toUri())
|
||||
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||
.also(application::startActivity)
|
||||
} catch (t: Throwable) {
|
||||
Log.w(BuildConfig.TAG, "Failed to open latest Github release in browser!", t)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -127,8 +127,8 @@
|
|||
<string name="installer_abort_title">Really exit?</string>
|
||||
<string name="installer_abort_body">Are you sure you really want to abort an in-progress installation? Cached files will be cleared to avoid corruption.</string>
|
||||
<string name="updater_body">A new update has been released for Aliucord Manager! It may be required in order to function properly. Would you like to update?</string>
|
||||
<string name="updater_title">Update to %1$s</string>
|
||||
<string name="updater_fail">Failed to check for updates!</string>
|
||||
<string name="updater_title">Update to v%s</string>
|
||||
<string name="updater_check_fail">Failed to check for updates!</string>
|
||||
<string name="downloader_err_unknown">Download failed (Unknown)</string>
|
||||
<string name="downloader_err_timeout">Download failed (Timeout)</string>
|
||||
<string name="downloader_err_response">Download failed (Invalid response)</string>
|
||||
|
|
|
|||
|
|
@ -127,8 +127,8 @@
|
|||
<string name="installer_abort_title">هل تريد الخروج؟</string>
|
||||
<string name="installer_abort_body">Are you sure you really want to abort an in-progress installation? Cached files will be cleared to avoid corruption.</string>
|
||||
<string name="updater_body">تم إصدار تحديث جديد لمدير Aliucord Manager! قد تكون مطلوبة من أجل العمل بشكل صحيح. هل ترغب في التحديث؟</string>
|
||||
<string name="updater_title">تم التحديث الي %1$s</string>
|
||||
<string name="updater_fail">فشل في التحقق من وجود تحديثات</string>
|
||||
<string name="updater_title">تم التحديث الي v%s</string>
|
||||
<string name="updater_check_fail">فشل في التحقق من وجود تحديثات</string>
|
||||
<string name="downloader_err_unknown">فشل التنزيل (مجهول)</string>
|
||||
<string name="downloader_err_timeout">فشل التنزيل (المهلة)</string>
|
||||
<string name="downloader_err_response">فشل التحميل (استجابة غير صالحة)</string>
|
||||
|
|
|
|||
|
|
@ -127,8 +127,8 @@
|
|||
<string name="installer_abort_title">Really exit?</string>
|
||||
<string name="installer_abort_body">Are you sure you really want to abort an in-progress installation? Cached files will be cleared to avoid corruption.</string>
|
||||
<string name="updater_body">A new update has been released for Aliucord Manager! It may be required in order to function properly. Would you like to update?</string>
|
||||
<string name="updater_title">Update to %1$s</string>
|
||||
<string name="updater_fail">Failed to check for updates!</string>
|
||||
<string name="updater_title">Update to v%s</string>
|
||||
<string name="updater_check_fail">Failed to check for updates!</string>
|
||||
<string name="downloader_err_unknown">Download failed (Unknown)</string>
|
||||
<string name="downloader_err_timeout">Download failed (Timeout)</string>
|
||||
<string name="downloader_err_response">Download failed (Invalid response)</string>
|
||||
|
|
|
|||
|
|
@ -127,8 +127,8 @@
|
|||
<string name="installer_abort_title">Really exit?</string>
|
||||
<string name="installer_abort_body">Are you sure you really want to abort an in-progress installation? Cached files will be cleared to avoid corruption.</string>
|
||||
<string name="updater_body">A new update has been released for Aliucord Manager! It may be required in order to function properly. Would you like to update?</string>
|
||||
<string name="updater_title">Update to %1$s</string>
|
||||
<string name="updater_fail">Failed to check for updates!</string>
|
||||
<string name="updater_title">Update to v%s</string>
|
||||
<string name="updater_check_fail">Failed to check for updates!</string>
|
||||
<string name="downloader_err_unknown">Download failed (Unknown)</string>
|
||||
<string name="downloader_err_timeout">Download failed (Timeout)</string>
|
||||
<string name="downloader_err_response">Download failed (Invalid response)</string>
|
||||
|
|
|
|||
|
|
@ -127,8 +127,8 @@
|
|||
<string name="installer_abort_title">Afslut, sikker?</string>
|
||||
<string name="installer_abort_body">Sikker på, at den igangværende installation skal afbrydes?</string>
|
||||
<string name="updater_body">Ny opdatering udgivet! Den kan være nødvendig for korrekt funktion af Aliucord Manager. Opdatér?</string>
|
||||
<string name="updater_title">Opdatér til %1$s</string>
|
||||
<string name="updater_fail">Failed to check for updates!</string>
|
||||
<string name="updater_title">Opdatér til v%s</string>
|
||||
<string name="updater_check_fail">Failed to check for updates!</string>
|
||||
<string name="downloader_err_unknown">Download mislykkedes (ukendt)</string>
|
||||
<string name="downloader_err_timeout">Download mislykkedes (timeout)</string>
|
||||
<string name="downloader_err_response">Download mislykkedes (ugyldigt svar)</string>
|
||||
|
|
|
|||
|
|
@ -127,8 +127,8 @@
|
|||
<string name="installer_abort_title">Really exit?</string>
|
||||
<string name="installer_abort_body">Are you sure you really want to abort an in-progress installation? Cached files will be cleared to avoid corruption.</string>
|
||||
<string name="updater_body">A new update has been released for Aliucord Manager! It may be required in order to function properly. Would you like to update?</string>
|
||||
<string name="updater_title">Update to %1$s</string>
|
||||
<string name="updater_fail">Failed to check for updates!</string>
|
||||
<string name="updater_title">Update to v%s</string>
|
||||
<string name="updater_check_fail">Failed to check for updates!</string>
|
||||
<string name="downloader_err_unknown">Download failed (Unknown)</string>
|
||||
<string name="downloader_err_timeout">Download failed (Timeout)</string>
|
||||
<string name="downloader_err_response">Download failed (Invalid response)</string>
|
||||
|
|
|
|||
|
|
@ -127,8 +127,8 @@
|
|||
<string name="installer_abort_title">Έξοδος σίγουρα;</string>
|
||||
<string name="installer_abort_body">Είστε βέβαιοι ότι θέλετε να ακυρώσετε μια σε εξέλιξη εγκατάσταση; Τα προσωρινά αποθηκευμένα αρχεία θα καθαριστούν για να αποφευχθεί η διαφθορά.</string>
|
||||
<string name="updater_body">Μια νέα ενημέρωση έχει κυκλοφορήσει για το Aliucord Manager! Μπορεί να απαιτείται για να λειτουργήσει σωστά. Θα θέλατε να ενημερώσετε;</string>
|
||||
<string name="updater_title">Ενημέρωση σε %1$s</string>
|
||||
<string name="updater_fail">Failed to check for updates!</string>
|
||||
<string name="updater_title">Ενημέρωση σε v%s</string>
|
||||
<string name="updater_check_fail">Failed to check for updates!</string>
|
||||
<string name="downloader_err_unknown">Αποτυχία λήψης (Άγνωστη)</string>
|
||||
<string name="downloader_err_timeout">Download failed (Timeout)</string>
|
||||
<string name="downloader_err_response">Αποτυχία λήψης (Μη έγκυρη απάντηση)</string>
|
||||
|
|
|
|||
|
|
@ -127,8 +127,8 @@
|
|||
<string name="installer_abort_title">¿Seguro que quieres salir?</string>
|
||||
<string name="installer_abort_body">¿Seguro de que realmente quieres abortar una instalación en progreso?</string>
|
||||
<string name="updater_body">¡Se ha publicado una nueva actualización para Aliucord Manager! Puede que sea necesaria para funcionar correctamente. ¿Quieres actualizar?</string>
|
||||
<string name="updater_title">Actualizada a %1$s</string>
|
||||
<string name="updater_fail">Failed to check for updates!</string>
|
||||
<string name="updater_title">Actualizada a v%s</string>
|
||||
<string name="updater_check_fail">Failed to check for updates!</string>
|
||||
<string name="downloader_err_unknown">Descarga fallida (desconocida)</string>
|
||||
<string name="downloader_err_timeout">Download failed (Timeout)</string>
|
||||
<string name="downloader_err_response">Descarga fallida (respuesta no válida)</string>
|
||||
|
|
|
|||
|
|
@ -127,8 +127,8 @@
|
|||
<string name="installer_abort_title">Really exit?</string>
|
||||
<string name="installer_abort_body">Are you sure you really want to abort an in-progress installation? Cached files will be cleared to avoid corruption.</string>
|
||||
<string name="updater_body">A new update has been released for Aliucord Manager! It may be required in order to function properly. Would you like to update?</string>
|
||||
<string name="updater_title">Update to %1$s</string>
|
||||
<string name="updater_fail">Failed to check for updates!</string>
|
||||
<string name="updater_title">Update to v%s</string>
|
||||
<string name="updater_check_fail">Failed to check for updates!</string>
|
||||
<string name="downloader_err_unknown">Download failed (Unknown)</string>
|
||||
<string name="downloader_err_timeout">Download failed (Timeout)</string>
|
||||
<string name="downloader_err_response">Download failed (Invalid response)</string>
|
||||
|
|
|
|||
|
|
@ -127,8 +127,8 @@
|
|||
<string name="installer_abort_title">Really exit?</string>
|
||||
<string name="installer_abort_body">Are you sure you really want to abort an in-progress installation? Cached files will be cleared to avoid corruption.</string>
|
||||
<string name="updater_body">Une nouvelle mise à jour a été publiée pour Aliucord Manager ! Elle peut être nécessaire pour fonctionner correctement. Voulez-vous faire la mise à jour ?</string>
|
||||
<string name="updater_title">Mettre à jour vers %1$s</string>
|
||||
<string name="updater_fail">Failed to check for updates!</string>
|
||||
<string name="updater_title">Mettre à jour vers v%s</string>
|
||||
<string name="updater_check_fail">Failed to check for updates!</string>
|
||||
<string name="downloader_err_unknown">Download failed (Unknown)</string>
|
||||
<string name="downloader_err_timeout">Download failed (Timeout)</string>
|
||||
<string name="downloader_err_response">Download failed (Invalid response)</string>
|
||||
|
|
|
|||
|
|
@ -127,8 +127,8 @@
|
|||
<string name="installer_abort_title">Really exit?</string>
|
||||
<string name="installer_abort_body">Are you sure you really want to abort an in-progress installation? Cached files will be cleared to avoid corruption.</string>
|
||||
<string name="updater_body">A new update has been released for Aliucord Manager! It may be required in order to function properly. Would you like to update?</string>
|
||||
<string name="updater_title">Update to %1$s</string>
|
||||
<string name="updater_fail">Failed to check for updates!</string>
|
||||
<string name="updater_title">Update to v%s</string>
|
||||
<string name="updater_check_fail">Failed to check for updates!</string>
|
||||
<string name="downloader_err_unknown">Download failed (Unknown)</string>
|
||||
<string name="downloader_err_timeout">Download failed (Timeout)</string>
|
||||
<string name="downloader_err_response">Download failed (Invalid response)</string>
|
||||
|
|
|
|||
|
|
@ -127,8 +127,8 @@
|
|||
<string name="installer_abort_title">Really exit?</string>
|
||||
<string name="installer_abort_body">Are you sure you really want to abort an in-progress installation? Cached files will be cleared to avoid corruption.</string>
|
||||
<string name="updater_body">A new update has been released for Aliucord Manager! It may be required in order to function properly. Would you like to update?</string>
|
||||
<string name="updater_title">Update to %1$s</string>
|
||||
<string name="updater_fail">Failed to check for updates!</string>
|
||||
<string name="updater_title">Update to v%s</string>
|
||||
<string name="updater_check_fail">Failed to check for updates!</string>
|
||||
<string name="downloader_err_unknown">Download failed (Unknown)</string>
|
||||
<string name="downloader_err_timeout">Download failed (Timeout)</string>
|
||||
<string name="downloader_err_response">Download failed (Invalid response)</string>
|
||||
|
|
|
|||
|
|
@ -127,8 +127,8 @@
|
|||
<string name="installer_abort_title">Really exit?</string>
|
||||
<string name="installer_abort_body">Are you sure you really want to abort an in-progress installation? Cached files will be cleared to avoid corruption.</string>
|
||||
<string name="updater_body">Perbaruan baru sudah dirilis untuk Aliucord Manager! Itu mungkin diperlukan untuk berfungsi dengan baik. Apakah kamu ingin perbarui?</string>
|
||||
<string name="updater_title">Diperbarui ke %1$s</string>
|
||||
<string name="updater_fail">Failed to check for updates!</string>
|
||||
<string name="updater_title">Diperbarui ke v%s</string>
|
||||
<string name="updater_check_fail">Failed to check for updates!</string>
|
||||
<string name="downloader_err_unknown">Download failed (Unknown)</string>
|
||||
<string name="downloader_err_timeout">Download failed (Timeout)</string>
|
||||
<string name="downloader_err_response">Download failed (Invalid response)</string>
|
||||
|
|
|
|||
|
|
@ -127,8 +127,8 @@
|
|||
<string name="installer_abort_title">Really exit?</string>
|
||||
<string name="installer_abort_body">Are you sure you really want to abort an in-progress installation? Cached files will be cleared to avoid corruption.</string>
|
||||
<string name="updater_body">A new update has been released for Aliucord Manager! It may be required in order to function properly. Would you like to update?</string>
|
||||
<string name="updater_title">Update to %1$s</string>
|
||||
<string name="updater_fail">Failed to check for updates!</string>
|
||||
<string name="updater_title">Update to v%s</string>
|
||||
<string name="updater_check_fail">Failed to check for updates!</string>
|
||||
<string name="downloader_err_unknown">Download failed (Unknown)</string>
|
||||
<string name="downloader_err_timeout">Download failed (Timeout)</string>
|
||||
<string name="downloader_err_response">Download failed (Invalid response)</string>
|
||||
|
|
|
|||
|
|
@ -127,8 +127,8 @@
|
|||
<string name="installer_abort_title">Really exit?</string>
|
||||
<string name="installer_abort_body">Are you sure you really want to abort an in-progress installation? Cached files will be cleared to avoid corruption.</string>
|
||||
<string name="updater_body">A new update has been released for Aliucord Manager! It may be required in order to function properly. Would you like to update?</string>
|
||||
<string name="updater_title">Update to %1$s</string>
|
||||
<string name="updater_fail">Failed to check for updates!</string>
|
||||
<string name="updater_title">Update to v%s</string>
|
||||
<string name="updater_check_fail">Failed to check for updates!</string>
|
||||
<string name="downloader_err_unknown">Download failed (Unknown)</string>
|
||||
<string name="downloader_err_timeout">Download failed (Timeout)</string>
|
||||
<string name="downloader_err_response">Download failed (Invalid response)</string>
|
||||
|
|
|
|||
|
|
@ -128,8 +128,8 @@
|
|||
<string name="installer_abort_title">本当に終了しますか?</string>
|
||||
<string name="installer_abort_body">本当に進行中のインストールを中止してもよろしいですか?</string>
|
||||
<string name="updater_body">Aliucord Managerの新しいアップデートがリリースされました!正常に機能するために必要な場合があります。アップデートしますか?</string>
|
||||
<string name="updater_title">%1$sへ更新</string>
|
||||
<string name="updater_fail">Failed to check for updates!</string>
|
||||
<string name="updater_title">v%sへ更新</string>
|
||||
<string name="updater_check_fail">Failed to check for updates!</string>
|
||||
<string name="downloader_err_unknown">ダウンロードに失敗しました (不明)</string>
|
||||
<string name="downloader_err_timeout">Download failed (Timeout)</string>
|
||||
<string name="downloader_err_response">ダウンロードに失敗しました (無効な応答)</string>
|
||||
|
|
|
|||
|
|
@ -127,8 +127,8 @@
|
|||
<string name="installer_abort_title">Really exit?</string>
|
||||
<string name="installer_abort_body">Are you sure you really want to abort an in-progress installation? Cached files will be cleared to avoid corruption.</string>
|
||||
<string name="updater_body">A new update has been released for Aliucord Manager! It may be required in order to function properly. Would you like to update?</string>
|
||||
<string name="updater_title">Update to %1$s</string>
|
||||
<string name="updater_fail">Failed to check for updates!</string>
|
||||
<string name="updater_title">Update to v%s</string>
|
||||
<string name="updater_check_fail">Failed to check for updates!</string>
|
||||
<string name="downloader_err_unknown">Download failed (Unknown)</string>
|
||||
<string name="downloader_err_timeout">Download failed (Timeout)</string>
|
||||
<string name="downloader_err_response">Download failed (Invalid response)</string>
|
||||
|
|
|
|||
|
|
@ -127,8 +127,8 @@
|
|||
<string name="installer_abort_title">정말 나가실 건가요?</string>
|
||||
<string name="installer_abort_body">진행 중인 설치를 중단할까요?</string>
|
||||
<string name="updater_body">Aliucord Manager의 새로운 업데이트가 출시됐어요! 제대로 작동하려면 업데이트가 필요할지도 몰라요. 업데이트할까요?</string>
|
||||
<string name="updater_title">%1$s(으)로 업데이트했어요</string>
|
||||
<string name="updater_fail">Failed to check for updates!</string>
|
||||
<string name="updater_title">v%s(으)로 업데이트했어요</string>
|
||||
<string name="updater_check_fail">Failed to check for updates!</string>
|
||||
<string name="downloader_err_unknown">다운로드 실패 (알 수 없음)</string>
|
||||
<string name="downloader_err_timeout">Download failed (Timeout)</string>
|
||||
<string name="downloader_err_response">다운로드 실패 (잘못된 응답)</string>
|
||||
|
|
|
|||
|
|
@ -127,8 +127,8 @@
|
|||
<string name="installer_abort_title">Really exit?</string>
|
||||
<string name="installer_abort_body">Are you sure you really want to abort an in-progress installation? Cached files will be cleared to avoid corruption.</string>
|
||||
<string name="updater_body">A new update has been released for Aliucord Manager! It may be required in order to function properly. Would you like to update?</string>
|
||||
<string name="updater_title">Update to %1$s</string>
|
||||
<string name="updater_fail">Failed to check for updates!</string>
|
||||
<string name="updater_title">Update to v%s</string>
|
||||
<string name="updater_check_fail">Failed to check for updates!</string>
|
||||
<string name="downloader_err_unknown">Download failed (Unknown)</string>
|
||||
<string name="downloader_err_timeout">Download failed (Timeout)</string>
|
||||
<string name="downloader_err_response">Download failed (Invalid response)</string>
|
||||
|
|
|
|||
|
|
@ -127,8 +127,8 @@
|
|||
<string name="installer_abort_title">Really exit?</string>
|
||||
<string name="installer_abort_body">Are you sure you really want to abort an in-progress installation? Cached files will be cleared to avoid corruption.</string>
|
||||
<string name="updater_body">A new update has been released for Aliucord Manager! It may be required in order to function properly. Would you like to update?</string>
|
||||
<string name="updater_title">Update to %1$s</string>
|
||||
<string name="updater_fail">Failed to check for updates!</string>
|
||||
<string name="updater_title">Update to v%s</string>
|
||||
<string name="updater_check_fail">Failed to check for updates!</string>
|
||||
<string name="downloader_err_unknown">Download failed (Unknown)</string>
|
||||
<string name="downloader_err_timeout">Download failed (Timeout)</string>
|
||||
<string name="downloader_err_response">Download failed (Invalid response)</string>
|
||||
|
|
|
|||
|
|
@ -127,8 +127,8 @@
|
|||
<string name="installer_abort_title">Really exit?</string>
|
||||
<string name="installer_abort_body">Are you sure you really want to abort an in-progress installation? Cached files will be cleared to avoid corruption.</string>
|
||||
<string name="updater_body">Nowa aktualizacja dla Menadżera Aliucorda! Może być wymagana do prawidłowego działania. Czy chcesz zaktualizować?</string>
|
||||
<string name="updater_title">Aktualizowanie do %1$s</string>
|
||||
<string name="updater_fail">Nie udało się sprawdzić aktualizacji!</string>
|
||||
<string name="updater_title">Aktualizowanie do v%s</string>
|
||||
<string name="updater_check_fail">Nie udało się sprawdzić aktualizacji!</string>
|
||||
<string name="downloader_err_unknown">Pobieranie nie powiodło się (Powód nieznany)</string>
|
||||
<string name="downloader_err_timeout">Pobieranie nie powiodło się (Upłynął limit czasu)</string>
|
||||
<string name="downloader_err_response">Pobieranie nie powiodło się (Nieprawidłowa odpowiedź)</string>
|
||||
|
|
|
|||
|
|
@ -127,8 +127,8 @@
|
|||
<string name="installer_abort_title">Deseja realmente sair?</string>
|
||||
<string name="installer_abort_body">Tem certeza que deseja cancelar uma instalação em andamento?</string>
|
||||
<string name="updater_body">Uma nova atualização foi lançada para o Aliucord Manager! Ela pode ser necessária para funcionar corretamente. Gostaria de atualizar?</string>
|
||||
<string name="updater_title">Atualizado para %1$s</string>
|
||||
<string name="updater_fail">Falha ao checar atualizações</string>
|
||||
<string name="updater_title">Atualizado para v%s</string>
|
||||
<string name="updater_check_fail">Falha ao checar atualizações</string>
|
||||
<string name="downloader_err_unknown">Download falhou (Desconhecido)</string>
|
||||
<string name="downloader_err_timeout">Falha no Download (tempo esgotado)</string>
|
||||
<string name="downloader_err_response">Download falhou (Resposta inválida)</string>
|
||||
|
|
|
|||
|
|
@ -127,8 +127,8 @@
|
|||
<string name="installer_abort_title">Deseja realmente sair?</string>
|
||||
<string name="installer_abort_body">Tem a certeza que deseja abortar a instalação em progresso?</string>
|
||||
<string name="updater_body">Foi lançada uma nova atualização pelo Aliucord Manager! A sua atualização será necessária de modo que a aplicação funcione corretamente. Gostaria de atualizar? </string>
|
||||
<string name="updater_title">Atualizado para %1$s</string>
|
||||
<string name="updater_fail">Failed to check for updates!</string>
|
||||
<string name="updater_title">Atualizado para v%s</string>
|
||||
<string name="updater_check_fail">Failed to check for updates!</string>
|
||||
<string name="downloader_err_unknown">O download falhou (Desconhecido)</string>
|
||||
<string name="downloader_err_timeout">Download failed (Timeout)</string>
|
||||
<string name="downloader_err_response">O download falhou (resposta inválida)</string>
|
||||
|
|
|
|||
|
|
@ -127,8 +127,8 @@
|
|||
<string name="installer_abort_title">Really exit?</string>
|
||||
<string name="installer_abort_body">Are you sure you really want to abort an in-progress installation? Cached files will be cleared to avoid corruption.</string>
|
||||
<string name="updater_body">A new update has been released for Aliucord Manager! It may be required in order to function properly. Would you like to update?</string>
|
||||
<string name="updater_title">Update to %1$s</string>
|
||||
<string name="updater_fail">Failed to check for updates!</string>
|
||||
<string name="updater_title">Update to v%s</string>
|
||||
<string name="updater_check_fail">Failed to check for updates!</string>
|
||||
<string name="downloader_err_unknown">Download failed (Unknown)</string>
|
||||
<string name="downloader_err_timeout">Download failed (Timeout)</string>
|
||||
<string name="downloader_err_response">Download failed (Invalid response)</string>
|
||||
|
|
|
|||
|
|
@ -127,8 +127,8 @@
|
|||
<string name="installer_abort_title">Действительно выйти?</string>
|
||||
<string name="installer_abort_body">Вы уверены, что действительно хотите прервать начатую установку?</string>
|
||||
<string name="updater_body">Вышло новое обновление для Aliucord Менеджера! Оно может быть обязательным для правильной работы. Желаете ли вы обновиться?</string>
|
||||
<string name="updater_title">Обновить до %1$s</string>
|
||||
<string name="updater_fail">Не удалось проверить наличие обновлений!</string>
|
||||
<string name="updater_title">Обновить до v%s</string>
|
||||
<string name="updater_check_fail">Не удалось проверить наличие обновлений!</string>
|
||||
<string name="downloader_err_unknown">Загрузка не удалась (Неизвестно)</string>
|
||||
<string name="downloader_err_timeout">Сбой загрузки (таймаут)</string>
|
||||
<string name="downloader_err_response">Загрузка не удалась (Неверный ответ)</string>
|
||||
|
|
|
|||
|
|
@ -127,8 +127,8 @@
|
|||
<string name="installer_abort_title">Really exit?</string>
|
||||
<string name="installer_abort_body">Are you sure you really want to abort an in-progress installation? Cached files will be cleared to avoid corruption.</string>
|
||||
<string name="updater_body">A new update has been released for Aliucord Manager! It may be required in order to function properly. Would you like to update?</string>
|
||||
<string name="updater_title">Update to %1$s</string>
|
||||
<string name="updater_fail">Failed to check for updates!</string>
|
||||
<string name="updater_title">Update to v%s</string>
|
||||
<string name="updater_check_fail">Failed to check for updates!</string>
|
||||
<string name="downloader_err_unknown">Download failed (Unknown)</string>
|
||||
<string name="downloader_err_timeout">Download failed (Timeout)</string>
|
||||
<string name="downloader_err_response">Download failed (Invalid response)</string>
|
||||
|
|
|
|||
|
|
@ -127,8 +127,8 @@
|
|||
<string name="installer_abort_title">Really exit?</string>
|
||||
<string name="installer_abort_body">Are you sure you really want to abort an in-progress installation?</string>
|
||||
<string name="updater_body">A new update has been released for Aliucord Manager! It may be required in order to function properly. Would you like to update?</string>
|
||||
<string name="updater_title">Update to %1$s</string>
|
||||
<string name="updater_fail">Failed to check for updates!</string>
|
||||
<string name="updater_title">Update to v%s</string>
|
||||
<string name="updater_check_fail">Failed to check for updates!</string>
|
||||
<string name="downloader_err_unknown">Download failed (Unknown)</string>
|
||||
<string name="downloader_err_timeout">Download failed (Timeout)</string>
|
||||
<string name="downloader_err_response">Download failed (Invalid response)</string>
|
||||
|
|
|
|||
|
|
@ -127,8 +127,8 @@
|
|||
<string name="installer_abort_title">Really exit?</string>
|
||||
<string name="installer_abort_body">Are you sure you really want to abort an in-progress installation?</string>
|
||||
<string name="updater_body">A new update has been released for Aliucord Manager! It may be required in order to function properly. Would you like to update?</string>
|
||||
<string name="updater_title">Update to %1$s</string>
|
||||
<string name="updater_fail">Failed to check for updates!</string>
|
||||
<string name="updater_title">Update to v%s</string>
|
||||
<string name="updater_check_fail">Failed to check for updates!</string>
|
||||
<string name="downloader_err_unknown">Download failed (Unknown)</string>
|
||||
<string name="downloader_err_timeout">Download failed (Timeout)</string>
|
||||
<string name="downloader_err_response">Download failed (Invalid response)</string>
|
||||
|
|
|
|||
|
|
@ -128,8 +128,8 @@ lütfen silin!</string>
|
|||
<string name="installer_abort_title">Gerçekten çıkış yapmak istiyor musun?</string>
|
||||
<string name="installer_abort_body">Are you sure you really want to abort an in-progress installation? Cached files will be cleared to avoid corruption.</string>
|
||||
<string name="updater_body">Aliucord Yöneticisi için yeni bir güncelleme yayınlandı! Düzgün çalışması için gerekli olabilir. Güncellemek ister misin?</string>
|
||||
<string name="updater_title">%1$s\'a Güncelle</string>
|
||||
<string name="updater_fail">Güncellemeler kontrol edilemedi!</string>
|
||||
<string name="updater_title">v%s\'a Güncelle</string>
|
||||
<string name="updater_check_fail">Güncellemeler kontrol edilemedi!</string>
|
||||
<string name="downloader_err_unknown">İndirme başarısız (Bilinmiyor)</string>
|
||||
<string name="downloader_err_timeout">İndirme başarısız (Zamanaşımı)</string>
|
||||
<string name="downloader_err_response">İndirme başarısız (İletişim sorunu)</string>
|
||||
|
|
|
|||
|
|
@ -127,8 +127,8 @@
|
|||
<string name="installer_abort_title">Really exit?</string>
|
||||
<string name="installer_abort_body">Are you sure you really want to abort an in-progress installation? Cached files will be cleared to avoid corruption.</string>
|
||||
<string name="updater_body">A new update has been released for Aliucord Manager! It may be required in order to function properly. Would you like to update?</string>
|
||||
<string name="updater_title">Update to %1$s</string>
|
||||
<string name="updater_fail">Failed to check for updates!</string>
|
||||
<string name="updater_title">Update to v%s</string>
|
||||
<string name="updater_check_fail">Failed to check for updates!</string>
|
||||
<string name="downloader_err_unknown">Download failed (Unknown)</string>
|
||||
<string name="downloader_err_timeout">Download failed (Timeout)</string>
|
||||
<string name="downloader_err_response">Download failed (Invalid response)</string>
|
||||
|
|
|
|||
|
|
@ -127,8 +127,8 @@
|
|||
<string name="installer_abort_title">Really exit?</string>
|
||||
<string name="installer_abort_body">Are you sure you really want to abort an in-progress installation? Cached files will be cleared to avoid corruption.</string>
|
||||
<string name="updater_body">Một bản cập nhật mới đã được phát hành cho Aliucord Manager! Nó cần cập nhật để hoạt động đúng. Bạn có muốn cập nhật không?</string>
|
||||
<string name="updater_title">Cập nhật: %1$s</string>
|
||||
<string name="updater_fail">Failed to check for updates!</string>
|
||||
<string name="updater_title">Cập nhật: v%s</string>
|
||||
<string name="updater_check_fail">Failed to check for updates!</string>
|
||||
<string name="downloader_err_unknown">Download failed (Unknown)</string>
|
||||
<string name="downloader_err_timeout">Download failed (Timeout)</string>
|
||||
<string name="downloader_err_response">Download failed (Invalid response)</string>
|
||||
|
|
|
|||
|
|
@ -127,8 +127,8 @@
|
|||
<string name="installer_abort_title">真的要退出吗?</string>
|
||||
<string name="installer_abort_body">您确定要中止正在进行的安装吗?</string>
|
||||
<string name="updater_body">Aliucord 管理器已发布新更新!可能需要此更新才能正常运行。您想更新吗?</string>
|
||||
<string name="updater_title">更新到 %1$s</string>
|
||||
<string name="updater_fail">Failed to check for updates!</string>
|
||||
<string name="updater_title">更新到 v%s</string>
|
||||
<string name="updater_check_fail">Failed to check for updates!</string>
|
||||
<string name="downloader_err_unknown">下载失败(未知)</string>
|
||||
<string name="downloader_err_timeout">Download failed (Timeout)</string>
|
||||
<string name="downloader_err_response">下载失败(无效响应)</string>
|
||||
|
|
|
|||
|
|
@ -127,8 +127,8 @@
|
|||
<string name="installer_abort_title">確定離開?</string>
|
||||
<string name="installer_abort_body">Are you sure you really want to abort an in-progress installation? Cached files will be cleared to avoid corruption.</string>
|
||||
<string name="updater_body">Aliucord Manager 已發布新更新!Aliucord Manager 可能需要它才能正常運行。您想更新嗎?</string>
|
||||
<string name="updater_title">更新到 %1$s</string>
|
||||
<string name="updater_fail">Failed to check for updates!</string>
|
||||
<string name="updater_title">更新到 v%s</string>
|
||||
<string name="updater_check_fail">Failed to check for updates!</string>
|
||||
<string name="downloader_err_unknown">無法下載(未知)</string>
|
||||
<string name="downloader_err_timeout">Download failed (Timeout)</string>
|
||||
<string name="downloader_err_response">無法下載(無效的回應)</string>
|
||||
|
|
|
|||
|
|
@ -147,8 +147,9 @@
|
|||
<string name="installer_abort_body">Are you sure you really want to abort an in-progress installation?</string>
|
||||
|
||||
<string name="updater_body">A new update has been released for Aliucord Manager! It may be required in order to function properly. Would you like to update?</string>
|
||||
<string name="updater_title">Update to %1$s</string>
|
||||
<string name="updater_fail">Failed to check for updates!</string>
|
||||
<string name="updater_title">Update to v%s</string>
|
||||
<string name="updater_check_fail">Failed to check for updates!</string>
|
||||
<string name="updater_update_fail">Failed to update! Please download and install the update manually!</string>
|
||||
|
||||
<string name="downloader_err_unknown">Download failed (Unknown)</string>
|
||||
<string name="downloader_err_timeout">Download failed (Timeout)</string>
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue