Compare commits

...

5 Commits

Author SHA1 Message Date
139663acfc Release v0.16.3 2024-01-30 02:31:45 +06:00
1581b876cf Remove old ISSUE_TEMPLATE.md 2024-01-30 02:31:45 +06:00
0f4de03d7a Don't throw MALTokenExpired whenever we fail to refresh MAL token
Also cleanup
2024-01-30 02:31:45 +06:00
ddbe8efbc5 [skip ci] Increase size of the message indicating which apk to download 2024-01-30 02:31:44 +06:00
63146e717b Translations update from Hosted Weblate (#269)
* Translated using Weblate (Persian)

Currently translated at 84.8% (673 of 793 strings)

Translation: Mihon/Mihon
Translate-URL: https://hosted.weblate.org/projects/mihon/mihon/fa/

* Translated using Weblate (Finnish)

Currently translated at 85.3% (677 of 793 strings)

Translation: Mihon/Mihon
Translate-URL: https://hosted.weblate.org/projects/mihon/mihon/fi/

* Translated using Weblate (Chuvash)

Currently translated at 88.2% (15 of 17 strings)

Translation: Mihon/Mihon Plurals
Translate-URL: https://hosted.weblate.org/projects/mihon/mihon-plurals/cv/

---------

Co-authored-by: Arash <ara.khoram95@gmail.com>
Co-authored-by: A <ogloppi@mailbox.org>
Co-authored-by: C201 <derasetad@gmail.com>
2024-01-30 02:31:16 +06:00
10 changed files with 102 additions and 89 deletions

View File

@ -1,34 +0,0 @@
**PLEASE READ THIS**
I acknowledge that:
- I have updated:
- To the latest version of the app (stable is v0.15.3)
- All extensions
- I have gone through the FAQ (https://mihon.app/docs/faq/general) and troubleshooting guide (https://mihon.app/docs/guides/troubleshooting/)
- If this is an issue with an official extension, that I should be opening an issue in https://github.com/tachiyomiorg/extensions
- I have searched the existing issues and this is new ticket **NOT** a duplicate or related to another open or closed issue
- I will fill out the title and the information in this template
Note that the issue will be automatically closed if you do not fill out the title or requested information.
**DELETE THIS SECTION IF YOU HAVE READ AND ACKNOWLEDGED IT**
---
## Device information
* Tachiyomi version: ?
* Android version: ?
* Device: ?
## Steps to reproduce
1. First step
2. Second step
## Issue/Request
?
## Other details
Additional details and attachments.
If you're experiencing crashes, share the crash logs from More → Settings → Advanced → Dump crash logs.

View File

@ -53,7 +53,7 @@ body:
label: Mihon version
description: You can find your Mihon version in **More → About**.
placeholder: |
Example: "0.16.2"
Example: "0.16.3"
validations:
required: true
@ -96,7 +96,7 @@ body:
required: true
- label: I have gone through the [FAQ](https://mihon.app/docs/faq/general) and [troubleshooting guide](https://mihon.app/docs/guides/troubleshooting/).
required: true
- label: I have updated the app to version **[0.16.2](https://github.com/mihonapp/mihon/releases/latest)**.
- label: I have updated the app to version **[0.16.3](https://github.com/mihonapp/mihon/releases/latest)**.
required: true
- label: I have updated all installed extensions.
required: true

View File

@ -31,7 +31,7 @@ body:
required: true
- label: I have written a short but informative title.
required: true
- label: I have updated the app to version **[0.16.2](https://github.com/mihonapp/mihon/releases/latest)**.
- label: I have updated the app to version **[0.16.3](https://github.com/mihonapp/mihon/releases/latest)**.
required: true
- label: I will fill out all of the requested information in this form.
required: true

View File

@ -99,7 +99,7 @@ jobs:
| x86 | ${{ env.APK_X86_SHA }} |
| x86_64 | ${{ env.APK_X86_64_SHA }} |
If you are unsure which version to choose then go with mihon-${{ env.VERSION_TAG }}.apk
## If you are unsure which version to choose then go with mihon-${{ env.VERSION_TAG }}.apk
files: |
mihon-${{ env.VERSION_TAG }}.apk
mihon-arm64-v8a-${{ env.VERSION_TAG }}.apk

View File

@ -22,8 +22,8 @@ android {
defaultConfig {
applicationId = "app.mihon"
versionCode = 3
versionName = "0.16.2"
versionCode = 4
versionName = "0.16.3"
buildConfigField("String", "COMMIT_COUNT", "\"${getCommitCount()}\"")
buildConfigField("String", "COMMIT_SHA", "\"${getGitSha()}\"")

View File

@ -21,9 +21,8 @@ class MyAnimeListInterceptor(private val myanimelist: MyAnimeList) : Interceptor
}
val originalRequest = chain.request()
// Refresh access token if expired
if (oauth != null && oauth!!.isExpired()) {
setAuth(refreshToken(chain))
if (oauth?.isExpired() == true) {
refreshToken(chain)
}
if (oauth == null) {
@ -36,27 +35,7 @@ class MyAnimeListInterceptor(private val myanimelist: MyAnimeList) : Interceptor
.header("User-Agent", "Mihon v${BuildConfig.VERSION_NAME} (${BuildConfig.APPLICATION_ID})")
.build()
val response = chain.proceed(authRequest)
val tokenIsExpired = response.headers["www-authenticate"]
?.contains("The access token expired") ?: false
// Retry the request once with a new token in case it was not already refreshed
// by the is expired check before.
if (response.code == 401 && tokenIsExpired) {
response.close()
val newToken = refreshToken(chain)
setAuth(newToken)
val newRequest = originalRequest.newBuilder()
.addHeader("Authorization", "Bearer ${newToken.access_token}")
.header("User-Agent", "Mihon v${BuildConfig.VERSION_NAME} (${BuildConfig.APPLICATION_ID})")
.build()
return chain.proceed(newRequest)
}
return response
return chain.proceed(authRequest)
}
/**
@ -68,22 +47,37 @@ class MyAnimeListInterceptor(private val myanimelist: MyAnimeList) : Interceptor
myanimelist.saveOAuth(oauth)
}
private fun refreshToken(chain: Interceptor.Chain): OAuth {
private fun refreshToken(chain: Interceptor.Chain): OAuth = synchronized(this) {
if (tokenExpired) throw MALTokenExpired()
oauth?.takeUnless { it.isExpired() }?.let { return@synchronized it }
val response = try {
chain.proceed(MyAnimeListApi.refreshTokenRequest(oauth!!))
} catch (_: Throwable) {
throw MALTokenRefreshFailed()
}
if (response.code == 401) {
myanimelist.setAuthExpired()
throw MALTokenExpired()
}
return runCatching {
val oauthResponse = chain.proceed(MyAnimeListApi.refreshTokenRequest(oauth!!))
if (oauthResponse.code == 401) {
myanimelist.setAuthExpired()
}
if (oauthResponse.isSuccessful) {
with(json) { oauthResponse.parseAs<OAuth>() }
if (response.isSuccessful) {
with(json) { response.parseAs<OAuth>() }
} else {
oauthResponse.close()
response.close()
null
}
}
.getOrNull()
?: throw MALTokenExpired()
?.also {
this.oauth = it
myanimelist.saveOAuth(it)
}
?: throw MALTokenRefreshFailed()
}
}
class MALTokenRefreshFailed : IOException("MAL: Failed to refresh account token")
class MALTokenExpired : IOException("MAL: Login has expired")

View File

@ -5,14 +5,16 @@ import kotlinx.serialization.Serializable
@Serializable
data class OAuth(
val token_type: String,
val refresh_token: String,
val access_token: String,
val token_type: String,
val created_at: Long = System.currentTimeMillis(),
val expires_in: Long,
)
fun OAuth.isExpired() = System.currentTimeMillis() > created_at + (expires_in * 1000)
val created_at: Long = System.currentTimeMillis(),
) {
// Assumes expired a minute earlier
private val adjustedExpiresIn: Long = (expires_in - 60) * 1000
fun isExpired() = created_at + adjustedExpiresIn < System.currentTimeMillis()
}
fun Track.toMyAnimeListStatus() = when (status) {
MyAnimeList.READING -> "reading"

View File

@ -41,7 +41,7 @@
<item quantity="other">%d сӑнану</item>
</plurals>
<plurals name="missing_chapters_warning">
<item quantity="one">1 сыпӑк ҫук</item>
<item quantity="one">%d сыпӑк ҫук</item>
<item quantity="other">%d сыпӑк ҫук</item>
</plurals>
<plurals name="relative_time">

View File

@ -658,4 +658,22 @@
<string name="information_empty_repos">شما هیچ مخزنی برای تنظیم ندارید.</string>
<string name="action_open_repo">مخزن منبع باز</string>
<string name="pref_flash_page_summ">مقدار رد باقی مانده در نمایش گر های E-ink کاهش میابد</string>
<string name="onboarding_storage_action_select">انتخاب یک پوشه</string>
<string name="onboarding_storage_selection_required">یک پوشه باید انتخاب شود</string>
<string name="onboarding_storage_help_action">راهنمای زخیره سازی</string>
<string name="onboarding_permission_install_apps">مجوز نصب برنامه ها</string>
<string name="action_create">ایجاد کردن</string>
<string name="invalid_backup_file_error">خطای کامل:</string>
<string name="app_settings">تنظیمات برنامه</string>
<string name="source_settings">تنظیمات منبع</string>
<string name="private_settings">حاوی تنظیمات حساس (یه عنوان مثال رمز ورود ناظر)</string>
<string name="create_backup_file_error">فایل پشتیبانی ایجاد نشد</string>
<string name="pref_storage_usage">استفاده از فظای زخیره سازی</string>
<string name="available_disk_space_info">در دسترس: %1$s / کل:%2$s</string>
<string name="pref_auto_clear_chapter_cache">هنگام راه‌اندازی برنامه، حافظه پنهان قسمت را پاک کنید</string>
<string name="syncing_library">درحال همگام سازی کتاب خانه</string>
<string name="pref_storage_location_info">قابل استفاده برای به روز رسانی خودکار، بارگیری قسمت ها، و منابع محلی.</string>
<string name="last_auto_backup_info">آخرین پشتیبان گیری خودکار: %s</string>
<string name="pref_dns_over_https">DNS بیش از HTTPS (DoH)</string>
<string name="library_sync_complete">همگام سازی کتاب خانه کامل شد</string>
</resources>

View File

@ -141,11 +141,9 @@
<string name="ext_untrusted">Luottamaton</string>
<string name="ext_uninstall">Poista asennus</string>
<string name="untrusted_extension">Luottamattomat laajennokset</string>
<string name="untrusted_extension_message">Tämä laajennus on allekirjoitettu luottamattomalla sertifikaatilla ja sitä ei ole aktivoitu.
<string name="untrusted_extension_message">Haitallinen laajennus voi lukea tallennetut kirjautumistiedot Mihonista tai suorittaa luvatonta koodia.
\n
\nHaitallinen laajennus voisi lukea mahdolliset kirjautumistiedot Mihonista tai suorittaa luvatonta koodia.
\n
\nLuottamalla tähän sertifikaattiin hyväksyt nämä riskit.</string>
\nLuottamalla tähän laajennokseen hyväksyt nämä riskit.</string>
<string name="pref_fullscreen">Koko näyttö</string>
<string name="pref_page_transitions">Animoi sivusiirtymät</string>
<string name="pref_double_tap_anim_speed">Tuplanäpäytyksen animaation nopeus</string>
@ -201,7 +199,7 @@
<string name="fourth_to_last">Neljänneksi viimeinen luku</string>
<string name="fifth_to_last">Viidenneksi viimeinen luku</string>
<string name="pref_download_new">Lataa uudet luvut</string>
<string name="services">Palvelut</string>
<string name="services">Seurantapalvelut</string>
<string name="pref_create_backup_summ">Voidaan käyttää nykyisen kirjaston palauttamiseen</string>
<string name="pref_restore_backup_summ">Palauta kirjasto varmuuskopiointi-tiedostosta</string>
<string name="pref_backup_interval">Varmuuskopioinnin tiheys</string>
@ -290,7 +288,7 @@
<string name="action_webview_refresh">Päivitä</string>
<string name="pref_category_library">Kirjasto</string>
<string name="ext_obsolete">Vanhentunut</string>
<string name="obsolete_extension_message">Tämä laajennus ei ole enää saatavilla.</string>
<string name="obsolete_extension_message">Tämä laajennos ei ole enää saatavilla. Se ei välttämättä toimi oikein ja voi aiheuttaa ongelmia Mihonin kanssa. Laajennoksen poistoa suositellaan.</string>
<string name="pref_date_format">Päivämäärän muoto</string>
<string name="pref_category_library_update">Globaali päivitys</string>
<string name="logout_title">Kirjaa ulos kohteesta %1$s\?</string>
@ -374,7 +372,7 @@
<string name="label_data">Tiedot</string>
<string name="backup_restore_missing_sources">Puuttuvat lähteet:</string>
<string name="invalid_backup_file_missing_manga">Varmuuskopio ei sisällä mangaa.</string>
<string name="invalid_backup_file">Virheellinen varmuuskopio</string>
<string name="invalid_backup_file">Virheellinen varmuuskopio:</string>
<string name="pref_library_update_refresh_metadata_summary">Tarkista uusi kansi ja tiedot päivitettäessä kirjastoa</string>
<string name="pref_library_update_refresh_metadata">Päivitä metatiedot automaattisesti</string>
<string name="action_migrate">Siirrä</string>
@ -412,7 +410,7 @@
<string name="backup_restore_missing_trackers">Seurantapalvelimet joihin et ole kirjautunut sisään:</string>
<string name="pref_remove_bookmarked_chapters">Poista kirjanmerkityt luvut</string>
<string name="pref_category_delete_chapters">Poista luvut</string>
<string name="ext_nsfw_warning">Voi sisältää NSFW (18+) -sisältöä</string>
<string name="ext_nsfw_warning">Tämän laajennoksen lähteet voivat sisältää NSFW (18+) -sisältöä</string>
<string name="ext_nsfw_short">18+</string>
<string name="parental_controls_info">Tämä ei estä epävirallisia tai mahdollisesti väärin merkittyjä laajennuksia näyttämästä NSFW 18+ sisältöä sovelluksessa.</string>
<string name="no_chapters_error">Lukuja ei löytynyt</string>
@ -538,7 +536,7 @@
<string name="action_sort_last_manga_update">Viimeisin manga päivitys</string>
<string name="action_sort_unread_count">Lukemattomien määrä</string>
<string name="delete_category">Poista kategoria</string>
<string name="action_track">Jäljitä</string>
<string name="action_track">Seuraa</string>
<string name="pref_low">Alhainen</string>
<string name="pref_remove_exclude_categories">Poissuljetut kategoriat</string>
<string name="pref_lowest">Alhaisin</string>
@ -594,7 +592,7 @@
<string name="pref_reset_viewer_flags_summary">Poista kaikkien sarjojen lukutila ja lukusuunta</string>
<string name="cancelled">Peruttu</string>
<string name="download_notifier_split_page_path_not_found">Sivun %d tiedostopolkua ei löytynyt</string>
<string name="enhanced_services">Parannetut palvelut</string>
<string name="enhanced_services">Parannetut seurantapalvelut</string>
<string name="pref_reset_viewer_flags_error">Lukijan asetuksia ei voitu poistaa</string>
<string name="local_filter_order_by">Järjestä</string>
<string name="manga_cover">Kansikuva</string>
@ -646,4 +644,39 @@
<string name="sort_category_confirmation">Haluatko järjestää kategoriat aakkosjärjestykseen?</string>
<string name="action_copy_to_clipboard">Kopioi leikepöydälle</string>
<string name="action_move_to_bottom_all_for_series">Siirrä sarja pohjimmaiseksi</string>
<string name="action_not_now">Ei nyt</string>
<string name="internal_error">Sisäinen virhe: Lisätietoja saat kaatumisen lokitiedoista</string>
<string name="onboarding_permission_ignore_battery_opts">Akun käyttö taustalla</string>
<string name="pref_reader_summary">Lukutila, näyttö, navigointi</string>
<string name="pref_browse_summary">Lähteet, laajennokset, globaali haku</string>
<string name="pref_backup_summary">Manuaaliset ja automaattiset varmuuskopiot, tallennustila</string>
<string name="pref_security_summary">Applikaation lukko, turvallinen ruutu</string>
<string name="pref_advanced_summary">Kaatumislokien vedos, akun optimoinnit</string>
<string name="theme_nord">Pohjoismainen</string>
<string name="pref_relative_format">Suhteelliset aikaleimat</string>
<string name="pref_relative_format_summary">Käytä muotoa \"%1$s\", kuin muotoa \"%2$s\"</string>
<string name="ext_permission_install_apps_warning">Laajennosten asentamiseen tarvitaan lupia. Napauta tästä myöntääksesi luvat.</string>
<string name="action_add_repo">Lisää laajennosten lähde</string>
<string name="label_add_repo_input">Laajennosten lähteen URL</string>
<string name="action_add_repo_message">Lisää laajennosten lähteitä Mihoniin. URL-osoitteen tulisi päättyä \"index.min.json\".</string>
<string name="error_repo_exists">Tämä laajennosten lähde on jo lisättynä!</string>
<string name="action_delete_repo">Poista laajennosten lähde</string>
<string name="invalid_repo_name">Epäkelpo laajennosten lähteen URL-osoite</string>
<string name="delete_repo_confirmation">Haluatko poistaa laajennosten lähteen \"%s\"?</string>
<string name="pref_page_rotate_invert">Peilaa käännetyt leveät sivut</string>
<string name="pref_double_tap_zoom">Tuplanapauta lähentääksesi</string>
<string name="pref_flash_page_summ">Vähentää haamujälkiä e-paperi näytöillä</string>
<string name="pref_skip_dupe_chapters">Ohita kaksoisluvut</string>
<string name="split_tall_images">Jaa korkeat kuvat</string>
<string name="action_create">Luo</string>
<string name="pref_page_rotate">Sovita leveät sivut kääntämällä</string>
<string name="pref_hide_threshold">Valikon piilottamisen herkkyys vierittäessä</string>
<string name="pref_flash_page">Väläytä näyttöä sivunvaihdon yhteydessä</string>
<string name="pref_storage_location_info">Käytetään automaattisille varmuuskopioille, lukujen latauksille ja paikallisille lähteille.</string>
<string name="onboarding_permission_ignore_battery_opts_description">Vältä keskeytyksiä pitkään jatkuvissa toimenpiteissä, kuten kirjaston päivitys, lataukset, ja varmuuskopion palautukset.</string>
<string name="pref_library_columns_per_row">%d per rivi</string>
<string name="pref_appearance_summary">Teema, ajan ja päivämäärän formaatti</string>
<string name="pref_downloads_summary">Automaattinen lataus, ennakkolataus</string>
<string name="pref_tracking_summary">Yksisuuntainen synkronointi, paranneltu synkronointi</string>
<string name="pref_library_summary">Kategoriat, globaalit päivitykset, luvun pyyhkäisy</string>
</resources>