From 0d9d2fafb78dbce5940a68d765b704e54073c05d Mon Sep 17 00:00:00 2001 From: Soitora Date: Sun, 27 Aug 2023 22:19:45 +0200 Subject: [PATCH] Add "Troubleshooting" page Should preferably be rewritten. --- .../.vitepress/config/navigation/sidebar.ts | 13 ++- website/src/.vitepress/theme/styles/base.styl | 4 +- website/src/docs/guides/troubleshooting.md | 8 -- .../guides/troubleshooting/common-issues.md | 110 ++++++++++++++++++ .../docs/guides/troubleshooting/diagnosis.md | 87 ++++++++++++++ .../src/docs/guides/troubleshooting/index.md | 100 ++++++++++++++++ .../troubleshooting/dump-crash-logs.dark.webp | Bin 0 -> 16640 bytes 7 files changed, 312 insertions(+), 10 deletions(-) delete mode 100644 website/src/docs/guides/troubleshooting.md create mode 100644 website/src/docs/guides/troubleshooting/common-issues.md create mode 100644 website/src/docs/guides/troubleshooting/diagnosis.md create mode 100644 website/src/docs/guides/troubleshooting/index.md create mode 100644 website/src/public/docs/guides/troubleshooting/dump-crash-logs.dark.webp diff --git a/website/src/.vitepress/config/navigation/sidebar.ts b/website/src/.vitepress/config/navigation/sidebar.ts index 923b5bec..e6c35ad3 100644 --- a/website/src/.vitepress/config/navigation/sidebar.ts +++ b/website/src/.vitepress/config/navigation/sidebar.ts @@ -71,7 +71,18 @@ function defaultSidebar() { }, { text: "Troubleshooting", - link: "/docs/guides/troubleshooting", + link: "/docs/guides/troubleshooting/", + collapsed: true, + items: [ + { + text: "Common issues", + link: "/docs/guides/troubleshooting/common-issues", + }, + { + text: "Diagnosis", + link: "/docs/guides/troubleshooting/diagnosis", + }, + ], }, { text: "Source migration", diff --git a/website/src/.vitepress/theme/styles/base.styl b/website/src/.vitepress/theme/styles/base.styl index 7188660f..4f72211a 100644 --- a/website/src/.vitepress/theme/styles/base.styl +++ b/website/src/.vitepress/theme/styles/base.styl @@ -118,6 +118,7 @@ html:not(.dark) { * -------------------------------------------------------------------------- */ // Shitty method to give elevation to image - TO BE REPLACED + main > div > div > figure:has(img) img { box-shadow: 2px 2px 8px 4px var(--vp-c-bg-alt) } @@ -155,8 +156,9 @@ figure { content: "" } } + .vp-doc a { - text-decoration: none + text-decoration: none &:hover { text-decoration: underline diff --git a/website/src/docs/guides/troubleshooting.md b/website/src/docs/guides/troubleshooting.md deleted file mode 100644 index 4a7e2203..00000000 --- a/website/src/docs/guides/troubleshooting.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: Troubleshooting -description: This page is for when you encounter a problem with a source or the app. ---- - -# Troubleshooting - -Page too complex to port in only a few minutes. diff --git a/website/src/docs/guides/troubleshooting/common-issues.md b/website/src/docs/guides/troubleshooting/common-issues.md new file mode 100644 index 00000000..993d4fa0 --- /dev/null +++ b/website/src/docs/guides/troubleshooting/common-issues.md @@ -0,0 +1,110 @@ +--- +title: Common issues +description: This page is for when you encounter a problem with a source or the app. +--- + +# Common issues + +This page is for when you encounter a problem with a source or the app. + +## Basic issues + +### Cannot Access SD Card +The `Cannot Access SD Card` error can sometimes be fixed by changing the location of your downloads to somewhere else and back to the SD card, then restarting the app. + +Having a file or folder name that is too long can also cause this issue. +Android's file manager does not support filenames longer than 255 characters. +If you know the file or folder name that is the culprit, you can connect your SD card to your computer and shorten it. +Otherwise, delete the Tachiyomi downloads folder off of the SD Card. + +### Storage issues with Android 11+ +See [this](troubleshooting.md#undefined) section of the FAQ to learn how Scoped Storage affects Tachiyomi in Android 11+ and how to fix it. + +### Slow loading +If any sources are slow, it is likely due to the site being slow, your internet being slow, or a rate limit applied to the source to reduce the load or IP bans. + +### Reading is laggy +This is usually due to the images in the chapters being too long or large for the reader to handle. +If you turn have **32-bit color** on, try turning it off under **More -> Settings -> Reader**. +This helps sometimes to free up some RAM being used. +To eliminate this issue, find a different source that cuts the chapter into more pieces or downscales the images. + +### App not installed +Refer to this section. + +## Advanced errors +### Java.lang Exception: Failed to bypass Cloudflare +`Java.lang.Exception: Failed to bypass Cloudflare` means that the source you selected has Cloudflare protection on, refer to the Cloudflare guide to fix it. +If the solutions provided do not fix the issue, the source has likely raised the Cloudflare protection level high enough that Tachiyomi is not able to access the site. + +### Unable to resolve host / Connection failed / Failed to connect to / timeout / connection reset +Errors like `Unable to resolve host`, `Connection failed`, `Failed to connect to`, `timeout`, `connection reset` mean that something is preventing you from connecting to the source. + +Possible reasons include: + +* Your internet connection is not good enough to connect. +* The app does not have access to the internet. +* Your ISP has blocked the site. +* The site is down. + +Try the following solutions to fix this issue: + +* Enable **More -> Settings -> Advanced -> DNS over HTTPS**. +* Use a different internet connection (switch to Wi-Fi, a different Wi-Fi network, mobile data or a VPN). +* Reboot your router. + +### java.security.cert.CertPathValidatorException / Chain validation failed +`java.security.cert.CertPathValidatorException` or `Chain validation failed` means there is a problem with validating source's sertificate. + +* Check if the site's certificate has expired. + Use an online service for checking SSL certificates. + If the certificate has expired, wait while the site owner to renew it. +* Ensure that you have the right date and time set on your phone. +* Try **More -> Settings -> Advanced** then try **Clear cache** and **Clear cookies**. +* Try using a different internet connection (switch to Wi-Fi, a different Wi-Fi network, mobile data or a VPN). +* Try restarting the device. + +### Attempt to invoke virtual method 'com.hippo.unifile... +The `Attempt to invoke virtual method' com.hippo.unifile...` error can be caused by various reasons, but they all have to do with storage. + +* Most commonly, it is caused by full storage. + Check to see if your device or SD Card is full. +* Check if **Tachiyomi** has access to the SD card. + You can enable it in Android settings for app permissions. +* If you're downloading and this error pops up, that means the app might not be able to access the folder you're trying to download to. + This may be because the folder is corrupted or does not exist. + Use a file manager to check that the folder(s) exist and every folder in the sequence is available and accessible. +* The drive you're writing to is corrupted. + Check using a file manager to see if it is accessible. + +## HTTP errors + +### HTTP Error: 403 +Possible reasons for `HTTP error 403`: +* The source you selected has Cloudflare protection on, refer to the Cloudflare guide to fix it. +* The source is down, removed the series, or banned your IP. + > Open WebView to check if this is the case. + +### HTTP Error: 404 +`HTTP error 404` probably means that the source is down or removed the series. +Open WevView to check if this is the case. +Migrate to a different source for this series if you'd like. + +### HTTP Error: 429 - Too Many Requests +`HTTP error 429` or `Too Many Requests` means that the source banned your IP address (in most cases, it's temporary) because you could be downloading or reading too fast + We suggest [reporting](https://github.com/tachiyomiorg/tachiyomi-extensions/issues/new/choose) the issue so that a rate limit can be added to prevent IP bans in the future. + +### HTTP Error: 5xx +`HTTP error 5xx` like `500`, `502`, and others are server-side errors, and the source you are trying to access has problems on their side. +Open the source in WebView and check if the site is down. + +### HTTP Error: 1006 +`HTTP error 1006` means that the source has banned your IP address (in most cases, it's temporary). + +### HTTP Error: 1020 +`HTTP error 1020` means that you have violated a firewall rule the site owner has put up. +This usually means that the site owner has raised the Cloudflare protection level or that the site owner is blocking IPs outside their country. + +::: warning +If error-specific instructions did not help or your error is not on the list, go through **Diagnosis**. +::: diff --git a/website/src/docs/guides/troubleshooting/diagnosis.md b/website/src/docs/guides/troubleshooting/diagnosis.md new file mode 100644 index 00000000..0a63ee55 --- /dev/null +++ b/website/src/docs/guides/troubleshooting/diagnosis.md @@ -0,0 +1,87 @@ +--- +title: Diagnosis +description: This page is for when you encounter a problem with a source or the app. +--- + +# Diagnosis + +This page is for when you encounter a problem with a source or the app. + +## Main diagnosis + +### Update Your Extensions +- Go to **Browse -> Extensions**, ensure no extensions have an **Update** button. + +### Update Your App +- Navigate to **More -> About** and tap **Check for updates**. + +### Manual Series Refresh +- Drag down to manually refresh problematic series. + +### Test Other Series +- Try different series from the same source. + +### Update WebView +- Ensure your WebView is up to date. + +### Use Public WebView +- Attempt opening series in public WebView. Wait for CAPTCHA or Cloudflare protection if needed. + +### Change Connection +- Switch networks (Wi-Fi, mobile data, VPN) and confirm IP change. + +### Ask Others +- Get others to replicate the error. + +### Source Status +- Verify source's status in a browser. + +### Retry Button +- Look for retry button on series page. + +### Advanced Settings +- Go to **More -> Settings -> Advanced** and try any of the below: + - Clear Cache + - Clear Cookies + - Clear Database + - DNS over HTTPS + +### Download Issues +- Delete queue, retry downloads. + +### Restart Tachiyomi +- Force close and reopen app. + +::: tip +An extension update may fix your issue. +Wait or check for an extension update if you have not already. +> There are no ETAs for updates. +::: + +If any of these solutions help, go to [it only happens to me](#it-only-happens-to-me). If it is not just you, go to [everyone is having this problem](https://tachiyomi.org/help/guides/troubleshooting/#everyone-is-having-this-problem). + +If none of these solutions help, try asking in our [Discord server](https://discord.gg/tachiyomi). + +Check **#status-updates** first to see if your issue is known. State your app version and the source, manga, and chapter with the problem if it is not listed. + +## It only happens to me +You may be getting a [Cloudflare](#solving-cloudflare-issues) protection, may have been IP-banned, or encountered some other counter-measure that website owners deploy against programs like Tachiyomi. + +If that is the case, there is probably nothing that Tachiyomi can do to solve it. Some of them (like [Cloudflare](#solving-cloudflare-issues)) have to be manually solved, and some are temporary (IP bans). + +**Workarounds that can the lower chance of an issue happening again:** +- Don't use downloads with the source. +- Have less manga in your library from the source. + +::: warning +The above are imprecise and fuzzy rules because each site has its non-public limits and triggers. +::: + +## Everyone is having this problem +If the site is reachable and fully functional, there may be an issue with the extension or app. + +1. Have a look at open issues [for the app](https://github.com/tachiyomiorg/tachiyomi/issues) and/or [**extensions**](https://github.com/tachiyomiorg/tachiyomi-extensions/issues). +1. It may have been fixed already but not released yet, so look at closed issues ([app](https://github.com/tachiyomiorg/tachiyomi/issues?q=is%3Aissue+is%3Aclosed)/[extensions](https://github.com/tachiyomiorg/tachiyomi-extensions/issues?q=is%3Aissue+is%3Aclosed)) issues as well. +1. If you can't find the issue there, open a new one. + +> If the site is not reachable or has issues, all you can do is wait for the site to become functional again. diff --git a/website/src/docs/guides/troubleshooting/index.md b/website/src/docs/guides/troubleshooting/index.md new file mode 100644 index 00000000..ae9445c6 --- /dev/null +++ b/website/src/docs/guides/troubleshooting/index.md @@ -0,0 +1,100 @@ +--- +title: Troubleshooting +description: This page is for when you encounter a problem with a source or the app. +--- + +# Troubleshooting + +This page is for when you encounter a problem with a source or the app. + +## WebView + +### Loading the website in WebView +Try to load the website in **WebView**. +> Note that WebView is not the same as using your browser. + +::: tip How to open WebView +1. Go to **Browse** in the bottom navbar. +1. Press the source you would like to access. +1. Press the **WebView** icon in the top toolbar. +1. Complete a **CAPTCHA** if one is shown. +1. Once done, press the X at the top left to return. +::: + +You may need to try this multiple times. You can also try pressing the **Overflow** icon, opening the website in your regular browser, then checking for a **CAPTCHA** there. + +Some sources may have more advanced **Cloudflare** protection. If you are facing issues, try the following options. + +### Clearing cookies and WebView data +::: tip Guide +1. Go to **More -> Settings -> Advanced**. +1. Press **Clear cookies**. +1. Press **Clear WebView data**. +::: + +### Update WebView +To update WebView, you need to find what WebView implementation is used on your device. +In general, default implementation depends on the Android version as follows: + +- Android 10.0 and up - [Android System WebView](https://play.google.com/store/apps/details?id=com.google.android.webview). +- Android from 7.0 to 9.0 - [Google Chrome](https://play.google.com/store/apps/details?id=com.android.chrome). +- Android 6.0.1 and below - [Android System WebView](https://play.google.com/store/apps/details?id=com.google.android.webview). + +::: tip +Users on Android 7.0 and up can also see and change WebView implementation in [Developer Options](https://developer.android.com/studio/debug/dev-options). +::: + +::: warning +Non-standard implementations like Firefox can lead to Tachiyomi not working correctly or, in the worst-case, crash. +It is recommended to set your WebView implementation to [Android System WebView](https://play.google.com/store/apps/details?id=com.google.android.webview) or [Google Chrome](https://play.google.com/store/apps/details?id=com.android.chrome). +::: + +## Cloudflare + +### Solving Cloudflare issues +Cloudflare is an anti-bot mechanism. Some sources intentionally have a higher Cloudflare protection level to block apps like Tachiyomi. + +You can try the following suggestions to help resolve Cloudflare challenges. + +> If none of these help, wait until they lower their protection or migrate to other sources. + +## Misc + +### Changing your user agent +A user agent string helps websites identify information about the requester. +This information may impact Cloudflare's bot detection. +While some sources have user agent strings set, most rely on the default value set in the app. + +::: tip Guide +1. Go to **More -> Settings -> Advanced**. +1. Change the **Default user agent string** setting to a different one. + > [This website](https://www.whatismybrowser.com/guides/the-latest-user-agent/) is a decent reference. +1. Restart the app and try accessing the source again. +::: + +### Unable to install the app or extensions +Try installing [Split APK Installer](https://play.google.com/store/apps/details?id=com.aefyr.sai) from the Google Play Store, then use it to try and install the affected APK. +**Split APK Installer** will tell you why the APK is uninstallable, or it will install the APK for you. +Some common errors are listed below. + +::: details INSTALL_FAILED_UPDATE_INCOMPATIBLE: Package eu.kanade.tachiyomi signatures do not match the previously installed version; ignoring! +If **Split APK Installer** outputs the above error when attempting to install the APK, you are likely installing a official build over an existing **F-Droid** build. +The **F-Droid** build has a different signature than the official build, so you must backup your data, uninstall the app, then restore the data in a fresh install. +::: + +::: details DISPLAY_NAME column is null +If **Split APK Installer** outputs `DISPLAY_NAME column is null`, the APK you have downloaded is corrupted. +Some users experience this error multiple times after redownloading the APK, so keep redownloading the APK until it installs correctly. +::: + +::: details INSTALL_FAILED_NO_MATCHING_ABIS +If **Split APK Installer** outputs `INSTALL_FAILED_NO_MATCHING_ABIS`, the APK you have downloaded is the wrong one for your CPU architecture. +Download the correct one or download the universal APK if you are not aware which CPU architecture your device uses. +::: + +### Getting Logcats and Crash Logs +To dump crash logs following an app crash, go to **More -> Settings -> Advanced -> Dump crash logs**. + +![Dump crashlogs](/docs/guides/troubleshooting/dump-crash-logs.dark.webp =512x386) + +To get device logs if the app is not behaving as expected, record device logs using a [Logcat Reader](https://play.google.com/store/apps/details?id=com.dp.logcatapp). diff --git a/website/src/public/docs/guides/troubleshooting/dump-crash-logs.dark.webp b/website/src/public/docs/guides/troubleshooting/dump-crash-logs.dark.webp new file mode 100644 index 0000000000000000000000000000000000000000..55f629bcec66f1d7011faa8cae71ec28942b79e9 GIT binary patch literal 16640 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 BbcFx_ literal 0 HcmV?d00001