3ae1e37c40
* Rename removeFromQueueByPredicate to removeFromQueueIf Follow-up to PR comment in #9511 * Make Download hashCode stable Mutating pages would previously change the Download hashCode, which breaks HashMap lookups. * Convert Donwloader subscription to coroutine Replace downloadsRelay with activeDownloadsFlow. Instead of managing a PublishRelay independent from the queue, derive a Flow of active downloads directly from the queue StateFlow. (This will allow updating the queue without pausing the downloader, to be done in a follow-up PR.) When a download completes successfully, the downloads is removed from queueState. This updates activeDownloadsFlow and causes the downloaderJob start the download job for the next active download. When a download fails, the download is left in the queue, so queueState is not modified. To make activeDownloadsFlow update without a change to queueState, use transformLatest and use the Download statusFlows to suspend until a download reaches the ERROR state. To avoid stopping and starting downloads every time activeDownloadsFlow emits a new value, maintain a map of current download Jobs and only start/stop jobs in the difference between downloadJobs and activeDownloads. To make sure all child download jobs are cancelled when the top-level downloader job is cancelled, use supervisorScope. * Remove obsolete main thread references in Downloader Thread safety of the queue state used to be guaranteed by running all queue mutation on the main thread, but this has not been true for some time. Since the queue state is now backed by a StateFlow, queueState can be safely updated by any thread. |
||
---|---|---|
.github | ||
app | ||
buildSrc | ||
core | ||
core-metadata | ||
data | ||
domain | ||
gradle | ||
i18n | ||
macrobenchmark | ||
presentation-core | ||
presentation-widget | ||
source-api | ||
source-local | ||
.editorconfig | ||
.gitattributes | ||
.gitignore | ||
build.gradle.kts | ||
CODE_OF_CONDUCT.md | ||
CONTRIBUTING.md | ||
gradle.properties | ||
gradlew | ||
gradlew.bat | ||
LICENSE | ||
README.md | ||
settings.gradle.kts |
Build | Stable | Weekly Preview | Contribute | Support Server |
---|---|---|---|---|
Tachiyomi
Tachiyomi is a free and open source manga reader for Android 6.0 and above.
Features
Features include:
- Online reading from a variety of sources
- Local reading of downloaded content
- A configurable reader with multiple viewers, reading directions and other settings.
- Tracker support: MyAnimeList, AniList, Kitsu, MangaUpdates, Shikimori, and Bangumi support
- Categories to organize your library
- Light and dark themes
- Schedule updating your library for new chapters
- Create backups locally to read offline or to your desired cloud service
Download
Get the app from our releases page.
If you want to try new features before they get to the stable release, you can download the preview version here.
Issues, Feature Requests and Contributing
Please make sure to read the full guidelines. Your issue may be closed without warning if you do not.
Issues
Bugs
- Include version (More → About → Version)
- If not latest, try updating, it may have already been solved
- Preview version is equal to the number of commits as seen in the main page
- Include steps to reproduce (if not obvious from description)
- Include screenshot (if needed)
- If it could be device-dependent, try reproducing on another device (if possible)
- Don't group unrelated requests into one issue
DO: https://github.com/tachiyomiorg/tachiyomi/issues/24 https://github.com/tachiyomiorg/tachiyomi/issues/71
Feature Requests
- Write a detailed issue, explaining what it should do or how. Avoid writing just "like X app does"
- Include screenshot (if needed)
Source requests should be created at https://github.com/tachiyomiorg/tachiyomi-extensions, they do not belong in this repository.
Contributing
See CONTRIBUTING.md.
Code of Conduct
See CODE_OF_CONDUCT.md.
FAQ
See our website. You can also reach out to us on Discord.
License
Copyright 2015 Javier Tomás
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Disclaimer
The developer of this application does not have any affiliation with the content providers available.