mirror of
https://github.com/mihonapp/mihon.git
synced 2025-03-13 08:10:07 +01:00
commit
0cbd9099fd
4
.github/ISSUE_TEMPLATE/report_issue.yml
vendored
4
.github/ISSUE_TEMPLATE/report_issue.yml
vendored
@ -53,7 +53,7 @@ body:
|
||||
label: Mihon version
|
||||
description: You can find your Mihon version in **More → About**.
|
||||
placeholder: |
|
||||
Example: "0.16.5"
|
||||
Example: "0.17.1"
|
||||
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.5](https://github.com/mihonapp/mihon/releases/latest)**.
|
||||
- label: I have updated the app to version **[0.17.1](https://github.com/mihonapp/mihon/releases/latest)**.
|
||||
required: true
|
||||
- label: I have updated all installed extensions.
|
||||
required: true
|
||||
|
2
.github/ISSUE_TEMPLATE/request_feature.yml
vendored
2
.github/ISSUE_TEMPLATE/request_feature.yml
vendored
@ -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.5](https://github.com/mihonapp/mihon/releases/latest)**.
|
||||
- label: I have updated the app to version **[0.17.1](https://github.com/mihonapp/mihon/releases/latest)**.
|
||||
required: true
|
||||
- label: I will fill out all of the requested information in this form.
|
||||
required: true
|
||||
|
11
.github/renovate.json5
vendored
11
.github/renovate.json5
vendored
@ -1,6 +1,13 @@
|
||||
{
|
||||
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
|
||||
"extends": ["config:base"],
|
||||
"extends": ["config:recommended"],
|
||||
"labels": ["Dependencies"],
|
||||
"semanticCommits": "disabled"
|
||||
"semanticCommits": "disabled",
|
||||
"packageRules": [
|
||||
{
|
||||
"groupName": "GitHub Actions",
|
||||
"matchManagers": ["github-actions"],
|
||||
"pinDigests": true,
|
||||
},
|
||||
],
|
||||
}
|
||||
|
14
.github/workflows/build_pull_request.yml
vendored
14
.github/workflows/build_pull_request.yml
vendored
@ -23,34 +23,34 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Clone repo
|
||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
|
||||
- name: Validate Gradle Wrapper
|
||||
uses: gradle/actions/wrapper-validation@d156388eb19639ec20ade50009f3d199ce1e2808 # v4.1.0
|
||||
uses: gradle/actions/wrapper-validation@cc4fc85e6b35bafd578d5ffbc76a5518407e1af0 # v4.2.1
|
||||
|
||||
- name: Dependency Review
|
||||
uses: actions/dependency-review-action@5a2ce3f5b92ee19cbb1541a4984c76d921601d7c # v4.3.4
|
||||
uses: actions/dependency-review-action@3b139cfc5fae8b618d3eae3675e383bb1769c019 # v4.5.0
|
||||
|
||||
- name: Set up JDK
|
||||
uses: actions/setup-java@b36c23c0d998641eff861008f374ee103c25ac73 # v4.4.0
|
||||
uses: actions/setup-java@8df1039502a15bceb9433410b1a100fbe190c53b # v4.5.0
|
||||
with:
|
||||
java-version: 17
|
||||
distribution: adopt
|
||||
|
||||
- name: Set up gradle
|
||||
uses: gradle/actions/setup-gradle@d156388eb19639ec20ade50009f3d199ce1e2808 # v4.1.0
|
||||
uses: gradle/actions/setup-gradle@cc4fc85e6b35bafd578d5ffbc76a5518407e1af0 # v4.2.1
|
||||
|
||||
- name: Build app and run unit tests
|
||||
run: ./gradlew spotlessCheck assembleStandardRelease testReleaseUnitTest testStandardReleaseUnitTest
|
||||
|
||||
- name: Upload APK
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3
|
||||
with:
|
||||
name: arm64-v8a-${{ github.sha }}
|
||||
path: app/build/outputs/apk/standard/release/app-standard-arm64-v8a-release-unsigned.apk
|
||||
|
||||
- name: Upload mapping
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3
|
||||
with:
|
||||
name: mapping-${{ github.sha }}
|
||||
path: app/build/outputs/mapping/standardRelease
|
||||
|
16
.github/workflows/build_push.yml
vendored
16
.github/workflows/build_push.yml
vendored
@ -17,35 +17,35 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Clone repo
|
||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
|
||||
- name: Validate Gradle Wrapper
|
||||
uses: gradle/actions/wrapper-validation@d156388eb19639ec20ade50009f3d199ce1e2808 # v4.1.0
|
||||
uses: gradle/actions/wrapper-validation@cc4fc85e6b35bafd578d5ffbc76a5518407e1af0 # v4.2.1
|
||||
|
||||
- name: Setup Android SDK
|
||||
run: |
|
||||
${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin/sdkmanager "build-tools;29.0.3"
|
||||
|
||||
- name: Set up JDK
|
||||
uses: actions/setup-java@b36c23c0d998641eff861008f374ee103c25ac73 # v4.4.0
|
||||
uses: actions/setup-java@8df1039502a15bceb9433410b1a100fbe190c53b # v4.5.0
|
||||
with:
|
||||
java-version: 17
|
||||
distribution: adopt
|
||||
|
||||
- name: Set up gradle
|
||||
uses: gradle/actions/setup-gradle@d156388eb19639ec20ade50009f3d199ce1e2808 # v4.1.0
|
||||
uses: gradle/actions/setup-gradle@cc4fc85e6b35bafd578d5ffbc76a5518407e1af0 # v4.2.1
|
||||
|
||||
- name: Build app and run unit tests
|
||||
run: ./gradlew spotlessCheck assembleStandardRelease testReleaseUnitTest testStandardReleaseUnitTest
|
||||
|
||||
- name: Upload APK
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3
|
||||
with:
|
||||
name: arm64-v8a-${{ github.sha }}
|
||||
path: app/build/outputs/apk/standard/release/app-standard-arm64-v8a-release-unsigned.apk
|
||||
|
||||
- name: Upload mapping
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3
|
||||
with:
|
||||
name: mapping-${{ github.sha }}
|
||||
path: app/build/outputs/mapping/standardRelease
|
||||
@ -95,7 +95,7 @@ jobs:
|
||||
|
||||
- name: Create Release
|
||||
if: startsWith(github.ref, 'refs/tags/') && github.repository == 'mihonapp/mihon'
|
||||
uses: softprops/action-gh-release@c062e08bd532815e2082a85e87e3ef29c3e6d191 # v2.0.8
|
||||
uses: softprops/action-gh-release@01570a1f39cb168c169c802c3bceb9e93fb10974 # v2.1.0
|
||||
with:
|
||||
tag_name: ${{ env.VERSION_TAG }}
|
||||
name: Mihon ${{ env.VERSION_TAG }}
|
||||
@ -122,4 +122,4 @@ jobs:
|
||||
draft: true
|
||||
prerelease: false
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.PAT }}
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
2
.gitignore
vendored
2
.gitignore
vendored
@ -6,7 +6,7 @@ build
|
||||
# IDE files
|
||||
*.iml
|
||||
.idea/*
|
||||
!.idea/icon.png
|
||||
!.idea/icon.svg
|
||||
/captures
|
||||
|
||||
# Configuration files
|
||||
|
BIN
.idea/icon.png
generated
BIN
.idea/icon.png
generated
Binary file not shown.
Before Width: | Height: | Size: 62 KiB |
6
.idea/icon.svg
generated
Normal file
6
.idea/icon.svg
generated
Normal file
@ -0,0 +1,6 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" fill="none" viewBox="0 0 432 432">
|
||||
<circle cx="216" cy="216" r="216" fill="#2e3943"/>
|
||||
<path fill="#f2faff" d="M398.073 216c0 97.433-81.517 176.419-182.073 176.419-100.556 0-182.073-78.986-182.073-176.419S115.444 39.581 216 39.581c100.556 0 182.073 78.986 182.073 176.419Z"/>
|
||||
<path fill="#7ebbed" fill-rule="evenodd" d="M216 359.34c81.702 0 147.934-64.175 147.934-143.34S297.702 72.66 216 72.66 68.065 136.835 68.065 216 134.298 359.34 216 359.34zm0 33.079c100.556 0 182.073-78.986 182.073-176.419S316.556 39.581 216 39.581C115.444 39.581 33.927 118.567 33.927 216S115.444 392.419 216 392.419z" clip-rule="evenodd"/>
|
||||
<path fill="#031019" d="m155.273 168.033-1.227-28.215c3.68.7 8.063.875 18.052.875 12.092 0 28.041-.7 36.279-1.752 3.504-.35 4.907-.876 7.185-2.103l18.928 16.124c-1.753 2.453-2.279 3.505-4.207 8.412-1.576 3.856-8.762 26.113-11.567 35.577 12.97 2.63 20.155 4.557 29.97 8.588 1.226-8.588 1.401-13.144 1.401-28.742 0-4.03-.175-6.31-.7-9.99l30.495 1.051c-.877 4.207-1.052 5.959-1.227 12.794-.701 16.475-1.403 24.361-3.154 36.279 12.092 6.134 12.092 6.134 18.226 9.464 3.154 1.752 3.855 2.102 5.959 2.804l-10.165 32.773c-4.908-4.381-11.743-9.113-21.732-14.721-8.763 20.855-23.31 36.103-45.392 48.195-7.36-9.814-12.97-15.772-21.907-22.783 12.969-6.134 18.928-9.99 25.763-16.475 6.66-6.484 11.04-12.793 15.247-22.258-11.217-5.082-18.403-7.36-30.846-9.989-7.185 21.382-12.969 35.052-18.051 43.29-6.835 11.04-16.124 16.824-26.815 16.824-8.237 0-16.65-3.68-22.784-9.99-7.01-7.185-10.69-17.175-10.69-28.742 0-17.176 8.238-32.072 22.609-41.361 9.288-5.959 19.103-8.588 34.7-9.465 3.155-10.34 5.785-19.278 8.238-29.267-7.712.701-17.35 1.227-29.093 1.752-6.309.175-8.412.35-13.495 1.051zm26.64 53.279c-8.238 1.402-13.145 4.031-17.527 9.64-3.33 3.855-4.907 8.412-4.907 13.32 0 5.432 2.63 9.464 5.959 9.464 4.03 0 8.588-9.114 16.475-32.424z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 1.9 KiB |
256
CHANGELOG.md
256
CHANGELOG.md
@ -2,133 +2,291 @@
|
||||
|
||||
All notable changes to this project will be documented in this file.
|
||||
|
||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
The format is a modified version of [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
- `Added` - for new features.
|
||||
- `Changed ` - for changes in existing functionality.
|
||||
- `Improved` - for enhancement or optimization in existing functionality.
|
||||
- `Removed` - for now removed features.
|
||||
- `Fixed` - for any bug fixes.
|
||||
- `Other` - for technical stuff.
|
||||
|
||||
## [Unreleased]
|
||||
### Added
|
||||
- Add option to always decode long strip images with SSIV
|
||||
|
||||
## [v0.17.1] - 2024-12-06
|
||||
### Changed
|
||||
- Bump default user agent ([@AntsyLich](https://github.com/AntsyLich)) ([`76dcf90`](https://github.com/mihonapp/mihon/commit/76dcf903403d565056f44c66d965c1ea8affffc3))
|
||||
|
||||
### Improved
|
||||
- Bangumi search now shows the score and summary of a search result ([@MajorTanya](https://github.com/MajorTanya)) ([#1396](https://github.com/mihonapp/mihon/pull/1396))
|
||||
- Extension repo URLs are now auto-formatted ([@AntsyLich](https://github.com/AntsyLich), [@MajorTanya](https://github.com/MajorTanya)) ([`22d8aad`](https://github.com/mihonapp/mihon/commit/22d8aad598bea8f00f2831779e45a6645392ca0f))
|
||||
|
||||
### Fixed
|
||||
- Fix "currentTab was used multiple times" ([@AntsyLich](https://github.com/AntsyLich)) ([`371c143`](https://github.com/mihonapp/mihon/commit/371c1432e218f6dcf129f05405dceb2cd351c647))
|
||||
- Fix a rare crash when invoking "Mark previous as read" action ([@AntsyLich](https://github.com/AntsyLich)) ([`f508d10`](https://github.com/mihonapp/mihon/commit/f508d10ad13560d7316df8642bc93fe66c05b9a8))
|
||||
- Fix long strip images not loading in some old devices ([@AntsyLich](https://github.com/AntsyLich)) ([`06efc3b`](https://github.com/mihonapp/mihon/commit/06efc3b25c5af51f42448af27a269ee459d9093d))
|
||||
- Switch to hardware bitmap in reader only if device can handle it ([@AntsyLich](https://github.com/AntsyLich)) ([`e6d96bd`](https://github.com/mihonapp/mihon/commit/e6d96bd348ea5d18a005d6465222ad5f5123103e))
|
||||
- Add option to lower the threshold for hardware bitmaps ([@AntsyLich](https://github.com/AntsyLich)) ([`dcddac5`](https://github.com/mihonapp/mihon/commit/dcddac5daaff3ec89c8507c35dc13d345ffdb6d7))
|
||||
- Improve hardware bitmap threshold option ([@AntsyLich](https://github.com/AntsyLich)) ([`d6dfd24`](https://github.com/mihonapp/mihon/commit/d6dfd24548eaa05a8c3e478068fe2e08f2ee4473))
|
||||
- Always use software bitmap on certain devices ([@MajorTanya](https://github.com/MajorTanya)) ([#1543](https://github.com/mihonapp/mihon/pull/1543))
|
||||
- Fix crash after removing last category while it's active in library ([@cuong-tran](https://github.com/cuong-tran)) ([#1450](https://github.com/mihonapp/mihon/pull/1450))
|
||||
- Fix reader transition color scheme in auto background mode ([@cuong-tran](https://github.com/cuong-tran)) ([#1487](https://github.com/mihonapp/mihon/pull/1487))
|
||||
- Fix app update error notification disappearing ([@cuong-tran](https://github.com/cuong-tran)) ([#1476](https://github.com/mihonapp/mihon/pull/1476))
|
||||
- Fix browser not opening in some cases in Honor devices ([@AntsyLich](https://github.com/AntsyLich), [@MajorTanya](https://github.com/MajorTanya)) ([#1520](https://github.com/mihonapp/mihon/pull/1520))
|
||||
|
||||
## [v0.17.0] - 2024-10-26
|
||||
### Added
|
||||
- Option to disable reader zoom out ([@Splintorien](https://github.com/Splintorien)) ([#302](https://github.com/mihonapp/mihon/pull/302))
|
||||
- Source name and tracker urls to app generated `ComicInfo.xml` file ([@Shamicen](https://github.com/Shamicen)) ([#459](https://github.com/mihonapp/mihon/pull/459))
|
||||
- Option to migrate in Duplicate entry dialog ([@sirlag](https://github.com/sirlag)) ([#492](https://github.com/mihonapp/mihon/pull/492))
|
||||
- Upcoming screen to visualize expected update dates ([@sirlag](https://github.com/sirlag)) ([#420](https://github.com/mihonapp/mihon/pull/420))
|
||||
- Only show upcoming updates in the future ([@sirlag](https://github.com/sirlag)) ([#606](https://github.com/mihonapp/mihon/pull/606))
|
||||
- Add Quantity Badge to Upcoming Screen ([@Animeboynz](https://github.com/Animeboynz), [@AntsyLich](https://github.com/AntsyLich)) ([#1250](https://github.com/mihonapp/mihon/pull/1250))
|
||||
- Crash screen error message to the top of the crash log generated from that screen ([@FooIbar](https://github.com/FooIbar)) ([#742](https://github.com/mihonapp/mihon/pull/742))
|
||||
- Support for 7Zip and RAR5 archives ([@FooIbar](https://github.com/FooIbar), [@null2264](https://github.com/null2264)) ([#949](https://github.com/mihonapp/mihon/pull/949), [#967](https://github.com/mihonapp/mihon/pull/967))
|
||||
- Support for 7Zip and RAR5 archives ([@FooIbar](https://github.com/FooIbar)) ([#949](https://github.com/mihonapp/mihon/pull/949))
|
||||
- Extra configuration options to e-ink page flashes ([@sirlag](https://github.com/sirlag)) ([#625](https://github.com/mihonapp/mihon/pull/625))
|
||||
- 8-bit+ AVIF image support ([@WerctFourth](https://github.com/WerctFourth)) ([#971](https://github.com/mihonapp/mihon/pull/971))
|
||||
- Smart update dialog message when no predicted released date exists ([@Animeboynz](https://github.com/Animeboynz)) ([#977](https://github.com/mihonapp/mihon/pull/977))
|
||||
- Save global search "Has result" choice ([@AntsyLich](https://github.com/AntsyLich)) ([`5a61ca5`](https://github.com/mihonapp/mihon/commit/5a61ca5535fe0d9e8e7bcb9e665ba2f9cb0cf649))
|
||||
- Option to copy reader panel to clipboard ([@Animeboynz](https://github.com/Animeboynz)) ([#1003](https://github.com/mihonapp/mihon/pull/1003))
|
||||
- Copy Tracker URL option to tracker sheet ([@mm12](https://github.com/mm12)) ([#1101](https://github.com/mihonapp/mihon/pull/1101))
|
||||
- A button to exclude all scanlators in exclude scanlators dialog ([@AntsyLich](https://github.com/AntsyLich)) ([`84b2164`](https://github.com/mihonapp/mihon/commit/84b2164787a795f3fd757c325cbfb6ef660ac3a3))
|
||||
- Open in browser option to reader menu ([@mm12](https://github.com/mm12)) ([#1110](https://github.com/mihonapp/mihon/pull/1110))
|
||||
- Reorder reader menu overflow items ([@AntsyLich](https://github.com/AntsyLich)) ([`788235f`](https://github.com/mihonapp/mihon/commit/788235feeca241228eac0561339dd07b5ea0b77d))
|
||||
- Option to skip downloading duplicate read chapters ([@shabnix](https://github.com/shabnix)) ([#1125](https://github.com/mihonapp/mihon/pull/1125))
|
||||
- Add confirmation dialog when adding repo via URI ([@Animeboynz](https://github.com/Animeboynz)) ([#1158](https://github.com/mihonapp/mihon/pull/1158))
|
||||
- Add "show entry" action to download notifications ([@mm12](https://github.com/mm12), [@AntsyLich](https://github.com/AntsyLich)) ([#1159](https://github.com/mihonapp/mihon/pull/1159))
|
||||
- Option to update trackers when chapter marked as read ([@Animeboynz](https://github.com/Animeboynz), [@AntsyLich](https://github.com/AntsyLich)) ([#1177](https://github.com/mihonapp/mihon/pull/1177), [#1365](https://github.com/mihonapp/mihon/pull/1365), [#1374](https://github.com/mihonapp/mihon/pull/1374))
|
||||
- Toast to restart app when User-Agent is changed ([@NGB-Was-Taken](https://github.com/NGB-Was-Taken)) ([#1204](https://github.com/mihonapp/mihon/pull/1204))
|
||||
- Added more profile compilation status (p) ([`c8bb78d`](https://github.com/mihonapp/mihon/commit/c8bb78d91afc2824baaca999f0095559c49d1306))
|
||||
- Add option to opt out of Analytics and Crashlytics ([@Animeboynz](https://github.com/Animeboynz)) ([#1237](https://github.com/mihonapp/mihon/pull/1237))
|
||||
- Rework Firebase setup ([@AntsyLich](https://github.com/AntsyLich)) ([`15e3f28`](https://github.com/mihonapp/mihon/commit/15e3f28aa36bec3c31f212c572ab57ce960cc862))
|
||||
- Added random library sort ([@jackhamilton](https://github.com/jackhamilton)) ([#1317](https://github.com/mihonapp/mihon/pull/1317))
|
||||
- Make sure random library sort is at the bottom ([@AntsyLich](https://github.com/AntsyLich)) ([`2e2c8d3`](https://github.com/mihonapp/mihon/commit/2e2c8d36c1e23bf274c7c19f1242e14b0c7afbc1))
|
||||
- Confirmation dialog when removing privately installed extensions ([@Animeboynz](https://github.com/Animeboynz), [@AntsyLich](https://github.com/AntsyLich)) ([#1320](https://github.com/mihonapp/mihon/pull/1320))
|
||||
- Option to backup non-library read entries ([@Animeboynz](https://github.com/Animeboynz), [@jobobby04](https://github.com/jobobby04), [@AntsyLich](https://github.com/AntsyLich)) ([#1324](https://github.com/mihonapp/mihon/pull/1324))
|
||||
|
||||
### Changed
|
||||
- Read archive files from memory instead of extracting files to internal storage ([@FooIbar](https://github.com/FooIbar)) ([#326](https://github.com/mihonapp/mihon/pull/326))
|
||||
- Try to get resource from Extension before checking in the app ([@beer-psi](https://github.com/beer-psi)) ([#433](https://github.com/mihonapp/mihon/pull/433))
|
||||
- Default user agent ([@AntsyLich](https://github.com/AntsyLich)) ([`8160b47`](https://github.com/mihonapp/mihon/commit/8160b47ff5fbbd9b32caeb462b5be881fabd3449))
|
||||
- Read archive files from memory instead of temporarily extracting to internal storage ([@FooIbar](https://github.com/FooIbar)) ([#326](https://github.com/mihonapp/mihon/pull/326))
|
||||
- Fix dual page split ([@FooIbar](https://github.com/FooIbar)) ([#485](https://github.com/mihonapp/mihon/pull/485))
|
||||
- Bump default user agent ([@AntsyLich](https://github.com/AntsyLich)) ([`8160b47`](https://github.com/mihonapp/mihon/commit/8160b47ff5fbbd9b32caeb462b5be881fabd3449))
|
||||
- Wait for sources to be initialized before performing source related tasks ([@jobobby04](https://github.com/jobobby04)) ([`a08e03f`](https://github.com/mihonapp/mihon/commit/a08e03f5cbf3f4e6be1de35f97ef8ebb26a1210e))
|
||||
- Duplicate entry dialog UI ([@sirlag](https://github.com/sirlag)) ([#492](https://github.com/mihonapp/mihon/pull/492))
|
||||
- Extension trust system ([@AntsyLich](https://github.com/AntsyLich), [@Animeboynz](https://github.com/Animeboynz) ([#570](https://github.com/mihonapp/mihon/pull/570), [#1057](https://github.com/mihonapp/mihon/pull/1057))
|
||||
- Extension trust system
|
||||
- Store extension repo details from `repo.json` in database ([@sirlag](https://github.com/sirlag)) ([#506](https://github.com/mihonapp/mihon/pull/506))
|
||||
- Fix extension repo migration not triggering ([@AntsyLich](https://github.com/AntsyLich)) ([`9672ea8`](https://github.com/mihonapp/mihon/commit/9672ea8b1b06f464800e310c96e060ead182f7ca))
|
||||
- Refactor the ExtensionRepoService to use DTOs ([@MajorTanya](https://github.com/MajorTanya)) ([#573](https://github.com/mihonapp/mihon/pull/573))
|
||||
- Fix extension repo name is used to construct URL instead of baseUrl ([@MajorTanya](https://github.com/MajorTanya)) ([#572](https://github.com/mihonapp/mihon/pull/572))
|
||||
- Fix crash with `TypeReference` issue when creating extension repo ([@AntsyLich](https://github.com/AntsyLich)) ([#574](https://github.com/mihonapp/mihon/pull/574), [`e020ae5`](https://github.com/mihonapp/mihon/commit/e020ae5ed558e80742ef0ad8bfa0f69af0959d5a))
|
||||
- Fix mishap in [`e020ae5`](https://github.com/mihonapp/mihon/commit/e020ae5ed558e80742ef0ad8bfa0f69af0959d5a) ([@AntsyLich](https://github.com/AntsyLich)) ([`6965e59`](https://github.com/mihonapp/mihon/commit/6965e59a643c67a2bf81b3c69ec70268e5da5797))
|
||||
- Backup and Restore ([@Animeboynz](https://github.com/Animeboynz)) ([#1057](https://github.com/mihonapp/mihon/pull/1057))
|
||||
- Trust extension by repo ([@AntsyLich](https://github.com/AntsyLich)) ([#570](https://github.com/mihonapp/mihon/pull/570))-
|
||||
- From M2 ripple to M3 ([@FooIbar](https://github.com/FooIbar)) ([#675](https://github.com/mihonapp/mihon/pull/675))
|
||||
- Increased continue reading button size ([@AntsyLich](https://github.com/AntsyLich), [@Animeboynz](https://github.com/Animeboynz)) ([`e17f70f`](https://github.com/mihonapp/mihon/commit/e17f70f7226ea031fc1f962c9dfea3e404ba53ad))
|
||||
- Global search "Has result" choice is now sticky ([@AntsyLich](https://github.com/AntsyLich)) ([`5a61ca5`](https://github.com/mihonapp/mihon/commit/5a61ca5535fe0d9e8e7bcb9e665ba2f9cb0cf649))
|
||||
- Make category backup/restore not dependant on library backup ([@AntsyLich](https://github.com/AntsyLich)) ([`56fb4f6`](https://github.com/mihonapp/mihon/commit/56fb4f62a152e87a71892aa68c78cac51a2c8596))
|
||||
- Rename backup restore error log file ([@AntsyLich](https://github.com/AntsyLich)) ([`2858ef8`](https://github.com/mihonapp/mihon/commit/2858ef835fec8d7278b1d0cad1b5664104d1e4b0))
|
||||
- Keyboard type in add extension repo dialog ([@xbjfk](https://github.com/xbjfk)) ([#764](https://github.com/mihonapp/mihon/pull/764))
|
||||
- Adjust collapse/open animation on manga description ([@AntsyLich](https://github.com/AntsyLich), [@ivaniskandar](https://github.com/ivaniskandar)) ([`1c16fc7`](https://github.com/mihonapp/mihon/commit/1c16fc79c2ac4c4be30308fed84ffb371dab5902))
|
||||
- Kitsu domain to `kitsu.app` ([@MajorTanya](https://github.com/MajorTanya)) ([#1106](https://github.com/mihonapp/mihon/pull/1106))
|
||||
- Respect privacy settings in extension update notification ([@Animeboynz](https://github.com/Animeboynz)) ([#1156](https://github.com/mihonapp/mihon/pull/1156))
|
||||
- Hide keyboard when a Tracker SearchResultItem is clicked ([@Animeboynz](https://github.com/Animeboynz)) ([#1168](https://github.com/mihonapp/mihon/pull/1168))
|
||||
- Enable 'Split Tall Images' by default ([@Smol-Ame](https://github.com/Smol-Ame)) ([#1185](https://github.com/mihonapp/mihon/pull/1185))
|
||||
- Ignore "intent://" urls on webview ([@bapeey](https://github.com/bapeey)) ([#1193](https://github.com/mihonapp/mihon/pull/1193))
|
||||
- Make reader chapter navigator slightly wider on small screens (p) ([#1202](https://github.com/mihonapp/mihon/pull/1202))
|
||||
- Re-enable fetching chapters list for entries with licenced status ([@Animeboynz](https://github.com/Animeboynz)) ([#1230](https://github.com/mihonapp/mihon/pull/1230))
|
||||
- Change casing for Extention Repos String ([@Animeboynz](https://github.com/Animeboynz)) ([#1248](https://github.com/mihonapp/mihon/pull/1248))
|
||||
- Retain remote last chapter read if it's higher than the local one for EnhancedTracker ([@brewkunz](https://github.com/brewkunz)) ([#1301](https://github.com/mihonapp/mihon/pull/1301))
|
||||
- Adjust expandable fab animation (p) ([`eb6092b`](https://github.com/mihonapp/mihon/commit/eb6092bd0cfa09694985a8bafdd8bbf2815190a1))
|
||||
- "Invalidate downloads index" to "Reindex downloads" ([@AntsyLich](https://github.com/AntsyLich)) ([`d2afbfe`](https://github.com/mihonapp/mihon/commit/d2afbfe4ede283076aae40633c79c3f90b4390e7))
|
||||
|
||||
### Improvement
|
||||
- Long strip reader performance ([@FooIbar](https://github.com/FooIbar), [@wwww-wwww](https://github.com/wwww-wwww)) ([#687](https://github.com/mihonapp/mihon/pull/687))
|
||||
### Improved
|
||||
- Reader performance
|
||||
- Avoid unnecessary copying when processing reader image ([@FooIbar](https://github.com/FooIbar)) ([#691](https://github.com/mihonapp/mihon/pull/691))
|
||||
- Significantly improve performance when loading extremely long images in long strip mode ([@FooIbar](https://github.com/FooIbar)) ([#692](https://github.com/mihonapp/mihon/pull/692))
|
||||
- Use `Bitmap.Config.HARDWARE` if possible to improve image loading speed ([@wwww-wwww](https://github.com/wwww-wwww)) ([#687](https://github.com/mihonapp/mihon/pull/687))
|
||||
- Improve preloading in long strip mode ([@FooIbar](https://github.com/FooIbar)) ([#1076](https://github.com/mihonapp/mihon/pull/1076))
|
||||
- Performance when looking up specific files ([@raxod502](https://github.com/raxod502)) ([#728](https://github.com/mihonapp/mihon/pull/728))
|
||||
- Chapter number parsing ([@Naputt1](https://github.com/Naputt1)) ([`6a80305`](https://github.com/mihonapp/mihon/commit/6a80305d6c572da6c08c0c69f5c25ff26ecf7383))
|
||||
- Error message on restoring if backup decoding fails ([@vetleledaal](https://github.com/vetleledaal)) ([#1056](https://github.com/mihonapp/mihon/pull/1056))
|
||||
|
||||
### Removed
|
||||
- Legacy download folder names no longer supported ([@AntsyLich](https://github.com/AntsyLich)) ([`e55e5f6`](https://github.com/mihonapp/mihon/commit/e55e5f6f64f872475d370d6ce0c186e2601776e4))
|
||||
- Remove legacy broken source and history backup ([@AntsyLich](https://github.com/AntsyLich)) ([`518abf0`](https://github.com/mihonapp/mihon/commit/518abf032ccb9bb45d197927be2a5faca4167d29))
|
||||
- Remove more unnecessary permissions from Firebase dependency ([@AntsyLich](https://github.com/AntsyLich)) ([`02af9b1`](https://github.com/mihonapp/mihon/commit/02af9b1acf9f590d29560bc3fc90d206e8e6e1af))
|
||||
- Fix mishap in `02af9b1` ([@AntsyLich](https://github.com/AntsyLich)) ([`f22767d`](https://github.com/mihonapp/mihon/commit/f22767d863a0fa001f93f24092cd5ade87350502))
|
||||
|
||||
### Fixed
|
||||
- Creating `ComicInfo.xml` file for local source ([@FooIbar](https://github.com/FooIbar)) ([#325](https://github.com/mihonapp/mihon/pull/325))
|
||||
- Extracting `ComicInfo.xml` from local source archives ([@FooIbar](https://github.com/FooIbar)) ([#325](https://github.com/mihonapp/mihon/pull/325))
|
||||
- Chapter download indicator ([@ivaniskandar](https://github.com/ivaniskandar)) ([`d8b9a9f`](https://github.com/mihonapp/mihon/commit/d8b9a9f593911569ff2bceb49b4f020978d0d2e1))
|
||||
- Issues with shizuku in a multi user setup ([@Redjard](https://github.com/Redjard)) ([#494](https://github.com/mihonapp/mihon/pull/494))
|
||||
- Occasional black bar when scrolling in long strip reader ([@FooIbar](https://github.com/FooIbar)) ([#563](https://github.com/mihonapp/mihon/pull/563))
|
||||
- Fix reader page image not being decoded until it's visible ([@FooIbar](https://github.com/FooIbar)) ([#563](https://github.com/mihonapp/mihon/pull/563))
|
||||
- Reader chapter progress slider visuals ([@FooIbar](https://github.com/FooIbar)) ([#674](https://github.com/mihonapp/mihon/pull/674))
|
||||
- Extension being marked as not installed instead of untrusted after updating with private installer ([@AntsyLich](https://github.com/AntsyLich)) ([`2114514`](https://github.com/mihonapp/mihon/commit/21145144cdf550aa775047603e06e261951ebc42))
|
||||
- Extension update counter not updating due to extension being marked as untrusted ([@AntsyLich](https://github.com/AntsyLich)) ([`2114514`](https://github.com/mihonapp/mihon/commit/21145144cdf550aa775047603e06e261951ebc42))
|
||||
- `Key "extension-XXX-YYY" was already used` crash ([@AntsyLich](https://github.com/AntsyLich)) ([`2114514`](https://github.com/mihonapp/mihon/commit/21145144cdf550aa775047603e06e261951ebc42))
|
||||
- Navigation layout tap zones shifting after zooming out in webtoon readers ([@FooIbar](https://github.com/FooIbar)) ([#767](https://github.com/mihonapp/mihon/pull/767))
|
||||
- Some extension not loading due to missing classes ([@AwkwardPeak7](https://github.com/AwkwardPeak7)) ([#783](https://github.com/mihonapp/mihon/pull/783))
|
||||
- Theme colors in accordance to upstream changes ([@CrepeTF](https://github.com/CrepeTF), [@AntsyLich](https://github.com/AntsyLich)) ([#766](https://github.com/mihonapp/mihon/pull/766), [#963](https://github.com/mihonapp/mihon/pull/963), [#976](https://github.com/mihonapp/mihon/pull/976))
|
||||
- Theme colors in accordance to upstream changes ([@CrepeTF](https://github.com/CrepeTF), [@AntsyLich](https://github.com/AntsyLich)) ([#766](https://github.com/mihonapp/mihon/pull/766), [#963](https://github.com/mihonapp/mihon/pull/963), [#976](https://github.com/mihonapp/mihon/pull/976), [9a34ace](https://github.com/mihonapp/mihon/commit/9a34ace09c66274e6c2b3f9446058a0fa99d4bd0))
|
||||
- Crash when requesting folder access on non-conforming devices ([@mainrs](https://github.com/mainrs)) ([#726](https://github.com/mihonapp/mihon/pull/726))
|
||||
- Fix unexpected skips in strong skipping mode ([@FooIbar](https://github.com/FooIbar)) ([#940](https://github.com/mihonapp/mihon/pull/940))
|
||||
- Bugged color for Date/Scanlator in chapter list for read chapters ([@ivaniskandar](https://github.com/ivaniskandar)) ([`15d9992`](https://github.com/mihonapp/mihon/commit/15d999229fcce865001d5fa77d0163e6e80e38db))
|
||||
- Categories having same `order` after restoring backup ([@Cologler](https://github.com/Cologler)) ([`119bcbf`](https://github.com/mihonapp/mihon/commit/119bcbf8ed2415664922ea77fadf0da1165d1732))
|
||||
- Filter by "Tracking" temporarily stuck after signing out of tracker ([@AntsyLich](https://github.com/AntsyLich)) ([#987](https://github.com/mihonapp/mihon/pull/987))
|
||||
- Fix login prompts despite being logged in to trackers in Manga screen ([@AntsyLich](https://github.com/AntsyLich)) ([`cbcd8bd`](https://github.com/mihonapp/mihon/commit/cbcd8bd6682023f728568f2b44da26124618aed7))
|
||||
- JXL image downloading and loading ([@FooIbar](https://github.com/FooIbar)) ([#993](https://github.com/mihonapp/mihon/pull/993))
|
||||
- Crash when using `%` in category name ([@Animeboynz](https://github.com/Animeboynz), [@FooIbar](https://github.com/FooIbar)) ([#1030](https://github.com/mihonapp/mihon/pull/1030))
|
||||
- Fix item disappearing when fast scrolling ([@cuong-tran](https://github.com/cuong-tran)) ([#1035](https://github.com/mihonapp/mihon/pull/1035))
|
||||
- Library is backed up while being disabled ([@AntsyLich](https://github.com/AntsyLich)) ([`56fb4f6`](https://github.com/mihonapp/mihon/commit/56fb4f62a152e87a71892aa68c78cac51a2c8596))
|
||||
- Crash on list with 0 item but only sticky header ([@cuong-tran](https://github.com/cuong-tran)) ([#1083](https://github.com/mihonapp/mihon/pull/1083))
|
||||
- Crash on list with only sticky header ([@cuong-tran](https://github.com/cuong-tran)) ([#1083](https://github.com/mihonapp/mihon/pull/1083))
|
||||
- Crash when trying to clear cookies of some source ([@FooIbar](https://github.com/FooIbar)) ([#1084](https://github.com/mihonapp/mihon/pull/1084))
|
||||
- MAL search results not showing start dates ([@MajorTanya](https://github.com/MajorTanya)) ([#1098](https://github.com/mihonapp/mihon/pull/1098))
|
||||
- Android SDK 35 API collision ([@AntsyLich](https://github.com/AntsyLich)) ([`fdb9617`](https://github.com/mihonapp/mihon/commit/fdb96179c6373eb0a8e7d6daea671a315d5ce5f0))
|
||||
- Manga next update calculation when considering custom fetch interval ([@cuong-tran](https://github.com/cuong-tran)) ([#1206](https://github.com/mihonapp/mihon/pull/1206))
|
||||
- WheelPicker Manual Input ([@Animeboynz](https://github.com/Animeboynz)) ([#1209](https://github.com/mihonapp/mihon/pull/1209))
|
||||
- EnhancedTracker not auto binding when adding manga to library ([@brewkunz](https://github.com/brewkunz)) ([#1298](https://github.com/mihonapp/mihon/pull/1298))
|
||||
- Step count in settings slider ([@abdurisaq](https://github.com/abdurisaq)) ([#1356](https://github.com/mihonapp/mihon/pull/1356))
|
||||
- Freezing in some screens due to blocking call ([@cuong-tran](https://github.com/cuong-tran)) ([#1364](https://github.com/mihonapp/mihon/pull/1364))
|
||||
- Crash when removing non-existent tracked entry from tracker ([@cuong-tran](https://github.com/cuong-tran)) ([#1380](https://github.com/mihonapp/mihon/pull/1380))
|
||||
|
||||
### Other
|
||||
- Code cleanup
|
||||
- Minor refactor of theming when expressions ([@MajorTanya](https://github.com/MajorTanya)) ([#396](https://github.com/mihonapp/mihon/pull/396))
|
||||
- Inside `WorkerInfoScreen` ([@AntsyLich](https://github.com/AntsyLich)) ([`5aec8f8`](https://github.com/mihonapp/mihon/commit/5aec8f8018236a38106483da08f9cbc28261ac9b))
|
||||
- Inside `ChapterDownloadIndicator`, `MangaChapterListItem` ([@AntsyLich](https://github.com/AntsyLich)) ([`b7e091d`](https://github.com/mihonapp/mihon/commit/b7e091d5d039e00cababc7daf555280df6cf9c03))
|
||||
- MangaCoverFetcher ([@ivaniskandar](https://github.com/ivaniskandar)) ([`1365695`](https://github.com/mihonapp/mihon/commit/13656959ae0606736f6ca9eb62699dc23e467c2f))
|
||||
- Cleanup `LibraryScreenModel` `LibraryMap.applySort` and some more ([@AntsyLich](https://github.com/AntsyLich)) ([`2beb89d`](https://github.com/mihonapp/mihon/commit/2beb89d53163a6d288f8acdebe0f5d26fea8ab3e))
|
||||
- Address `overridePendingTransition` deprecation ([@MajorTanya](https://github.com/MajorTanya)) ([#410](https://github.com/mihonapp/mihon/pull/410))
|
||||
- Prioritize extension classes and files over app ([@beer-psi](https://github.com/beer-psi)) ([#433](https://github.com/mihonapp/mihon/pull/433))
|
||||
- Use compose pager implementation ([@ivaniskandar](https://github.com/ivaniskandar)) ([`84984ef`](https://github.com/mihonapp/mihon/commit/84984ef7e1d7242924120cd2f171cb9dd75bc916))
|
||||
- Switch to coil3 from coil2 ([@ivaniskandar](https://github.com/ivaniskandar)) ([`f72b6e4`](https://github.com/mihonapp/mihon/commit/f72b6e4d7c1f2f93d705402e4d80c94160bef54d))
|
||||
- Fix GIF not playing ([@jobobby04](https://github.com/jobobby04)) ([`59bedb3`](https://github.com/mihonapp/mihon/commit/59bedb33ff59ad5db1df2e93567a2266fb63eacc))
|
||||
- Accommodate db for sync support ([@kaiserbh](https://github.com/kaiserbh)) ([#450](https://github.com/mihonapp/mihon/pull/450))
|
||||
- Fix webtoon last visible item position calculation ([@FooIbar](https://github.com/FooIbar)) ([#562](https://github.com/mihonapp/mihon/pull/562))
|
||||
- Migrate from `com.google.accompanist:accompanist-webview` to `io.github.kevinnzou:compose-webview` ([@sirlag](https://github.com/sirlag)) ([#569](https://github.com/mihonapp/mihon/pull/569))
|
||||
- Rewrite migrations ([@ghostbear](https://github.com/ghostbear)) ([#577](https://github.com/mihonapp/mihon/pull/577))
|
||||
- Further improve migration ([@ghostbear](https://github.com/ghostbear)) ([#588](https://github.com/mihonapp/mihon/pull/588))
|
||||
- Fix migrations not running ([@ghostbear](https://github.com/ghostbear)) ([#604](https://github.com/mihonapp/mihon/pull/604))
|
||||
- Fix MigratorTest after updating to Kotlin 2 ([@cuong-tran](https://github.com/cuong-tran)) ([#896](https://github.com/mihonapp/mihon/pull/896))
|
||||
- Add MigratorTest to build script ([@cuong-tran](https://github.com/cuong-tran)) ([#896](https://github.com/mihonapp/mihon/pull/896))
|
||||
- Fix UI freeze after migration ([@AntsyLich](https://github.com/AntsyLich)) ([`3f1d28c`](https://github.com/mihonapp/mihon/commit/3f1d28c3833e6b868152149ed02b3fb8c54eccef))
|
||||
- Fix some migrations never running ([@MajorTanya](https://github.com/MajorTanya), [@AntsyLich](https://github.com/AntsyLich)) ([#1030](https://github.com/mihonapp/mihon/pull/1030))
|
||||
- Add ProGuard rule to keep `mihon` namespace classes ([@MajorTanya](https://github.com/MajorTanya)) ([#605](https://github.com/mihonapp/mihon/pull/605))
|
||||
- Use gradle plugins to share build configuration instead of subprojects ([@AntsyLich](https://github.com/AntsyLich)) ([`e448e40`](https://github.com/mihonapp/mihon/commit/e448e40406e8d9916120a278e42829a6f1b25a7a))
|
||||
- Remove dependency on compose material 2 components ([@AntsyLich](https://github.com/AntsyLich)) ([`fb94230`](https://github.com/mihonapp/mihon/commit/fb9423028eb017c110cb805f2d0601e5b02e50f9))
|
||||
- Upload PR build artifacts to GitHub ([@FooIbar](https://github.com/FooIbar)) ([#941](https://github.com/mihonapp/mihon/pull/941))
|
||||
- Refactor archive support with libarchive ([@FooIbar](https://github.com/FooIbar)) ([#949](https://github.com/mihonapp/mihon/pull/949))
|
||||
- Add safeguard to prevent ArchiveInputStream from being closed twice ([@null2264](https://github.com/null2264)) ([#967](https://github.com/mihonapp/mihon/pull/967))
|
||||
- Move archive related code to :core:archive ([@AntsyLich](https://github.com/AntsyLich)) ([`bd7b354`](https://github.com/mihonapp/mihon/commit/bd7b35419861df6d426d6ec0a188391910d0f615))
|
||||
- Replace detekt with ktlint via spotless ([@AntsyLich](https://github.com/AntsyLich)) ([#1130](https://github.com/mihonapp/mihon/pull/1130), [#1136](https://github.com/mihonapp/mihon/pull/1136), [#1138](https://github.com/mihonapp/mihon/pull/1138))
|
||||
- Refrain from running spotless on weblate files ([@AntsyLich](https://github.com/AntsyLich)) ([`32d2c2a`](https://github.com/mihonapp/mihon/commit/32d2c2ac1bc224cbda2f09a4023d7d120ea0e954))
|
||||
- Use feature flags in compose compiler plugin ([@AntsyLich](https://github.com/AntsyLich)) ([`8f9a325`](https://github.com/mihonapp/mihon/commit/8f9a325895bb7b94c2ec92dd969094fc30b3b5e2))- PagerPageHolder: lazy init loading indicator ([@AntsyLich](https://github.com/AntsyLich), [@ivaniskandar](https://github.com/ivaniskandar)) ([`a45eb5e`](https://github.com/mihonapp/mihon/commit/a45eb5e5288159dbbbbb5f92140ce0dd32a8f3ab))
|
||||
- Collect MangaScreen state with lifecycle ([@AntsyLich](https://github.com/AntsyLich), [@ivaniskandar](https://github.com/ivaniskandar)) ([`03eb756`](https://github.com/mihonapp/mihon/commit/03eb756ecba0692d88d3a76254afc4c157fa225b))
|
||||
- Add stable marker to Manga data class ([@AntsyLich](https://github.com/AntsyLich), [@ivaniskandar](https://github.com/ivaniskandar)) ([`03eb756`](https://github.com/mihonapp/mihon/commit/03eb756ecba0692d88d3a76254afc4c157fa225b))
|
||||
- Use DTOs to parse tracking API responses ([@MajorTanya](https://github.com/MajorTanya)) ([#1103](https://github.com/mihonapp/mihon/pull/1103))
|
||||
- Fix Kitsu ratingTwenty being typed as String ([@MajorTanya](https://github.com/MajorTanya)) ([#1191](https://github.com/mihonapp/mihon/pull/1191))
|
||||
- Fix Kitsu `synopsis` nullability ([@MajorTanya](https://github.com/MajorTanya)) ([#1233](https://github.com/mihonapp/mihon/pull/1233))
|
||||
- Fix AniList `ALSearchItem.status` nullibility ([@Secozzi](https://github.com/Secozzi)) ([#1297](https://github.com/mihonapp/mihon/pull/1297))
|
||||
- Migrate some classpaths to gradle plugins ([@AntsyLich](https://github.com/AntsyLich)) ([`fc1c804`](https://github.com/mihonapp/mihon/commit/fc1c804bfda1d76c0399bbb6214e75b3def951cc))
|
||||
- Add crashlytics to standard builds ([@AntsyLich](https://github.com/AntsyLich)) ([`3c611b9`](https://github.com/mihonapp/mihon/commit/3c611b95fb79e5ac972019b76c7b24f46a3087fd))
|
||||
- Switch to stable compose ([@AntsyLich](https://github.com/AntsyLich)) ([`2baffa6`](https://github.com/mihonapp/mihon/commit/2baffa62cade1abd978d5fd03151b47fc87fd31e))
|
||||
- Switch from inorichi injekt to kohesive Injekt ([@AntsyLich](https://github.com/AntsyLich)) ([#1205](https://github.com/mihonapp/mihon/pull/1205))
|
||||
- Use custom injekt register with inorichi patch ([@AntsyLich](https://github.com/AntsyLich)) ([`83fd474`](https://github.com/mihonapp/mihon/commit/83fd4746eda1b99f35292b0c2211e606a421b3eb))
|
||||
- Use TextFieldState in BasicTextField where applicable (p) ([#1201](https://github.com/mihonapp/mihon/pull/1201))
|
||||
- Bump NDK version ([@AntsyLich](https://github.com/AntsyLich)) ([#1203](https://github.com/mihonapp/mihon/pull/1203))
|
||||
- Move firebase permission removal to standard flavor ([@AntsyLich](https://github.com/AntsyLich)) ([`be671b4`](https://github.com/mihonapp/mihon/commit/be671b42cefd70180644e01bb065a18cb7701bf9))
|
||||
- Adjust distinct checker in WidgetManager and run on default dispatcher (p) ([`9b8ab6a`](https://github.com/mihonapp/mihon/commit/9b8ab6acc25a5f99c9c5eebf9cc250975931c57c))
|
||||
- Update resources exclusion rules (p) ([`481cfed`](https://github.com/mihonapp/mihon/commit/481cfedf08576cecfbb35616837bd8f627d8f959))
|
||||
- Bump compile sdk to 35 (p) ([`37419cd`](https://github.com/mihonapp/mihon/commit/37419cdc26c2b5c4f8583fc2ba439b08fab42856))
|
||||
- ChapterNavigator: dispatch page change only when needed (p) ([`f84d9a0`](https://github.com/mihonapp/mihon/commit/f84d9a08b4af768b1e9920c43cc445c86f5427fc))
|
||||
- Remove usage of deprecated accompanist SystemUiController ([@AntsyLich](https://github.com/AntsyLich)) ([`2ba3f06`](https://github.com/mihonapp/mihon/commit/2ba3f0612c08c7021fed2f6d96cd538da2f34a13))
|
||||
- Run PR check when base strings are changed ([@AntsyLich](https://github.com/AntsyLich)) ([`4051f18`](https://github.com/mihonapp/mihon/commit/4051f180a2e36e8a2cde6c55f0bea7952fdc4704))
|
||||
- Fix PR build check ([@AntsyLich](https://github.com/AntsyLich)) ([`9503082`](https://github.com/mihonapp/mihon/commit/9503082d44b5bd868ee1bfc42741dc978d1d9047))
|
||||
- Cleanup .gitignore files ([@AntsyLich](https://github.com/AntsyLich)) ([`afa5002`](https://github.com/mihonapp/mihon/commit/afa50029882655af8d5eea40aed7644fce4564d8))
|
||||
- Pass uncaught exception to default handler in GlobalExceptionHandler (so it's reported to crashlytics) ([@AntsyLich](https://github.com/AntsyLich)) ([`f3a2f56`](https://github.com/mihonapp/mihon/commit/f3a2f566c8a09ab862758ae69b43da2a2cd8f1db))
|
||||
|
||||
## [v0.16.5] - 2024-04-09
|
||||
### Added
|
||||
- Setting to install custom color profiles to get true colors ([@wwww-wwww](https://github.com/wwww-wwww)) ([#523](https://github.com/mihonapp/mihon/pull/523))
|
||||
- Relative date for up to a week in the future ([@sirlag](https://github.com/sirlag)) ([#415](https://github.com/mihonapp/mihon/pull/415))
|
||||
- Advance setting to install custom color profiles ([@wwww-wwww](https://github.com/wwww-wwww)) ([#523](https://github.com/mihonapp/mihon/pull/523))
|
||||
|
||||
### Changed
|
||||
- Permanently enable 32-bit color mode ([@wwww-wwww](https://github.com/wwww-wwww)) ([#523](https://github.com/mihonapp/mihon/pull/523))
|
||||
|
||||
### Fixed
|
||||
- Fix wrong dates in Updates and History tab due to time zone issues ([@sirlag](https://github.com/sirlag)) ([#402](https://github.com/mihonapp/mihon/pull/402), [#415](https://github.com/mihonapp/mihon/pull/415))
|
||||
- Fix app infinitely retries tracker update instead of failing after 3 tries ([@MajorTanya](https://github.com/MajorTanya)) ([#411](https://github.com/mihonapp/mihon/pull/411))
|
||||
- Fix crash on Pixel devices ([`ab06720`](https://github.com/mihonapp/mihon/commit/ab067209661eceefc04c65f6bdbfcaa8a1264651))
|
||||
- Fix crash when opening some heif/heic images ([@az4521](https://github.com/az4521)) ([#466](https://github.com/mihonapp/mihon/pull/466))
|
||||
- Fix crash in track date selection dialog ([@ivaniskandar](https://github.com/ivaniskandar)) ([`c348fac`](https://github.com/mihonapp/mihon/commit/c348fac78fac479fb123bd617c01c78b9ca851d5))
|
||||
- Fix dates for saved images on Samsung devices ([@MajorTanya](https://github.com/MajorTanya)) ([#552](https://github.com/mihonapp/mihon/pull/552))
|
||||
- Fix colors getting distorted when opening CMYK jpeg images ([@wwww-wwww](https://github.com/wwww-wwww)) ([#523](https://github.com/mihonapp/mihon/pull/523))
|
||||
- Wrong dates in Updates and History tab due to time zone issues ([@sirlag](https://github.com/sirlag)) ([#402](https://github.com/mihonapp/mihon/pull/402))
|
||||
- Fix extra date header introduced by parent PR ([@sirlag](https://github.com/sirlag)) ([#415](https://github.com/mihonapp/mihon/pull/415))
|
||||
- Fix build time in about screen displayed in UTC ([@AntsyLich](https://github.com/AntsyLich)) ([`aed53d3`](https://github.com/mihonapp/mihon/commit/aed53d3bdc85ce0e899fbb90b9f9cad0f1b86480))
|
||||
- App infinitely retries tracker update instead of failing after 3 tries ([@MajorTanya](https://github.com/MajorTanya)) ([#411](https://github.com/mihonapp/mihon/pull/411))
|
||||
- Crash on Pixel devices (was introduced due to compose update) ([`ab06720`](https://github.com/mihonapp/mihon/commit/ab067209661eceefc04c65f6bdbfcaa8a1264651))
|
||||
- Crash when opening some heif/heic images ([@az4521](https://github.com/az4521)) ([#466](https://github.com/mihonapp/mihon/pull/466))
|
||||
- Crash when putting app in background while track date selection dialog is open ([@ivaniskandar](https://github.com/ivaniskandar)) ([`c348fac`](https://github.com/mihonapp/mihon/commit/c348fac78fac479fb123bd617c01c78b9ca851d5))
|
||||
- Dates for saved images not following the specification (fixes date issue mainly on Samsung devices) ([@MajorTanya](https://github.com/MajorTanya)) ([#552](https://github.com/mihonapp/mihon/pull/552))
|
||||
- Colors getting distorted when opening CMYK jpeg images ([@wwww-wwww](https://github.com/wwww-wwww)) ([#523](https://github.com/mihonapp/mihon/pull/523))
|
||||
|
||||
## [v0.16.4] - 2024-02-26
|
||||
### Fixed
|
||||
- Circumvent MAL block ([@AntsyLich](https://github.com/AntsyLich)) ([`085ad8d`](https://github.com/mihonapp/mihon/commit/085ad8d44637c375a8ed24aba3a6f75f5b0cc9ee))
|
||||
## [v0.16.4] - 2024-02-27
|
||||
### Changed
|
||||
- Don't include custom user agent for MAL (circumvents MAL block) ([@AntsyLich](https://github.com/AntsyLich)) ([`085ad8d`](https://github.com/mihonapp/mihon/commit/085ad8d44637c375a8ed24aba3a6f75f5b0cc9ee))
|
||||
|
||||
## [v0.16.3] - 2024-01-30
|
||||
### Added
|
||||
- Copy extension debug info when clicking logo or name in the extension details screen ([@MajorTanya](https://github.com/MajorTanya)) ([#271](https://github.com/mihonapp/mihon/pull/271))
|
||||
|
||||
### Changed
|
||||
- Rename extension update error file to `mihon_update_errors.txt` ([@mjishnu](https://github.com/mjishnu)) ([#253](https://github.com/mihonapp/mihon/pull/253))
|
||||
- Hide display cutoff setting in reader settings sheet if fullscreen is off ([@Riztard](https://github.com/Riztard)) ([#241](https://github.com/mihonapp/mihon/pull/241))
|
||||
- Hide display cutoff setting in reader settings sheet if fullscreen is disabled ([@Riztard](https://github.com/Riztard)) ([#241](https://github.com/mihonapp/mihon/pull/241))
|
||||
- Library update error filename to `mihon_update_errors.txt` from `tachiyomi_update_errors.txt` ([@mjishnu](https://github.com/mjishnu)) ([#253](https://github.com/mihonapp/mihon/pull/253))
|
||||
|
||||
### Fixed
|
||||
- Fix bottom sheet display issues on non-Tablet UI ([@theolm](https://github.com/theolm)) ([#182](https://github.com/mihonapp/mihon/pull/182))
|
||||
- Fix crash when switching screen while a list is scrolling ([@theolm](https://github.com/theolm)) ([#272](https://github.com/mihonapp/mihon/pull/272))
|
||||
- Fix newly installed extensions not being recognized by Mihon ([@AwkwardPeak7](https://github.com/AwkwardPeak7)) ([#275](https://github.com/mihonapp/mihon/pull/275))
|
||||
- Fix error handling when refreshing MAL OAuth token ([@AntsyLich](https://github.com/AntsyLich)) ([`0f4de03`](https://github.com/mihonapp/mihon/commit/0f4de03d7a77b52490dc9a95e96a308b93b26e4f))
|
||||
- Bottom sheet UI issues on non-tablet devices ([@theolm](https://github.com/theolm)) ([#182](https://github.com/mihonapp/mihon/pull/182))
|
||||
- Crash when switching screen while a list is scrolling ([@theolm](https://github.com/theolm)) ([#272](https://github.com/mihonapp/mihon/pull/272))
|
||||
- Newly installed extensions not being recognized by Mihon ([@AwkwardPeak7](https://github.com/AwkwardPeak7)) ([#275](https://github.com/mihonapp/mihon/pull/275))
|
||||
- Failing to refresh MAL token being inferred as token expiration ([@AntsyLich](https://github.com/AntsyLich)) ([`0f4de03`](https://github.com/mihonapp/mihon/commit/0f4de03d7a77b52490dc9a95e96a308b93b26e4f))
|
||||
|
||||
### Other
|
||||
- Add `detekt` (kotlin code analyzer) to the project ([@theolm](https://github.com/theolm)) ([#216](https://github.com/mihonapp/mihon/pull/216))
|
||||
|
||||
## [v0.16.2] - 2024-01-28
|
||||
### Added
|
||||
- Scanlator filter is now part of Backup ([@jobobby04](https://github.com/jobobby04)) ([#166](https://github.com/mihonapp/mihon/pull/166))
|
||||
|
||||
### Changed
|
||||
- Rename crash log filename to `mihon_crash_logs.txt` ([@MajorTanya](https://github.com/MajorTanya)) ([#234](https://github.com/mihonapp/mihon/pull/234))
|
||||
- Backup now contains scanlator filter of a series ([@jobobby04](https://github.com/jobobby04)) ([#166](https://github.com/mihonapp/mihon/pull/166))
|
||||
- App icon scaling ([@AntsyLich](https://github.com/AntsyLich)) ([`26815c7`](https://github.com/mihonapp/mihon/commit/26815c7356111394665467c1e81255ac9ee33c1a))
|
||||
- Tracker OAuth client to Mihon's (fixes login issue for Shikimori tracker) ([@AntsyLich](https://github.com/AntsyLich)) ([`e3f33e2`](https://github.com/mihonapp/mihon/commit/e3f33e24f5e928ac8a85d1f500fd42d4715fc6b5))
|
||||
- Tracker user agents ([@AntsyLich](https://github.com/AntsyLich), [@kitsumed](https://github.com/kitsumed)) ([`e3f33e2`](https://github.com/mihonapp/mihon/commit/e3f33e24f5e928ac8a85d1f500fd42d4715fc6b5))
|
||||
- Crash log filename to `mihon_crash_logs.txt` from `tachiyomi_crash_logs.txt` ([@MajorTanya](https://github.com/MajorTanya)) ([#234](https://github.com/mihonapp/mihon/pull/234))
|
||||
- Don't try to refresh MAL token after refresh token expires ([@AntsyLich](https://github.com/AntsyLich)) ([`32188f9`](https://github.com/mihonapp/mihon/commit/32188f9f65009a18250674ef1bd6e57d351c1fba))
|
||||
|
||||
### Fixed
|
||||
- "Flash screen on page change" Making the screen goes blank ([@AntsyLich](https://github.com/AntsyLich)) ([`38d6ab8`](https://github.com/mihonapp/mihon/commit/38d6ab80ce868707829dbc81de4170afe3c2f2a5))
|
||||
- App icon scaling ([@AntsyLich](https://github.com/AntsyLich)) ([`26815c7`](https://github.com/mihonapp/mihon/commit/26815c7356111394665467c1e81255ac9ee33c1a))
|
||||
- "Flash screen on page change" making the screen full black ([@AntsyLich](https://github.com/AntsyLich)) ([`38d6ab8`](https://github.com/mihonapp/mihon/commit/38d6ab80ce868707829dbc81de4170afe3c2f2a5))
|
||||
- Faulty MangaUpdates score in database ([@AntsyLich](https://github.com/AntsyLich) ([`a024218`](https://github.com/mihonapp/mihon/commit/a024218410953a389b8af4880fa7ae6cc30124a2)
|
||||
- Updating extension not reflecting correctly ([@AntsyLich](https://github.com/AntsyLich)) ([`cb06898`](https://github.com/mihonapp/mihon/commit/cb068984303f811692531bf6f14902ae118d8ac7))
|
||||
- Inconsistent button height with some languages in "Data and storage" ([@theolm](https://github.com/theolm)) ([#202](https://github.com/mihonapp/mihon/pull/202))
|
||||
- Fix chapter not being marked as read in some cases with Enhanced Trackers ([@Secozzi](https://github.com/Secozzi)) ([#219](https://github.com/mihonapp/mihon/pull/219))
|
||||
- And various tracker related fixes ([@AntsyLich](https://github.com/AntsyLich), [@kitsumed](https://github.com/kitsumed), [@Secozzi](https://github.com/Secozzi)) ([`a024218`](https://github.com/mihonapp/mihon/commit/a024218410953a389b8af4880fa7ae6cc30124a2), [`e3f33e2`](https://github.com/mihonapp/mihon/commit/e3f33e24f5e928ac8a85d1f500fd42d4715fc6b5), [`32188f9`](https://github.com/mihonapp/mihon/commit/32188f9f65009a18250674ef1bd6e57d351c1fba))
|
||||
- Inconsistent button height in "Data and storage" for some languages ([@theolm](https://github.com/theolm)) ([#202](https://github.com/mihonapp/mihon/pull/202))
|
||||
- Chapter not being marked as read locally when refreshing Enhanced Trackers ([@Secozzi](https://github.com/Secozzi)) ([#219](https://github.com/mihonapp/mihon/pull/219))
|
||||
|
||||
### Other
|
||||
- Make `last_modified_at` field in database be `0` on insert ([@kaiserbh](https://github.com/kaiserbh)) ([#113](https://github.com/mihonapp/mihon/pull/113))
|
||||
- Remove usage of `.not()` where possible in code ([@AntsyLich](https://github.com/AntsyLich)) ([`3940740`](https://github.com/mihonapp/mihon/commit/39407407f282dbb7fa972b12053c26b3e3bd66d8))
|
||||
- Use type-safe project accessors ([@theolm](https://github.com/theolm)) ([#194](https://github.com/mihonapp/mihon/pull/194))
|
||||
- Legacy tracker model properties now has the same type as the domain ones ([@AntsyLich](https://github.com/AntsyLich)) ([#245](https://github.com/mihonapp/mihon/pull/245))
|
||||
|
||||
## [v0.16.1] - 2024-01-18
|
||||
### Changed
|
||||
- Branding to Mihon (for references we missed) ([@AntsyLich](https://github.com/AntsyLich)) ([`6539406`](https://github.com/mihonapp/mihon/commit/653940613d661eb371aab3b3c3a8181e4e308c43))
|
||||
- Preview builds are now called Beta builds ([@AntsyLich](https://github.com/AntsyLich)) ([`3c3a1cd`](https://github.com/mihonapp/mihon/commit/3c3a1cd448ab1f653ddd12b2afe0cba38968d1b9))
|
||||
|
||||
### Fixed
|
||||
- App Icon not filled ([@AntsyLich](https://github.com/AntsyLich)) ([`1849715`](https://github.com/mihonapp/mihon/commit/18497154183356bb0d469b27827f9f7d6b7a3130))
|
||||
- App icon not following the [specification](https://developer.android.com/develop/ui/views/launch/icon_design_adaptive) ([@AntsyLich](https://github.com/AntsyLich)) ([`1849715`](https://github.com/mihonapp/mihon/commit/18497154183356bb0d469b27827f9f7d6b7a3130))
|
||||
- MangaUpdates default score being set to -1.0 ([@AntsyLich](https://github.com/AntsyLich)) ([`99fd273`](https://github.com/mihonapp/mihon/commit/99fd2731f5d9d374700e89fa67d4d5bf611bbafa))
|
||||
|
||||
## [v0.16.0] - 2024-01-16
|
||||
### Changed
|
||||
- Branding to Mihon ([@AntsyLich](https://github.com/AntsyLich))
|
||||
- Minimum supported Android version to 8 ([@AntsyLich](https://github.com/AntsyLich)) ([`dfb3091`](https://github.com/mihonapp/mihon/commit/dfb3091e380dda3e9bfb64bf5c9a685cf3a03d0e))
|
||||
|
||||
"The end of 立ち読み (Tachiyomi) is the beginning of みほん (Mihon)"
|
||||
Credit to LinkCable, the icon designer, for this poetic quote.
|
||||
|
||||
What's New?
|
||||
Well, nothing, except you now you need Android 8+ to install the app.
|
||||
|
||||
[unreleased]: https://github.com/mihonapp/mihon/compare/v0.16.5...HEAD
|
||||
[unreleased]: https://github.com/mihonapp/mihon/compare/v0.17.1...main
|
||||
[v0.17.1]: https://github.com/mihonapp/mihon/compare/v0.17.0...v0.17.1
|
||||
[v0.17.0]: https://github.com/mihonapp/mihon/compare/v0.16.5...v0.17.0
|
||||
[v0.16.5]: https://github.com/mihonapp/mihon/compare/v0.16.4...v0.16.5
|
||||
[v0.16.4]: https://github.com/mihonapp/mihon/compare/v0.16.3...v0.16.4
|
||||
[v0.16.3]: https://github.com/mihonapp/mihon/compare/v0.16.2...v0.16.3
|
||||
[v0.16.2]: https://github.com/mihonapp/mihon/compare/v0.16.1...v0.16.2
|
||||
[v0.16.1]: https://github.com/mihonapp/mihon/compare/v0.16.0...v0.16.1
|
||||
[v0.16.0]: https://github.com/mihonapp/mihon/releases/tag/v0.16.0
|
||||
[v0.16.0]: https://github.com/mihonapp/mihon/compare/a9c7cbf...v0.16.0
|
||||
|
@ -68,7 +68,7 @@ The developer(s) of this application does not have any affiliation with the cont
|
||||
|
||||
<pre>
|
||||
Copyright © 2015 Javier Tomás
|
||||
Copyright © 2024 The Mihon Open Source Project
|
||||
Copyright © 2024 Mihon Open Source Project
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
|
@ -1,7 +1,8 @@
|
||||
@file:Suppress("ChromeOsAbiSupport")
|
||||
|
||||
import mihon.buildlogic.getBuildTime
|
||||
import mihon.buildlogic.getCommitCount
|
||||
import mihon.buildlogic.getGitSha
|
||||
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
|
||||
|
||||
plugins {
|
||||
id("mihon.android.application")
|
||||
@ -28,8 +29,8 @@ android {
|
||||
defaultConfig {
|
||||
applicationId = "app.mihon"
|
||||
|
||||
versionCode = 7
|
||||
versionName = "0.16.5"
|
||||
versionCode = 9
|
||||
versionName = "0.17.1"
|
||||
|
||||
buildConfigField("String", "COMMIT_COUNT", "\"${getCommitCount()}\"")
|
||||
buildConfigField("String", "COMMIT_SHA", "\"${getGitSha()}\"")
|
||||
@ -142,6 +143,24 @@ android {
|
||||
}
|
||||
}
|
||||
|
||||
kotlin {
|
||||
compilerOptions {
|
||||
freeCompilerArgs.addAll(
|
||||
"-opt-in=androidx.compose.animation.ExperimentalAnimationApi",
|
||||
"-opt-in=androidx.compose.animation.graphics.ExperimentalAnimationGraphicsApi",
|
||||
"-opt-in=androidx.compose.foundation.ExperimentalFoundationApi",
|
||||
"-opt-in=androidx.compose.foundation.layout.ExperimentalLayoutApi",
|
||||
"-opt-in=androidx.compose.material3.ExperimentalMaterial3Api",
|
||||
"-opt-in=androidx.compose.ui.ExperimentalComposeUiApi",
|
||||
"-opt-in=coil3.annotation.ExperimentalCoilApi",
|
||||
"-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi",
|
||||
"-opt-in=kotlinx.coroutines.FlowPreview",
|
||||
"-opt-in=kotlinx.coroutines.InternalCoroutinesApi",
|
||||
"-opt-in=kotlinx.serialization.ExperimentalSerializationApi",
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation(projects.i18n)
|
||||
implementation(projects.core.archive)
|
||||
@ -279,28 +298,6 @@ androidComponents {
|
||||
}
|
||||
}
|
||||
|
||||
tasks {
|
||||
// See https://kotlinlang.org/docs/reference/experimental.html#experimental-status-of-experimental-api(-markers)
|
||||
withType<KotlinCompile> {
|
||||
compilerOptions.freeCompilerArgs.addAll(
|
||||
"-Xcontext-receivers",
|
||||
"-opt-in=androidx.compose.foundation.layout.ExperimentalLayoutApi",
|
||||
"-opt-in=androidx.compose.material.ExperimentalMaterialApi",
|
||||
"-opt-in=androidx.compose.material3.ExperimentalMaterial3Api",
|
||||
"-opt-in=androidx.compose.material.ExperimentalMaterialApi",
|
||||
"-opt-in=androidx.compose.ui.ExperimentalComposeUiApi",
|
||||
"-opt-in=androidx.compose.foundation.ExperimentalFoundationApi",
|
||||
"-opt-in=androidx.compose.animation.ExperimentalAnimationApi",
|
||||
"-opt-in=androidx.compose.animation.graphics.ExperimentalAnimationGraphicsApi",
|
||||
"-opt-in=coil3.annotation.ExperimentalCoilApi",
|
||||
"-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi",
|
||||
"-opt-in=kotlinx.coroutines.FlowPreview",
|
||||
"-opt-in=kotlinx.coroutines.InternalCoroutinesApi",
|
||||
"-opt-in=kotlinx.serialization.ExperimentalSerializationApi",
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
buildscript {
|
||||
dependencies {
|
||||
classpath(kotlinx.gradle)
|
||||
|
@ -1,9 +0,0 @@
|
||||
package mihon.core.firebase
|
||||
|
||||
import android.content.Context
|
||||
import eu.kanade.tachiyomi.core.security.PrivacyPreferences
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
|
||||
object Firebase {
|
||||
fun setup(context: Context, preference: PrivacyPreferences, scope: CoroutineScope) = Unit
|
||||
}
|
11
app/src/dev/java/mihon/core/firebase/FirebaseConfig.kt
Normal file
11
app/src/dev/java/mihon/core/firebase/FirebaseConfig.kt
Normal file
@ -0,0 +1,11 @@
|
||||
package mihon.core.firebase
|
||||
|
||||
import android.content.Context
|
||||
|
||||
object FirebaseConfig {
|
||||
fun init(context: Context) = Unit
|
||||
|
||||
fun setAnalyticsEnabled(enabled: Boolean) = Unit
|
||||
|
||||
fun setCrashlyticsEnabled(enabled: Boolean) = Unit
|
||||
}
|
@ -1,5 +1,6 @@
|
||||
package eu.kanade.core.util
|
||||
|
||||
import androidx.compose.ui.util.fastFilter
|
||||
import androidx.compose.ui.util.fastForEach
|
||||
import kotlin.contracts.ExperimentalContracts
|
||||
import kotlin.contracts.contract
|
||||
@ -45,21 +46,6 @@ fun <E> HashSet<E>.addOrRemove(value: E, shouldAdd: Boolean) {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a list containing only elements matching the given [predicate].
|
||||
*
|
||||
* **Do not use for collections that come from public APIs**, since they may not support random
|
||||
* access in an efficient way, and this method may actually be a lot slower. Only use for
|
||||
* collections that are created by code we control and are known to support random access.
|
||||
*/
|
||||
@OptIn(ExperimentalContracts::class)
|
||||
inline fun <T> List<T>.fastFilter(predicate: (T) -> Boolean): List<T> {
|
||||
contract { callsInPlace(predicate) }
|
||||
val destination = ArrayList<T>()
|
||||
fastForEach { if (predicate(it)) destination.add(it) }
|
||||
return destination
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a list containing all elements not matching the given [predicate].
|
||||
*
|
||||
@ -70,27 +56,7 @@ inline fun <T> List<T>.fastFilter(predicate: (T) -> Boolean): List<T> {
|
||||
@OptIn(ExperimentalContracts::class)
|
||||
inline fun <T> List<T>.fastFilterNot(predicate: (T) -> Boolean): List<T> {
|
||||
contract { callsInPlace(predicate) }
|
||||
val destination = ArrayList<T>()
|
||||
fastForEach { if (!predicate(it)) destination.add(it) }
|
||||
return destination
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a list containing only the non-null results of applying the
|
||||
* given [transform] function to each element in the original collection.
|
||||
*
|
||||
* **Do not use for collections that come from public APIs**, since they may not support random
|
||||
* access in an efficient way, and this method may actually be a lot slower. Only use for
|
||||
* collections that are created by code we control and are known to support random access.
|
||||
*/
|
||||
@OptIn(ExperimentalContracts::class)
|
||||
inline fun <T, R> List<T>.fastMapNotNull(transform: (T) -> R?): List<R> {
|
||||
contract { callsInPlace(transform) }
|
||||
val destination = ArrayList<R>()
|
||||
fastForEach { element ->
|
||||
transform(element)?.let(destination::add)
|
||||
}
|
||||
return destination
|
||||
return fastFilter { !predicate(it) }
|
||||
}
|
||||
|
||||
/**
|
||||
@ -131,26 +97,3 @@ inline fun <T> List<T>.fastCountNot(predicate: (T) -> Boolean): Int {
|
||||
fastForEach { if (predicate(it)) --count }
|
||||
return count
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a list containing only elements from the given collection
|
||||
* having distinct keys returned by the given [selector] function.
|
||||
*
|
||||
* Among elements of the given collection with equal keys, only the first one will be present in the resulting list.
|
||||
* The elements in the resulting list are in the same order as they were in the source collection.
|
||||
*
|
||||
* **Do not use for collections that come from public APIs**, since they may not support random
|
||||
* access in an efficient way, and this method may actually be a lot slower. Only use for
|
||||
* collections that are created by code we control and are known to support random access.
|
||||
*/
|
||||
@OptIn(ExperimentalContracts::class)
|
||||
inline fun <T, K> List<T>.fastDistinctBy(selector: (T) -> K): List<T> {
|
||||
contract { callsInPlace(selector) }
|
||||
val set = HashSet<K>()
|
||||
val list = ArrayList<T>()
|
||||
fastForEach {
|
||||
val key = selector(it)
|
||||
if (set.add(key)) list.add(it)
|
||||
}
|
||||
return list
|
||||
}
|
||||
|
@ -2,6 +2,7 @@ package eu.kanade.domain.base
|
||||
|
||||
import android.content.Context
|
||||
import dev.icerock.moko.resources.StringResource
|
||||
import eu.kanade.tachiyomi.util.system.GLUtil
|
||||
import tachiyomi.core.common.preference.Preference
|
||||
import tachiyomi.core.common.preference.PreferenceStore
|
||||
import tachiyomi.i18n.MR
|
||||
@ -30,4 +31,8 @@ class BasePreferences(
|
||||
}
|
||||
|
||||
fun displayProfile() = preferenceStore.getString("pref_display_profile_key", "")
|
||||
|
||||
fun hardwareBitmapThreshold() = preferenceStore.getInt("pref_hardware_bitmap_threshold", GLUtil.SAFE_TEXTURE_LIMIT)
|
||||
|
||||
fun alwaysDecodeLongStripWithSSIV() = preferenceStore.getBoolean("pref_always_decode_long_strip_with_ssiv", false)
|
||||
}
|
||||
|
@ -0,0 +1,10 @@
|
||||
package eu.kanade.domain.track.model
|
||||
|
||||
import dev.icerock.moko.resources.StringResource
|
||||
import tachiyomi.i18n.MR
|
||||
|
||||
enum class AutoTrackState(val titleRes: StringResource) {
|
||||
ALWAYS(MR.strings.lock_always),
|
||||
ASK(MR.strings.default_category_summary),
|
||||
NEVER(MR.strings.lock_never),
|
||||
}
|
@ -1,9 +1,11 @@
|
||||
package eu.kanade.domain.track.service
|
||||
|
||||
import eu.kanade.domain.track.model.AutoTrackState
|
||||
import eu.kanade.tachiyomi.data.track.Tracker
|
||||
import eu.kanade.tachiyomi.data.track.anilist.Anilist
|
||||
import tachiyomi.core.common.preference.Preference
|
||||
import tachiyomi.core.common.preference.PreferenceStore
|
||||
import tachiyomi.core.common.preference.getEnum
|
||||
|
||||
class TrackPreferences(
|
||||
private val preferenceStore: PreferenceStore,
|
||||
@ -35,4 +37,9 @@ class TrackPreferences(
|
||||
fun anilistScoreType() = preferenceStore.getString("anilist_score_type", Anilist.POINT_10)
|
||||
|
||||
fun autoUpdateTrack() = preferenceStore.getBoolean("pref_auto_update_manga_sync_key", true)
|
||||
|
||||
fun autoUpdateTrackOnMarkRead() = preferenceStore.getEnum(
|
||||
"pref_auto_update_manga_on_mark_read",
|
||||
AutoTrackState.ALWAYS,
|
||||
)
|
||||
}
|
||||
|
@ -7,6 +7,7 @@ import androidx.compose.foundation.layout.calculateStartPadding
|
||||
import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.pager.HorizontalPager
|
||||
import androidx.compose.foundation.pager.PagerState
|
||||
import androidx.compose.foundation.pager.rememberPagerState
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.PrimaryTabRow
|
||||
@ -14,7 +15,6 @@ import androidx.compose.material3.SnackbarHost
|
||||
import androidx.compose.material3.SnackbarHostState
|
||||
import androidx.compose.material3.Tab
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.LaunchedEffect
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.rememberCoroutineScope
|
||||
import androidx.compose.ui.Alignment
|
||||
@ -33,20 +33,13 @@ import tachiyomi.presentation.core.i18n.stringResource
|
||||
fun TabbedScreen(
|
||||
titleRes: StringResource,
|
||||
tabs: ImmutableList<TabContent>,
|
||||
startIndex: Int? = null,
|
||||
state: PagerState = rememberPagerState { tabs.size },
|
||||
searchQuery: String? = null,
|
||||
onChangeSearchQuery: (String?) -> Unit = {},
|
||||
) {
|
||||
val scope = rememberCoroutineScope()
|
||||
val state = rememberPagerState { tabs.size }
|
||||
val snackbarHostState = remember { SnackbarHostState() }
|
||||
|
||||
LaunchedEffect(startIndex) {
|
||||
if (startIndex != null) {
|
||||
state.scrollToPage(startIndex)
|
||||
}
|
||||
}
|
||||
|
||||
Scaffold(
|
||||
topBar = {
|
||||
val tab = tabs[state.currentPage]
|
||||
|
@ -21,11 +21,12 @@ internal fun LibraryTabs(
|
||||
getNumberOfMangaForCategory: (Category) -> Int?,
|
||||
onTabItemClick: (Int) -> Unit,
|
||||
) {
|
||||
val currentPageIndex = pagerState.currentPage.coerceAtMost(categories.lastIndex)
|
||||
Column(
|
||||
modifier = Modifier.zIndex(1f),
|
||||
) {
|
||||
PrimaryScrollableTabRow(
|
||||
selectedTabIndex = pagerState.currentPage,
|
||||
selectedTabIndex = currentPageIndex,
|
||||
edgePadding = 0.dp,
|
||||
// TODO: use default when width is fixed upstream
|
||||
// https://issuetracker.google.com/issues/242879624
|
||||
@ -33,7 +34,7 @@ internal fun LibraryTabs(
|
||||
) {
|
||||
categories.forEachIndexed { index, category ->
|
||||
Tab(
|
||||
selected = pagerState.currentPage == index,
|
||||
selected = currentPageIndex == index,
|
||||
onClick = { onTabItemClick(index) },
|
||||
text = {
|
||||
TabText(
|
||||
|
@ -162,12 +162,12 @@ sealed class Preference {
|
||||
|
||||
data class CustomPreference(
|
||||
override val title: String,
|
||||
val content: @Composable (PreferenceItem<String>) -> Unit,
|
||||
) : PreferenceItem<String>() {
|
||||
val content: @Composable () -> Unit,
|
||||
) : PreferenceItem<Unit>() {
|
||||
override val enabled: Boolean = true
|
||||
override val subtitle: String? = null
|
||||
override val icon: ImageVector? = null
|
||||
override val onValueChanged: suspend (newValue: String) -> Boolean = { true }
|
||||
override val onValueChanged: suspend (newValue: Unit) -> Boolean = { true }
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -167,7 +167,7 @@ internal fun PreferenceItem(
|
||||
InfoWidget(text = item.title)
|
||||
}
|
||||
is Preference.PreferenceItem.CustomPreference -> {
|
||||
item.content(item)
|
||||
item.content()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -47,6 +47,7 @@ import eu.kanade.tachiyomi.network.PREF_DOH_QUAD9
|
||||
import eu.kanade.tachiyomi.network.PREF_DOH_SHECAN
|
||||
import eu.kanade.tachiyomi.ui.more.OnboardingScreen
|
||||
import eu.kanade.tachiyomi.util.CrashLogUtil
|
||||
import eu.kanade.tachiyomi.util.system.GLUtil
|
||||
import eu.kanade.tachiyomi.util.system.isDevFlavor
|
||||
import eu.kanade.tachiyomi.util.system.isPreviewBuildType
|
||||
import eu.kanade.tachiyomi.util.system.isShizukuInstalled
|
||||
@ -61,6 +62,7 @@ import logcat.LogPriority
|
||||
import okhttp3.Headers
|
||||
import tachiyomi.core.common.util.lang.launchNonCancellable
|
||||
import tachiyomi.core.common.util.lang.withUIContext
|
||||
import tachiyomi.core.common.util.system.ImageUtil
|
||||
import tachiyomi.core.common.util.system.logcat
|
||||
import tachiyomi.domain.manga.interactor.ResetViewerFlags
|
||||
import tachiyomi.i18n.MR
|
||||
@ -334,6 +336,31 @@ object SettingsAdvancedScreen : SearchableSettings {
|
||||
return Preference.PreferenceGroup(
|
||||
title = stringResource(MR.strings.pref_category_reader),
|
||||
preferenceItems = persistentListOf(
|
||||
Preference.PreferenceItem.ListPreference(
|
||||
pref = basePreferences.hardwareBitmapThreshold(),
|
||||
title = stringResource(MR.strings.pref_hardware_bitmap_threshold),
|
||||
subtitleProvider = { value, options ->
|
||||
stringResource(MR.strings.pref_hardware_bitmap_threshold_summary, options[value].orEmpty())
|
||||
},
|
||||
enabled = !ImageUtil.HARDWARE_BITMAP_UNSUPPORTED &&
|
||||
GLUtil.DEVICE_TEXTURE_LIMIT > GLUtil.SAFE_TEXTURE_LIMIT,
|
||||
entries = GLUtil.CUSTOM_TEXTURE_LIMIT_OPTIONS
|
||||
.mapIndexed { index, option ->
|
||||
val display = if (index == 0) {
|
||||
stringResource(MR.strings.pref_hardware_bitmap_threshold_default, option)
|
||||
} else {
|
||||
option.toString()
|
||||
}
|
||||
option to display
|
||||
}
|
||||
.toMap()
|
||||
.toImmutableMap(),
|
||||
),
|
||||
Preference.PreferenceItem.SwitchPreference(
|
||||
pref = basePreferences.alwaysDecodeLongStripWithSSIV(),
|
||||
title = stringResource(MR.strings.pref_always_decode_long_strip_with_ssiv),
|
||||
subtitle = stringResource(MR.strings.pref_always_decode_long_strip_with_ssiv_summary),
|
||||
),
|
||||
Preference.PreferenceItem.TextPreference(
|
||||
title = stringResource(MR.strings.pref_display_profile),
|
||||
subtitle = basePreferences.displayProfile().get(),
|
||||
|
@ -15,7 +15,6 @@ import eu.kanade.presentation.more.settings.widget.TriStateListDialog
|
||||
import kotlinx.collections.immutable.persistentListOf
|
||||
import kotlinx.collections.immutable.persistentMapOf
|
||||
import kotlinx.collections.immutable.toImmutableMap
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import tachiyomi.domain.category.interactor.GetCategories
|
||||
import tachiyomi.domain.category.model.Category
|
||||
import tachiyomi.domain.download.service.DownloadPreferences
|
||||
@ -35,7 +34,7 @@ object SettingsDownloadScreen : SearchableSettings {
|
||||
@Composable
|
||||
override fun getPreferences(): List<Preference> {
|
||||
val getCategories = remember { Injekt.get<GetCategories>() }
|
||||
val allCategories by getCategories.subscribe().collectAsState(initial = runBlocking { getCategories.await() })
|
||||
val allCategories by getCategories.subscribe().collectAsState(initial = emptyList())
|
||||
|
||||
val downloadPreferences = remember { Injekt.get<DownloadPreferences>() }
|
||||
return listOf(
|
||||
|
@ -24,7 +24,6 @@ import kotlinx.collections.immutable.persistentListOf
|
||||
import kotlinx.collections.immutable.persistentMapOf
|
||||
import kotlinx.collections.immutable.toImmutableMap
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import tachiyomi.domain.category.interactor.GetCategories
|
||||
import tachiyomi.domain.category.interactor.ResetCategoryFlags
|
||||
import tachiyomi.domain.category.model.Category
|
||||
@ -53,7 +52,7 @@ object SettingsLibraryScreen : SearchableSettings {
|
||||
override fun getPreferences(): List<Preference> {
|
||||
val getCategories = remember { Injekt.get<GetCategories>() }
|
||||
val libraryPreferences = remember { Injekt.get<LibraryPreferences>() }
|
||||
val allCategories by getCategories.subscribe().collectAsState(initial = runBlocking { getCategories.await() })
|
||||
val allCategories by getCategories.subscribe().collectAsState(initial = emptyList())
|
||||
|
||||
return listOf(
|
||||
getCategoriesGroup(LocalNavigator.currentOrThrow, allCategories, libraryPreferences),
|
||||
|
@ -40,6 +40,7 @@ import androidx.compose.ui.text.input.VisualTransformation
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.unit.dp
|
||||
import dev.icerock.moko.resources.StringResource
|
||||
import eu.kanade.domain.track.model.AutoTrackState
|
||||
import eu.kanade.domain.track.service.TrackPreferences
|
||||
import eu.kanade.presentation.more.settings.Preference
|
||||
import eu.kanade.tachiyomi.data.track.EnhancedTracker
|
||||
@ -54,6 +55,7 @@ import eu.kanade.tachiyomi.util.system.openInBrowser
|
||||
import eu.kanade.tachiyomi.util.system.toast
|
||||
import kotlinx.collections.immutable.persistentListOf
|
||||
import kotlinx.collections.immutable.toImmutableList
|
||||
import kotlinx.collections.immutable.toPersistentMap
|
||||
import tachiyomi.core.common.util.lang.launchIO
|
||||
import tachiyomi.core.common.util.lang.withUIContext
|
||||
import tachiyomi.domain.source.service.SourceManager
|
||||
@ -86,6 +88,7 @@ object SettingsTrackingScreen : SearchableSettings {
|
||||
val trackPreferences = remember { Injekt.get<TrackPreferences>() }
|
||||
val trackerManager = remember { Injekt.get<TrackerManager>() }
|
||||
val sourceManager = remember { Injekt.get<SourceManager>() }
|
||||
val autoTrackStatePref = trackPreferences.autoUpdateTrackOnMarkRead()
|
||||
|
||||
var dialog by remember { mutableStateOf<Any?>(null) }
|
||||
dialog?.run {
|
||||
@ -126,6 +129,13 @@ object SettingsTrackingScreen : SearchableSettings {
|
||||
pref = trackPreferences.autoUpdateTrack(),
|
||||
title = stringResource(MR.strings.pref_auto_update_manga_sync),
|
||||
),
|
||||
Preference.PreferenceItem.ListPreference(
|
||||
pref = trackPreferences.autoUpdateTrackOnMarkRead(),
|
||||
title = stringResource(MR.strings.pref_auto_update_manga_on_mark_read),
|
||||
entries = AutoTrackState.entries
|
||||
.associateWith { stringResource(it.titleRes) }
|
||||
.toPersistentMap(),
|
||||
),
|
||||
Preference.PreferenceGroup(
|
||||
title = stringResource(MR.strings.services),
|
||||
preferenceItems = persistentListOf(
|
||||
|
@ -56,7 +56,7 @@ fun ReaderAppBars(
|
||||
enabledPrevious: Boolean,
|
||||
currentPage: Int,
|
||||
totalPages: Int,
|
||||
onSliderValueChange: (Int) -> Unit,
|
||||
onPageIndexChange: (Int) -> Unit,
|
||||
|
||||
readingMode: ReadingMode,
|
||||
onClickReadingMode: () -> Unit,
|
||||
@ -176,9 +176,8 @@ fun ReaderAppBars(
|
||||
enabledPrevious = enabledPrevious,
|
||||
currentPage = currentPage,
|
||||
totalPages = totalPages,
|
||||
onSliderValueChange = onSliderValueChange,
|
||||
onPageIndexChange = onPageIndexChange,
|
||||
)
|
||||
|
||||
BottomReaderBar(
|
||||
backgroundColor = backgroundColor,
|
||||
readingMode = readingMode,
|
||||
|
@ -4,6 +4,7 @@ import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.interaction.MutableInteractionSource
|
||||
import androidx.compose.foundation.interaction.collectIsDraggedAsState
|
||||
import androidx.compose.foundation.isSystemInDarkTheme
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.Spacer
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
@ -16,7 +17,6 @@ import androidx.compose.material3.FilledIconButton
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.IconButtonDefaults
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Slider
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.material3.surfaceColorAtElevation
|
||||
import androidx.compose.runtime.Composable
|
||||
@ -29,6 +29,7 @@ import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.clip
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.hapticfeedback.HapticFeedbackType
|
||||
import androidx.compose.ui.platform.LocalHapticFeedback
|
||||
import androidx.compose.ui.platform.LocalLayoutDirection
|
||||
@ -38,8 +39,8 @@ import androidx.compose.ui.unit.dp
|
||||
import eu.kanade.presentation.theme.TachiyomiPreviewTheme
|
||||
import eu.kanade.presentation.util.isTabletUi
|
||||
import tachiyomi.i18n.MR
|
||||
import tachiyomi.presentation.core.components.material.Slider
|
||||
import tachiyomi.presentation.core.i18n.stringResource
|
||||
import kotlin.math.roundToInt
|
||||
|
||||
@Composable
|
||||
fun ChapterNavigator(
|
||||
@ -50,7 +51,7 @@ fun ChapterNavigator(
|
||||
enabledPrevious: Boolean,
|
||||
currentPage: Int,
|
||||
totalPages: Int,
|
||||
onSliderValueChange: (Int) -> Unit,
|
||||
onPageIndexChange: (Int) -> Unit,
|
||||
) {
|
||||
val isTabletUi = isTabletUi()
|
||||
val horizontalPadding = if (isTabletUi) 24.dp else 8.dp
|
||||
@ -97,7 +98,11 @@ fun ChapterNavigator(
|
||||
.padding(horizontal = 16.dp),
|
||||
verticalAlignment = Alignment.CenterVertically,
|
||||
) {
|
||||
Text(text = currentPage.toString())
|
||||
Box(contentAlignment = Alignment.CenterEnd) {
|
||||
Text(text = currentPage.toString())
|
||||
// Taking up full length so the slider doesn't shift when 'currentPage' length changes
|
||||
Text(text = totalPages.toString(), color = Color.Transparent)
|
||||
}
|
||||
|
||||
val interactionSource = remember { MutableInteractionSource() }
|
||||
val sliderDragged by interactionSource.collectIsDraggedAsState()
|
||||
@ -110,14 +115,11 @@ fun ChapterNavigator(
|
||||
modifier = Modifier
|
||||
.weight(1f)
|
||||
.padding(horizontal = 8.dp),
|
||||
value = currentPage.toFloat(),
|
||||
valueRange = 1f..totalPages.toFloat(),
|
||||
steps = totalPages - 2,
|
||||
onValueChange = {
|
||||
val new = it.roundToInt() - 1
|
||||
if (new != currentPage) {
|
||||
onSliderValueChange(new)
|
||||
}
|
||||
value = currentPage,
|
||||
valueRange = 1..totalPages,
|
||||
onValueChange = f@{
|
||||
if (it == currentPage) return@f
|
||||
onPageIndexChange(it - 1)
|
||||
},
|
||||
interactionSource = interactionSource,
|
||||
)
|
||||
@ -158,7 +160,7 @@ private fun ChapterNavigatorPreview() {
|
||||
enabledPrevious = true,
|
||||
currentPage = currentPage,
|
||||
totalPages = 10,
|
||||
onSliderValueChange = { currentPage = it },
|
||||
onPageIndexChange = { currentPage = (it + 1) },
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -41,6 +41,7 @@ import eu.kanade.tachiyomi.network.NetworkHelper
|
||||
import eu.kanade.tachiyomi.network.NetworkPreferences
|
||||
import eu.kanade.tachiyomi.ui.base.delegate.SecureActivityDelegate
|
||||
import eu.kanade.tachiyomi.util.system.DeviceUtil
|
||||
import eu.kanade.tachiyomi.util.system.GLUtil
|
||||
import eu.kanade.tachiyomi.util.system.WebViewUtil
|
||||
import eu.kanade.tachiyomi.util.system.animatorDurationScale
|
||||
import eu.kanade.tachiyomi.util.system.cancelNotification
|
||||
@ -51,13 +52,14 @@ import kotlinx.coroutines.flow.onEach
|
||||
import logcat.AndroidLogcatLogger
|
||||
import logcat.LogPriority
|
||||
import logcat.LogcatLogger
|
||||
import mihon.core.firebase.Firebase
|
||||
import mihon.core.firebase.FirebaseConfig
|
||||
import mihon.core.migration.Migrator
|
||||
import mihon.core.migration.migrations.migrations
|
||||
import org.conscrypt.Conscrypt
|
||||
import tachiyomi.core.common.i18n.stringResource
|
||||
import tachiyomi.core.common.preference.Preference
|
||||
import tachiyomi.core.common.preference.PreferenceStore
|
||||
import tachiyomi.core.common.util.system.ImageUtil
|
||||
import tachiyomi.core.common.util.system.logcat
|
||||
import tachiyomi.i18n.MR
|
||||
import tachiyomi.presentation.widget.WidgetManager
|
||||
@ -78,6 +80,7 @@ class App : Application(), DefaultLifecycleObserver, SingletonImageLoader.Factor
|
||||
override fun onCreate() {
|
||||
super<Application>.onCreate()
|
||||
patchInjekt()
|
||||
FirebaseConfig.init(applicationContext)
|
||||
|
||||
GlobalExceptionHandler.initialize(applicationContext, CrashActivity::class.java)
|
||||
|
||||
@ -96,12 +99,12 @@ class App : Application(), DefaultLifecycleObserver, SingletonImageLoader.Factor
|
||||
Injekt.importModule(AppModule(this))
|
||||
Injekt.importModule(DomainModule())
|
||||
|
||||
Firebase.setup(applicationContext, privacyPreferences, ProcessLifecycleOwner.get().lifecycleScope)
|
||||
|
||||
setupNotificationChannels()
|
||||
|
||||
ProcessLifecycleOwner.get().lifecycle.addObserver(this)
|
||||
|
||||
val scope = ProcessLifecycleOwner.get().lifecycleScope
|
||||
|
||||
// Show notification to disable Incognito Mode when it's enabled
|
||||
basePreferences.incognitoMode().changes()
|
||||
.onEach { enabled ->
|
||||
@ -129,14 +132,30 @@ class App : Application(), DefaultLifecycleObserver, SingletonImageLoader.Factor
|
||||
cancelNotification(Notifications.ID_INCOGNITO_MODE)
|
||||
}
|
||||
}
|
||||
.launchIn(ProcessLifecycleOwner.get().lifecycleScope)
|
||||
.launchIn(scope)
|
||||
|
||||
privacyPreferences.analytics()
|
||||
.changes()
|
||||
.onEach(FirebaseConfig::setAnalyticsEnabled)
|
||||
.launchIn(scope)
|
||||
|
||||
privacyPreferences.crashlytics()
|
||||
.changes()
|
||||
.onEach(FirebaseConfig::setCrashlyticsEnabled)
|
||||
.launchIn(scope)
|
||||
|
||||
basePreferences.hardwareBitmapThreshold().let { preference ->
|
||||
if (!preference.isSet()) preference.set(GLUtil.DEVICE_TEXTURE_LIMIT)
|
||||
}
|
||||
|
||||
basePreferences.hardwareBitmapThreshold().changes()
|
||||
.onEach { ImageUtil.hardwareBitmapThreshold = it }
|
||||
.launchIn(scope)
|
||||
|
||||
setAppCompatDelegateThemeMode(Injekt.get<UiPreferences>().themeMode().get())
|
||||
|
||||
// Updates widget update
|
||||
with(WidgetManager(Injekt.get(), Injekt.get())) {
|
||||
init(ProcessLifecycleOwner.get().lifecycleScope)
|
||||
}
|
||||
WidgetManager(Injekt.get(), Injekt.get()).apply { init(scope) }
|
||||
|
||||
if (!LogcatLogger.isInstalled && networkPreferences.verboseLogging().get()) {
|
||||
LogcatLogger.install(AndroidLogcatLogger(LogPriority.VERBOSE))
|
||||
|
@ -11,7 +11,6 @@ import kotlinx.serialization.encoding.Encoder
|
||||
import kotlinx.serialization.json.Json
|
||||
import logcat.LogPriority
|
||||
import tachiyomi.core.common.util.system.logcat
|
||||
import kotlin.system.exitProcess
|
||||
|
||||
class GlobalExceptionHandler private constructor(
|
||||
private val applicationContext: Context,
|
||||
@ -31,13 +30,9 @@ class GlobalExceptionHandler private constructor(
|
||||
}
|
||||
|
||||
override fun uncaughtException(thread: Thread, exception: Throwable) {
|
||||
try {
|
||||
logcat(priority = LogPriority.ERROR, throwable = exception)
|
||||
launchActivity(applicationContext, activityToBeLaunched, exception)
|
||||
exitProcess(0)
|
||||
} catch (_: Exception) {
|
||||
defaultHandler.uncaughtException(thread, exception)
|
||||
}
|
||||
logcat(priority = LogPriority.ERROR, throwable = exception)
|
||||
launchActivity(applicationContext, activityToBeLaunched, exception)
|
||||
defaultHandler.uncaughtException(thread, exception)
|
||||
}
|
||||
|
||||
private fun launchActivity(
|
||||
|
@ -10,7 +10,6 @@ import coil3.decode.ImageSource
|
||||
import coil3.fetch.SourceFetchResult
|
||||
import coil3.request.Options
|
||||
import coil3.request.bitmapConfig
|
||||
import eu.kanade.tachiyomi.util.system.GLUtil
|
||||
import okio.BufferedSource
|
||||
import tachiyomi.core.common.util.system.ImageUtil
|
||||
import tachiyomi.decoder.ImageDecoder
|
||||
@ -46,10 +45,7 @@ class TachiyomiImageDecoder(private val resources: ImageSource, private val opti
|
||||
|
||||
check(bitmap != null) { "Failed to decode image" }
|
||||
|
||||
if (
|
||||
options.bitmapConfig == Bitmap.Config.HARDWARE &&
|
||||
maxOf(bitmap.width, bitmap.height) <= GLUtil.maxTextureSize
|
||||
) {
|
||||
if (options.bitmapConfig == Bitmap.Config.HARDWARE && ImageUtil.canUseHardwareBitmap(bitmap)) {
|
||||
val hwBitmap = bitmap.copy(Bitmap.Config.HARDWARE, false)
|
||||
if (hwBitmap != null) {
|
||||
bitmap.recycle()
|
||||
|
@ -1,4 +1,4 @@
|
||||
@file:Suppress("PropertyName", "ktlint:standard:property-naming")
|
||||
@file:Suppress("PropertyName")
|
||||
|
||||
package eu.kanade.tachiyomi.data.database.models
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
@file:Suppress("PropertyName", "ktlint:standard:property-naming")
|
||||
@file:Suppress("PropertyName")
|
||||
|
||||
package eu.kanade.tachiyomi.data.database.models
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
@file:Suppress("PropertyName", "ktlint:standard:property-naming")
|
||||
@file:Suppress("PropertyName")
|
||||
|
||||
package eu.kanade.tachiyomi.data.database.models
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
@file:Suppress("PropertyName", "ktlint:standard:property-naming")
|
||||
@file:Suppress("PropertyName")
|
||||
|
||||
package eu.kanade.tachiyomi.data.database.models
|
||||
|
||||
|
@ -96,13 +96,13 @@ class DownloadCache(
|
||||
private val diskCacheFile: File
|
||||
get() = File(context.cacheDir, "dl_index_cache_v3")
|
||||
|
||||
private val rootDownloadsDirLock = Mutex()
|
||||
private val rootDownloadsDirMutex = Mutex()
|
||||
private var rootDownloadsDir = RootDirectory(storageManager.getDownloadsDirectory())
|
||||
|
||||
init {
|
||||
// Attempt to read cache file
|
||||
scope.launch {
|
||||
rootDownloadsDirLock.withLock {
|
||||
rootDownloadsDirMutex.withLock {
|
||||
try {
|
||||
if (diskCacheFile.exists()) {
|
||||
val diskCache = diskCacheFile.inputStream().use {
|
||||
@ -112,7 +112,7 @@ class DownloadCache(
|
||||
lastRenew = System.currentTimeMillis()
|
||||
}
|
||||
} catch (e: Throwable) {
|
||||
logcat(LogPriority.ERROR, e) { "Failed to initialize disk cache" }
|
||||
logcat(LogPriority.ERROR, e) { "Failed to initialize from disk cache" }
|
||||
diskCacheFile.delete()
|
||||
}
|
||||
}
|
||||
@ -198,7 +198,7 @@ class DownloadCache(
|
||||
* @param manga the manga of the chapter.
|
||||
*/
|
||||
suspend fun addChapter(chapterDirName: String, mangaUniFile: UniFile, manga: Manga) {
|
||||
rootDownloadsDirLock.withLock {
|
||||
rootDownloadsDirMutex.withLock {
|
||||
// Retrieve the cached source directory or cache a new one
|
||||
var sourceDir = rootDownloadsDir.sourceDirs[manga.source]
|
||||
if (sourceDir == null) {
|
||||
@ -230,7 +230,7 @@ class DownloadCache(
|
||||
* @param manga the manga of the chapter.
|
||||
*/
|
||||
suspend fun removeChapter(chapter: Chapter, manga: Manga) {
|
||||
rootDownloadsDirLock.withLock {
|
||||
rootDownloadsDirMutex.withLock {
|
||||
val sourceDir = rootDownloadsDir.sourceDirs[manga.source] ?: return
|
||||
val mangaDir = sourceDir.mangaDirs[provider.getMangaDirName(manga.title)] ?: return
|
||||
provider.getValidChapterDirNames(chapter.name, chapter.scanlator).forEach {
|
||||
@ -250,7 +250,7 @@ class DownloadCache(
|
||||
* @param manga the manga of the chapter.
|
||||
*/
|
||||
suspend fun removeChapters(chapters: List<Chapter>, manga: Manga) {
|
||||
rootDownloadsDirLock.withLock {
|
||||
rootDownloadsDirMutex.withLock {
|
||||
val sourceDir = rootDownloadsDir.sourceDirs[manga.source] ?: return
|
||||
val mangaDir = sourceDir.mangaDirs[provider.getMangaDirName(manga.title)] ?: return
|
||||
chapters.forEach { chapter ->
|
||||
@ -271,7 +271,7 @@ class DownloadCache(
|
||||
* @param manga the manga to remove.
|
||||
*/
|
||||
suspend fun removeManga(manga: Manga) {
|
||||
rootDownloadsDirLock.withLock {
|
||||
rootDownloadsDirMutex.withLock {
|
||||
val sourceDir = rootDownloadsDir.sourceDirs[manga.source] ?: return
|
||||
val mangaDirName = provider.getMangaDirName(manga.title)
|
||||
if (sourceDir.mangaDirs.containsKey(mangaDirName)) {
|
||||
@ -283,7 +283,7 @@ class DownloadCache(
|
||||
}
|
||||
|
||||
suspend fun removeSource(source: Source) {
|
||||
rootDownloadsDirLock.withLock {
|
||||
rootDownloadsDirMutex.withLock {
|
||||
rootDownloadsDir.sourceDirs -= source.id
|
||||
}
|
||||
|
||||
@ -322,10 +322,10 @@ class DownloadCache(
|
||||
|
||||
val sourceMap = sources.associate { provider.getSourceDirName(it).lowercase() to it.id }
|
||||
|
||||
rootDownloadsDirLock.withLock {
|
||||
rootDownloadsDir = RootDirectory(storageManager.getDownloadsDirectory())
|
||||
rootDownloadsDirMutex.withLock {
|
||||
val updatedRootDir = RootDirectory(storageManager.getDownloadsDirectory())
|
||||
|
||||
val sourceDirs = rootDownloadsDir.dir?.listFiles().orEmpty()
|
||||
updatedRootDir.sourceDirs = updatedRootDir.dir?.listFiles().orEmpty()
|
||||
.filter { it.isDirectory && !it.name.isNullOrBlank() }
|
||||
.mapNotNull { dir ->
|
||||
val sourceId = sourceMap[dir.name!!.lowercase()]
|
||||
@ -333,36 +333,35 @@ class DownloadCache(
|
||||
}
|
||||
.toMap()
|
||||
|
||||
rootDownloadsDir.sourceDirs = sourceDirs
|
||||
updatedRootDir.sourceDirs.values.map { sourceDir ->
|
||||
async {
|
||||
sourceDir.mangaDirs = sourceDir.dir?.listFiles().orEmpty()
|
||||
.filter { it.isDirectory && !it.name.isNullOrBlank() }
|
||||
.associate { it.name!! to MangaDirectory(it) }
|
||||
|
||||
sourceDirs.values
|
||||
.map { sourceDir ->
|
||||
async {
|
||||
sourceDir.mangaDirs = sourceDir.dir?.listFiles().orEmpty()
|
||||
.filter { it.isDirectory && !it.name.isNullOrBlank() }
|
||||
.associate { it.name!! to MangaDirectory(it) }
|
||||
|
||||
sourceDir.mangaDirs.values.forEach { mangaDir ->
|
||||
val chapterDirs = mangaDir.dir?.listFiles().orEmpty()
|
||||
.mapNotNull {
|
||||
when {
|
||||
// Ignore incomplete downloads
|
||||
it.name?.endsWith(Downloader.TMP_DIR_SUFFIX) == true -> null
|
||||
// Folder of images
|
||||
it.isDirectory -> it.name
|
||||
// CBZ files
|
||||
it.isFile && it.extension == "cbz" -> it.nameWithoutExtension
|
||||
// Anything else is irrelevant
|
||||
else -> null
|
||||
}
|
||||
sourceDir.mangaDirs.values.forEach { mangaDir ->
|
||||
val chapterDirs = mangaDir.dir?.listFiles().orEmpty()
|
||||
.mapNotNull {
|
||||
when {
|
||||
// Ignore incomplete downloads
|
||||
it.name?.endsWith(Downloader.TMP_DIR_SUFFIX) == true -> null
|
||||
// Folder of images
|
||||
it.isDirectory -> it.name
|
||||
// CBZ files
|
||||
it.isFile && it.extension == "cbz" -> it.nameWithoutExtension
|
||||
// Anything else is irrelevant
|
||||
else -> null
|
||||
}
|
||||
.toMutableSet()
|
||||
}
|
||||
.toMutableSet()
|
||||
|
||||
mangaDir.chapterDirs = chapterDirs
|
||||
}
|
||||
mangaDir.chapterDirs = chapterDirs
|
||||
}
|
||||
}
|
||||
}
|
||||
.awaitAll()
|
||||
|
||||
rootDownloadsDir = updatedRootDir
|
||||
}
|
||||
|
||||
_isInitializing.emit(false)
|
||||
|
@ -2,6 +2,8 @@ package eu.kanade.tachiyomi.data.library
|
||||
|
||||
import android.content.Context
|
||||
import android.content.pm.ServiceInfo
|
||||
import android.net.NetworkCapabilities
|
||||
import android.net.NetworkRequest
|
||||
import android.os.Build
|
||||
import androidx.work.BackoffPolicy
|
||||
import androidx.work.Constraints
|
||||
@ -92,10 +94,12 @@ class LibraryUpdateJob(private val context: Context, workerParams: WorkerParamet
|
||||
|
||||
override suspend fun doWork(): Result {
|
||||
if (tags.contains(WORK_NAME_AUTO)) {
|
||||
val preferences = Injekt.get<LibraryPreferences>()
|
||||
val restrictions = preferences.autoUpdateDeviceRestrictions().get()
|
||||
if ((DEVICE_ONLY_ON_WIFI in restrictions) && !context.isConnectedToWifi()) {
|
||||
return Result.retry()
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.P) {
|
||||
val preferences = Injekt.get<LibraryPreferences>()
|
||||
val restrictions = preferences.autoUpdateDeviceRestrictions().get()
|
||||
if ((DEVICE_ONLY_ON_WIFI in restrictions) && !context.isConnectedToWifi()) {
|
||||
return Result.retry()
|
||||
}
|
||||
}
|
||||
|
||||
// Find a running manual worker. If exists, try again later
|
||||
@ -432,15 +436,24 @@ class LibraryUpdateJob(private val context: Context, workerParams: WorkerParamet
|
||||
val interval = prefInterval ?: preferences.autoUpdateInterval().get()
|
||||
if (interval > 0) {
|
||||
val restrictions = preferences.autoUpdateDeviceRestrictions().get()
|
||||
val constraints = Constraints(
|
||||
requiredNetworkType = if (DEVICE_NETWORK_NOT_METERED in restrictions) {
|
||||
NetworkType.UNMETERED
|
||||
} else {
|
||||
NetworkType.CONNECTED
|
||||
},
|
||||
requiresCharging = DEVICE_CHARGING in restrictions,
|
||||
requiresBatteryNotLow = true,
|
||||
)
|
||||
val networkType = if (DEVICE_NETWORK_NOT_METERED in restrictions) {
|
||||
NetworkType.UNMETERED
|
||||
} else {
|
||||
NetworkType.CONNECTED
|
||||
}
|
||||
val networkRequestBuilder = NetworkRequest.Builder()
|
||||
if (DEVICE_ONLY_ON_WIFI in restrictions) {
|
||||
networkRequestBuilder.addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
|
||||
}
|
||||
if (DEVICE_NETWORK_NOT_METERED in restrictions) {
|
||||
networkRequestBuilder.addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED)
|
||||
}
|
||||
val constraints = Constraints.Builder()
|
||||
// 'networkRequest' only applies to Android 9+, otherwise 'networkType' is used
|
||||
.setRequiredNetworkRequest(networkRequestBuilder.build(), networkType)
|
||||
.setRequiresCharging(DEVICE_CHARGING in restrictions)
|
||||
.setRequiresBatteryNotLow(true)
|
||||
.build()
|
||||
|
||||
val request = PeriodicWorkRequestBuilder<LibraryUpdateJob>(
|
||||
interval.toLong(),
|
||||
|
@ -71,6 +71,7 @@ object Notifications {
|
||||
const val CHANNEL_APP_UPDATE = "app_apk_update_channel"
|
||||
const val ID_APP_UPDATER = 1
|
||||
const val ID_APP_UPDATE_PROMPT = 2
|
||||
const val ID_APP_UPDATE_ERROR = 3
|
||||
const val CHANNEL_EXTENSIONS_UPDATE = "ext_apk_update_channel"
|
||||
const val ID_UPDATES_TO_EXTS = -401
|
||||
const val ID_EXTENSION_INSTALLER = -402
|
||||
|
@ -175,6 +175,7 @@ sealed class Image(
|
||||
}
|
||||
|
||||
sealed interface Location {
|
||||
@ConsistentCopyVisibility
|
||||
data class Pictures private constructor(val relativePath: String) : Location {
|
||||
companion object {
|
||||
fun create(relativePath: String = ""): Pictures {
|
||||
|
@ -71,6 +71,8 @@ class BangumiApi(
|
||||
val url = "$API_URL/search/subject/${URLEncoder.encode(search, StandardCharsets.UTF_8.name())}"
|
||||
.toUri()
|
||||
.buildUpon()
|
||||
.appendQueryParameter("type", "1")
|
||||
.appendQueryParameter("responseGroup", "large")
|
||||
.appendQueryParameter("max_results", "20")
|
||||
.build()
|
||||
with(json) {
|
||||
@ -81,7 +83,6 @@ class BangumiApi(
|
||||
if (result.code == 404) emptyList<TrackSearch>()
|
||||
|
||||
result.list
|
||||
?.filter { it.type == 1 }
|
||||
?.map { it.toTrackSearch(trackId) }
|
||||
.orEmpty()
|
||||
}
|
||||
|
@ -17,6 +17,7 @@ data class BGMSearchItem(
|
||||
val nameCn: String,
|
||||
val name: String,
|
||||
val type: Int,
|
||||
val summary: String?,
|
||||
val images: BGMSearchItemCovers?,
|
||||
@SerialName("eps_count")
|
||||
val epsCount: Long?,
|
||||
@ -25,9 +26,13 @@ data class BGMSearchItem(
|
||||
) {
|
||||
fun toTrackSearch(trackId: Long): TrackSearch = TrackSearch.create(trackId).apply {
|
||||
remote_id = this@BGMSearchItem.id
|
||||
title = nameCn
|
||||
cover_url = images?.common ?: ""
|
||||
summary = this@BGMSearchItem.name
|
||||
title = nameCn.ifBlank { name }
|
||||
cover_url = images?.common.orEmpty()
|
||||
summary = if (nameCn.isNotBlank()) {
|
||||
"作品原名:$name" + this@BGMSearchItem.summary?.let { "\n$it" }.orEmpty()
|
||||
} else {
|
||||
this@BGMSearchItem.summary.orEmpty()
|
||||
}
|
||||
score = rating?.score ?: -1.0
|
||||
tracking_url = url
|
||||
total_chapters = epsCount ?: 0
|
||||
|
@ -1,4 +1,4 @@
|
||||
@file:Suppress("PropertyName", "ktlint:standard:property-naming")
|
||||
@file:Suppress("PropertyName")
|
||||
|
||||
package eu.kanade.tachiyomi.data.track.model
|
||||
|
||||
|
@ -181,9 +181,9 @@ internal class AppUpdateNotifier(private val context: Context) {
|
||||
addAction(
|
||||
R.drawable.ic_close_24dp,
|
||||
context.stringResource(MR.strings.action_cancel),
|
||||
NotificationReceiver.dismissNotificationPendingBroadcast(context, Notifications.ID_APP_UPDATER),
|
||||
NotificationReceiver.dismissNotificationPendingBroadcast(context, Notifications.ID_APP_UPDATE_ERROR),
|
||||
)
|
||||
}
|
||||
notificationBuilder.show(Notifications.ID_APP_UPDATER)
|
||||
notificationBuilder.show(Notifications.ID_APP_UPDATE_ERROR)
|
||||
}
|
||||
}
|
||||
|
@ -3,6 +3,7 @@ package eu.kanade.tachiyomi.ui.browse
|
||||
import androidx.compose.animation.graphics.res.animatedVectorResource
|
||||
import androidx.compose.animation.graphics.res.rememberAnimatedVectorPainter
|
||||
import androidx.compose.animation.graphics.vector.AnimatedImageVector
|
||||
import androidx.compose.foundation.pager.rememberPagerState
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.LaunchedEffect
|
||||
import androidx.compose.runtime.collectAsState
|
||||
@ -22,12 +23,14 @@ import eu.kanade.tachiyomi.ui.browse.source.globalsearch.GlobalSearchScreen
|
||||
import eu.kanade.tachiyomi.ui.browse.source.sourcesTab
|
||||
import eu.kanade.tachiyomi.ui.main.MainActivity
|
||||
import kotlinx.collections.immutable.persistentListOf
|
||||
import kotlinx.coroutines.channels.BufferOverflow
|
||||
import kotlinx.coroutines.channels.Channel
|
||||
import kotlinx.coroutines.flow.collectLatest
|
||||
import kotlinx.coroutines.flow.receiveAsFlow
|
||||
import tachiyomi.i18n.MR
|
||||
import tachiyomi.presentation.core.i18n.stringResource
|
||||
|
||||
data class BrowseTab(
|
||||
private val toExtensions: Boolean = false,
|
||||
) : Tab {
|
||||
data object BrowseTab : Tab {
|
||||
|
||||
override val options: TabOptions
|
||||
@Composable
|
||||
@ -45,6 +48,12 @@ data class BrowseTab(
|
||||
navigator.push(GlobalSearchScreen())
|
||||
}
|
||||
|
||||
private val switchToExtensionTabChannel = Channel<Unit>(1, BufferOverflow.DROP_OLDEST)
|
||||
|
||||
fun showExtension() {
|
||||
switchToExtensionTabChannel.trySend(Unit)
|
||||
}
|
||||
|
||||
@Composable
|
||||
override fun Content() {
|
||||
val context = LocalContext.current
|
||||
@ -53,17 +62,25 @@ data class BrowseTab(
|
||||
val extensionsScreenModel = rememberScreenModel { ExtensionsScreenModel() }
|
||||
val extensionsState by extensionsScreenModel.state.collectAsState()
|
||||
|
||||
val tabs = persistentListOf(
|
||||
sourcesTab(),
|
||||
extensionsTab(extensionsScreenModel),
|
||||
migrateSourceTab(),
|
||||
)
|
||||
|
||||
val state = rememberPagerState { tabs.size }
|
||||
|
||||
TabbedScreen(
|
||||
titleRes = MR.strings.browse,
|
||||
tabs = persistentListOf(
|
||||
sourcesTab(),
|
||||
extensionsTab(extensionsScreenModel),
|
||||
migrateSourceTab(),
|
||||
),
|
||||
startIndex = 1.takeIf { toExtensions },
|
||||
tabs = tabs,
|
||||
state = state,
|
||||
searchQuery = extensionsState.searchQuery,
|
||||
onChangeSearchQuery = extensionsScreenModel::search,
|
||||
)
|
||||
LaunchedEffect(Unit) {
|
||||
switchToExtensionTabChannel.receiveAsFlow()
|
||||
.collectLatest { state.scrollToPage(1) }
|
||||
}
|
||||
|
||||
LaunchedEffect(Unit) {
|
||||
(context as? MainActivity)?.ready = true
|
||||
|
@ -14,7 +14,6 @@ import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.rememberCoroutineScope
|
||||
import androidx.compose.ui.platform.LocalConfiguration
|
||||
import androidx.compose.ui.platform.LocalUriHandler
|
||||
import androidx.paging.compose.collectAsLazyPagingItems
|
||||
import cafe.adriel.voyager.core.model.rememberScreenModel
|
||||
import cafe.adriel.voyager.navigator.LocalNavigator
|
||||
import cafe.adriel.voyager.navigator.currentOrThrow
|
||||
@ -29,6 +28,7 @@ import eu.kanade.tachiyomi.ui.home.HomeScreen
|
||||
import eu.kanade.tachiyomi.ui.manga.MangaScreen
|
||||
import eu.kanade.tachiyomi.ui.webview.WebViewScreen
|
||||
import kotlinx.coroutines.launch
|
||||
import mihon.presentation.core.util.collectAsLazyPagingItems
|
||||
import tachiyomi.core.common.Constants
|
||||
import tachiyomi.domain.manga.model.Manga
|
||||
import tachiyomi.i18n.MR
|
||||
@ -81,13 +81,12 @@ data class SourceSearchScreen(
|
||||
},
|
||||
snackbarHost = { SnackbarHost(hostState = snackbarHostState) },
|
||||
) { paddingValues ->
|
||||
val pagingFlow by screenModel.mangaPagerFlowFlow.collectAsState()
|
||||
val openMigrateDialog: (Manga) -> Unit = {
|
||||
screenModel.setDialog(BrowseSourceScreenModel.Dialog.Migrate(newManga = it, oldManga = oldManga))
|
||||
}
|
||||
BrowseSourceContent(
|
||||
source = screenModel.source,
|
||||
mangaList = pagingFlow.collectAsLazyPagingItems(),
|
||||
mangaList = screenModel.mangaPagerFlowFlow.collectAsLazyPagingItems(),
|
||||
columns = screenModel.getColumnsPreference(LocalConfiguration.current.orientation),
|
||||
displayMode = screenModel.displayMode,
|
||||
snackbarHostState = snackbarHostState,
|
||||
|
@ -31,7 +31,6 @@ import androidx.compose.ui.hapticfeedback.HapticFeedbackType
|
||||
import androidx.compose.ui.platform.LocalConfiguration
|
||||
import androidx.compose.ui.platform.LocalHapticFeedback
|
||||
import androidx.compose.ui.platform.LocalUriHandler
|
||||
import androidx.paging.compose.collectAsLazyPagingItems
|
||||
import cafe.adriel.voyager.core.model.rememberScreenModel
|
||||
import cafe.adriel.voyager.navigator.LocalNavigator
|
||||
import cafe.adriel.voyager.navigator.currentOrThrow
|
||||
@ -56,6 +55,7 @@ import eu.kanade.tachiyomi.ui.webview.WebViewScreen
|
||||
import kotlinx.coroutines.channels.Channel
|
||||
import kotlinx.coroutines.flow.collectLatest
|
||||
import kotlinx.coroutines.flow.receiveAsFlow
|
||||
import mihon.presentation.core.util.collectAsLazyPagingItems
|
||||
import tachiyomi.core.common.Constants
|
||||
import tachiyomi.core.common.util.lang.launchIO
|
||||
import tachiyomi.domain.source.model.StubSource
|
||||
@ -206,11 +206,9 @@ data class BrowseSourceScreen(
|
||||
},
|
||||
snackbarHost = { SnackbarHost(hostState = snackbarHostState) },
|
||||
) { paddingValues ->
|
||||
val pagingFlow by screenModel.mangaPagerFlowFlow.collectAsState()
|
||||
|
||||
BrowseSourceContent(
|
||||
source = screenModel.source,
|
||||
mangaList = pagingFlow.collectAsLazyPagingItems(),
|
||||
mangaList = screenModel.mangaPagerFlowFlow.collectAsLazyPagingItems(),
|
||||
columns = screenModel.getColumnsPreference(LocalConfiguration.current.orientation),
|
||||
displayMode = screenModel.displayMode,
|
||||
snackbarHostState = snackbarHostState,
|
||||
|
@ -32,7 +32,7 @@ import tachiyomi.domain.chapter.model.Chapter
|
||||
import tachiyomi.i18n.MR
|
||||
import tachiyomi.presentation.core.i18n.stringResource
|
||||
|
||||
object HistoryTab : Tab {
|
||||
data object HistoryTab : Tab {
|
||||
|
||||
private val snackbarHostState = SnackbarHostState()
|
||||
|
||||
|
@ -69,11 +69,11 @@ object HomeScreen : Screen() {
|
||||
private const val TAB_FADE_DURATION = 200
|
||||
private const val TAB_NAVIGATOR_KEY = "HomeTabs"
|
||||
|
||||
private val tabs = listOf(
|
||||
private val TABS = listOf(
|
||||
LibraryTab,
|
||||
UpdatesTab,
|
||||
HistoryTab,
|
||||
BrowseTab(),
|
||||
BrowseTab,
|
||||
MoreTab,
|
||||
)
|
||||
|
||||
@ -90,7 +90,7 @@ object HomeScreen : Screen() {
|
||||
startBar = {
|
||||
if (isTabletUi()) {
|
||||
NavigationRail {
|
||||
tabs.fastForEach {
|
||||
TABS.fastForEach {
|
||||
NavigationRailItem(it)
|
||||
}
|
||||
}
|
||||
@ -107,7 +107,7 @@ object HomeScreen : Screen() {
|
||||
exit = shrinkVertically(),
|
||||
) {
|
||||
NavigationBar {
|
||||
tabs.fastForEach {
|
||||
TABS.fastForEach {
|
||||
NavigationBarItem(it)
|
||||
}
|
||||
}
|
||||
@ -159,7 +159,12 @@ object HomeScreen : Screen() {
|
||||
is Tab.Library -> LibraryTab
|
||||
Tab.Updates -> UpdatesTab
|
||||
Tab.History -> HistoryTab
|
||||
is Tab.Browse -> BrowseTab(it.toExtensions)
|
||||
is Tab.Browse -> {
|
||||
if (it.toExtensions) {
|
||||
BrowseTab.showExtension()
|
||||
}
|
||||
BrowseTab
|
||||
}
|
||||
is Tab.More -> MoreTab
|
||||
}
|
||||
|
||||
|
@ -4,15 +4,15 @@ import androidx.compose.runtime.Immutable
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.util.fastAny
|
||||
import androidx.compose.ui.util.fastDistinctBy
|
||||
import androidx.compose.ui.util.fastFilter
|
||||
import androidx.compose.ui.util.fastMap
|
||||
import androidx.compose.ui.util.fastMapNotNull
|
||||
import cafe.adriel.voyager.core.model.StateScreenModel
|
||||
import cafe.adriel.voyager.core.model.screenModelScope
|
||||
import eu.kanade.core.preference.PreferenceMutableState
|
||||
import eu.kanade.core.preference.asState
|
||||
import eu.kanade.core.util.fastDistinctBy
|
||||
import eu.kanade.core.util.fastFilter
|
||||
import eu.kanade.core.util.fastFilterNot
|
||||
import eu.kanade.core.util.fastMapNotNull
|
||||
import eu.kanade.core.util.fastPartition
|
||||
import eu.kanade.domain.base.BasePreferences
|
||||
import eu.kanade.domain.chapter.interactor.SetReadStatus
|
||||
|
@ -61,7 +61,7 @@ import tachiyomi.presentation.core.screens.EmptyScreenAction
|
||||
import tachiyomi.presentation.core.screens.LoadingScreen
|
||||
import tachiyomi.source.local.isLocal
|
||||
|
||||
object LibraryTab : Tab {
|
||||
data object LibraryTab : Tab {
|
||||
|
||||
override val options: TabOptions
|
||||
@Composable
|
||||
|
@ -278,12 +278,13 @@ class MainActivity : BaseActivity() {
|
||||
@Composable
|
||||
private fun HandleOnNewIntent(context: Context, navigator: Navigator) {
|
||||
LaunchedEffect(Unit) {
|
||||
callbackFlow<Intent> {
|
||||
callbackFlow {
|
||||
val componentActivity = context as ComponentActivity
|
||||
val consumer = Consumer<Intent> { trySend(it) }
|
||||
componentActivity.addOnNewIntentListener(consumer)
|
||||
awaitClose { componentActivity.removeOnNewIntentListener(consumer) }
|
||||
}.collectLatest { handleIntentAction(it, navigator) }
|
||||
}
|
||||
.collectLatest { handleIntentAction(it, navigator) }
|
||||
}
|
||||
}
|
||||
|
||||
@ -339,6 +340,7 @@ class MainActivity : BaseActivity() {
|
||||
* When custom animation is used, status and navigation bar color will be set to transparent and will be restored
|
||||
* after the animation is finished.
|
||||
*/
|
||||
@Suppress("Deprecation")
|
||||
private fun setSplashScreenExitAnimation(splashScreen: SplashScreen?) {
|
||||
val root = findViewById<View>(android.R.id.content)
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S && splashScreen != null) {
|
||||
|
@ -25,6 +25,8 @@ import eu.kanade.domain.manga.model.downloadedFilter
|
||||
import eu.kanade.domain.manga.model.toSManga
|
||||
import eu.kanade.domain.track.interactor.AddTracks
|
||||
import eu.kanade.domain.track.interactor.TrackChapter
|
||||
import eu.kanade.domain.track.model.AutoTrackState
|
||||
import eu.kanade.domain.track.service.TrackPreferences
|
||||
import eu.kanade.presentation.manga.DownloadAction
|
||||
import eu.kanade.presentation.manga.components.ChapterDownloadAction
|
||||
import eu.kanade.presentation.util.formattedMessage
|
||||
@ -38,6 +40,7 @@ import eu.kanade.tachiyomi.source.Source
|
||||
import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences
|
||||
import eu.kanade.tachiyomi.util.chapter.getNextUnread
|
||||
import eu.kanade.tachiyomi.util.removeCovers
|
||||
import eu.kanade.tachiyomi.util.system.toast
|
||||
import kotlinx.collections.immutable.ImmutableList
|
||||
import kotlinx.collections.immutable.toImmutableList
|
||||
import kotlinx.coroutines.async
|
||||
@ -92,6 +95,7 @@ class MangaScreenModel(
|
||||
private val mangaId: Long,
|
||||
private val isFromSource: Boolean,
|
||||
private val libraryPreferences: LibraryPreferences = Injekt.get(),
|
||||
private val trackPreferences: TrackPreferences = Injekt.get(),
|
||||
readerPreferences: ReaderPreferences = Injekt.get(),
|
||||
private val trackerManager: TrackerManager = Injekt.get(),
|
||||
private val trackChapter: TrackChapter = Injekt.get(),
|
||||
@ -137,6 +141,7 @@ class MangaScreenModel(
|
||||
|
||||
val chapterSwipeStartAction = libraryPreferences.swipeToEndAction().get()
|
||||
val chapterSwipeEndAction = libraryPreferences.swipeToStartAction().get()
|
||||
var autoTrackState = trackPreferences.autoUpdateTrackOnMarkRead().get()
|
||||
|
||||
private val skipFiltered by readerPreferences.skipFiltered().asState(screenModelScope)
|
||||
|
||||
@ -725,19 +730,29 @@ class MangaScreenModel(
|
||||
*/
|
||||
fun markChaptersRead(chapters: List<Chapter>, read: Boolean) {
|
||||
toggleAllSelection(false)
|
||||
if (chapters.isEmpty()) return
|
||||
screenModelScope.launchIO {
|
||||
setReadStatus.await(
|
||||
read = read,
|
||||
chapters = chapters.toTypedArray(),
|
||||
)
|
||||
|
||||
if (!read) return@launchIO
|
||||
if (!read || successState?.hasLoggedInTrackers == false || autoTrackState == AutoTrackState.NEVER) {
|
||||
return@launchIO
|
||||
}
|
||||
|
||||
val tracks = getTracks.await(mangaId)
|
||||
val maxChapterNumber = chapters.maxOf { it.chapterNumber }
|
||||
val shouldPromptTrackingUpdate = tracks.any { track -> maxChapterNumber > track.lastChapterRead }
|
||||
|
||||
if (!shouldPromptTrackingUpdate) return@launchIO
|
||||
if (autoTrackState == AutoTrackState.ALWAYS) {
|
||||
trackChapter.await(context, mangaId, maxChapterNumber)
|
||||
withUIContext {
|
||||
context.toast(context.stringResource(MR.strings.trackers_updated_summary, maxChapterNumber.toInt()))
|
||||
}
|
||||
return@launchIO
|
||||
}
|
||||
|
||||
val result = snackbarHostState.showSnackbar(
|
||||
message = context.stringResource(MR.strings.confirm_tracker_update, maxChapterNumber.toInt()),
|
||||
|
@ -824,7 +824,11 @@ private data class TrackerRemoveScreen(
|
||||
|
||||
fun deleteMangaFromService() {
|
||||
screenModelScope.launchNonCancellable {
|
||||
(tracker as DeletableTracker).delete(track)
|
||||
try {
|
||||
(tracker as DeletableTracker).delete(track)
|
||||
} catch (e: Exception) {
|
||||
logcat(LogPriority.ERROR, e) { "Failed to delete entry from service" }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -38,7 +38,7 @@ import tachiyomi.presentation.core.i18n.stringResource
|
||||
import uy.kohesive.injekt.Injekt
|
||||
import uy.kohesive.injekt.api.get
|
||||
|
||||
object MoreTab : Tab {
|
||||
data object MoreTab : Tab {
|
||||
|
||||
override val options: TabOptions
|
||||
@Composable
|
||||
|
@ -401,7 +401,7 @@ class ReaderActivity : BaseActivity() {
|
||||
enabledPrevious = state.viewerChapters?.prevChapter != null,
|
||||
currentPage = state.currentPage,
|
||||
totalPages = state.totalPages,
|
||||
onSliderValueChange = {
|
||||
onPageIndexChange = {
|
||||
isScrollingThroughPages = true
|
||||
moveToPageIndex(it)
|
||||
},
|
||||
|
@ -33,13 +33,16 @@ import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView.EASE_IN_OUT
|
||||
import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView.EASE_OUT_QUAD
|
||||
import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView.SCALE_TYPE_CENTER_INSIDE
|
||||
import com.github.chrisbanes.photoview.PhotoView
|
||||
import eu.kanade.domain.base.BasePreferences
|
||||
import eu.kanade.tachiyomi.data.coil.cropBorders
|
||||
import eu.kanade.tachiyomi.data.coil.customDecoder
|
||||
import eu.kanade.tachiyomi.ui.reader.viewer.webtoon.WebtoonSubsamplingImageView
|
||||
import eu.kanade.tachiyomi.util.system.GLUtil
|
||||
import eu.kanade.tachiyomi.util.system.animatorDurationScale
|
||||
import eu.kanade.tachiyomi.util.view.isVisibleOnScreen
|
||||
import okio.BufferedSource
|
||||
import tachiyomi.core.common.util.system.ImageUtil
|
||||
import uy.kohesive.injekt.Injekt
|
||||
import uy.kohesive.injekt.api.get
|
||||
|
||||
/**
|
||||
* A wrapper view for showing page image.
|
||||
@ -57,6 +60,10 @@ open class ReaderPageImageView @JvmOverloads constructor(
|
||||
private val isWebtoon: Boolean = false,
|
||||
) : FrameLayout(context, attrs, defStyleAttrs, defStyleRes) {
|
||||
|
||||
private val alwaysDecodeLongStripWithSSIV by lazy {
|
||||
Injekt.get<BasePreferences>().alwaysDecodeLongStripWithSSIV().get()
|
||||
}
|
||||
|
||||
private var pageView: View? = null
|
||||
|
||||
private var config: Config? = null
|
||||
@ -233,7 +240,7 @@ open class ReaderPageImageView @JvmOverloads constructor(
|
||||
} else {
|
||||
SubsamplingScaleImageView(context)
|
||||
}.apply {
|
||||
setMaxTileSize(GLUtil.maxTextureSize)
|
||||
setMaxTileSize(ImageUtil.hardwareBitmapThreshold)
|
||||
setDoubleTapZoomStyle(SubsamplingScaleImageView.ZOOM_FOCUS_CENTER)
|
||||
setPanLimit(SubsamplingScaleImageView.PAN_LIMIT_INSIDE)
|
||||
setMinimumTileDpi(180)
|
||||
@ -288,35 +295,44 @@ open class ReaderPageImageView @JvmOverloads constructor(
|
||||
},
|
||||
)
|
||||
|
||||
if (isWebtoon) {
|
||||
val request = ImageRequest.Builder(context)
|
||||
.data(data)
|
||||
.memoryCachePolicy(CachePolicy.DISABLED)
|
||||
.diskCachePolicy(CachePolicy.DISABLED)
|
||||
.target(
|
||||
onSuccess = { result ->
|
||||
val image = result as BitmapImage
|
||||
setImage(ImageSource.bitmap(image.bitmap))
|
||||
isVisible = true
|
||||
},
|
||||
onError = {
|
||||
this@ReaderPageImageView.onImageLoadError()
|
||||
},
|
||||
)
|
||||
.size(ViewSizeResolver(this@ReaderPageImageView))
|
||||
.precision(Precision.INEXACT)
|
||||
.cropBorders(config.cropBorders)
|
||||
.customDecoder(true)
|
||||
.crossfade(false)
|
||||
.build()
|
||||
context.imageLoader.enqueue(request)
|
||||
} else {
|
||||
when (data) {
|
||||
is BitmapDrawable -> setImage(ImageSource.bitmap(data.bitmap))
|
||||
is BufferedSource -> setImage(ImageSource.inputStream(data.inputStream()))
|
||||
else -> throw IllegalArgumentException("Not implemented for class ${data::class.simpleName}")
|
||||
when (data) {
|
||||
is BitmapDrawable -> {
|
||||
setImage(ImageSource.bitmap(data.bitmap))
|
||||
isVisible = true
|
||||
}
|
||||
is BufferedSource -> {
|
||||
if (!isWebtoon || alwaysDecodeLongStripWithSSIV) {
|
||||
setHardwareConfig(ImageUtil.canUseHardwareBitmap(data))
|
||||
setImage(ImageSource.inputStream(data.inputStream()))
|
||||
isVisible = true
|
||||
return@apply
|
||||
}
|
||||
|
||||
ImageRequest.Builder(context)
|
||||
.data(data)
|
||||
.memoryCachePolicy(CachePolicy.DISABLED)
|
||||
.diskCachePolicy(CachePolicy.DISABLED)
|
||||
.target(
|
||||
onSuccess = { result ->
|
||||
val image = result as BitmapImage
|
||||
setImage(ImageSource.bitmap(image.bitmap))
|
||||
isVisible = true
|
||||
},
|
||||
onError = {
|
||||
onImageLoadError()
|
||||
},
|
||||
)
|
||||
.size(ViewSizeResolver(this@ReaderPageImageView))
|
||||
.precision(Precision.INEXACT)
|
||||
.cropBorders(config.cropBorders)
|
||||
.customDecoder(true)
|
||||
.crossfade(false)
|
||||
.build()
|
||||
.let(context.imageLoader::enqueue)
|
||||
}
|
||||
else -> {
|
||||
throw IllegalArgumentException("Not implemented for class ${data::class.simpleName}")
|
||||
}
|
||||
isVisible = true
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,12 +1,12 @@
|
||||
package eu.kanade.tachiyomi.ui.stats
|
||||
|
||||
import androidx.compose.ui.util.fastDistinctBy
|
||||
import androidx.compose.ui.util.fastFilter
|
||||
import androidx.compose.ui.util.fastMapNotNull
|
||||
import cafe.adriel.voyager.core.model.StateScreenModel
|
||||
import cafe.adriel.voyager.core.model.screenModelScope
|
||||
import eu.kanade.core.util.fastCountNot
|
||||
import eu.kanade.core.util.fastDistinctBy
|
||||
import eu.kanade.core.util.fastFilter
|
||||
import eu.kanade.core.util.fastFilterNot
|
||||
import eu.kanade.core.util.fastMapNotNull
|
||||
import eu.kanade.presentation.more.stats.StatsScreenState
|
||||
import eu.kanade.presentation.more.stats.data.StatsData
|
||||
import eu.kanade.tachiyomi.data.download.DownloadManager
|
||||
|
@ -31,7 +31,7 @@ import tachiyomi.core.common.i18n.stringResource
|
||||
import tachiyomi.i18n.MR
|
||||
import tachiyomi.presentation.core.i18n.stringResource
|
||||
|
||||
object UpdatesTab : Tab {
|
||||
data object UpdatesTab : Tab {
|
||||
|
||||
override val options: TabOptions
|
||||
@Composable
|
||||
|
@ -15,6 +15,7 @@ import androidx.core.content.getSystemService
|
||||
import androidx.core.net.toUri
|
||||
import com.hippo.unifile.UniFile
|
||||
import eu.kanade.domain.ui.UiPreferences
|
||||
import eu.kanade.domain.ui.model.ThemeMode
|
||||
import eu.kanade.tachiyomi.BuildConfig
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.ui.base.delegate.ThemingDelegate
|
||||
@ -107,9 +108,13 @@ fun Context.createFileInCacheDir(name: String): File {
|
||||
fun Context.createReaderThemeContext(): Context {
|
||||
val preferences = Injekt.get<UiPreferences>()
|
||||
val readerPreferences = Injekt.get<ReaderPreferences>()
|
||||
val themeMode = preferences.themeMode().get()
|
||||
val isDarkBackground = when (readerPreferences.readerTheme().get()) {
|
||||
1, 2 -> true // Black, Gray
|
||||
3 -> applicationContext.isNightMode() // Automatic bg uses activity background by default
|
||||
3 -> when (themeMode) { // Automatic bg uses activity background by default
|
||||
ThemeMode.SYSTEM -> applicationContext.isNightMode()
|
||||
else -> themeMode == ThemeMode.DARK
|
||||
}
|
||||
else -> false // White
|
||||
}
|
||||
val expected = if (isDarkBackground) Configuration.UI_MODE_NIGHT_YES else Configuration.UI_MODE_NIGHT_NO
|
||||
|
@ -1,20 +0,0 @@
|
||||
package mihon.core.firebase
|
||||
|
||||
import android.content.Context
|
||||
import com.google.firebase.analytics.FirebaseAnalytics
|
||||
import com.google.firebase.crashlytics.FirebaseCrashlytics
|
||||
import eu.kanade.tachiyomi.core.security.PrivacyPreferences
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.flow.launchIn
|
||||
import kotlinx.coroutines.flow.onEach
|
||||
|
||||
object Firebase {
|
||||
fun setup(context: Context, preference: PrivacyPreferences, scope: CoroutineScope) {
|
||||
preference.analytics().changes().onEach { enabled ->
|
||||
FirebaseAnalytics.getInstance(context).setAnalyticsCollectionEnabled(enabled)
|
||||
}.launchIn(scope)
|
||||
preference.crashlytics().changes().onEach { enabled ->
|
||||
FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(enabled)
|
||||
}.launchIn(scope)
|
||||
}
|
||||
}
|
25
app/src/standard/java/mihon/core/firebase/FirebaseConfig.kt
Normal file
25
app/src/standard/java/mihon/core/firebase/FirebaseConfig.kt
Normal file
@ -0,0 +1,25 @@
|
||||
package mihon.core.firebase
|
||||
|
||||
import android.content.Context
|
||||
import com.google.firebase.FirebaseApp
|
||||
import com.google.firebase.analytics.FirebaseAnalytics
|
||||
import com.google.firebase.crashlytics.FirebaseCrashlytics
|
||||
|
||||
object FirebaseConfig {
|
||||
private lateinit var analytics: FirebaseAnalytics
|
||||
private lateinit var crashlytics: FirebaseCrashlytics
|
||||
|
||||
fun init(context: Context) {
|
||||
analytics = FirebaseAnalytics.getInstance(context)
|
||||
FirebaseApp.initializeApp(context)
|
||||
crashlytics = FirebaseCrashlytics.getInstance()
|
||||
}
|
||||
|
||||
fun setAnalyticsEnabled(enabled: Boolean) {
|
||||
analytics.setAnalyticsCollectionEnabled(enabled)
|
||||
}
|
||||
|
||||
fun setCrashlyticsEnabled(enabled: Boolean) {
|
||||
crashlytics.isCrashlyticsCollectionEnabled = enabled
|
||||
}
|
||||
}
|
@ -45,8 +45,8 @@ internal fun Project.configureAndroid(commonExtension: CommonExtension<*, *, *,
|
||||
compilerOptions {
|
||||
jvmTarget.set(AndroidConfig.JvmTarget)
|
||||
freeCompilerArgs.addAll(
|
||||
"-opt-in=kotlin.RequiresOptIn",
|
||||
"-Xcontext-receivers",
|
||||
"-opt-in=kotlin.RequiresOptIn",
|
||||
)
|
||||
|
||||
// Treat all Kotlin warnings as errors (disabled by default)
|
||||
|
@ -6,10 +6,11 @@ plugins {
|
||||
|
||||
android {
|
||||
namespace = "eu.kanade.tachiyomi.core.common"
|
||||
}
|
||||
|
||||
kotlinOptions {
|
||||
freeCompilerArgs += listOf(
|
||||
"-Xcontext-receivers",
|
||||
kotlin {
|
||||
compilerOptions {
|
||||
freeCompilerArgs.addAll(
|
||||
"-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi",
|
||||
"-opt-in=kotlinx.serialization.ExperimentalSerializationApi",
|
||||
)
|
||||
|
@ -19,7 +19,7 @@ class NetworkPreferences(
|
||||
fun defaultUserAgent(): Preference<String> {
|
||||
return preferenceStore.getString(
|
||||
"default_user_agent",
|
||||
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:128.0) Gecko/20100101 Firefox/128.0",
|
||||
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:132.0) Gecko/20100101 Firefox/132.0",
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
@file:Suppress("FunctionName", "ktlint:standard:function-naming")
|
||||
@file:Suppress("FunctionName")
|
||||
|
||||
package eu.kanade.tachiyomi.network
|
||||
|
||||
|
@ -64,6 +64,7 @@ object DeviceUtil {
|
||||
|
||||
val invalidDefaultBrowsers = listOf(
|
||||
"android",
|
||||
"com.hihonor.android.internal.app",
|
||||
"com.huawei.android.internal.app",
|
||||
"com.zui.resolver",
|
||||
)
|
||||
|
@ -6,7 +6,7 @@ import javax.microedition.khronos.egl.EGLContext
|
||||
import kotlin.math.max
|
||||
|
||||
object GLUtil {
|
||||
val maxTextureSize: Int by lazy {
|
||||
val DEVICE_TEXTURE_LIMIT: Int by lazy {
|
||||
// Get EGL Display
|
||||
val egl = EGLContext.getEGL() as EGL10
|
||||
val display = egl.eglGetDisplay(EGL10.EGL_DEFAULT_DISPLAY)
|
||||
@ -38,10 +38,23 @@ object GLUtil {
|
||||
// Release
|
||||
egl.eglTerminate(display)
|
||||
|
||||
// Return largest texture size found, or default
|
||||
max(maximumTextureSize, IMAGE_MAX_BITMAP_DIMENSION)
|
||||
// Return largest texture size found (after making it a multiplier of [Multiplier]), or default
|
||||
max(maximumTextureSize, SAFE_TEXTURE_LIMIT)
|
||||
}
|
||||
|
||||
const val SAFE_TEXTURE_LIMIT: Int = 2048
|
||||
|
||||
val CUSTOM_TEXTURE_LIMIT_OPTIONS: List<Int> by lazy {
|
||||
val steps = DEVICE_TEXTURE_LIMIT / MULTIPLIER
|
||||
buildList(steps) {
|
||||
add(DEVICE_TEXTURE_LIMIT)
|
||||
for (step in steps downTo 2) {
|
||||
val value = step * MULTIPLIER
|
||||
if (value >= DEVICE_TEXTURE_LIMIT) continue
|
||||
add(value)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Safe minimum default size
|
||||
private const val IMAGE_MAX_BITMAP_DIMENSION = 2048
|
||||
private const val MULTIPLIER: Int = 1024
|
@ -68,7 +68,6 @@ fun WebView.setDefaultSettings() {
|
||||
with(settings) {
|
||||
javaScriptEnabled = true
|
||||
domStorageEnabled = true
|
||||
databaseEnabled = true
|
||||
useWideViewPort = true
|
||||
loadWithOverviewMode = true
|
||||
cacheMode = WebSettings.LOAD_DEFAULT
|
||||
|
@ -22,6 +22,7 @@ import androidx.core.graphics.get
|
||||
import androidx.core.graphics.green
|
||||
import androidx.core.graphics.red
|
||||
import com.hippo.unifile.UniFile
|
||||
import eu.kanade.tachiyomi.util.system.GLUtil
|
||||
import logcat.LogPriority
|
||||
import okio.Buffer
|
||||
import okio.BufferedSource
|
||||
@ -309,6 +310,23 @@ object ImageUtil {
|
||||
val bottomOffset = topOffset + splitHeight
|
||||
}
|
||||
|
||||
fun canUseHardwareBitmap(bitmap: Bitmap): Boolean {
|
||||
return canUseHardwareBitmap(bitmap.width, bitmap.height)
|
||||
}
|
||||
|
||||
fun canUseHardwareBitmap(imageSource: BufferedSource): Boolean {
|
||||
return with(extractImageOptions(imageSource)) {
|
||||
canUseHardwareBitmap(outWidth, outHeight)
|
||||
}
|
||||
}
|
||||
|
||||
var hardwareBitmapThreshold: Int = GLUtil.SAFE_TEXTURE_LIMIT
|
||||
|
||||
private fun canUseHardwareBitmap(width: Int, height: Int): Boolean {
|
||||
if (HARDWARE_BITMAP_UNSUPPORTED) return false
|
||||
return maxOf(width, height) <= hardwareBitmapThreshold
|
||||
}
|
||||
|
||||
/**
|
||||
* Algorithm for determining what background to accompany a comic/manga page
|
||||
*/
|
||||
@ -555,6 +573,121 @@ object ImageUtil {
|
||||
}
|
||||
|
||||
private val optimalImageHeight = getDisplayMaxHeightInPx * 2
|
||||
|
||||
/**
|
||||
* Taken from Coil
|
||||
* (https://github.com/coil-kt/coil/blob/1674d3516f061aeacbe749a435b1924f9648fd41/coil-core/src/androidMain/kotlin/coil3/util/hardwareBitmaps.kt)
|
||||
* ---
|
||||
* Maintains a list of devices with broken/incomplete/unstable hardware bitmap implementations.
|
||||
*
|
||||
* Model names are retrieved from
|
||||
* [Google's official device list](https://support.google.com/googleplay/answer/1727131?hl=en).
|
||||
*
|
||||
*/
|
||||
val HARDWARE_BITMAP_UNSUPPORTED = when (Build.VERSION.SDK_INT) {
|
||||
26 -> run {
|
||||
val model = Build.MODEL ?: return@run false
|
||||
|
||||
// Samsung Galaxy (ALL)
|
||||
if (model.removePrefix("SAMSUNG-").startsWith("SM-")) return@run true
|
||||
|
||||
val device = Build.DEVICE ?: return@run false
|
||||
|
||||
return@run device in arrayOf(
|
||||
"nora", "nora_8917", "nora_8917_n", // Moto E5
|
||||
"james", "rjames_f", "rjames_go", "pettyl", // Moto E5 Play
|
||||
"hannah", "ahannah", "rhannah", // Moto E5 Plus
|
||||
|
||||
"ali", "ali_n", // Moto G6
|
||||
"aljeter", "aljeter_n", "jeter", // Moto G6 Play
|
||||
"evert", "evert_n", "evert_nt", // Moto G6 Plus
|
||||
|
||||
"G3112", "G3116", "G3121", "G3123", "G3125", // Xperia XA1
|
||||
"G3412", "G3416", "G3421", "G3423", "G3426", // Xperia XA1 Plus
|
||||
"G3212", "G3221", "G3223", "G3226", // Xperia XA1 Ultra
|
||||
|
||||
"BV6800Pro", // BlackView BV6800Pro
|
||||
"CatS41", // Cat S41
|
||||
"Hi9Pro", // CHUWI Hi9 Pro
|
||||
"manning", // Lenovo K8 Note
|
||||
"N5702L", // NUU Mobile G3
|
||||
)
|
||||
}
|
||||
|
||||
27 -> run {
|
||||
val device = Build.DEVICE ?: return@run false
|
||||
|
||||
return@run device in arrayOf(
|
||||
"mcv1s", // LG Tribute Empire
|
||||
"mcv3", // LG K11
|
||||
"mcv5a", // LG Q7
|
||||
"mcv7a", // LG Stylo 4
|
||||
|
||||
"A30ATMO", // T-Mobile REVVL 2
|
||||
"A70AXLTMO", // T-Mobile REVVL 2 PLUS
|
||||
|
||||
"A3A_8_4G_TMO", // Alcatel 9027W
|
||||
"Edison_CKT", // Alcatel ONYX
|
||||
"EDISON_TF", // Alcatel TCL XL2
|
||||
"FERMI_TF", // Alcatel A501DL
|
||||
"U50A_ATT", // Alcatel TETRA
|
||||
"U50A_PLUS_ATT", // Alcatel 5059R
|
||||
"U50A_PLUS_TF", // Alcatel TCL LX
|
||||
"U50APLUSTMO", // Alcatel 5059Z
|
||||
"U5A_PLUS_4G", // Alcatel 1X
|
||||
|
||||
"RCT6513W87DK5e", // RCA Galileo Pro
|
||||
"RCT6873W42BMF9A", // RCA Voyager
|
||||
"RCT6A03W13", // RCA 10 Viking
|
||||
"RCT6B03W12", // RCA Atlas 10 Pro
|
||||
"RCT6B03W13", // RCA Atlas 10 Pro+
|
||||
"RCT6T06E13", // RCA Artemis 10
|
||||
|
||||
"A3_Pro", // Umidigi A3 Pro
|
||||
"One", // Umidigi One
|
||||
"One_Max", // Umidigi One Max
|
||||
"One_Pro", // Umidigi One Pro
|
||||
"Z2", // Umidigi Z2
|
||||
"Z2_PRO", // Umidigi Z2 Pro
|
||||
|
||||
"Armor_3", // Ulefone Armor 3
|
||||
"Armor_6", // Ulefone Armor 6
|
||||
|
||||
"Blackview", // Blackview BV6000
|
||||
"BV9500", // Blackview BV9500
|
||||
"BV9500Pro", // Blackview BV9500Pro
|
||||
|
||||
"A6L-C", // Nuu A6L-C
|
||||
"N5002LA", // Nuu A7L
|
||||
"N5501LA", // Nuu A5L
|
||||
|
||||
"Power_2_Pro", // Leagoo Power 2 Pro
|
||||
"Power_5", // Leagoo Power 5
|
||||
"Z9", // Leagoo Z9
|
||||
|
||||
"V0310WW", // Blu VIVO VI+
|
||||
"V0330WW", // Blu VIVO XI
|
||||
|
||||
"A3", // BenQ A3
|
||||
"ASUS_X018_4", // Asus ZenFone Max Plus M1 (ZB570TL)
|
||||
"C210AE", // Wiko Life
|
||||
"fireball", // DROID Incredible 4G LTE
|
||||
"ILA_X1", // iLA X1
|
||||
"Infinix-X605_sprout", // Infinix NOTE 5 Stylus
|
||||
"j7maxlte", // Samsung Galaxy J7 Max
|
||||
"KING_KONG_3", // Cubot King Kong 3
|
||||
"M10500", // Packard Bell M10500
|
||||
"S70", // Altice ALTICE S70
|
||||
"S80Lite", // Doogee S80Lite
|
||||
"SGINO6", // SGiNO 6
|
||||
"st18c10bnn", // Barnes and Noble BNTV650
|
||||
"TECNO-CA8", // Tecno CAMON X Pro,
|
||||
"SHIFT6m", // SHIFT 6m
|
||||
)
|
||||
}
|
||||
|
||||
else -> false
|
||||
}
|
||||
}
|
||||
|
||||
val getDisplayMaxHeightInPx: Int
|
||||
|
@ -23,6 +23,12 @@ android {
|
||||
}
|
||||
}
|
||||
|
||||
kotlin {
|
||||
compilerOptions {
|
||||
freeCompilerArgs.add("-opt-in=kotlinx.serialization.ExperimentalSerializationApi")
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation(projects.sourceApi)
|
||||
implementation(projects.domain)
|
||||
@ -30,12 +36,3 @@ dependencies {
|
||||
|
||||
api(libs.bundles.sqldelight)
|
||||
}
|
||||
|
||||
tasks {
|
||||
withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> {
|
||||
compilerOptions.freeCompilerArgs.addAll(
|
||||
"-Xcontext-receivers",
|
||||
"-opt-in=kotlinx.serialization.ExperimentalSerializationApi",
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -13,6 +13,12 @@ android {
|
||||
}
|
||||
}
|
||||
|
||||
kotlin {
|
||||
compilerOptions {
|
||||
freeCompilerArgs.add("-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi")
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation(projects.sourceApi)
|
||||
implementation(projects.core.common)
|
||||
@ -30,12 +36,3 @@ dependencies {
|
||||
testImplementation(libs.bundles.test)
|
||||
testImplementation(kotlinx.coroutines.test)
|
||||
}
|
||||
|
||||
tasks {
|
||||
withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> {
|
||||
compilerOptions.freeCompilerArgs.addAll(
|
||||
"-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi",
|
||||
"-Xcontext-receivers",
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -5,6 +5,7 @@ import mihon.domain.extensionrepo.exception.SaveExtensionRepoException
|
||||
import mihon.domain.extensionrepo.model.ExtensionRepo
|
||||
import mihon.domain.extensionrepo.repository.ExtensionRepoRepository
|
||||
import mihon.domain.extensionrepo.service.ExtensionRepoService
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import tachiyomi.core.common.util.system.logcat
|
||||
|
||||
class CreateExtensionRepo(
|
||||
@ -13,12 +14,13 @@ class CreateExtensionRepo(
|
||||
) {
|
||||
private val repoRegex = """^https://.*/index\.min\.json$""".toRegex()
|
||||
|
||||
suspend fun await(repoUrl: String): Result {
|
||||
if (!repoUrl.matches(repoRegex)) {
|
||||
return Result.InvalidUrl
|
||||
}
|
||||
suspend fun await(indexUrl: String): Result {
|
||||
val formattedIndexUrl = indexUrl.toHttpUrlOrNull()
|
||||
?.toString()
|
||||
?.takeIf { it.matches(repoRegex) }
|
||||
?: return Result.InvalidUrl
|
||||
|
||||
val baseUrl = repoUrl.removeSuffix("/index.min.json")
|
||||
val baseUrl = formattedIndexUrl.removeSuffix("/index.min.json")
|
||||
return service.fetchRepoDetails(baseUrl)?.let { insert(it) } ?: Result.InvalidUrl
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,5 @@
|
||||
package mihon.domain.extensionrepo.service
|
||||
|
||||
import androidx.core.net.toUri
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
import eu.kanade.tachiyomi.network.NetworkHelper
|
||||
import eu.kanade.tachiyomi.network.awaitSuccess
|
||||
@ -21,11 +20,9 @@ class ExtensionRepoService(
|
||||
repo: String,
|
||||
): ExtensionRepo? {
|
||||
return withIOContext {
|
||||
val url = "$repo/repo.json".toUri()
|
||||
|
||||
try {
|
||||
with(json) {
|
||||
client.newCall(GET(url.toString()))
|
||||
client.newCall(GET("$repo/repo.json"))
|
||||
.awaitSuccess()
|
||||
.parseAs<ExtensionRepoMetaDto>()
|
||||
.toExtensionRepo(baseUrl = repo)
|
||||
|
@ -1,34 +1,34 @@
|
||||
[versions]
|
||||
agp_version = "8.7.1"
|
||||
lifecycle_version = "2.8.6"
|
||||
paging_version = "3.3.2"
|
||||
agp_version = "8.7.3"
|
||||
lifecycle_version = "2.8.7"
|
||||
paging_version = "3.3.5"
|
||||
interpolator_version = "1.0.0"
|
||||
|
||||
[libraries]
|
||||
gradle = { module = "com.android.tools.build:gradle", version.ref = "agp_version" }
|
||||
|
||||
annotation = "androidx.annotation:annotation:1.8.2"
|
||||
annotation = "androidx.annotation:annotation:1.9.1"
|
||||
appcompat = "androidx.appcompat:appcompat:1.7.0"
|
||||
biometricktx = "androidx.biometric:biometric-ktx:1.2.0-alpha05"
|
||||
constraintlayout = "androidx.constraintlayout:constraintlayout:2.1.4"
|
||||
corektx = "androidx.core:core-ktx:1.13.1"
|
||||
constraintlayout = "androidx.constraintlayout:constraintlayout:2.2.0"
|
||||
corektx = "androidx.core:core-ktx:1.15.0"
|
||||
splashscreen = "androidx.core:core-splashscreen:1.0.1"
|
||||
recyclerview = "androidx.recyclerview:recyclerview:1.3.2"
|
||||
viewpager = "androidx.viewpager:viewpager:1.1.0-alpha01"
|
||||
viewpager = "androidx.viewpager:viewpager:1.1.0"
|
||||
profileinstaller = "androidx.profileinstaller:profileinstaller:1.4.1"
|
||||
|
||||
lifecycle-common = { module = "androidx.lifecycle:lifecycle-common", version.ref = "lifecycle_version" }
|
||||
lifecycle-process = { module = "androidx.lifecycle:lifecycle-process", version.ref = "lifecycle_version" }
|
||||
lifecycle-runtimektx = { module = "androidx.lifecycle:lifecycle-runtime-ktx", version.ref = "lifecycle_version" }
|
||||
|
||||
workmanager = "androidx.work:work-runtime:2.9.1"
|
||||
workmanager = "androidx.work:work-runtime:2.10.0"
|
||||
|
||||
paging-runtime = { module = "androidx.paging:paging-runtime", version.ref = "paging_version" }
|
||||
paging-compose = { module = "androidx.paging:paging-compose", version.ref = "paging_version" }
|
||||
|
||||
interpolator = { group = "androidx.interpolator", name = "interpolator", version.ref = "interpolator_version" }
|
||||
|
||||
benchmark-macro = "androidx.benchmark:benchmark-macro-junit4:1.3.2"
|
||||
benchmark-macro = "androidx.benchmark:benchmark-macro-junit4:1.3.3"
|
||||
test-ext = "androidx.test.ext:junit-ktx:1.2.1"
|
||||
test-espresso-core = "androidx.test.espresso:espresso-core:3.6.1"
|
||||
test-uiautomator = "androidx.test.uiautomator:uiautomator:2.3.0"
|
||||
|
@ -1,8 +1,8 @@
|
||||
[versions]
|
||||
compose-bom = "2024.09.03"
|
||||
compose-bom = "2024.12.01"
|
||||
|
||||
[libraries]
|
||||
activity = "androidx.activity:activity-compose:1.9.2"
|
||||
activity = "androidx.activity:activity-compose:1.9.3"
|
||||
bom = { group = "androidx.compose", name = "compose-bom", version.ref = "compose-bom" }
|
||||
foundation = { module = "androidx.compose.foundation:foundation" }
|
||||
animation = { module = "androidx.compose.animation:animation" }
|
||||
@ -15,4 +15,4 @@ ui-util = { module = "androidx.compose.ui:ui-util" }
|
||||
material3-core = { module = "androidx.compose.material3:material3" }
|
||||
material-icons = { module = "androidx.compose.material:material-icons-extended" }
|
||||
|
||||
glance = "androidx.glance:glance-appwidget:1.1.0"
|
||||
glance = "androidx.glance:glance-appwidget:1.1.1"
|
||||
|
@ -1,7 +1,7 @@
|
||||
[versions]
|
||||
kotlin_version = "2.0.21"
|
||||
kotlin_version = "2.1.0"
|
||||
serialization_version = "1.7.3"
|
||||
xml_serialization_version = "0.86.3"
|
||||
xml_serialization_version = "0.90.3"
|
||||
|
||||
[libraries]
|
||||
reflect = { module = "org.jetbrains.kotlin:kotlin-reflect", version.ref = "kotlin_version" }
|
||||
@ -10,7 +10,7 @@ compose-compiler-gradle = { module = "org.jetbrains.kotlin:compose-compiler-grad
|
||||
|
||||
immutables = { module = "org.jetbrains.kotlinx:kotlinx-collections-immutable", version = "0.3.8" }
|
||||
|
||||
coroutines-bom = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-bom", version = "1.9.0" }
|
||||
coroutines-bom = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-bom", version = "1.10.1" }
|
||||
coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core" }
|
||||
coroutines-android = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-android" }
|
||||
coroutines-guava = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-guava" }
|
||||
|
@ -1,19 +1,19 @@
|
||||
[versions]
|
||||
aboutlib_version = "11.2.3"
|
||||
leakcanary = "2.14"
|
||||
moko = "0.24.2"
|
||||
moko = "0.24.4"
|
||||
okhttp_version = "5.0.0-alpha.14"
|
||||
richtext = "0.20.0"
|
||||
shizuku_version = "12.2.0"
|
||||
shizuku_version = "13.1.0"
|
||||
sqldelight = "2.0.2"
|
||||
sqlite = "2.4.0"
|
||||
voyager = "1.0.0"
|
||||
spotless = "6.25.0"
|
||||
ktlint-core = "1.3.1"
|
||||
firebase-bom = "33.4.0"
|
||||
voyager = "1.0.1"
|
||||
spotless = "7.0.0.BETA4"
|
||||
ktlint-core = "1.5.0"
|
||||
firebase-bom = "33.7.0"
|
||||
|
||||
[libraries]
|
||||
desugar = "com.android.tools:desugar_jdk_libs:2.1.2"
|
||||
desugar = "com.android.tools:desugar_jdk_libs:2.1.4"
|
||||
android-shortcut-gradle = "com.github.zellius:android-shortcut-gradle-plugin:0.1.2"
|
||||
|
||||
rxjava = "io.reactivex:rxjava:1.3.8"
|
||||
@ -28,11 +28,11 @@ conscrypt-android = "org.conscrypt:conscrypt-android:2.5.3"
|
||||
|
||||
quickjs-android = "app.cash.quickjs:quickjs-android:0.9.2"
|
||||
|
||||
jsoup = "org.jsoup:jsoup:1.18.1"
|
||||
jsoup = "org.jsoup:jsoup:1.18.3"
|
||||
|
||||
disklrucache = "com.jakewharton:disklrucache:2.0.2"
|
||||
unifile = "com.github.tachiyomiorg:unifile:e0def6b3dc"
|
||||
libarchive = "me.zhanghai.android.libarchive:library:1.1.3"
|
||||
libarchive = "me.zhanghai.android.libarchive:library:1.1.4"
|
||||
|
||||
sqlite-framework = { module = "androidx.sqlite:sqlite-framework", version.ref = "sqlite" }
|
||||
sqlite-ktx = { module = "androidx.sqlite:sqlite-ktx", version.ref = "sqlite" }
|
||||
@ -42,13 +42,13 @@ preferencektx = "androidx.preference:preference-ktx:1.2.1"
|
||||
|
||||
injekt = "com.github.mihonapp:injekt:91edab2317"
|
||||
|
||||
coil-bom = { module = "io.coil-kt.coil3:coil-bom", version = "3.0.0-rc01" }
|
||||
coil-bom = { module = "io.coil-kt.coil3:coil-bom", version = "3.0.4" }
|
||||
coil-core = { module = "io.coil-kt.coil3:coil" }
|
||||
coil-gif = { module = "io.coil-kt.coil3:coil-gif" }
|
||||
coil-compose = { module = "io.coil-kt.coil3:coil-compose" }
|
||||
coil-network-okhttp = { module = "io.coil-kt.coil3:coil-network-okhttp" }
|
||||
|
||||
subsamplingscaleimageview = "com.github.tachiyomiorg:subsampling-scale-image-view:b8e1b0ed2b"
|
||||
subsamplingscaleimageview = "com.github.tachiyomiorg:subsampling-scale-image-view:66e0db195d"
|
||||
image-decoder = "com.github.tachiyomiorg:image-decoder:41c059e540"
|
||||
|
||||
natural-comparator = "com.github.gpanther:java-nat-sort:natural-comparator-1.1"
|
||||
@ -89,9 +89,9 @@ sqldelight-coroutines = { module = "app.cash.sqldelight:coroutines-extensions-jv
|
||||
sqldelight-android-paging = { module = "app.cash.sqldelight:androidx-paging3-extensions", version.ref = "sqldelight" }
|
||||
sqldelight-dialects-sql = { module = "app.cash.sqldelight:sqlite-3-38-dialect", version.ref = "sqldelight" }
|
||||
|
||||
junit = "org.junit.jupiter:junit-jupiter:5.11.2"
|
||||
junit = "org.junit.jupiter:junit-jupiter:5.11.4"
|
||||
kotest-assertions = "io.kotest:kotest-assertions-core:5.9.1"
|
||||
mockk = "io.mockk:mockk:1.13.13"
|
||||
mockk = "io.mockk:mockk:1.13.14"
|
||||
|
||||
voyager-navigator = { module = "cafe.adriel.voyager:voyager-navigator", version.ref = "voyager" }
|
||||
voyager-screenmodel = { module = "cafe.adriel.voyager:voyager-screenmodel", version.ref = "voyager" }
|
||||
|
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
@ -1,6 +1,6 @@
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-bin.zip
|
||||
networkTimeout=10000
|
||||
validateDistributionUrl=true
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
|
3
gradlew
vendored
3
gradlew
vendored
@ -86,8 +86,7 @@ done
|
||||
# shellcheck disable=SC2034
|
||||
APP_BASE_NAME=${0##*/}
|
||||
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
|
||||
APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s
|
||||
' "$PWD" ) || exit
|
||||
APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit
|
||||
|
||||
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
||||
MAX_FD=maximum
|
||||
|
@ -1,6 +1,6 @@
|
||||
import mihon.buildlogic.generatedBuildDir
|
||||
import mihon.buildlogic.tasks.getLocalesConfigTask
|
||||
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
|
||||
import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
|
||||
|
||||
plugins {
|
||||
id("mihon.library")
|
||||
@ -20,6 +20,11 @@ kotlin {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalKotlinGradlePluginApi::class)
|
||||
compilerOptions {
|
||||
freeCompilerArgs.add("-Xexpect-actual-classes")
|
||||
}
|
||||
}
|
||||
|
||||
val generatedAndroidResourceDir = generatedBuildDir.resolve("android/res")
|
||||
@ -49,10 +54,4 @@ tasks {
|
||||
preBuild {
|
||||
dependsOn(localesConfigTask)
|
||||
}
|
||||
|
||||
withType<KotlinCompile> {
|
||||
compilerOptions.freeCompilerArgs.addAll(
|
||||
"-Xexpect-actual-classes",
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -275,4 +275,4 @@
|
||||
<string name="backup_restore_missing_trackers">መከታተያዎች አልገቡም:</string>
|
||||
<string name="backup_restore_missing_sources">የጠፋ ምንጮች:</string>
|
||||
<string name="invalid_backup_file_missing_manga">ምትኬ ማንኛውንም ማንጋ አልያዘም ፡፡</string>
|
||||
</resources>
|
||||
</resources>
|
@ -714,7 +714,6 @@
|
||||
<string name="library_sync_complete">انتهت مزامنة المكتبة</string>
|
||||
<string name="has_results">وُجدت نتائج</string>
|
||||
<string name="create_backup_file_error">تعذَّر إنشاء ملفِّ نسخ احتياطيِّ</string>
|
||||
<string name="licensed_manga_chapters_error">مرخَّصة - لا فصول</string>
|
||||
<string name="track_activity_name">ولوج المتتبِّع</string>
|
||||
<string name="download_cache_invalidated">أُفسد فهرس التنزيلات</string>
|
||||
<string name="information_cloudflare_help">اضغط هنا للمساعدة فى Cloudflare</string>
|
||||
@ -821,4 +820,4 @@
|
||||
<string name="extensionRepo_settings">مستودع الإضافات</string>
|
||||
<string name="invalid_backup_file_unknown">ملف النسخة الإحتياطية معطل أو لا يعمل</string>
|
||||
<string name="invalid_backup_file_json">لا يتم دعم النسخ الاحتياطي لـ JSON</string>
|
||||
</resources>
|
||||
</resources>
|
79
i18n/src/commonMain/moko-resources/as/plurals.xml
Normal file
79
i18n/src/commonMain/moko-resources/as/plurals.xml
Normal file
@ -0,0 +1,79 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<plurals name="update_check_notification_ext_updates">
|
||||
<item quantity="one">এক্সটেনচন আপডেট উপলব্ধ</item>
|
||||
<item quantity="other">%d এক্সটেনচন আপডেটসমূহ উপলব্ধ</item>
|
||||
</plurals>
|
||||
<plurals name="num_repos">
|
||||
<item quantity="one">%d ৰেপো</item>
|
||||
<item quantity="other">%d ৰেপোসমূহ</item>
|
||||
</plurals>
|
||||
<plurals name="lock_after_mins">
|
||||
<item quantity="one">%1$s মিনিট পিছত</item>
|
||||
<item quantity="other">%1$s মিনিটৰ পিছত</item>
|
||||
</plurals>
|
||||
<plurals name="relative_time">
|
||||
<item quantity="one">কালি</item>
|
||||
<item quantity="other">%1$d দিনৰ আগতে</item>
|
||||
</plurals>
|
||||
<plurals name="upcoming_relative_time">
|
||||
<item quantity="one">কাইলৈ</item>
|
||||
<item quantity="other">%1$d দিনত</item>
|
||||
</plurals>
|
||||
<plurals name="num_categories">
|
||||
<item quantity="one">%d শিতান</item>
|
||||
<item quantity="other">%d শিতানসমূহ</item>
|
||||
</plurals>
|
||||
<plurals name="next_unread_chapters">
|
||||
<item quantity="one">পৰৱৰ্তী অপঠিত অধ্যায়</item>
|
||||
<item quantity="other">পৰৱৰ্তী %d অপঠিত অধ্যায়সমূহ</item>
|
||||
</plurals>
|
||||
<plurals name="restore_completed_message">
|
||||
<item quantity="one">%1$sত %2$s ত্ৰুটি সৈতে সমাপ্ত</item>
|
||||
<item quantity="other">%1$sত %2$s ত্ৰুটিৰ সৈতে সমাপ্ত</item>
|
||||
</plurals>
|
||||
<plurals name="download_queue_summary">
|
||||
<item quantity="one">%1$s বাকী আছে</item>
|
||||
<item quantity="other">%1$s বাকী আছে</item>
|
||||
</plurals>
|
||||
<plurals name="day">
|
||||
<item quantity="one">১ দিন</item>
|
||||
<item quantity="other">%d দিন</item>
|
||||
</plurals>
|
||||
<plurals name="pref_pages">
|
||||
<item quantity="one">১ পৃষ্ঠা</item>
|
||||
<item quantity="other">%1$s পৃষ্ঠাসমূহ</item>
|
||||
</plurals>
|
||||
<plurals name="missing_chapters">
|
||||
<item quantity="one">অপস্থিত %1$s অধ্যায়</item>
|
||||
<item quantity="other">অপস্থিত %1$s অধ্যায়সমূহ</item>
|
||||
</plurals>
|
||||
<plurals name="manga_num_chapters">
|
||||
<item quantity="one">%1$s অধ্যায়</item>
|
||||
<item quantity="other">%1$s অধ্যায়সমূহ</item>
|
||||
</plurals>
|
||||
<plurals name="download_amount">
|
||||
<item quantity="one">পৰৱৰ্তী অধ্যায়</item>
|
||||
<item quantity="other">পৰৱৰ্তী %d অধ্যায়সমূহ</item>
|
||||
</plurals>
|
||||
<plurals name="num_trackers">
|
||||
<item quantity="one">%d ট্ৰেকাৰ</item>
|
||||
<item quantity="other">%d ট্ৰেকাৰসমূহ</item>
|
||||
</plurals>
|
||||
<plurals name="missing_chapters_warning">
|
||||
<item quantity="one">%d অধ্যায় স্কিপ কৰা হৈছে, উৎসত নাইবা ফিল্টাৰ কৰি আঁতৰোৱা হৈছে</item>
|
||||
<item quantity="other">%d অধ্যায়সমূহ স্কিপ কৰা হৈছে, উৎসত নাইবা ফিল্টাৰ কৰি আঁতৰোৱা হৈছে</item>
|
||||
</plurals>
|
||||
<plurals name="notification_new_chapters_summary">
|
||||
<item quantity="one">%d প্ৰৱিষ্টিৰ বাবে</item>
|
||||
<item quantity="other">%d প্ৰৱিষ্টিসমূহৰ বাবে</item>
|
||||
</plurals>
|
||||
<plurals name="notification_chapters_generic">
|
||||
<item quantity="one">%1$d নতুন অধ্যায়</item>
|
||||
<item quantity="other">%1$d নতুন অধ্যায়সমূহ</item>
|
||||
</plurals>
|
||||
<plurals name="notification_chapters_multiple_and_more">
|
||||
<item quantity="one">অধ্যায়সমূহ %1$s আৰু 1 অধিক</item>
|
||||
<item quantity="other">অধ্যায়সমূহ %1$s আৰু %2$d অধিক</item>
|
||||
</plurals>
|
||||
</resources>
|
843
i18n/src/commonMain/moko-resources/as/strings.xml
Normal file
843
i18n/src/commonMain/moko-resources/as/strings.xml
Normal file
@ -0,0 +1,843 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="on">চালু</string>
|
||||
<string name="off">বন্ধ</string>
|
||||
<string name="label_library">পুথিভঁৰাল</string>
|
||||
<string name="label_recent_updates">আপডেটসমূহ</string>
|
||||
<string name="label_upcoming">আসন্ন</string>
|
||||
<string name="label_started">আৰম্ভ হৈছে</string>
|
||||
<string name="label_local">স্থানীয়</string>
|
||||
<string name="label_downloaded">ডাউনলোড কৰা</string>
|
||||
<string name="unlock_app_title">%s আনলক কৰক</string>
|
||||
<string name="action_webview_forward">সামনে</string>
|
||||
<string name="action_webview_refresh">পুনৰপ্ৰাপ্তি কৰক</string>
|
||||
<string name="action_migrate_duplicate">বিদ্যমান প্ৰৱিষ্টি স্থানান্তৰ কৰক</string>
|
||||
<string name="onboarding_action_next">পৰৱৰ্তী</string>
|
||||
<string name="pref_category_general">সাধাৰণ</string>
|
||||
<string name="pref_category_appearance">দেখাত</string>
|
||||
<string name="pref_category_tracking">ট্ৰেকিং</string>
|
||||
<string name="pref_category_advanced">উন্নত</string>
|
||||
<string name="pref_category_about">বিষয়ে</string>
|
||||
<string name="lock_with_biometrics">আনলকৰ প্ৰয়োজন</string>
|
||||
<string name="lock_when_idle">নিশ্ক্ৰিয় হৈ থাকিলে লক কৰক</string>
|
||||
<string name="pref_library_columns_per_row">%d প্ৰতিটো শাৰী</string>
|
||||
<string name="portrait">উল্লম্ব</string>
|
||||
<string name="landscape">অনুভূমিক</string>
|
||||
<string name="pref_category_library_update">সৰ্বসাধাৰণ সন্মিলনী</string>
|
||||
<string name="pref_library_update_restriction">স্বয়ংক্ৰিয় আপডেটৰ যন্ত্ৰৰ সীমাবদ্ধতা</string>
|
||||
<string name="connected_to_wifi">কেৱল Wi-Fi ত</string>
|
||||
<string name="network_not_metered">কেৱল অবিমিত নেটৱৰ্কত</string>
|
||||
<string name="charging">চাৰ্জিং সময়ত</string>
|
||||
<string name="pref_library_update_smart_update">স্মাৰ্ট আপডেট</string>
|
||||
<string name="pref_update_only_completely_read">অপঠিত অধ্যায়ৰ পৰা আঁতৰাওক</string>
|
||||
<string name="pref_update_only_non_completed">সম্পূৰ্ণ অৱস্থাৰ পৰা আঁতৰাওক</string>
|
||||
<string name="default_category">ডিফল্ট শ্ৰেণী</string>
|
||||
<string name="all">সকলো</string>
|
||||
<string name="ext_obsolete">অচল</string>
|
||||
<string name="ext_info_age_rating">বয়সৰ মূল্যাংকন</string>
|
||||
<string name="ext_installer_pref">ইন্সটলাৰ</string>
|
||||
<string name="ext_installer_legacy">পুৰণি</string>
|
||||
<string name="error_repo_exists">এই ৰেপো ইতিমধ্যে আছে!</string>
|
||||
<string name="action_open_repo">উৎস ৰেপো খোলক</string>
|
||||
<string name="action_replace_repo">প্ৰতিস্থাপন কৰক</string>
|
||||
<string name="pref_show_navigation_mode_summary">পঢ়ুৱৈ খোলাৰ সময়ত ক্ষণেকৰ বাবে দেখুৱাওক</string>
|
||||
<string name="pref_grayscale">ধূসর ৰং</string>
|
||||
<string name="pref_inverted_colors">উলটাই দিয়া ৰং</string>
|
||||
<string name="filter_mode_overlay">আৱৰণ</string>
|
||||
<string name="white_background">বগা</string>
|
||||
<string name="edge_nav">কোন</string>
|
||||
<string name="nav_zone_left">বাঁও</string>
|
||||
<string name="pref_category_reading">পঢ়া</string>
|
||||
<string name="pref_webtoon_side_padding">পৰ্দা পৰিসৰ</string>
|
||||
<string name="pref_hide_threshold">স্ক্ৰ\'ল কৰিলে মেনু লুকুৱাবৰ সংবেদনশীলতা</string>
|
||||
<string name="pref_webtoon_disable_zoom_out">জুম আউট বন্ধ কৰক</string>
|
||||
<string name="fourth_to_last">চতুৰ্থ শেহতীয়া পঢ়া অধ্যায়</string>
|
||||
<string name="pref_download_new_categories_details">বহিঃস্তৰিত শ্ৰেণীবিভাগত থকা প্ৰৱিষ্টসমূহ ডাউনলোড নহ\'ব, যদিও সেয়া অন্তৰ্ভুক্ত শ্ৰেণীবিভাগত থাকে।</string>
|
||||
<string name="download_ahead">আগৰ অধ্যায় ডাউনলোড কৰক</string>
|
||||
<string name="pref_restore_backup_summ">বেকআপ ফাইলৰ পৰা গ্ৰন্থাগাৰ পুনৰুদ্ধাৰ কৰক</string>
|
||||
<string name="action_create">সৃষ্টি কৰক</string>
|
||||
<string name="invalid_backup_file_missing_manga">বেকআপত কোনো গ্ৰন্থাগাৰ প্ৰৱিষ্ট নাই।</string>
|
||||
<string name="restore_completed">পুনৰুদ্ধাৰ সম্পূৰ্ণ</string>
|
||||
<string name="restore_duration">%1$02d মিনিট, %2$02d ছেকেণ্ড</string>
|
||||
<string name="missing_storage_permission">সংৰক্ষণ অনুমতি প্ৰদান কৰা হোৱা নাই</string>
|
||||
<string name="in_library">লাইব্ৰেৰীত</string>
|
||||
<string name="manga_added_library">লাইব্ৰেৰীলৈ যোগ কৰা হৈছে</string>
|
||||
<string name="track_remove_finish_date_conf_text">%s পৰা আপোনাৰ আগৰ নিৰ্বাচিত শেষৰ তাৰিখ মচি দিব</string>
|
||||
<string name="snack_categories_deleted">শ্রেণীবোৰ মচি দিয়া হৈছে</string>
|
||||
<string name="dialog_with_checkbox_reset">এই প্ৰৱিষ্টৰ বাবে সকলো অধ্যায়ৰ পুনৰ চেক কৰক</string>
|
||||
<string name="update_check_open">GitHub ত খোলক</string>
|
||||
<string name="information_no_downloads">কোনো ডাউনলোড নাই</string>
|
||||
<string name="channel_errors">ত্ৰুটিসমূহ</string>
|
||||
<string name="channel_new_chapters">অধ্যায় আপডেট</string>
|
||||
<string name="exception_http">HTTP %d, WebView ত ৱেবছাইট পৰীক্ষা কৰক</string>
|
||||
<string name="selected">বাচনি কৰা</string>
|
||||
<string name="not_selected">বাচনি নকৰা</string>
|
||||
<string name="action_menu_overflow_description">অধিক বিকল্প</string>
|
||||
<string name="action_bar_up_description">উৰ্ধে নেভিগেট কৰক</string>
|
||||
<string name="name">নাম</string>
|
||||
<string name="categories">শ্ৰেণীবিভাগসমূহ</string>
|
||||
<string name="manga">পুথিভঁৰালৰ উপাদানসমূহ</string>
|
||||
<string name="chapters">অধ্যায়সমূহ</string>
|
||||
<string name="track">ট্ৰেকিং</string>
|
||||
<string name="delete_downloaded">ডাউনলোড কৰা মচক</string>
|
||||
<string name="history">ইতিহাস</string>
|
||||
<string name="scanlator">স্কেনলেটৰ</string>
|
||||
<string name="label_more">অধিক</string>
|
||||
<string name="label_settings">ছেটিংছ</string>
|
||||
<string name="label_download_queue">ডাউনলোড ক্ৰমানুসাৰী</string>
|
||||
<string name="label_recent_manga">ইতিহাস</string>
|
||||
<string name="label_sources">উৎসসমূহ</string>
|
||||
<string name="label_backup">ব্যাকআপ আৰু পুনৰুদ্ধাৰ</string>
|
||||
<string name="label_data_storage">ডাটা আৰু সংৰক্ষণ</string>
|
||||
<string name="label_stats">পৰিসংখ্যা</string>
|
||||
<string name="label_migration">স্থানান্তৰ</string>
|
||||
<string name="label_extensions">এক্সটেনশ্বনসমূহ</string>
|
||||
<string name="label_extension_info">এক্সটেনশ্বন তথ্য</string>
|
||||
<string name="label_help">সহায়</string>
|
||||
<string name="label_warning">সতৰ্কবাণী</string>
|
||||
<string name="confirm_lock_change">পৰিবৰ্তন নিশ্চিত কৰিবলৈ প্ৰমাণীকৰণ কৰক</string>
|
||||
<string name="label_default">পূৰ্বনির্ধাৰিত</string>
|
||||
<string name="action_settings">সেটিংচ</string>
|
||||
<string name="action_menu">মেনু</string>
|
||||
<string name="action_filter">ফিল্টাৰ</string>
|
||||
<string name="action_set_interval">সময় অন্তৰ্বাল স্থাপন কৰক</string>
|
||||
<string name="action_filter_bookmarked">বুকমাৰ্ক কৰা</string>
|
||||
<string name="action_filter_tracked">ট্ৰেক কৰা</string>
|
||||
<string name="action_filter_unread">অপঢ়া</string>
|
||||
<string name="action_filter_interval_custom">অনুকূলিত আপডেট মাৰ্জিন</string>
|
||||
<string name="action_filter_empty">ফিল্টাৰ আঁতৰাওক</string>
|
||||
<string name="action_sort_alpha">বৰ্ণানুক্ৰমিকভাৱে</string>
|
||||
<string name="action_sort_count">মুঠ প্ৰৱিষ্টি</string>
|
||||
<string name="action_sort_total">মুঠ অধ্যায়</string>
|
||||
<string name="action_sort_last_read">শেষ পঢ়া</string>
|
||||
<string name="action_sort_last_manga_update">শেষ আপডেট পৰীক্ষা</string>
|
||||
<string name="action_sort_unread_count">অপঢ়া সংখ্যাৰ ভিত্তিত</string>
|
||||
<string name="action_sort_next_updated">পৰৱৰ্তী আপডেট আশা কৰা হৈছে</string>
|
||||
<string name="action_sort_latest_chapter">শেষ অধ্যায়</string>
|
||||
<string name="action_sort_chapter_fetch_date">অধ্যায় আহৰণ তাৰিখ</string>
|
||||
<string name="action_sort_date_added">যোগ কৰা তাৰিখ</string>
|
||||
<string name="action_search">সন্ধান কৰক</string>
|
||||
<string name="action_sort_tracker_score">ট্ৰেকাৰ স্ক\'ৰ</string>
|
||||
<string name="action_search_hint">সন্ধান কৰক…</string>
|
||||
<string name="action_search_settings">সন্ধান সেটিংচ</string>
|
||||
<string name="action_global_search">সৰ্বভৌম সন্ধান</string>
|
||||
<string name="action_select_all">সকলো বাছক</string>
|
||||
<string name="action_select_inverse">বিপৰীত বাছক</string>
|
||||
<string name="action_mark_as_read">পঢ়া বুলি চিহ্নিত কৰক</string>
|
||||
<string name="action_mark_as_unread">অপঢ়া বুলি চিহ্নিত কৰক</string>
|
||||
<string name="action_mark_previous_as_read">পূৰ্বৰটো পঢ়া বুলি চিহ্নিত কৰক</string>
|
||||
<string name="action_download">ডাউনলোড কৰক</string>
|
||||
<string name="action_bookmark">অধ্যায় বুকমাৰ্ক কৰক</string>
|
||||
<string name="action_remove_bookmark">অধ্যায়ৰ বুকমাৰ্ক আঁতৰাওক</string>
|
||||
<string name="action_delete">মচক</string>
|
||||
<string name="action_update_library">পুথিভঁৰাল আপডেট কৰক</string>
|
||||
<string name="action_enable_all">সকলো সক্ৰিয় কৰক</string>
|
||||
<string name="action_disable_all">সকলো নিষ্ক্ৰিয় কৰক</string>
|
||||
<string name="action_edit">সম্পাদনা কৰক</string>
|
||||
<string name="action_add">যোগ কৰক</string>
|
||||
<string name="action_update_category">শ্ৰেণী আপডেট কৰক</string>
|
||||
<string name="action_open_random_manga">এটা যিকোনো প্ৰৱিষ্টি খুলক</string>
|
||||
<string name="action_add_category">শ্ৰেণী যোগ কৰক</string>
|
||||
<string name="action_edit_categories">শ্ৰেণীবোৰ সম্পাদনা কৰক</string>
|
||||
<string name="action_rename_category">শ্ৰেণীৰ নাম সলনি কৰক</string>
|
||||
<string name="action_move_category">শ্ৰেণীবোৰ স্থাপন কৰক</string>
|
||||
<string name="delete_category_confirmation">আপুনি কি %s শ্ৰেণী মচিব বিচাৰে?</string>
|
||||
<string name="delete_category">শ্ৰেণী মচক</string>
|
||||
<string name="action_sort_category">শ্ৰেণী বাছনি কৰক</string>
|
||||
<string name="sort_category_confirmation">আপুনি কি শ্ৰেণীবোৰ বৰ্ণানুক্ৰমিকভাৱে বাছনি কৰিব বিচাৰে?</string>
|
||||
<string name="action_edit_cover">মুৰৰ পৃষ্ঠাটী সম্পাদনা কৰক</string>
|
||||
<string name="action_view_chapters">অধ্যায়বোৰ চাওক</string>
|
||||
<string name="action_pause">থামক</string>
|
||||
<string name="action_previous_chapter">পূৰ্বৰ অধ্যায়</string>
|
||||
<string name="action_next_chapter">পৰবৰ্তী অধ্যায়</string>
|
||||
<string name="action_retry">আনুষ্ঠানিক প্ৰয়াস কৰক</string>
|
||||
<string name="action_remove">আঁতৰাওক</string>
|
||||
<string name="action_copy_to_clipboard">ক্লিপবোর্ডত কপি কৰক</string>
|
||||
<string name="action_remove_everything">সকলো আঁতৰাওক</string>
|
||||
<string name="action_start">আৰম্ভ কৰক</string>
|
||||
<string name="action_resume">পুনৰ আৰম্ভ কৰক</string>
|
||||
<string name="action_copy_link">লিংক কপি কৰক</string>
|
||||
<string name="action_open_in_browser">ব্ৰাউজাৰত খোলক</string>
|
||||
<string name="action_show_manga">প্ৰৱিষ্টি দেখুৱাওক</string>
|
||||
<string name="action_open_in_web_view">WebViewত খোলক</string>
|
||||
<string name="action_migrate">স্থানান্তৰ কৰক</string>
|
||||
<string name="action_display_mode">প্ৰদৰ্শন মোড</string>
|
||||
<string name="action_display">প্ৰদৰ্শন</string>
|
||||
<string name="action_display_grid">সঙ্কলিত গ্ৰিড</string>
|
||||
<string name="action_display_comfortable_grid">সুবিধাজনক গ্ৰিড</string>
|
||||
<string name="action_display_list">তালিকা</string>
|
||||
<string name="action_display_cover_only_grid">ক\'ভাৰ-মাত্ৰ গ্ৰিড</string>
|
||||
<string name="action_display_download_badge">ডাউনলোড কৰা অধ্যায়</string>
|
||||
<string name="action_display_local_badge">স্থানীয় উৎস</string>
|
||||
<string name="action_display_language_badge">ভাষা</string>
|
||||
<string name="action_display_show_tabs">শ্ৰেণীৰ ট্যাব দেখুৱাওক</string>
|
||||
<string name="action_display_show_number_of_items">পদাৰ্থৰ সংখ্যা দেখুৱাওক</string>
|
||||
<string name="action_display_show_continue_reading_button">পঢ়া অব্যাহত থকাক বোতাম</string>
|
||||
<string name="action_disable">নিষ্ক্ৰিয় কৰক</string>
|
||||
<string name="action_pin">পিন কৰক</string>
|
||||
<string name="action_unpin">আনপিন কৰক</string>
|
||||
<string name="action_apply">প্ৰয়োগ কৰক</string>
|
||||
<string name="action_cancel">বাতিল কৰক</string>
|
||||
<string name="action_ok">ঠিক আছে</string>
|
||||
<string name="action_cancel_all">সকলো বাতিল কৰক</string>
|
||||
<string name="cancel_all_for_series">এই চিৰিজৰ বাবে সকলো বাতিল কৰক</string>
|
||||
<string name="action_sort">বাছনি কৰক</string>
|
||||
<string name="action_order_by_upload_date">আপলোডৰ তাৰিখ অনুসাৰে</string>
|
||||
<string name="action_order_by_chapter_number">অধ্যায়ৰ নম্বৰ অনুসাৰে</string>
|
||||
<string name="action_newest">সৰ্বনৱীন</string>
|
||||
<string name="action_oldest">সৰ্বপুৰণি</string>
|
||||
<string name="action_asc">উৰ্ধ্বমুখী</string>
|
||||
<string name="action_desc">অধোগামী</string>
|
||||
<string name="action_move_to_top">শীৰ্ষলৈ লৈ যাওক</string>
|
||||
<string name="action_move_to_top_all_for_series">চিৰিজটো শীৰ্ষলৈ লৈ যাওক</string>
|
||||
<string name="action_move_to_bottom">নিম্নলৈ লৈ যাওক</string>
|
||||
<string name="action_move_to_bottom_all_for_series">চিৰিজটো নিম্নলৈ লৈ যাওক</string>
|
||||
<string name="action_install">ইন্সটল কৰক</string>
|
||||
<string name="action_share">শ্বেয়াৰ কৰক</string>
|
||||
<string name="action_save">সংৰক্ষণ কৰক</string>
|
||||
<string name="action_reset">ৰিচছেট কৰক</string>
|
||||
<string name="action_revert_to_default">ডিফল্টলৈ উভতাওক</string>
|
||||
<string name="action_undo">পিছলৈ যাওক</string>
|
||||
<string name="action_close">বন্ধ কৰক</string>
|
||||
<string name="action_open_log">লগ খোলক</string>
|
||||
<string name="action_show_errors">বিস্তারিত চাবলৈ টিপক</string>
|
||||
<string name="action_restore">পুনৰুদ্ধাৰ কৰক</string>
|
||||
<string name="action_webview_back">পিছলৈ</string>
|
||||
<string name="action_start_downloading_now">অতৈৰাই ডাউনলোড আৰম্ভ কৰক</string>
|
||||
<string name="action_not_now">এতিয়া নহয়</string>
|
||||
<string name="action_add_anyway">যিকোনো ক্ষেত্ৰত যোগ কৰক</string>
|
||||
<string name="loading">লোডিং…</string>
|
||||
<string name="internal_error">আন্তৰিক সমস্যাঃ অধিক তথ্যৰ বাবে ক্ৰেশ লগচ চাওক</string>
|
||||
<string name="app_not_available">এপ উপলব্ধ নাই</string>
|
||||
<string name="pref_onboarding_guide">অ\'নব’ৰ্ডিং গাইড</string>
|
||||
<string name="onboarding_heading">স্বাগতম!</string>
|
||||
<string name="onboarding_description">প্ৰথমে কিছুমান বস্তু ঠিক কৰি লওঁ আহক। এইবোৰ আপুনি পাছত ছেটিংছত গ’ই সলনি কৰিব পাৰে।</string>
|
||||
<string name="onboarding_action_finish">আৰম্ভ কৰক</string>
|
||||
<string name="onboarding_action_skip">স্কিপ কৰক</string>
|
||||
<string name="onboarding_storage_info">%1$s-এ অধ্যায় ডাউনলোড, বেকআপ আৰু আন বহু বস্তু সংৰক্ষণ কৰিব পৰাকৈ এখন ফ’ল্ডাৰ বাচি লওঁক।
|
||||
\n
|
||||
\nএখন সজোৱা ফ’ল্ডাৰ বাচনি কৰা সুচিত।
|
||||
\n
|
||||
\nবাচনি কৰা ফ’ল্ডাৰ: %2$s</string>
|
||||
<string name="onboarding_storage_action_select">এখন ফ’ল্ডাৰ বাচনি কৰক</string>
|
||||
<string name="onboarding_storage_selection_required">এখন ফ’ল্ডাৰ বাচনি কৰিবই লাগিব</string>
|
||||
<string name="onboarding_storage_help_info">আগৰ সংস্কৰণৰ পৰা আপডেট কৰি আছেনে আৰু কি বাচি ল’ব নাজানে? অধিক তথ্যৰ বাবে সঞ্চয় গাইডটো চাওক।</string>
|
||||
<string name="onboarding_storage_help_action">সঞ্চয় গাইড</string>
|
||||
<string name="onboarding_permission_install_apps">এপ স্থাপন অনুমতি</string>
|
||||
<string name="onboarding_permission_install_apps_description">উৎস এক্সটেনচনসমূহ স্থাপন কৰিবলৈ।</string>
|
||||
<string name="onboarding_permission_notifications">নটিফিকেচনৰ অনুমতি</string>
|
||||
<string name="onboarding_permission_notifications_description">লাইব্ৰেৰীৰ আপডেট আৰু আন বহু বস্তুৰ বাবে সতৰ্কতা পাব।</string>
|
||||
<string name="onboarding_permission_ignore_battery_opts">পটভূমি বেটাৰী ব্যৱহাৰ</string>
|
||||
<string name="onboarding_permission_ignore_battery_opts_description">দীৰ্ঘম্যাদী লাইব্ৰেৰী আপডেট, ডাউনলোড আৰু বেকআপ পুনৰ স্থাপনৰ অন্তৰায় নোহোৱাৰ বাবে।</string>
|
||||
<string name="onboarding_permission_action_grant">অনুমতি দিয়ক</string>
|
||||
<string name="onboarding_guides_new_user">%s-ৰ নতুন ব্যৱহাৰকাৰী নেকি? আৰম্ভণি গাইড চাবলৈ আমাক সুপারিশ কৰা হৈছে।</string>
|
||||
<string name="onboarding_guides_returning_user">%s পুনৰ ইনষ্টল কৰি আছেনে?</string>
|
||||
<string name="pref_category_reader">পাঠক</string>
|
||||
<string name="pref_category_downloads">ডাউনলোড</string>
|
||||
<string name="pref_appearance_summary">থীম, তাৰিখ আৰু সময়ৰ ফৰ্মেট</string>
|
||||
<string name="pref_category_library">লাইব্ৰেৰী</string>
|
||||
<string name="pref_library_summary">শ্ৰেণীবিভাজন, গ্ল\'বেল আপডেট, অধ্যায়ৰ সোয়াইপ</string>
|
||||
<string name="pref_reader_summary">পঢ়া ম\'ড, প্ৰদৰ্শন, নেভিগেচন</string>
|
||||
<string name="pref_tracking_summary">একে-পথৰ প্ৰগতি ছিঙ্ক, উন্নত ছিঙ্ক</string>
|
||||
<string name="pref_downloads_summary">স্বয়ংক্ৰিয় ডাউনলোড, আগতীয়া ডাউনলোড</string>
|
||||
<string name="pref_browse_summary">উৎসসমূহ, এক্সটেনচন, গ্ল\'বেল অনুসন্ধান</string>
|
||||
<string name="pref_advanced_summary">ক্ৰেশ লগসমূহ ডাম্প কৰক, বেটাৰী অপ্টিমাইজেশ্বন</string>
|
||||
<string name="pref_backup_summary">ম্যানুৱেল আৰু স্বয়ংক্ৰিয় বেকআপ, সঞ্চয় স্থান</string>
|
||||
<string name="pref_security_summary">এপ লক, সুৰক্ষিত পৰ্দা</string>
|
||||
<string name="pref_category_theme">থীম</string>
|
||||
<string name="pref_app_theme">এপ থীম</string>
|
||||
<string name="theme_system">পদ্ধতি</string>
|
||||
<string name="theme_light">হালধীয়া</string>
|
||||
<string name="theme_dark">গাঢ়</string>
|
||||
<string name="theme_monet">ডাইনামিক</string>
|
||||
<string name="theme_greenapple">সেউজ আপেল</string>
|
||||
<string name="theme_lavender">লাভেণ্ডাৰ</string>
|
||||
<string name="theme_midnightdusk">মধ্যৰাতি দুঃখ</string>
|
||||
<string name="theme_nord">ন\'ৰ্ড</string>
|
||||
<string name="theme_strawberrydaiquiri">ষ্ট্ৰ’বেৰী ডাইকুৱাৰী</string>
|
||||
<string name="theme_tako">তাকো</string>
|
||||
<string name="theme_tealturquoise">টীল আৰু টাৰকুৱইজ</string>
|
||||
<string name="theme_yinyang">ইন আৰু ইয়াং</string>
|
||||
<string name="theme_yotsuba">ইয়তছুবা</string>
|
||||
<string name="theme_tidalwave">টাইডেল ৱেভ</string>
|
||||
<string name="pref_dark_theme_pure_black">বিশুদ্ধ ক\'লা গাঢ় ম’ড</string>
|
||||
<string name="pref_relative_format">আপেক্ষিক টাইমষ্টেম্প</string>
|
||||
<string name="pref_relative_format_summary">%1$sৰ সলনি %2$s</string>
|
||||
<string name="pref_date_format">তাৰিখৰ ফৰ্মেট</string>
|
||||
<string name="pref_manage_notifications">নটিফিকেচনসমূহ পৰিচালনা কৰক</string>
|
||||
<string name="pref_app_language">এপৰ ভাষা</string>
|
||||
<string name="pref_category_security">নিরাপত্তা আৰু গোপনীয়তা</string>
|
||||
<string name="lock_always">সদায়</string>
|
||||
<string name="lock_never">কেতিয়াও নহয়</string>
|
||||
<string name="hide_notification_content">নটিফিকেশনৰ সামগ্ৰী লুকুৱাওক</string>
|
||||
<string name="secure_screen">সুৰক্ষিত পৰ্দা</string>
|
||||
<string name="secure_screen_summary">সুৰক্ষিত পৰ্দাই এপৰ সামগ্ৰীসমূহক এপ সলনি কৰাৰ সময়ত লুকুৱায় আৰু স্ক্ৰীনশ্বট ব্লক কৰে</string>
|
||||
<string name="pref_category_nsfw_content">NSFW (১৮+) উৎসসমূহ</string>
|
||||
<string name="pref_show_nsfw_source">উৎস আৰু এক্সটেনচনৰ তালিকাত দেখুৱাওক</string>
|
||||
<string name="parental_controls_info">এইটো আনুষ্ঠানিকভাৱে অনুমোদিত নহয় বা ভুলকৈ চিহ্নিত কৰা এক্সটেনচনে NSFW (১৮+) বিষয়বস্তু দেখুৱাব পাৰে।</string>
|
||||
<string name="relative_time_today">আজি</string>
|
||||
<string name="pref_category_display">প্ৰদৰ্শন</string>
|
||||
<string name="pref_library_columns">গ্ৰিড মাপ</string>
|
||||
<string name="pref_library_update_interval">স্বয়ংক্ৰিয় আপডেট</string>
|
||||
<string name="update_never">বন্ধ</string>
|
||||
<string name="update_12hour">প্ৰতি ১২ ঘণ্টা</string>
|
||||
<string name="update_6hour">প্ৰতি ৬ ঘণ্টা</string>
|
||||
<string name="update_24hour">প্ৰতি দিন</string>
|
||||
<string name="update_48hour">প্ৰতি ২ দিন</string>
|
||||
<string name="update_72hour">প্ৰতি ৩ দিন</string>
|
||||
<string name="update_weekly">প্ৰতি সপ্তাহ</string>
|
||||
<string name="restrictions">সীমাবদ্ধতা: %s</string>
|
||||
<string name="pref_update_only_started">অ আৰম্ভিত প্ৰৱিষ্টিসমূহ আঁতৰাওক</string>
|
||||
<string name="pref_update_only_in_release_period">পৰৱৰ্তী মুক্তিৰ সময় অনুমান কৰক</string>
|
||||
<string name="pref_library_update_show_tab_badge">আপডেট আইকনৰ ওপৰত অপঠিত গণনা দেখুৱাওক</string>
|
||||
<string name="pref_library_update_refresh_metadata">স্বয়ংক্ৰিয়ভাৱে মেটাডাটা ৰিফ্ৰেশ কৰক</string>
|
||||
<string name="pref_library_update_refresh_metadata_summary">লাইব্ৰেৰী আপডেট কৰাৰ সময়ত নতুন কাভাৰ আৰু বিৱৰণৰ সন্ধান কৰক</string>
|
||||
<string name="default_category_summary">সদায় সোধা হব</string>
|
||||
<string name="categorized_display_settings">শ্ৰেণী অনুসৰি ছাঁটকৰণৰ বাবে বিৱৰণী ছেটিংছ</string>
|
||||
<string name="pref_library_update_categories_details">অন্তৰ্ভুক্ত শ্ৰেণীত থাকিলেও বাদ দিয়া শ্ৰেণীসমূহৰ প্ৰৱিষ্টিসমূহ আপডেট নহ’ব।</string>
|
||||
<string name="none">কোনোও নহয়</string>
|
||||
<string name="include">অন্তৰ্ভুক্ত: %s</string>
|
||||
<string name="exclude">বাদ দিয়া: %s</string>
|
||||
<string name="pref_chapter_swipe">অধ্যায় চুইপ</string>
|
||||
<string name="pref_chapter_swipe_end">সোঁফালে চুইপ কৰা কাৰ্য</string>
|
||||
<string name="pref_chapter_swipe_start">বাওঁফালে চুইপ কৰা কাৰ্য</string>
|
||||
<string name="multi_lang">বহুভাষী</string>
|
||||
<string name="ext_updates_pending">আপডেট মুলতুবি আছে</string>
|
||||
<string name="ext_update">আপডেট কৰক</string>
|
||||
<string name="ext_install">ইন্সটল কৰক</string>
|
||||
<string name="ext_update_all">সকলো আপডেট কৰক</string>
|
||||
<string name="ext_pending">মুলতুবি</string>
|
||||
<string name="ext_downloading">ডাউনলোড কৰি আছে</string>
|
||||
<string name="ext_installing">ইন্সটল কৰি আছে</string>
|
||||
<string name="ext_installed">ইন্সটল কৰা হৈছে</string>
|
||||
<string name="ext_trust">বিশ্বাস কৰক</string>
|
||||
<string name="ext_untrusted">অবিশ্বাস্য</string>
|
||||
<string name="ext_uninstall">আনইন্সটল কৰক</string>
|
||||
<string name="ext_app_info">এপৰ তথ্য</string>
|
||||
<string name="untrusted_extension">অবিশ্বাস্য এক্সটেনশন</string>
|
||||
<string name="obsolete_extension_message">এই এক্সটেনচন এতিয়া উপলব্ধ নাই। ই হয়তো সঠিকভাৱে কাম নকৰে আৰু এপৰ লগত সমস্যা সৃষ্টি কৰিব পাৰে। ই আনইন্সটল কৰাৰ পৰামৰ্শ দিয়া হৈছে।</string>
|
||||
<string name="extension_api_error">উপলব্ধ এক্সটেনচনসমূহ পোৱা বিফল</string>
|
||||
<string name="untrusted_extension_message">দুৰভিসন্ধি এক্সটেনচনে সংৰক্ষিত যিকোনো লগইন প্ৰমাণপত্ৰ পঢ়িব পাৰে বা যিকোনো কোড চলাব পাৰে।
|
||||
\n
|
||||
\nএই এক্সটেনশন বিশ্বাস কৰিলে, আপুনি এই বিপদসমূহ স্বীকাৰ কৰিছে।</string>
|
||||
<string name="ext_info_version">সংস্কৰণ</string>
|
||||
<string name="ext_nsfw_warning">এই এক্সটেনচনৰ উৎসসমূহত NSFW (১৮+) বিষয়বস্তু থাকিব পাৰে</string>
|
||||
<string name="ext_info_language">ভাষা</string>
|
||||
<string name="ext_nsfw_short">১৮+</string>
|
||||
<string name="ext_permission_install_apps_warning">এক্সটেনচন ইন্সটল কৰিবলৈ অনুমতিৰ প্ৰয়োজন। ইয়াত টিপক।</string>
|
||||
<string name="ext_install_service_notif">এক্সটেনচন ইন্সটল কৰি আছে…</string>
|
||||
<string name="ext_installer_shizuku_stopped">Shizuku চলি নাই</string>
|
||||
<string name="ext_revoke_trust">অজ্ঞাত এক্সটেনচন বিশ্বাসৰ অধিকার বাতিল কৰক</string>
|
||||
<string name="label_extension_repos">এক্সটেনচন ৰেপোৰসমূহ</string>
|
||||
<string name="information_empty_repos">আপোনাৰ কোনো ৰেপো নাই।</string>
|
||||
<string name="ext_installer_shizuku_unavailable_dialog">Shizuku ইন্সটল কৰক আৰু আৰম্ভ কৰক Shizuku এক্সটেনচন ইন্সটলাৰ হিচাপে ব্যৱহাৰ কৰিবলৈ।</string>
|
||||
<string name="action_add_repo">ৰেপো যোগ কৰক</string>
|
||||
<string name="label_add_repo_input">ৰেপো URL</string>
|
||||
<string name="action_add_repo_message">Mihon-ত অতিৰিক্ত ৰেপো যোগ কৰক। এইটো এনেকুৱা এটা URL হ\'ব লাগিব যাৰ শেষত index.min.json থাকে।</string>
|
||||
<string name="action_delete_repo">ৰেপো মচক</string>
|
||||
<string name="invalid_repo_name">অবৈধ ৰেপো URL</string>
|
||||
<string name="delete_repo_confirmation">আপুনি কি ৰেপো %s মচিব বিচাৰে?</string>
|
||||
<string name="add_repo_confirmation">আপুনি কি ৰেপো %s যোগ কৰিব বিচাৰে?</string>
|
||||
<string name="action_replace_repo_title">স্বাক্ষৰ কি ফিংগাৰপ্ৰিন্ট ইতিমধ্যে আছে</string>
|
||||
<string name="action_replace_repo_message">ৰেপ’জিটৰী %1$s ৰ %2$s স্বাক্ষৰ কী ফিংগাৰপ্ৰিন্টৰ সৈতে একে।
|
||||
\nযদি ই আশা কৰা হয়, %2$s প্রতিস্থাপন কৰা হ\'ব, নহ\'লে আপোনাৰ ৰেপো ৰক্ষণাবেক্ষকক যোগাযোগ কৰক।</string>
|
||||
<string name="pref_fullscreen">সম্পূৰ্ণ পর্দা</string>
|
||||
<string name="pref_show_navigation_mode">টেপৰ অঞ্চলসমূহ দেখুৱাওক</string>
|
||||
<string name="pref_dual_page_split">ব্যাপক পৃষ্ঠাবোৰ ভাগ কৰা</string>
|
||||
<string name="pref_dual_page_invert">পৃষ্ঠাৰ স্থান বিপৰীত কৰক</string>
|
||||
<string name="pref_dual_page_invert_summary">যদি ব্যাপক পৃষ্ঠাবোৰৰ স্থান পঢ়া দিশৰ সৈতে মিল নাখায়</string>
|
||||
<string name="pref_page_rotate">ব্যাপক পৃষ্ঠাবোৰ ফিট কৰিবলৈ ঘুৰাওক</string>
|
||||
<string name="pref_page_rotate_invert">ঘূৰোৱা ব্যাপক পৃষ্ঠাৰ অভিমুখ উলটাই দিয়া</string>
|
||||
<string name="pref_double_tap_zoom">জুম কৰিবলৈ দ্বৈত টেপ কৰক</string>
|
||||
<string name="pref_cutout_short">কণ্টেন্ট কেটাৰ অঞ্চলত দেখুৱাওক</string>
|
||||
<string name="pref_page_transitions">পৃষ্ঠা স্থানান্তৰৰ অ্যানিমেচন</string>
|
||||
<string name="pref_flash_page">পৃষ্ঠা পৰিবৰ্তনৰ সময়ত ফ্লেচ</string>
|
||||
<string name="pref_flash_page_summ">ই-ইঙ্ক স্ক্ৰিনত ঘোস্টিং কমায়</string>
|
||||
<string name="pref_flash_duration">ফ্লেচৰ সময়সীমা</string>
|
||||
<string name="pref_flash_duration_summary">%1$s মি.চি.</string>
|
||||
<string name="pref_flash_page_interval">প্ৰতি পৃষ্ঠা ফ্লেচ</string>
|
||||
<string name="pref_flash_with">ফ্লেচ কৰক</string>
|
||||
<string name="pref_flash_style_black">ক\'লা</string>
|
||||
<string name="pref_flash_style_white">বগা</string>
|
||||
<string name="pref_double_tap_anim_speed">দ্বৈত টেপৰ অ্যানিমেচনৰ গতি</string>
|
||||
<string name="pref_flash_style_white_black">বগা আৰু ক\'লা</string>
|
||||
<string name="pref_show_page_number">পৃষ্ঠা নম্বৰ দেখুৱাওক</string>
|
||||
<string name="pref_show_reading_mode">পঢ়া মোড দেখুৱাওক</string>
|
||||
<string name="pref_show_reading_mode_summary">পঢ়ুৱৈ খোলাৰ সময়ত ক্ষণেকৰ বাবে বৰ্তমান মোড দেখুৱাওক</string>
|
||||
<string name="pref_display_profile">নিজস্ব প্ৰদৰ্শন প্ৰফাইল</string>
|
||||
<string name="pref_crop_borders">কোনবোৰ কটক</string>
|
||||
<string name="pref_custom_brightness">নিজস্ব উজ্জ্বলতা</string>
|
||||
<string name="pref_color_filter_mode">ৰং চাবনি মিশ্ৰণ মোড</string>
|
||||
<string name="filter_mode_multiply">গুণন</string>
|
||||
<string name="filter_mode_screen">স্ক্ৰিন</string>
|
||||
<string name="pref_custom_color_filter">নিজস্ব ৰং চাবনি</string>
|
||||
<string name="filter_mode_lighten">ডজ/পোহৰ কৰা</string>
|
||||
<string name="filter_mode_darken">জ্বলাই/অন্ধকাৰ কৰা</string>
|
||||
<string name="pref_keep_screen_on">পৰ্দা চালু ৰাখক</string>
|
||||
<string name="pref_skip_read_chapters">পঢ়া অধ্যায়সমূহ বাদ দিয়ক</string>
|
||||
<string name="pref_skip_filtered_chapters">ফিল্টাৰ কৰা অধ্যায়সমূহ বাদ দিয়ক</string>
|
||||
<string name="pref_skip_dupe_chapters">ডুপ্লিকেট অধ্যায়সমূহ বাদ দিয়ক</string>
|
||||
<string name="pref_reader_navigation">সংক্ৰান্তি</string>
|
||||
<string name="pref_read_with_tapping_inverted">টেপৰ অঞ্চলসমূহ উলটাই দিয়া</string>
|
||||
<string name="tapping_inverted_none">একো নহয়</string>
|
||||
<string name="tapping_inverted_horizontal">আনুভূমিক</string>
|
||||
<string name="pref_read_with_volume_keys">ভলিউম কী</string>
|
||||
<string name="pref_read_with_volume_keys_inverted">ভলিউম কী উলটাই দিয়া</string>
|
||||
<string name="tapping_inverted_both">দুয়োটা</string>
|
||||
<string name="pref_reader_actions">কৰ্মসমূহ</string>
|
||||
<string name="pref_create_folder_per_manga_summary">প্ৰবিষ্ট শিৰোনামৰ অনুসৰি ফোল্ডাৰ সৃষ্টি কৰে</string>
|
||||
<string name="pref_read_with_long_tap">দীৰ্ঘ টেপত কৰ্মসমূহ দেখুৱাওক</string>
|
||||
<string name="pref_create_folder_per_manga">প্ৰতি মাঙ্গাৰ বাবে পৃথক ফোল্ডাৰ সংৰক্ষণ কৰক</string>
|
||||
<string name="pref_reader_theme">পটভূমি ৰং</string>
|
||||
<string name="gray_background">ধূসৰ</string>
|
||||
<string name="black_background">ক\'লা</string>
|
||||
<string name="l_nav">এল আকৃতিৰ</string>
|
||||
<string name="automatic_background">স্বয়ংক্ৰিয়</string>
|
||||
<string name="pref_viewer_type">ডিফল্ট পঢ়া মোড</string>
|
||||
<string name="kindlish_nav">কিন্ডল-যুক্ত</string>
|
||||
<string name="right_and_left_nav">সোঁমুখ আৰু বাঁওমুখ</string>
|
||||
<string name="disabled_nav">অক্ষম</string>
|
||||
<string name="nav_zone_prev">পূৰ্বৱৰ্তী</string>
|
||||
<string name="nav_zone_next">পৰৱৰ্তী</string>
|
||||
<string name="nav_zone_right">সোঁ</string>
|
||||
<string name="left_to_right_viewer">পৃষ্ঠা (বাঁওৰ পৰা সোঁ)</string>
|
||||
<string name="right_to_left_viewer">পৃষ্ঠা (সোঁৰ পৰা বাঁও)</string>
|
||||
<string name="vertical_viewer">পৃষ্ঠা (উল্লম্ব)</string>
|
||||
<string name="webtoon_viewer">দীঘল ফিতা</string>
|
||||
<string name="vertical_plus_viewer">ফাক থকা দীঘল ফিতা</string>
|
||||
<string name="pager_viewer">পৃষ্ঠা কৰা</string>
|
||||
<string name="pref_viewer_nav">টেপৰ অঞ্চলসমূহ</string>
|
||||
<string name="pref_image_scale_type">স্কেল প্ৰকাৰ</string>
|
||||
<string name="scale_type_fit_screen">পৰ্দাত ফিট কৰক</string>
|
||||
<string name="scale_type_stretch">প্ৰসাৰিত কৰক</string>
|
||||
<string name="scale_type_fit_width">পলমাই ফিট কৰক</string>
|
||||
<string name="scale_type_fit_height">উচ্চতাই ফিট কৰক</string>
|
||||
<string name="scale_type_original_size">মূল আকাৰ</string>
|
||||
<string name="scale_type_smart_fit">চতুৰ ফিট</string>
|
||||
<string name="pref_navigate_pan">ব্যাপক চিত্ৰসমূহ পেন কৰক</string>
|
||||
<string name="pref_landscape_zoom">স্বয়ংক্ৰিয়ভাৱে ব্যাপক চিত্ৰত জুম কৰক</string>
|
||||
<string name="pref_zoom_start">জুম আৰম্ভ স্থান</string>
|
||||
<string name="zoom_start_automatic">স্বয়ংক্ৰিয়</string>
|
||||
<string name="zoom_start_left">বাঁও</string>
|
||||
<string name="zoom_start_right">সোঁ</string>
|
||||
<string name="zoom_start_center">মধ্যম</string>
|
||||
<string name="double_tap_anim_speed_0">অ্যানিমেচন নাই</string>
|
||||
<string name="double_tap_anim_speed_normal">সাধাৰণ</string>
|
||||
<string name="double_tap_anim_speed_fast">দ্ৰুত</string>
|
||||
<string name="pref_rotation_type">ডিফল্ট ঘূৰণ</string>
|
||||
<string name="rotation_type">ঘূৰণ</string>
|
||||
<string name="rotation_free">মুক্ত</string>
|
||||
<string name="rotation_portrait">প’ৰট্ৰেইট</string>
|
||||
<string name="rotation_landscape">ল্যান্ডস্কেপ</string>
|
||||
<string name="rotation_force_portrait">প’ৰট্ৰেইট তালাচি</string>
|
||||
<string name="rotation_force_landscape">ল্যান্ডস্কেপ তালাচি</string>
|
||||
<string name="rotation_reverse_portrait">প’ৰট্ৰেইট বিপৰীত</string>
|
||||
<string name="color_filter_r_value">ৰ</string>
|
||||
<string name="color_filter_g_value">গ</string>
|
||||
<string name="color_filter_b_value">ব</string>
|
||||
<string name="color_filter_a_value">আ</string>
|
||||
<string name="pref_always_show_chapter_transition">সৰ্বদা অধ্যায় পৰিবৰ্তন দেখুৱাও</string>
|
||||
<string name="pref_category_reading_mode">পঢ়াৰ মোড</string>
|
||||
<string name="pref_highest">সৰ্বোচ্চ</string>
|
||||
<string name="pref_high">উচ্চ</string>
|
||||
<string name="pref_low">নিম্ন</string>
|
||||
<string name="pref_lowest">সৰ্বনিম্ন</string>
|
||||
<string name="pref_category_delete_chapters">অধ্যায় মচা</string>
|
||||
<string name="pref_remove_after_marked_as_read">হস্তচালিতভাবে পঢ়া চিহ্নিত কৰাৰ পিছত</string>
|
||||
<string name="pref_remove_after_read">পঢ়াৰ পিছত স্বয়ংক্ৰিয়ভাৱে মচা</string>
|
||||
<string name="pref_remove_bookmarked_chapters">বুকমাৰ্ক কৰা অধ্যায় মচাৰ অনুমতি দিয়ক</string>
|
||||
<string name="pref_remove_exclude_categories">বহিঃস্তৰিত শ্ৰেণীবিভাগসমূহ</string>
|
||||
<string name="no_location_set">কোনো সংৰক্ষণ স্থান নিৰ্ধাৰিত নহয়</string>
|
||||
<string name="invalid_location">অবৈধ স্থান: %s</string>
|
||||
<string name="disabled">বন্ধ</string>
|
||||
<string name="last_read_chapter">শেহতীয়া পঢ়া অধ্যায়</string>
|
||||
<string name="second_to_last">দ্বিতীয় শেহতীয়া পঢ়া অধ্যায়</string>
|
||||
<string name="third_to_last">তৃতীয় শেহতীয়া পঢ়া অধ্যায়</string>
|
||||
<string name="fifth_to_last">পঞ্চম শেহতীয়া পঢ়া অধ্যায়</string>
|
||||
<string name="pref_category_auto_download">স্বয়ংক্ৰিয় ডাউনলোড</string>
|
||||
<string name="pref_download_new">নতুন অধ্যায় ডাউনলোড কৰক</string>
|
||||
<string name="pref_download_new_unread_chapters_only">পঢ়া অধ্যায়ৰ অনুলিপি ডাউনলোড এৰাব</string>
|
||||
<string name="auto_download_while_reading">পঢ়াৰ সময়ত স্বয়ংক্ৰিয় ডাউনলোড</string>
|
||||
<string name="download_ahead_info">মাত্ৰ কাৰ্যকৰী যদি বৰ্তমান অধ্যায় আৰু পৰৱৰ্তী অধ্যায় ইতিমধ্যে ডাউনলোড কৰা হৈছে।</string>
|
||||
<string name="save_chapter_as_cbz">CBZ আর্কাইভ হিচাপে সংৰক্ষণ কৰক</string>
|
||||
<string name="split_tall_images">দীঘল চিত্ৰসমূহ ভাগ কৰক</string>
|
||||
<string name="split_tall_images_summary">পঢ়াৰ কাৰ্যক্ষমতা উন্নত কৰে</string>
|
||||
<string name="services">ট্ৰেকাৰসমূহ</string>
|
||||
<string name="tracking_guide">ট্ৰেকিং গাইড</string>
|
||||
<string name="pref_auto_update_manga_sync">পঢ়াৰ পাছত অগ্ৰগতি সৰ্পণ কৰক</string>
|
||||
<string name="tracking_info">বাহ্যিক ট্ৰেকাৰ সেৱাত অধ্যায়ৰ অগ্ৰগতি সৰ্পণ কৰিবলৈ একপথৰ সমন্বয়। তেওঁলোকৰ ট্ৰেকিং বুটামৰ পৰা ব্যক্তিগত প্ৰৱিষ্টৰ বাবে ট্ৰেকিং সেট আপ কৰক।</string>
|
||||
<string name="enhanced_services">উন্নত ট্ৰেকাৰসমূহ</string>
|
||||
<string name="enhanced_services_not_installed">উপলব্ধ কিন্তু উৎস ইন্সটল কৰা নাই: %s</string>
|
||||
<string name="enhanced_tracking_info">বিশেষ উৎসৰ বাবে উন্নত বৈশিষ্ট্য প্ৰদান কৰে। আপোনাৰ গ্ৰন্থাগাৰত যোগ কৰা হ\'ল পৰিসৰটো স্বয়ংক্ৰিয়ভাৱে ট্ৰেক কৰা হয়।</string>
|
||||
<string name="action_track">ট্ৰেক কৰক</string>
|
||||
<string name="track_activity_name">ট্ৰেকাৰ লগইন</string>
|
||||
<string name="pref_hide_in_library_items">গ্ৰন্থাগাৰত ইতিমধ্যে থকা প্ৰৱিষ্টসমূহ লুকুৱাও</string>
|
||||
<string name="pref_storage_location_info">স্বয়ংক্ৰিয় বেকআপ, অধ্যায় ডাউনলোড, আৰু স্থানীয় উৎসৰ বাবে ব্যৱহৃত।</string>
|
||||
<string name="pref_storage_location">সংৰক্ষণ স্থান</string>
|
||||
<string name="pref_create_backup">বেকআপ সৃষ্টি কৰক</string>
|
||||
<string name="pref_restore_backup">বেকআপ পুনৰুদ্ধাৰ কৰক</string>
|
||||
<string name="pref_backup_interval">স্বয়ংক্ৰিয় বেকআপৰ সঁত্ৰণ</string>
|
||||
<string name="backup_created">বেকআপ সৃষ্টি কৰা হৈছে</string>
|
||||
<string name="pref_create_backup_summ">বৰ্তমান গ্ৰন্থাগাৰ পুনৰুদ্ধাৰ কৰিবলৈ ব্যৱহৃত হ\'ব</string>
|
||||
<string name="invalid_backup_file">অবৈধ বেকআপ ফাইল:</string>
|
||||
<string name="invalid_backup_file_error">সম্পূৰ্ণ ত্ৰুটি:</string>
|
||||
<string name="invalid_backup_file_json">JSON বেকআপ সমৰ্থিত নহয়</string>
|
||||
<string name="invalid_backup_file_unknown">বেকআপ ফাইলৰ ত্ৰুটি</string>
|
||||
<string name="backup_restore_missing_sources">অপেক্ষিত উৎসসমূহ:</string>
|
||||
<string name="backup_restore_missing_trackers">ট্ৰেকাৰসমূহ লগইন হোৱা নাই:</string>
|
||||
<string name="backup_restore_content_full">আপোনাৰ গ্ৰন্থাগাৰ ব্যৱহাৰ কৰিবলৈ যিকোনো অনুপস্থিত এক্সটেনচনসমূহ ইনষ্টল কৰিবলৈ আৰু তাৰপিছত ট্ৰেকিং সেৱাসমূহত লগইন কৰিবলৈ লাগিব।</string>
|
||||
<string name="backup_in_progress">বেকআপ ইতিমধ্যে চলিত আছে</string>
|
||||
<string name="backup_choice">আপুনি কি বেকআপ কৰিব বিচাৰে?</string>
|
||||
<string name="app_settings">এপ্পৰ ছেটিংছ</string>
|
||||
<string name="source_settings">উৎসৰ ছেটিংছ</string>
|
||||
<string name="extensionRepo_settings">এক্সটেনচন ৰেপ\'জ</string>
|
||||
<string name="private_settings">সংবেদনশীল ছেটিংছ অন্তৰ্ভুক্ত কৰক (যেনে, ট্ৰেকাৰ লগইন টোকেন)</string>
|
||||
<string name="creating_backup">বেকআপ সৃষ্টি কৰা হৈছে</string>
|
||||
<string name="creating_backup_error">বেকআপ ব্যৰ্থ</string>
|
||||
<string name="empty_backup_error">বেকআপ কৰিবলৈ কোনো গ্ৰন্থাগাৰ প্ৰৱিষ্ট নাই</string>
|
||||
<string name="create_backup_file_error">বেকআপ ফাইল সৃষ্টি কৰিব নোৱাৰিলে</string>
|
||||
<string name="restore_miui_warning">MIUI অপটিমাইজেশ্বন বন্ধ থাকিলে বেকআপ/পুনৰুদ্ধাৰ সঠিকভাৱে কাৰ্য কৰিব নোৱাৰে।</string>
|
||||
<string name="restore_in_progress">পুনৰুদ্ধাৰ ইতিমধ্যে চলিত আছে</string>
|
||||
<string name="restoring_backup">বেকআপ পুনৰুদ্ধাৰ কৰা হৈছে</string>
|
||||
<string name="restoring_backup_error">বেকআপ পুনৰুদ্ধাৰ ব্যৰ্থ</string>
|
||||
<string name="restoring_backup_canceled">পুনৰুদ্ধাৰ বাতিল</string>
|
||||
<string name="last_auto_backup_info">শেষ স্বয়ংক্ৰিয় বেকআপ: %s</string>
|
||||
<string name="backup_info">আপোনাৰ বেকআপৰ কপি অন্য ঠাইত ৰাখিব লাগে। বেকআপসমূহত সংবেদনশীল তথ্য অন্তৰ্ভুক্ত থাকিব পাৰে, যাৰ ভিতৰত কোনো সংৰক্ষিত পাসৱৰ্ড; ভাগ দিবৰ ক্ষেত্ৰত সাৱধান হ\'ব।</string>
|
||||
<string name="label_data">ডাটা</string>
|
||||
<string name="available_disk_space_info">উপলব্ধ: %1$s / মুঠ: %2$s</string>
|
||||
<string name="pref_clear_chapter_cache">অধ্যায় কেছ ক্লিয়াৰ কৰক</string>
|
||||
<string name="pref_storage_usage">সংৰক্ষণ ব্যৱহাৰ</string>
|
||||
<string name="used_cache">ব্যৱহৃত: %1$s</string>
|
||||
<string name="cache_deleted">কেছ ক্লিয়াৰ কৰা হৈছে, %1$d ফাইল মচা হৈছে</string>
|
||||
<string name="cache_delete_error">ক্লিয়াৰ কৰাৰ সময়ত ত্ৰুটি</string>
|
||||
<string name="pref_auto_clear_chapter_cache">এপ্লিকেচন আৰম্ভণিৰ সময়ত অধ্যায় কেছ ক্লিয়াৰ কৰক</string>
|
||||
<string name="syncing_library">গ্ৰন্থাগাৰ সমন্বয় কৰা হৈছে</string>
|
||||
<string name="library_sync_complete">গ্ৰন্থাগাৰ সমন্বয় সম্পূৰ্ণ</string>
|
||||
<string name="label_network">নেটৱৰ্কিং</string>
|
||||
<string name="pref_clear_cookies">কুকি মচা</string>
|
||||
<string name="pref_dns_over_https">DNS HTTPSৰ ওপৰত (DoH)</string>
|
||||
<string name="pref_user_agent_string">ডিফল্ট ইউজাৰ এজেন্ট ষ্ট্ৰিং</string>
|
||||
<string name="error_user_agent_string_blank">ইউজাৰ এজেন্ট ষ্ট্ৰিং খালী নহ\'ব পাৰে</string>
|
||||
<string name="error_user_agent_string_invalid">অবৈধ ইউজাৰ এজেন্ট ষ্ট্ৰিং</string>
|
||||
<string name="pref_reset_user_agent_string">ডিফল্ট ইউজাৰ এজেন্ট ষ্ট্ৰিং পুনৰ চমা</string>
|
||||
<string name="requires_app_restart">কাৰ্য্যকৰী হবলৈ এপ পুনৰ আৰম্ভণি প্ৰয়োজন</string>
|
||||
<string name="cookies_cleared">কুকি মচা হৈছে</string>
|
||||
<string name="pref_invalidate_download_cache">ডাউনলোডসমূহ পুনৰ সূচীভুক্ত কৰক</string>
|
||||
<string name="download_cache_invalidated">ডাউনলোড কেচ অবৈধ কৰা হৈছে</string>
|
||||
<string name="pref_invalidate_download_cache_summary">ডাউনলোড কৰা অধ্যায়সমূহ পুনৰ পৰীক্ষা কৰিবলৈ এপটো বাধ্য কৰা</string>
|
||||
<string name="pref_clear_database">ডাটাবেচ মচা</string>
|
||||
<string name="pref_clear_database_summary">আপোনাৰ লাইব্ৰেৰিত সংৰক্ষণ কৰা হোৱা নথিৰ ইতিহাস মচা</string>
|
||||
<string name="clear_database_source_item_count">ডাটাবেচত %1$d লাইব্ৰেৰিত নথিৰ সংখ্যা</string>
|
||||
<string name="clear_database_confirmation">আপোনি নিশ্চিত? লাইব্ৰেৰিত নথিৰ অধ্যায় আৰু অগ্ৰগতি হেৰুৱাব</string>
|
||||
<string name="clear_database_completed">নথি মচা হৈছে</string>
|
||||
<string name="database_clean">মচাৰ বাবে কিবা নাই</string>
|
||||
<string name="pref_clear_webview_data">WebView ডাটা মচা</string>
|
||||
<string name="webview_data_deleted">WebView ডাটা মচা হৈছে</string>
|
||||
<string name="pref_refresh_library_covers">লাইব্ৰেৰীৰ কভাৰসমূহ পুনৰ পূৰ্ণ কৰা</string>
|
||||
<string name="pref_reset_viewer_flags">প্ৰতি-সিৰিজ পাঠক স্থিতি পুনৰ চমা</string>
|
||||
<string name="pref_reset_viewer_flags_summary">সকল সিৰিজৰ পঢ়াৰ মড আৰু দিশ পুনৰ চমা</string>
|
||||
<string name="pref_reset_viewer_flags_success">সকলো পাঠক স্থিতি পুনৰ চমা</string>
|
||||
<string name="pref_reset_viewer_flags_error">পাঠক স্থিতি পুনৰ চমা হোৱা নাই</string>
|
||||
<string name="pref_dump_crash_logs">ক্রাশ লগসমূহ ভাগ কৰক</string>
|
||||
<string name="pref_dump_crash_logs_summary">ডেভেলপাৰসকলৰ সৈতে ভাগ কৰিবলৈ ত্ৰুটি লগসমূহ ফাইলত সংৰক্ষণ কৰক</string>
|
||||
<string name="label_background_activity">পটভূমি কাৰ্যকলাপ</string>
|
||||
<string name="pref_disable_battery_optimization">বেটাৰী অপ্টিমাইজেশন বন্ধ কৰক</string>
|
||||
<string name="pref_disable_battery_optimization_summary">পটভূমি লাইব্ৰেৰী আপডেট আৰু বেকআপত সহায় কৰে</string>
|
||||
<string name="battery_optimization_disabled">বেটাৰী অপ্টিমাইজেশন ইতিমধ্যে বন্ধ হৈছে</string>
|
||||
<string name="battery_optimization_setting_activity_not_found">ডিভাইচৰ ছেটিংচ খোলাত অক্ষম</string>
|
||||
<string name="about_dont_kill_my_app">কিছুমান নিৰ্মাতাৰ অতিরিক্ত এপ নিষেধাজ্ঞা থাকে যি পটভূমি সেৱাসমূহ বন্ধ কৰে। ইয়াত অধিক তথ্য উপলব্ধ হৈছে কিদৰে সুৰ কৰক।</string>
|
||||
<string name="pref_tablet_ui_mode">টেবলেট UI</string>
|
||||
<string name="pref_verbose_logging">বিৱৰণযুক্ত লগিং</string>
|
||||
<string name="pref_verbose_logging_summary">ব্যৱস্থাৰ লগত বিৱৰণযুক্ত লগ প্ৰিন্ট কৰে (এপৰ কাৰ্যক্ষমতা হ্ৰাস কৰে)</string>
|
||||
<string name="pref_debug_info">ডিবাগ তথ্য</string>
|
||||
<string name="whats_new">নতুন কি</string>
|
||||
<string name="website">ৱেবছাইট</string>
|
||||
<string name="version">সংস্কৰণ</string>
|
||||
<string name="help_translate">অনুবাদ কৰিবলৈ সহায় কৰক</string>
|
||||
<string name="licenses">খুলা উৎস লাইচেন্স</string>
|
||||
<string name="privacy_policy">গোপনীয়তা নীতি</string>
|
||||
<string name="check_for_updates">আপডেট চাওক</string>
|
||||
<string name="updated_version">v%1$s ত আপডেট কৰা হৈছে</string>
|
||||
<string name="pref_enable_acra">ক্রাশ ৰিপ\'ৰ্ট পঠিয়াব</string>
|
||||
<string name="pref_acra_summary">যিকোনো বাগ মেলাবলৈ সহায় কৰে। কোনো সংবেদনশীল তথ্য পঠিয়াব নোৱাৰি</string>
|
||||
<string name="fdroid_warning">F-Droid নিৰ্মাণসমূহৰ আনুষ্ঠানিক সমৰ্থন নাই।
|
||||
\nঅধিক জানিবলৈ টেপ কৰক।</string>
|
||||
<string name="label_downloaded_only">মাত্ৰ ডাউনলোড কৰা</string>
|
||||
<string name="notification_incognito_text">ইনকগনিটো মড নিষ্ক্ৰিয় কৰক</string>
|
||||
<string name="pref_incognito_mode">ইনকগনিটো মড</string>
|
||||
<string name="pref_incognito_mode_summary">পঢ়াৰ ইতিহাস থামায়</string>
|
||||
<string name="downloaded_only_summary">আপোনাৰ লাইব্ৰেৰীৰ সকলো নথি ফিল্টাৰ কৰে</string>
|
||||
<string name="login_title">%1$s ত লগ ইন কৰক</string>
|
||||
<string name="username">ইউজাৰনেম</string>
|
||||
<string name="email">ইমেইল ঠিকনা</string>
|
||||
<string name="password">পাছৱাৰ্ড</string>
|
||||
<string name="login">লগইন</string>
|
||||
<string name="login_success">লগ ইন হৈছে</string>
|
||||
<string name="logout_title">%1$s পৰা লগ আউট কৰিবলৈ?</string>
|
||||
<string name="logout">লগ আউট</string>
|
||||
<string name="logout_success">আপুনি এতিয়া লগ আউট হৈছে</string>
|
||||
<string name="downloaded_chapters">ডাউনলোড কৰা অধ্যায়</string>
|
||||
<string name="intervals_header">অন্তৰালসমূহ</string>
|
||||
<string name="unknown_error">অজ্ঞাত ত্ৰুটি</string>
|
||||
<string name="overlay_header">অৱলম্বন</string>
|
||||
<string name="updating_category">শ্ৰেণী আপডেট কৰা</string>
|
||||
<string name="manga_from_library">লাইব্ৰেৰীৰ পৰা</string>
|
||||
<string name="tabs_header">টেব</string>
|
||||
<string name="no_more_results">অধিক ফলাফল নাই</string>
|
||||
<string name="no_results_found">ফলাফল কোৱা হোৱা নাই</string>
|
||||
<string name="local_source">স্থানীয় উৎস</string>
|
||||
<string name="other_source">অন্য</string>
|
||||
<string name="last_used_source">শেহতীয়াকৈ ব্যৱহৃত</string>
|
||||
<string name="pinned_sources">পিন কৰা</string>
|
||||
<string name="action_global_search_hint">বিশ্ববিদ্যালয় অনুসন্ধান…</string>
|
||||
<string name="action_global_search_query">“%1$s” বিশ্বব্যাপী অনুসন্ধান কৰক</string>
|
||||
<string name="latest">সৰ্বশেষ</string>
|
||||
<string name="browse">ব্ৰাউজ কৰক</string>
|
||||
<string name="has_results">ফলাফল আছে</string>
|
||||
<string name="popular">জনপ্ৰিয়</string>
|
||||
<string name="local_source_help_guide">স্থানীয় উৎস গাইড</string>
|
||||
<string name="no_pinned_sources">আপোনাৰ কোনো পিন কৰা উৎস নাই</string>
|
||||
<string name="chapter_not_found">অধ্যায় পোৱা নগ\'ল</string>
|
||||
<string name="local_invalid_format">অবৈধ অধ্যায় ফৰ্মেট</string>
|
||||
<string name="local_filter_order_by">অৰ্ডাৰ বায়</string>
|
||||
<string name="unknown_status">অজানা অৱস্থা</string>
|
||||
<string name="licensed">লাইচেঞ্চ কৰা</string>
|
||||
<string name="publishing_finished">প্ৰকাশনাৰ সমাপ্তি</string>
|
||||
<string name="cancelled">বাতিল কৰা হৈছে</string>
|
||||
<string name="date">তাৰিখ</string>
|
||||
<string name="ongoing">চলি আছে</string>
|
||||
<string name="unknown">অজানা</string>
|
||||
<string name="unknown_author">অজানা লেখক</string>
|
||||
<string name="on_hiatus">বিৰতিত</string>
|
||||
<string name="add_to_library">লাইব্ৰেৰীলৈ যোগ কৰক</string>
|
||||
<string name="remove_from_library">লাইব্ৰেৰী পৰা মচি দিয়ক</string>
|
||||
<string name="manga_removed_library">লাইব্ৰেৰী পৰা মচি দিয়া হৈছে</string>
|
||||
<string name="unknown_title">অজানা শিৰোনাম</string>
|
||||
<string name="confirm_add_duplicate_manga">আপোনাৰ লাইব্ৰেৰীত এই নামৰ এটা প্ৰৱিষ্ট আছে।
|
||||
\n
|
||||
\nআপুনি এতিয়াও আগবঢ়াব খুজিছে নেকি?</string>
|
||||
<string name="manga_info_expand">অধিক</string>
|
||||
<string name="manga_info_collapse">সৰু</string>
|
||||
<string name="delete_downloads_for_manga">ডাউনলোড কৰা অধ্যায়সমূহ মচি দিব নেকি?</string>
|
||||
<string name="copied_to_clipboard_plain">ক্লিপবোর্ডত কপি কৰা হৈছে</string>
|
||||
<string name="copied_to_clipboard">ক্লিপবোর্ডত কপি কৰা হৈছে:
|
||||
\n%1$s</string>
|
||||
<string name="clipboard_copy_error">ক্লিপবোর্ডত কপি কৰিবলৈ ব্যর্থ</string>
|
||||
<string name="source_not_installed">উৎস স্থাপন কৰা হোৱা নাই: %1$s</string>
|
||||
<string name="snack_add_to_library">লাইব্ৰেৰীলৈ যোগ কৰিব নেকি?</string>
|
||||
<string name="description_placeholder">বৰ্ণনা নাই</string>
|
||||
<string name="display_mode_chapter">অধ্যায় %1$s</string>
|
||||
<string name="manga_display_interval_title">প্ৰতি কিমান সময়ত</string>
|
||||
<string name="manga_display_modified_interval_title">প্ৰতি কিমান সময়ত আপডেট কৰিব</string>
|
||||
<string name="manga_interval_expected_update">%1$sৰ ভিতৰত নতুন অধ্যায়ৰ মুক্তি আশা কৰা হৈছে, প্ৰতি %2$sত পৰীক্ষা কৰা হৈছে।</string>
|
||||
<string name="manga_interval_expected_update_soon">সোনকালে</string>
|
||||
<string name="manga_interval_custom_amount">নিজস্ব আপডেটৰ সঘনতা:</string>
|
||||
<string name="chapter_downloading_progress">ডাউনলোড কৰা হৈছে (%1$d/%2$d)</string>
|
||||
<string name="manga_interval_expected_update_null">এই মাঙ্গা সম্পূৰ্ণ হৈছে, বা কিবা মুক্তিৰ তাৰিখ নাই।</string>
|
||||
<string name="chapter_error">ভূল</string>
|
||||
<string name="chapter_paused">বিৰত</string>
|
||||
<string name="show_title">উৎসৰ শিৰোনাম</string>
|
||||
<string name="show_chapter_number">অধ্যায় নম্বৰ</string>
|
||||
<string name="sort_by_source">উৎসৰ দ্বাৰা</string>
|
||||
<string name="sort_by_number">অধ্যায় নম্বৰ দ্বাৰা</string>
|
||||
<string name="sort_by_upload_date">আপলোড তাৰিখৰ দ্বাৰা</string>
|
||||
<string name="manga_download">ডাউনলোড</string>
|
||||
<string name="download_unread">অপঢ়া</string>
|
||||
<string name="custom_cover">নিজস্ব কভাৰ</string>
|
||||
<string name="manga_cover">কভাৰ</string>
|
||||
<string name="cover_saved">কভাৰ সংৰক্ষিত</string>
|
||||
<string name="error_saving_cover">কভাৰ সংৰক্ষণ কৰাত ভূল</string>
|
||||
<string name="error_sharing_cover">কভাৰ শ্বেয়াৰ কৰাত ভূল</string>
|
||||
<string name="confirm_delete_chapters">আপুনি নিশ্চিতনে যে নিৰ্বাচিত অধ্যায়সমূহ মচিব পৰা যাব?</string>
|
||||
<string name="chapter_settings">অধ্যায়ৰ ছেটিংচ</string>
|
||||
<string name="confirm_set_chapter_settings">আপুনি নিশ্চিতনে যে এই ছেটিংচ ডিফল্ট হিচাপে সংৰক্ষণ কৰিব?</string>
|
||||
<string name="also_set_chapter_settings_for_library">মোৰ লাইব্ৰেৰীৰ সকলো প্ৰৱিষ্টলৈও প্ৰয়োগ কৰক</string>
|
||||
<string name="set_chapter_settings_as_default">ডিফল্ট হিচাপে ছেট কৰক</string>
|
||||
<string name="no_chapters_error">অধ্যায় কোৱা হোৱা নাই</string>
|
||||
<string name="confirm_tracker_update">অধ্যায় %dলৈ ট্রেকাৰ আপডেট কৰিবনে?</string>
|
||||
<string name="manga_tracking_tab">ট্রেকিং</string>
|
||||
<string name="add_tracking">ট্রেকিং যোগ কৰক</string>
|
||||
<string name="unread">অপঢ়া</string>
|
||||
<string name="reading">পঢ়া</string>
|
||||
<string name="are_you_sure">আপুনি নিশ্চিতনে?</string>
|
||||
<string name="exclude_scanlators">স্কেনলেটৰসমূহ বাদ দিয়ক</string>
|
||||
<string name="no_scanlators_found">কোনো স্কেনলেটৰ পোৱা নগ\'ল</string>
|
||||
<string name="completed">সম্পূৰ্ণ</string>
|
||||
<string name="dropped">নিস্পত্তি কৰা হৈছে</string>
|
||||
<string name="on_hold">স্থগিত</string>
|
||||
<string name="paused">বিৰত</string>
|
||||
<string name="plan_to_read">পঢ়াৰ পরিকল্পনা</string>
|
||||
<string name="repeating">পুনৰ পঢ়া</string>
|
||||
<string name="reading_list">পঢ়াৰ তালিকা</string>
|
||||
<string name="wish_list">ইচ্ছাৰ তালিকা</string>
|
||||
<string name="complete_list">সম্পূৰ্ণ তালিকা</string>
|
||||
<string name="on_hold_list">স্থগিত তালিকা</string>
|
||||
<string name="unfinished_list">অসম্পূৰ্ণ তালিকা</string>
|
||||
<string name="score">স্ক\'ৰ</string>
|
||||
<string name="title">শিৰোনাম</string>
|
||||
<string name="status">অৱস্থা</string>
|
||||
<string name="track_status">অৱস্থা</string>
|
||||
<string name="track_started_reading_date">আৰম্ভৰ তাৰিখ</string>
|
||||
<string name="track_finished_reading_date">শেষৰ তাৰিখ</string>
|
||||
<string name="track_type">প্ৰকাৰ</string>
|
||||
<string name="myanimelist_relogin">দয়া কৰি MAL পুনৰ লগইন কৰক</string>
|
||||
<string name="source_unsupported">উৎস সমৰ্থিত নহয়</string>
|
||||
<string name="error_no_match">কোনো মেচ নাই</string>
|
||||
<string name="track_error">%1$s ত ভূল: %2$s</string>
|
||||
<string name="track_remove_date_conf_title">তাৰিখ মচিবনে?</string>
|
||||
<string name="track_remove_start_date_conf_text">%s পৰা আপোনাৰ আগৰ নিৰ্বাচিত আৰম্ভৰ তাৰিখ মচি দিব</string>
|
||||
<string name="track_delete_title">%s ট্রেকিং মচিবনে?</string>
|
||||
<string name="track_delete_text">এইটো স্থানীয়ভাৱে ট্রেকিং মচিব।</string>
|
||||
<string name="track_delete_remote_text">%s তো মচিব</string>
|
||||
<string name="error_category_exists">এই নামৰ এটা শ্রেণী ইতিমধ্যে আছে!</string>
|
||||
<string name="dialog_with_checkbox_remove_description">এইটো অধ্যায়ৰ পঢ়া তাৰিখ মচি দিব। আপুনি নিশ্চিতনে?</string>
|
||||
<string name="picture_saved">ছবি সংৰক্ষিত</string>
|
||||
<string name="error_saving_picture">ছবি সংৰক্ষণ কৰাত ভূল</string>
|
||||
<string name="custom_filter">নিজৰ ফিল্টাৰ</string>
|
||||
<string name="set_as_cover">কভাৰ হিচাপে নিৰ্ধাৰণ কৰক</string>
|
||||
<string name="cover_updated">কভাৰ আপডেট কৰা হৈছে</string>
|
||||
<string name="share_page_info">%1$s: %2$s, পৃষ্ঠা %3$d</string>
|
||||
<string name="chapter_progress">পৃষ্ঠা: %1$d</string>
|
||||
<string name="no_next_chapter">পৰৱৰ্তী অধ্যায় পোৱা নগ\'ল</string>
|
||||
<string name="decode_image_error">চিত্রটো লোড কৰিব পৰা নগ\'ল</string>
|
||||
<string name="confirm_set_image_as_cover">এই চিত্ৰটো কভাৰ শিল্প হিচাপে ব্যৱহাৰ কৰিবনে?</string>
|
||||
<string name="pref_category_for_this_series">এই শ্ৰেণীৰ বাবে</string>
|
||||
<string name="viewer">পঢ়াৰ মোড</string>
|
||||
<string name="transition_finished">সম্পন্ন:</string>
|
||||
<string name="transition_current">বর্তমান:</string>
|
||||
<string name="transition_next">পৰৱৰ্তী:</string>
|
||||
<string name="transition_previous">পূৰ্বৰ:</string>
|
||||
<string name="transition_no_next">পৰৱৰ্তী অধ্যায় নাই</string>
|
||||
<string name="transition_no_previous">পূৰ্বৰ অধ্যায় নাই</string>
|
||||
<string name="page_list_empty_error">কোনো পৃষ্ঠা পোৱা নগ\'ল</string>
|
||||
<string name="transition_pages_loading">পৃষ্ঠা লোড হৈ আছে…</string>
|
||||
<string name="transition_pages_error">পৃষ্ঠা লোড কৰাত ব্যৰ্থ: %1$s</string>
|
||||
<string name="loader_not_implemented_error">মূলটো পোৱা নগ\'ল</string>
|
||||
<string name="updating_library">লাইব্রেৰী আপডেট হৈ আছে</string>
|
||||
<string name="update_already_running">এটা আপডেট ইতিমধ্যে চলি আছে</string>
|
||||
<string name="cant_open_last_read_chapter">শেষ পঢ়া অধ্যায় খোলাটো সম্ভব নহয়</string>
|
||||
<string name="updates_last_update_info">লাইব্রেৰী শেষ আপডেট: %s</string>
|
||||
<string name="updates_last_update_info_just_now">এতিয়া</string>
|
||||
<string name="relative_time_span_never">কদাচিৎ</string>
|
||||
<string name="action_view_upcoming">পৰৱৰ্তী আপডেট চাওক</string>
|
||||
<string name="upcoming_guide">পৰৱৰ্তী গাইড</string>
|
||||
<string name="upcoming_calendar_next">পৰৱৰ্তী মাহ</string>
|
||||
<string name="upcoming_calendar_prev">পূৰ্বৰ মাহ</string>
|
||||
<string name="recent_manga_time">চ. %1$s - %2$s</string>
|
||||
<string name="pref_clear_history">ইতিহাস সাফ কৰক</string>
|
||||
<string name="clear_history_completed">ইতিহাস মচি পেলোৱা হৈছে</string>
|
||||
<string name="clear_history_confirmation">আপুনি নিশ্চিত? সকলো ইতিহাস হেৰুৱাই যাব।</string>
|
||||
<string name="source_empty_screen">কোনো মূলে পোৱা নগ\'ল</string>
|
||||
<string name="migrate">স্থানান্তৰ কৰক</string>
|
||||
<string name="copy">নকল কৰক</string>
|
||||
<string name="empty_screen">ভাল, এইটো অলপ অদ্ভুত</string>
|
||||
<string name="source_filter_empty_screen">কোনো প্ৰতিস্থাপন কৰা মূলে পোৱা নগ\'ল</string>
|
||||
<string name="migration_help_guide">মূল স্থানান্তৰ গাইড</string>
|
||||
<string name="migration_dialog_what_to_include">অন্তৰ্ভুক্ত কৰাৰ বাবে তথ্য বাচনি কৰক</string>
|
||||
<string name="migration_selection_prompt">স্থানান্তৰ কৰিবলৈ মূল বাচনি কৰক</string>
|
||||
<string name="not_installed">স্থাপন কৰা নহ\'ব</string>
|
||||
<string name="crash_screen_title">ওহো!</string>
|
||||
<string name="crash_screen_restart_application">অনুগ্রহ কৰি এপ্লিকেশ্বন পুনৰ আৰম্ভ কৰক</string>
|
||||
<string name="crash_screen_description">%s অপ্ৰত্যাশিত ত্ৰুটিৰ সন্মুখীন হৈছে। আমি আপোনাক সুপারিশ কৰোঁ যে, Discord ত আমাৰ সহায় চেনেলত ক্ৰাশ লগবোৰ শ্বেয়াৰ কৰক।</string>
|
||||
<string name="label_overview_section">সাৰাংশ</string>
|
||||
<string name="label_completed_titles">সম্পন্ন ৰেকৰ্ড</string>
|
||||
<string name="label_read_duration">পঢ়াৰ সময়</string>
|
||||
<string name="label_titles_section">ৰেকৰ্ড</string>
|
||||
<string name="label_total_chapters">মুঠ</string>
|
||||
<string name="label_read_chapters">পঢ়া</string>
|
||||
<string name="label_titles_in_global_update">আন্তৰাষ্ট্ৰীয় আপডেটত</string>
|
||||
<string name="label_tracker_section">ট্রেকাৰ</string>
|
||||
<string name="label_tracked_titles">ট্রেক কৰা ৰেকৰ্ড</string>
|
||||
<string name="label_mean_score">মধ্যম নম্বৰ</string>
|
||||
<string name="label_used">ব্যৱহৃত</string>
|
||||
<string name="not_applicable">প্ৰযোজ্য নহয়</string>
|
||||
<string name="day_short">%dd</string>
|
||||
<string name="hour_short">%dh</string>
|
||||
<string name="minute_short">%dm</string>
|
||||
<string name="seconds_short">%ds</string>
|
||||
<string name="download_queue_error">অধ্যায়সমূহ ডাউনলোড কৰিবলৈ সক্ষম নহ\'ল। আপুনি ডাউনলোডৰ অংশত পুনৰ চেষ্টা কৰিব পাৰে</string>
|
||||
<string name="download_insufficient_space">পৰ্যাপ্ত স্থান নাথাকাৰ বাবে অধ্যায়সমূহ ডাউনলোড কৰিবলৈ সক্ষম নহ\'ল</string>
|
||||
<string name="download_queue_size_warning">সতৰ্কতা: ডাঙৰ বাল্ক ডাউনলোডে মূলে ধীৰগতিত পৰিণত কৰিব পাৰে আৰু/অথবা Mihon ব্লক কৰিব পাৰে। অধিক জানিবলৈ টেপ কৰক।</string>
|
||||
<string name="notification_updating_progress">লাইব্রেৰী আপডেট হৈ আছে… (%s)</string>
|
||||
<string name="notification_size_warning">ডাঙৰ আপডেটসমূহে মূলে ক্ষতি কৰে আৰু ধীৰ গতিত আপডেট হব পাৰে আৰু বেটাৰী ব্যৱহাৰ বৃদ্ধি পাব পাৰে। অধিক জানিবলৈ টেপ কৰক।</string>
|
||||
<string name="notification_new_chapters">নতুন অধ্যায় পোৱা গৈছে</string>
|
||||
<string name="notification_chapters_single">অধ্যায় %1$s</string>
|
||||
<string name="notification_chapters_single_and_more">অধ্যায় %1$s আৰু %2$d অধিক</string>
|
||||
<string name="notification_chapters_multiple">অধ্যায়সমূহ %1$s</string>
|
||||
<string name="notification_update_error">%1$d আপডেট(s) ব্যৰ্থ</string>
|
||||
<string name="learn_more">অধিক জানিবলৈ টেপ কৰক</string>
|
||||
<string name="notification_cover_update_failed">কভাৰ আপডেট কৰিবলৈ ব্যৰ্থ</string>
|
||||
<string name="notification_first_add_to_library">এইটো কৰিবলৈ আগত অনুগ্ৰহ কৰি ৰেকৰ্ডটো আপোনাৰ লাইব্রেৰীত যোগ কৰক</string>
|
||||
<string name="library_errors_help">লাইব্রেৰী আপডেট ত্ৰুটিসমূহ মাকৰ বাবে সহায়ৰ বাবে চাওক %1$s</string>
|
||||
<string name="skipped_reason_not_caught_up">পঢ়া অধ্যায়ৰ অভাৱৰ বাবে বাদ দিয়া হৈছে</string>
|
||||
<string name="skipped_reason_not_started">কোনো অধ্যায় পঢ়া হোৱা নাই</string>
|
||||
<string name="skipped_reason_completed">ধাৰা সম্পন্নৰ বাবে বাদ দিয়া হৈছে</string>
|
||||
<string name="skipped_reason_not_always_update">ধাৰা আপডেটৰ প্রয়োজন নাই</string>
|
||||
<string name="skipped_reason_not_in_release_period">আজিৰ বাবে কোনো মুক্তিৰ আশা নাছিল</string>
|
||||
<string name="file_select_cover">আৱৰণ চিত্ৰ বাচক</string>
|
||||
<string name="file_select_backup">বেকআপ ফাইল বাচক</string>
|
||||
<string name="file_picker_error">ফাইল বাচনিৰ এপ পোৱা নগ\'ল</string>
|
||||
<string name="file_picker_uri_permission_unsupported">স্থায়ী ফোল্ডাৰ প্ৰৱেশ লাভ কৰা নগ\'ল। এপটো আশাহীনভাৱে আচৰণ কৰিব পাৰে।</string>
|
||||
<string name="file_null_uri_error">কোনো ফাইল বাচা হোৱা নাই</string>
|
||||
<string name="update_check_confirm">ডাউনলোড কৰক</string>
|
||||
<string name="update_check_eol">এই Android সংস্কৰণটো এতিয়া সমৰ্থিত নহয়</string>
|
||||
<string name="update_check_notification_download_complete">আপডেট ইনষ্টল কৰিবলৈ টেপ কৰক</string>
|
||||
<string name="update_check_notification_download_error">ডাউনলোড ত্ৰুটি</string>
|
||||
<string name="update_check_no_new_updates">নতুন আপডেট উপলব্ধ নাই</string>
|
||||
<string name="update_check_notification_download_in_progress">ডাউনলোড হৈছে…</string>
|
||||
<string name="update_check_notification_update_available">নতুন সংস্কৰণ উপলব্ধ!</string>
|
||||
<string name="update_check_fdroid_migration_info">এখন নতুন সংস্কৰণ চৰকাৰী মুক্তিৰ পৰা উপলব্ধ। আনুষ্ঠানিক F-Droid মুক্তিৰ পৰা মাইগ্ৰেট কৰিবলৈ কেনেকৈ শিকিবলৈ টেপ কৰক।</string>
|
||||
<string name="information_no_recent">কোনো নতুন আপডেট নাই</string>
|
||||
<string name="information_no_recent_manga">সম্প্ৰতি কিবা পঢ়া হোৱা নাই</string>
|
||||
<string name="information_empty_library">আপোনাৰ লাইব্ৰেৰী খালী</string>
|
||||
<string name="information_no_manga_category">বিভাগ খালী</string>
|
||||
<string name="information_no_entries_found">এই বিভাগত কোনো প্ৰৱেশ পোৱা নগ\'ল</string>
|
||||
<string name="getting_started_guide">আৰম্ভ কৰিবলৈ গাইড</string>
|
||||
<string name="information_empty_category">আপোনাৰ কোনো বিভাগ নাই। আপোনাৰ লাইব্ৰেৰী পৰিচালনা কৰিবলৈ এখন সৃষ্টি কৰিবলৈ প্লাছ বুটামত টেপ কৰক।</string>
|
||||
<string name="information_empty_category_dialog">আপোনাৰ এতিয়াও কোনো বিভাগ নাই।</string>
|
||||
<string name="information_cloudflare_bypass_failure">Cloudflare পাৰ হোৱাৰ চেষ্টা বিফল</string>
|
||||
<string name="information_cloudflare_help">Cloudflare সহায়ৰ বাবে ইয়াত টেপ কৰক</string>
|
||||
<string name="information_required_plain">*আৱশ্যক</string>
|
||||
<string name="information_webview_required">এপটো কাম কৰিবলৈ WebView আৱশ্যক</string>
|
||||
<string name="information_webview_outdated">ভাল সামঞ্জস্যৰ বাবে WebView এপটো আপডেট কৰক</string>
|
||||
<string name="chapter_settings_updated">ডিফল্ট অধ্যায় সজাও বুজাই দিয়া হৈছে</string>
|
||||
<string name="download_notifier_downloader_title">ডাউনলোডাৰ</string>
|
||||
<string name="download_notifier_title_error">ত্ৰুটি</string>
|
||||
<string name="download_notifier_unknown_error">অপ্ৰত্যাশিত ত্ৰুটিৰ বাবে অধ্যায় ডাউনলোড কৰিব পৰা নগ\'ল</string>
|
||||
<string name="download_notifier_text_only_wifi">কোনো Wi-Fi সংযোগ উপলব্ধ নাই</string>
|
||||
<string name="download_notifier_no_network">কোনো নেটৱৰ্ক সংযোগ উপলব্ধ নাই</string>
|
||||
<string name="download_notifier_download_paused">ডাউনলোড ৰোকা</string>
|
||||
<string name="download_notifier_split_page_not_found">পাতা %d বিচ্ছিন্নৰ সময়ত পোৱা নগ\'ল</string>
|
||||
<string name="download_notifier_split_page_path_not_found">পাতা %d ৰ ফাইল পথ পোৱা নগ\'ল</string>
|
||||
<string name="download_notifier_cache_renewal">ডাউনলোড পৰীক্ষা কৰা হৈছে</string>
|
||||
<string name="channel_common">সাধাৰণ</string>
|
||||
<string name="channel_progress">অগ্ৰগতি</string>
|
||||
<string name="channel_complete">সম্পূৰ্ণ</string>
|
||||
<string name="channel_app_updates">এপ আপডেট</string>
|
||||
<string name="channel_ext_updates">এক্সটেনচন আপডেট</string>
|
||||
<string name="spen_previous_page">পূৰ্বৰ পৃষ্ঠা</string>
|
||||
<string name="appwidget_updates_description">আপোনাৰ সাম্প্ৰতিক আপডেট কৰা লাইব্ৰেৰী প্ৰৱেশসমূহ চাওক</string>
|
||||
<string name="appwidget_unavailable_locked">এপ লক সক্ৰিয় থাকোতে উইজেট উপলব্ধ নহয়</string>
|
||||
<string name="remove_manga">আপুনি আপোনাৰ লাইব্ৰেৰীৰ পৰা \"%s\" মচাৰ বাবে সাজু হৈছে</string>
|
||||
<string name="spen_next_page">পৰৱৰ্তী পৃষ্ঠা</string>
|
||||
<string name="exception_offline">ইণ্টাৰনেট সংযোগ নাই</string>
|
||||
<string name="exception_unknown_host">%s পৌঁছাব পৰা নগ\'ল</string>
|
||||
<string name="tapping_inverted_vertical">উলম্ব</string>
|
||||
<string name="non_library_settings">সকলো পঢ়া প্ৰৱেশ</string>
|
||||
<string name="action_sort_random">ৰেণ্ডম</string>
|
||||
<string name="onboarding_permission_analytics_description">এপৰ বৈশিষ্ট্য উন্নত কৰাৰ বাবে নামৰহিত ব্যৱহাৰ তথ্য পঠাওক।</string>
|
||||
<string name="pref_security">সুৰক্ষা</string>
|
||||
<string name="pref_firebase">এনেলিটিক্স আৰু ক্ৰেছ লগসমূহ</string>
|
||||
<string name="onboarding_permission_analytics">এনেলিটিক্সৰ অনুমতি দিয়ক</string>
|
||||
<string name="firebase_summary">ক্ৰেছ লগ আৰু এনেলিটিক্স পঠাওঁতে আমাক সমস্যাবোৰ চিনাক্ত কৰি সমাধান কৰিবলৈ, কাৰ্যক্ষমতা উন্নত কৰিবলৈ আৰু আপোনাৰ প্ৰয়োজনৰ অনুসাৰে ভৱিষ্যতৰ আপডেটসমূহ অধিক প্ৰাসংগিক কৰিবলৈ সহায় কৰিব।</string>
|
||||
<string name="onboarding_permission_crashlytics_description">ডেভেলপাৰসকললৈ নামৰহিত ক্ৰেছ লগসমূহ পঠাওক|</string>
|
||||
<string name="onboarding_permission_crashlytics">ক্ৰেছ লগসমূহ পঠাওক</string>
|
||||
<string name="ext_remove">আঁতৰাওক</string>
|
||||
<string name="ext_confirm_remove">এক্সটেনচন আঁতৰাবনে?</string>
|
||||
<string name="remove_private_extension_message">আপুনি কি \"%s\" এক্সটেনচনটো আঁতৰাব খুজিছে?</string>
|
||||
<string name="pref_auto_update_manga_on_mark_read">পঢ়া হিচাপে চিহ্নিত কৰাৰ সময়ত অগ্ৰগতি আপডেইট কৰক</string>
|
||||
<string name="trackers_updated_summary">ট্ৰেকাৰসমূহ অধ্যায় %d লৈ আপডেইট কৰা হৈছে</string>
|
||||
<string name="pref_hardware_bitmap_threshold">কাষ্টম হাৰ্ডৱেৰ বিটম্যাপ থ্ৰেশহোল্ড</string>
|
||||
<string name="pref_hardware_bitmap_threshold_summary">যদি পাঠকে এটা খালী ছবি লোড কৰে ক্ৰমান্বয়ে থ্ৰেছহোল্ড হ্ৰাস কৰক। \nবাচনি কৰা: %s</string>
|
||||
<string name="pref_hardware_bitmap_threshold_default">ডিফল্ট (%d)</string>
|
||||
</resources>
|
@ -391,6 +391,11 @@
|
||||
<string name="pref_show_page_number">Show page number</string>
|
||||
<string name="pref_show_reading_mode">Show reading mode</string>
|
||||
<string name="pref_show_reading_mode_summary">Briefly show current mode when reader is opened</string>
|
||||
<string name="pref_hardware_bitmap_threshold">Custom hardware bitmap threshold</string>
|
||||
<string name="pref_hardware_bitmap_threshold_default">Default (%d)</string>
|
||||
<string name="pref_hardware_bitmap_threshold_summary">If reader loads a blank image incrementally reduce the threshold.\nSelected: %s</string>
|
||||
<string name="pref_always_decode_long_strip_with_ssiv">Always decode long strip images with SSIV</string>
|
||||
<string name="pref_always_decode_long_strip_with_ssiv_summary">Affects performance. Only enable if reducing bitmap threshold doesn\'t fix blank image issues</string>
|
||||
<string name="pref_display_profile">Custom display profile</string>
|
||||
<string name="pref_crop_borders">Crop borders</string>
|
||||
<string name="pref_custom_brightness">Custom brightness</string>
|
||||
@ -509,6 +514,7 @@
|
||||
<!-- Tracking section -->
|
||||
<string name="tracking_guide">Tracking guide</string>
|
||||
<string name="pref_auto_update_manga_sync">Update progress after reading</string>
|
||||
<string name="pref_auto_update_manga_on_mark_read">Update progress when marked as read</string>
|
||||
<string name="services">Trackers</string>
|
||||
<string name="tracking_info">One-way sync to update the chapter progress in external tracker services. Set up tracking for individual entries from their tracking button.</string>
|
||||
<string name="enhanced_services">Enhanced trackers</string>
|
||||
@ -539,7 +545,7 @@
|
||||
<string name="backup_restore_missing_trackers">Trackers not logged into:</string>
|
||||
<string name="backup_restore_content_full">You may need to install any missing extensions and log in to tracking services afterwards to use them.</string>
|
||||
<string name="restore_completed">Restore completed</string>
|
||||
<string name="restore_duration">%02d min, %02d sec</string>
|
||||
<string name="restore_duration">%1$02d min, %2$02d sec</string>
|
||||
<string name="backup_in_progress">Backup is already in progress</string>
|
||||
<string name="backup_choice">What do you want to backup?</string>
|
||||
<string name="app_settings">App settings</string>
|
||||
@ -582,7 +588,7 @@
|
||||
<string name="pref_reset_user_agent_string">Reset default user agent string</string>
|
||||
<string name="requires_app_restart">Requires app restart to take effect</string>
|
||||
<string name="cookies_cleared">Cookies cleared</string>
|
||||
<string name="pref_invalidate_download_cache">Invalidate downloads index</string>
|
||||
<string name="pref_invalidate_download_cache">Reindex downloads</string>
|
||||
<string name="pref_invalidate_download_cache_summary">Force app to recheck downloaded chapters</string>
|
||||
<string name="download_cache_invalidated">Downloads index invalidated</string>
|
||||
<string name="pref_clear_database">Clear database</string>
|
||||
@ -739,6 +745,7 @@
|
||||
<string name="exclude_scanlators">Exclude scanlators</string>
|
||||
<string name="no_scanlators_found">No scanlators found</string>
|
||||
<string name="confirm_tracker_update">Update trackers to chapter %d?</string>
|
||||
<string name="trackers_updated_summary">Trackers updated to chapter %d</string>
|
||||
|
||||
<!-- Tracking Screen -->
|
||||
<string name="manga_tracking_tab">Tracking</string>
|
||||
|
@ -642,4 +642,4 @@
|
||||
<string name="publishing_finished">Приключено издаване</string>
|
||||
<string name="update_check_fdroid_migration_info">Достъпна е нова версия от официалните източници. Научете как да мигрирате от неофициалните версии на F-Droid.</string>
|
||||
<string name="download_notifier_split_page_not_found">Страница %d не беше намерена при разделяне</string>
|
||||
</resources>
|
||||
</resources>
|
@ -637,4 +637,4 @@
|
||||
<string name="sort_category_confirmation">আপনি কি বর্ণানুক্রমিকভাবে ফিল্টার করতে চান</string>
|
||||
<string name="action_ok">ঠিক আছে</string>
|
||||
<string name="action_sort_next_updated">পরবর্তী আপডেটের সম্ভাব্য সময়</string>
|
||||
</resources>
|
||||
</resources>
|
@ -714,7 +714,6 @@
|
||||
<string name="syncing_library">S’està sincronitzant la biblioteca</string>
|
||||
<string name="library_sync_complete">S’ha completat la sincronització de la biblioteca</string>
|
||||
<string name="create_backup_file_error">No s’ha pogut crear un fitxer de còpia de seguretat</string>
|
||||
<string name="licensed_manga_chapters_error">Llicenciat: no hi ha capítols a mostrar</string>
|
||||
<string name="track_activity_name">Inici de sessió al servei de seguiment</string>
|
||||
<string name="download_cache_invalidated">S’ha invalidat l\'índex de baixades</string>
|
||||
<string name="information_cloudflare_help">Premeu aquí per a obtenir ajuda amb el Cloudflare</string>
|
||||
@ -820,4 +819,8 @@
|
||||
<string name="invalid_backup_file_json">Còpia de seguretat en JSON no suportada</string>
|
||||
<string name="invalid_backup_file_unknown">El fitxer de còpia de seguretat és corrupte</string>
|
||||
<string name="extensionRepo_settings">Repositoris d’extensions</string>
|
||||
</resources>
|
||||
<string name="action_copy_link">Copia l’enllaç</string>
|
||||
<string name="pref_download_new_unread_chapters_only">Omet la baixada de capítols ja llegits duplicats</string>
|
||||
<string name="add_repo_confirmation">Voleu afegir el repositori «%s»?</string>
|
||||
<string name="confirm_tracker_update">Voleu actualitzar els serveis de seguiment al capítol %d?</string>
|
||||
</resources>
|
@ -443,4 +443,4 @@
|
||||
<string name="action_not_now">Dili karon</string>
|
||||
<string name="information_webview_required">Gikinahanlan ang WebView alang sa Mihon</string>
|
||||
<string name="information_required_plain">*gikinahanlan</string>
|
||||
</resources>
|
||||
</resources>
|
@ -717,7 +717,6 @@
|
||||
<string name="information_cloudflare_help">Klepněte zde pro pomoc s Cloudflare</string>
|
||||
<string name="download_cache_invalidated">Index stažených zneplatněn</string>
|
||||
<string name="create_backup_file_error">Nelze vytvořit soubor zálohy</string>
|
||||
<string name="licensed_manga_chapters_error">Licencováno - Žádné kapitoly k zobrazení</string>
|
||||
<string name="exception_offline">Bez připojení k internetu</string>
|
||||
<string name="exception_unknown_host">Nelze dosáhnout %s</string>
|
||||
<string name="exception_http">HTTP %d, zkontrolovat web v WebView</string>
|
||||
@ -814,4 +813,4 @@
|
||||
<string name="pref_display_profile">Vlastní profil zobrazení</string>
|
||||
<string name="action_view_upcoming">Zobrazit nadcházející aktualizace</string>
|
||||
<string name="file_picker_uri_permission_unsupported">Nepodařilo se získat trvalý přístup ke složce. Aplikace se může chovat zvláštně.</string>
|
||||
</resources>
|
||||
</resources>
|
@ -169,7 +169,7 @@
|
||||
<string name="information_cloudflare_bypass_failure">Cloudflare-ран иртеймерӗ</string>
|
||||
<string name="information_empty_category">Санӑн пухмӑшсем ҫук. Хӑвӑн вулавӑша пухмӑшсем туса йӗркелеме «Хуш» пускӑч ҫине пус.</string>
|
||||
<string name="label_migration">Куҫару</string>
|
||||
<string name="label_backup">Янтӑлав тата тавӑру</string>
|
||||
<string name="label_backup">Янтавлав тата тавӑру</string>
|
||||
<string name="ext_obsolete">Кивелнӗ</string>
|
||||
<string name="ext_updates_pending">Ҫӗнетӳ кӗтеҫҫӗ</string>
|
||||
<string name="default_category">Йаланхилле пухмӑш</string>
|
||||
@ -181,7 +181,7 @@
|
||||
<string name="ext_trust">Шанчӑклӑ</string>
|
||||
<string name="ext_pending">Кӗтет</string>
|
||||
<string name="backup_restore_missing_sources">Ҫук ҫӑл куҫсем:</string>
|
||||
<string name="tracking_info">Сӑнану сервиссенче сыпӑкӑн ӳсӗмне ҫӗнетме пӗр енлӗ пӗрлӗхлени. Манкӑн уйрӑм ҫыравӗсемпе вӗсен сӑнану пускӑчсем валли сӑнану ӗнерле.</string>
|
||||
<string name="tracking_info">Йӗрлев сервисӗсенче сыпӑкӑн ӳсӗмне ҫӗнетме пӗр йенлӗ килӗшӗвӗ. «Йӗрлев» пускӑч урлӑ йӗрлев ӗнерле.</string>
|
||||
<string name="pref_auto_update_manga_sync">Вуланӑ хыҫҫӑн сыпӑксен ӳсӗме ҫӗнет</string>
|
||||
<string name="fifth_to_last">Вуланӑ сыпӑкран пиллӗкмӗшӗ</string>
|
||||
<string name="fourth_to_last">Вуланӑ сыпӑкран тӑваттӑмӗшӗ</string>
|
||||
@ -240,8 +240,8 @@
|
||||
\nСийенлӗ хушма упранакан кирек мӗнле шут пӗлӗмӗсене шута илме йе хӑй ирӗклӗ йума пурнӑҫлама пултарать.
|
||||
\n
|
||||
\nҪак ӗнентерӳ хутне шаннипе есӗ ҫав теветкеле йышӑнатӑн.</string>
|
||||
<string name="add_tracking">Сӑнану хуш</string>
|
||||
<string name="manga_tracking_tab">Сӑна</string>
|
||||
<string name="add_tracking">Йӗрлев хуш</string>
|
||||
<string name="manga_tracking_tab">Йӗрле</string>
|
||||
<string name="custom_filter">Усӑҫ али</string>
|
||||
<string name="pref_acra_summary">Кирек мӗнле йӑнӑшсене тӳрлетме пулӑшать. Нимӗнле харкам пӗлӗм те ярӑнмасть</string>
|
||||
<string name="label_downloaded_only">Тиенӗсене ҫеҫ</string>
|
||||
@ -261,7 +261,7 @@
|
||||
<string name="download_notifier_downloader_title">Тийевҫӗ</string>
|
||||
<string name="information_webview_required">Mihon валли WebView кирлӗ</string>
|
||||
<string name="update_check_notification_download_in_progress">Тийев…</string>
|
||||
<string name="update_check_no_new_updates">Ҫӗнетӳсем тупӑнман</string>
|
||||
<string name="update_check_no_new_updates">Ҫӗнетӳ тупӑнман</string>
|
||||
<string name="update_check_confirm">Тиесе ил</string>
|
||||
<string name="file_select_cover">Хуплашка суйла</string>
|
||||
<string name="notification_first_add_to_library">Ҫакна тӑвас умӗн манкка санӑн вулавӑша хуш-ха</string>
|
||||
@ -283,8 +283,8 @@
|
||||
<string name="transition_no_next">Малалли сыпӑк ҫук</string>
|
||||
<string name="transition_previous">Умӗнхи:</string>
|
||||
<string name="transition_next">Малалли:</string>
|
||||
<string name="transition_current">Кулленхи:</string>
|
||||
<string name="transition_finished">Пӗтернӗ:</string>
|
||||
<string name="transition_current">Хальхи:</string>
|
||||
<string name="transition_finished">Вӗҫленчӗ:</string>
|
||||
<string name="viewer">Вулав тытӑмӗ</string>
|
||||
<string name="pref_category_for_this_series">Ҫак серилӗх валли</string>
|
||||
<string name="confirm_set_image_as_cover">Ҫак сӑна хуплашка пек усӑ курмалла-и?</string>
|
||||
@ -334,7 +334,7 @@
|
||||
<string name="add_to_library">Вулавӑша хуш</string>
|
||||
<string name="licensed">Лиссенсиленӗ</string>
|
||||
<string name="unknown_status">Паллӑ мар хал</string>
|
||||
<string name="unknown_author">Паллӑ мар авттӑр</string>
|
||||
<string name="unknown_author">Паллӑ мар хайлавҫӑ</string>
|
||||
<string name="unknown">Паллă мар</string>
|
||||
<string name="ongoing">Тухакан</string>
|
||||
<string name="local_source_help_guide">Вырӑнти ҫӑл куҫ ертӳлӗхӗ</string>
|
||||
@ -362,13 +362,13 @@
|
||||
<string name="login_title">%1$s кӗр</string>
|
||||
<string name="downloaded_only_summary">Санӑн вулавӑшри манкка алат</string>
|
||||
<string name="pref_enable_acra">Ӳкнисем ҫинчен тишереревсем ямалла</string>
|
||||
<string name="check_for_updates">Ҫӗнетӳсем пуррине тӗрӗсле</string>
|
||||
<string name="check_for_updates">Ҫӗнетӳ пуррине тӗрӗсле</string>
|
||||
<string name="licenses">Уҫӑ юмлӑ лиссенсисем</string>
|
||||
<string name="version">Версси</string>
|
||||
<string name="website">Сайт</string>
|
||||
<string name="battery_optimization_setting_activity_not_found">Хатӗрӗн ӗнерлӗве уҫаймарӗ</string>
|
||||
<string name="battery_optimization_disabled">Петтерей лайӑхлатнине сӳнтернӗ ӗнтӗ</string>
|
||||
<string name="pref_disable_battery_optimization_summary">Хыҫ планлӑ ҫӗнетӳпе тата янтӑвланипе пулӑшать</string>
|
||||
<string name="pref_disable_battery_optimization_summary">Хыҫ планлӑ ҫӗнетӳпе тата янтавланипе пулӑшать</string>
|
||||
<string name="pref_disable_battery_optimization">Петтерей лайӑхлатнине сӳнтер</string>
|
||||
<string name="pref_backup_interval">Янтӑвлани тӑтӑшлӑхӗ</string>
|
||||
<string name="pref_refresh_library_covers">Вулавӑшри манкӑсен хуплашкисене ҫӗнет</string>
|
||||
@ -407,7 +407,7 @@
|
||||
<string name="channel_complete">Вӗҫленӗ</string>
|
||||
<string name="channel_progress">Ӳсӗм</string>
|
||||
<string name="channel_errors">Йӑнӑшсем</string>
|
||||
<string name="backup_restore_missing_trackers">Кӗмен сӑнанусем:</string>
|
||||
<string name="backup_restore_missing_trackers">Кӗмен йӗрлевсем:</string>
|
||||
<string name="pref_remove_bookmarked_chapters">Картнӑ сыпӑксене катерт</string>
|
||||
<string name="pref_category_delete_chapters">Сыпӑксене катерт</string>
|
||||
<string name="ext_nsfw_warning">NSFW (18+) шалаш пулма пултарать</string>
|
||||
@ -599,4 +599,6 @@
|
||||
<string name="onboarding_storage_help_info">Кивӗ верссирен ҫӗнӗлетӗн те мӗн суламаллине пӗлместӗн? Нумайрах пӗлме усрав пӗлкӗчне кӗрсе пӑх.</string>
|
||||
<string name="onboarding_guides_returning_user">%s ҫӗнӗрен лартатӑн?</string>
|
||||
<string name="pref_relative_format_summary">«%1$s» вырӑнне «%2$s»</string>
|
||||
</resources>
|
||||
<string name="label_upcoming">Пулас</string>
|
||||
<string name="action_menu_overflow_description">Тепӗр ӗнерӳсем</string>
|
||||
</resources>
|
@ -316,4 +316,4 @@
|
||||
<string name="creating_backup">Opretter sikkerhedskopi</string>
|
||||
<string name="exception_unknown_host">Kunne ikke nå %s</string>
|
||||
<string name="channel_new_chapters">Kapitelopdateringer</string>
|
||||
</resources>
|
||||
</resources>
|
@ -205,9 +205,9 @@
|
||||
<string name="file_select_cover">Wähle ein Vorschaubild</string>
|
||||
<string name="file_select_backup">Wähle eine Sicherungsdatei</string>
|
||||
<string name="update_check_confirm">Herunterladen</string>
|
||||
<string name="update_check_no_new_updates">Keine neue Aktualisierung verfügbar</string>
|
||||
<string name="update_check_no_new_updates">Keine neues Update verfügbar</string>
|
||||
<string name="update_check_notification_download_in_progress">Herunterladen…</string>
|
||||
<string name="update_check_notification_download_complete">Tippe, um die Aktualisierung zu installieren</string>
|
||||
<string name="update_check_notification_download_complete">Tippe, um das Update zu installieren</string>
|
||||
<string name="update_check_notification_download_error">Fehler beim Herunterladen</string>
|
||||
<string name="update_check_notification_update_available">Neue Version verfügbar!</string>
|
||||
<string name="information_no_downloads">Keine Downloads</string>
|
||||
@ -308,7 +308,7 @@
|
||||
<string name="lock_always">Immer</string>
|
||||
<string name="lock_never">Nie</string>
|
||||
<string name="secure_screen">Sicherer Bildschirm</string>
|
||||
<string name="ext_updates_pending">Aktualisierungen ausstehend</string>
|
||||
<string name="ext_updates_pending">Updates ausstehend</string>
|
||||
<string name="pref_cutout_short">Inhalt im Ausschnittbereich anzeigen</string>
|
||||
<string name="information_cloudflare_bypass_failure">Fehler beim Umgehen von Cloudflare</string>
|
||||
<string name="information_webview_outdated">Bitte aktualisiere die WebView-App für eine bessere Kompatibilität</string>
|
||||
@ -329,7 +329,7 @@
|
||||
<string name="action_oldest">Älteste</string>
|
||||
<string name="action_move_to_top">Nach oben verschieben</string>
|
||||
<string name="action_move_to_bottom">Nach unten verschieben</string>
|
||||
<string name="channel_ext_updates">Erweiterungsaktualisierungen</string>
|
||||
<string name="channel_ext_updates">Erweiterungsupdates</string>
|
||||
<string name="updating_library">Bibliothek wird aktualisiert</string>
|
||||
<string name="pref_skip_filtered_chapters">Gefilterte Kapitel überspringen</string>
|
||||
<string name="pref_category_reading">Beim Lesen</string>
|
||||
@ -355,10 +355,10 @@
|
||||
<string name="restoring_backup_canceled">Wiederherstellung abgebrochen</string>
|
||||
<string name="restore_in_progress">Wiederherstellung wird bereits durchgeführt</string>
|
||||
<string name="backup_in_progress">Datensicherung wird bereits durchgeführt</string>
|
||||
<string name="check_for_updates">Nach Aktualisierungen suchen</string>
|
||||
<string name="check_for_updates">Nach Updates suchen</string>
|
||||
<string name="last_used_source">Zuletzt genutzt</string>
|
||||
<string name="local_source_help_guide">Anleitung für lokale Quellen</string>
|
||||
<string name="restore_duration">%02d min, %02d s</string>
|
||||
<string name="restore_duration">%1$02d min, %2$02d s</string>
|
||||
<string name="downloaded_only_summary">Filtert alle Einträge in deiner Bibliothek</string>
|
||||
<string name="gray_background">Grau</string>
|
||||
<string name="viewer">Lesemodus</string>
|
||||
@ -545,7 +545,7 @@
|
||||
<string name="update_72hour">Alle 3 Tage</string>
|
||||
<string name="download_queue_size_warning">Achtung: Große Downloads könnten dazu führen, dass Quellen langsamer werden und/oder Mihon blockieren. Tippe, um mehr zu erfahren.</string>
|
||||
<string name="ext_update_all">Alle aktualisieren</string>
|
||||
<string name="channel_app_updates">App-Aktualisierungen</string>
|
||||
<string name="channel_app_updates">App-Updates</string>
|
||||
<string name="pref_auto_clear_chapter_cache">Kapitel-Zwischenspeicher beim Öffnen der App löschen</string>
|
||||
<string name="clear_database_source_item_count">%1$d Nicht-Bibliothekseinträge in der Datenbank</string>
|
||||
<string name="database_clean">Nichts zu bereinigen</string>
|
||||
@ -612,7 +612,7 @@
|
||||
<string name="action_remove_everything">Alles entfernen</string>
|
||||
<string name="appwidget_updates_description">Deine kürzlich aktualisierten Bibliothekseinträge ansehen</string>
|
||||
<string name="appwidget_unavailable_locked">Widget ist nicht verfügbar, wenn die App-Sperre aktiviert ist</string>
|
||||
<string name="update_already_running">Eine Aktualisierung ist bereits im Gange</string>
|
||||
<string name="update_already_running">Ein Update ist bereits im Gange</string>
|
||||
<string name="error_user_agent_string_blank">User-Agent-Text darf nicht leer sein</string>
|
||||
<string name="theme_tidalwave">Flutwelle</string>
|
||||
<string name="download_ahead">Im Voraus herunterladen</string>
|
||||
@ -648,7 +648,7 @@
|
||||
<string name="fdroid_warning">F-Droid-Builds werden nicht offiziell unterstützt.
|
||||
\nTippe, um mehr zu erfahren.</string>
|
||||
<string name="action_display_show_continue_reading_button">Weiterlesen-Button</string>
|
||||
<string name="pref_invalidate_download_cache">Index der Downloads invalidieren</string>
|
||||
<string name="pref_invalidate_download_cache">Downloads neu indizieren</string>
|
||||
<string name="track_remove_date_conf_title">Datum entfernen?</string>
|
||||
<string name="track_remove_start_date_conf_text">Dies wird dein zuvor gewähltes Startdatum von %s entfernen</string>
|
||||
<string name="track_remove_finish_date_conf_text">Dies wird dein zuvor gewähltes Enddatum von %s entfernen</string>
|
||||
@ -717,7 +717,6 @@
|
||||
<string name="download_cache_invalidated">Index der Downloads invalide</string>
|
||||
<string name="track_activity_name">Tracker-Login</string>
|
||||
<string name="create_backup_file_error">Sicherungsdatei konnte nicht erstellt werden</string>
|
||||
<string name="licensed_manga_chapters_error">Lizenziert - Keine Kapitel zu zeigen</string>
|
||||
<string name="exception_http">HTTP %d, überprüfe die Webseite in WebView</string>
|
||||
<string name="exception_offline">Keine Internetverbindung</string>
|
||||
<string name="exception_unknown_host">%s konnte nicht erreicht werden</string>
|
||||
@ -821,4 +820,24 @@
|
||||
<string name="extensionRepo_settings">Erweiterungsrepositorys</string>
|
||||
<string name="invalid_backup_file_unknown">Sicherungsdatei ist beschädigt</string>
|
||||
<string name="invalid_backup_file_json">JSON-Sicherung wird nicht unterstützt</string>
|
||||
</resources>
|
||||
<string name="pref_download_new_unread_chapters_only">Herunterladen von doppelten gelesenen Kapiteln überspringen</string>
|
||||
<string name="add_repo_confirmation">Möchtest du das Repository \"%s\" hinzufügen?</string>
|
||||
<string name="confirm_tracker_update">Tracker auf Kapitel %d aktualisieren?</string>
|
||||
<string name="pref_firebase">Datenerhebung und Absturzprotokolle</string>
|
||||
<string name="onboarding_permission_analytics_description">Sende anonymisierte Nutzungsdaten, um App-Funktionen zu verbessern.</string>
|
||||
<string name="onboarding_permission_analytics">Datenerhebung zulassen</string>
|
||||
<string name="action_sort_random">Zufällig</string>
|
||||
<string name="onboarding_permission_crashlytics">Absturzprotokolle senden</string>
|
||||
<string name="onboarding_permission_crashlytics_description">Anonymisierte Absturzprotokolle an das Entwicklerteam senden.</string>
|
||||
<string name="pref_security">Sicherheit</string>
|
||||
<string name="firebase_summary">Das Übermitteln von Absturzprotokollen und erhobenen Daten ermöglicht es uns, Probleme zu erkennen und zu beheben, die Leistung zu verbessern und künftige Updates besser auf deine Bedürfnisse abzustimmen</string>
|
||||
<string name="ext_remove">Entfernen</string>
|
||||
<string name="ext_confirm_remove">Erweiterung entfernen?</string>
|
||||
<string name="remove_private_extension_message">Möchtest du die Erweiterung „%s“ wirklich entfernen?</string>
|
||||
<string name="non_library_settings">Alle gelesenen Einträge</string>
|
||||
<string name="pref_auto_update_manga_on_mark_read">Fortschritt aktualisieren, wenn als gelesen markiert wird</string>
|
||||
<string name="trackers_updated_summary">Tracker auf Kapitel %d aktualisiert</string>
|
||||
<string name="pref_hardware_bitmap_threshold_summary">Reduziert stufenweise den Grenzwert, wenn der Leser nur ein leeres Bild lädt.\nAusgewählt: %s</string>
|
||||
<string name="pref_hardware_bitmap_threshold">Benutzerdefinierter Hardware-Bitmap-Grenzwert</string>
|
||||
<string name="pref_hardware_bitmap_threshold_default">Standard (%d)</string>
|
||||
</resources>
|
@ -292,7 +292,7 @@
|
||||
<string name="last_used_source">Χρησιμοποιήθηκε τελευταία</string>
|
||||
<string name="add_tracking">Προσθήκη tracking</string>
|
||||
<string name="pinned_sources">Καρφιτσωμένα</string>
|
||||
<string name="restore_duration">%02d λεπτά, %02d δευτερόλεπτα</string>
|
||||
<string name="restore_duration">%1$02d λεπτά, %2$02d δευτερόλεπτα</string>
|
||||
<string name="action_select_inverse">Επιλογή αντίστροφου</string>
|
||||
<string name="channel_ext_updates">Ενημερώσεις επεκτάσεων</string>
|
||||
<string name="channel_new_chapters">Ενημερώσεις κεφαλαίων</string>
|
||||
@ -651,7 +651,7 @@
|
||||
<string name="track_remove_date_conf_title">Κατάργηση ημερομηνίας;</string>
|
||||
<string name="track_remove_finish_date_conf_text">Αυτό θα καταργήσει την ημερομηνία λήξης που επιλέξατε προηγουμένως από το %s</string>
|
||||
<string name="track_remove_start_date_conf_text">Αυτό θα καταργήσει την ημερομηνία έναρξης που επιλέξατε προηγουμένως από το %s</string>
|
||||
<string name="pref_invalidate_download_cache">Ακύρωση ευρετηρίου λήψεων</string>
|
||||
<string name="pref_invalidate_download_cache">Επανακαταχώριση ευρετηρίου λήψεων</string>
|
||||
<string name="pref_invalidate_download_cache_summary">Αναγκάστε την εφαρμογή να ελέγξει ξανά τα ληφθέντα κεφάλαια</string>
|
||||
<string name="label_stats">Στατιστικά</string>
|
||||
<string name="label_local">Τοπικό</string>
|
||||
@ -717,7 +717,6 @@
|
||||
<string name="download_cache_invalidated">Το ευρετήριο λήψεων ακυρώθηκε</string>
|
||||
<string name="track_activity_name">Σύνδεση παρακολούθησης</string>
|
||||
<string name="create_backup_file_error">Δεν ήταν δυνατή η δημιουργία αντιγράφου ασφαλείας</string>
|
||||
<string name="licensed_manga_chapters_error">Αδειοδοτημένο - Δεν υπάρχουν κεφάλαια προς εμφάνιση</string>
|
||||
<string name="exception_unknown_host">Δεν ήταν δυνατή η πρόσβαση στο %s</string>
|
||||
<string name="exception_http">HTTP %d, ελέγξτε την ιστοσελίδα στο WebView</string>
|
||||
<string name="exception_offline">Δεν υπάρχει σύνδεση στο διαδίκτυο</string>
|
||||
@ -809,4 +808,33 @@
|
||||
<string name="upcoming_calendar_next">Επόμενο μήνα</string>
|
||||
<string name="upcoming_calendar_prev">Προηγούμενο Μήνα</string>
|
||||
<string name="file_picker_uri_permission_unsupported">Αποτυχία απόκτησης μόνιμης πρόσβασης φακέλου. Η εφαρμογή μπορεί να συμπεριφέρεται απροσδόκητα.</string>
|
||||
</resources>
|
||||
<string name="non_library_settings">Όλες οι καταχωρήσεις που έχουν διαβαστεί</string>
|
||||
<string name="action_copy_link">Αντιγραφή συνδέσμου</string>
|
||||
<string name="manga_interval_expected_update_null">Αυτό το manga είτε έχει ολοκληρωθεί, είτε δεν υπάρχει προβλεπόμενη ημερομηνία κυκλοφορίας.</string>
|
||||
<string name="action_sort_random">Τυχαίο</string>
|
||||
<string name="onboarding_permission_analytics">Να επιτρέπονται τα αναλυτικά στοιχεία</string>
|
||||
<string name="pref_firebase">Αναλύσεις και αρχεία καταγραφής ατυχημάτων</string>
|
||||
<string name="onboarding_permission_crashlytics">Αποστολή αρχείων καταγραφής σφαλμάτων</string>
|
||||
<string name="pref_download_new_unread_chapters_only">Παράλειψη λήψης διπλότυπων αναγνωσμένων κεφαλαίων</string>
|
||||
<string name="firebase_summary">Η αποστολή αρχείων καταγραφής σφαλμάτων και αναλυτικών στοιχείων θα μας επιτρέψει να εντοπίσουμε και να διορθώσουμε προβλήματα, να βελτιώσουμε την απόδοση και να κάνουμε τις μελλοντικές ενημερώσεις πιο σχετικές με τις ανάγκες σας</string>
|
||||
<string name="add_repo_confirmation">Θέλετε να προσθέσετε το repo \"%s\"?</string>
|
||||
<string name="remove_private_extension_message">Θέλετε πραγματικά να αφαιρέσετε την επέκταση \"%s?</string>
|
||||
<string name="pref_flash_page_interval">Φλας κάθε</string>
|
||||
<string name="onboarding_permission_crashlytics_description">Αποστολή ανώνυμων αρχείων καταγραφής σφαλμάτων στους προγραμματιστές.</string>
|
||||
<string name="onboarding_permission_analytics_description">Αποστολή ανώνυμων δεδομένων χρήσης για τη βελτίωση των λειτουργιών της εφαρμογής.</string>
|
||||
<string name="pref_security">Ασφάλεια</string>
|
||||
<string name="pref_flash_style_black">Μαύρο</string>
|
||||
<string name="pref_flash_style_white">Λευκό</string>
|
||||
<string name="extensionRepo_settings">Repos επεκτάσεων</string>
|
||||
<string name="ext_remove">Αφαίρεση</string>
|
||||
<string name="ext_confirm_remove">Αφαίρεση επέκτασης?</string>
|
||||
<string name="pref_flash_duration">Διάρκεια Φλας</string>
|
||||
<string name="pref_flash_duration_summary">%1$s ms</string>
|
||||
<string name="pref_flash_with">Φλας με</string>
|
||||
<string name="pref_flash_style_white_black">Λευκό και Μαύρο</string>
|
||||
<string name="confirm_tracker_update">Ενημέρωση ανιχνευτών στο κεφάλαιο %d?</string>
|
||||
<string name="invalid_backup_file_unknown">Το αρχείο αντιγράφων ασφαλείας έχει καταστραφεί</string>
|
||||
<string name="invalid_backup_file_json">Δεν υποστηρίζεται η δημιουργία αντιγράφων ασφαλείας JSON</string>
|
||||
<string name="pref_auto_update_manga_on_mark_read">Ενημέρωση προόδου όταν επισημανθεί ως αναγνωσμένη</string>
|
||||
<string name="trackers_updated_summary">Οι trackers ενημερώθηκαν στο κεφάλαιο %d</string>
|
||||
</resources>
|
@ -68,4 +68,12 @@
|
||||
<item quantity="one">Disponebla ĝisdatigo de etendaĵo</item>
|
||||
<item quantity="other">Disponeblaj ĝisdatigoj de %d etendaĵoj</item>
|
||||
</plurals>
|
||||
</resources>
|
||||
<plurals name="upcoming_relative_time">
|
||||
<item quantity="one">Morgaŭ</item>
|
||||
<item quantity="other">post %1$d tagoj</item>
|
||||
</plurals>
|
||||
<plurals name="pref_pages">
|
||||
<item quantity="one">1 paĝo</item>
|
||||
<item quantity="other">%1$s paĝoj</item>
|
||||
</plurals>
|
||||
</resources>
|
@ -516,4 +516,4 @@
|
||||
<string name="track_error">%1$s eraro: %2$s</string>
|
||||
<string name="source_empty_screen">Neniu fonto trovita</string>
|
||||
<string name="crash_screen_title">Ups!</string>
|
||||
</resources>
|
||||
</resources>
|
@ -1,9 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<plurals name="lock_after_mins">
|
||||
<item quantity="one">Tras %1$s minuto</item>
|
||||
<item quantity="many">Tras %1$s minutos</item>
|
||||
<item quantity="other">Tras %1$s minutos</item>
|
||||
<item quantity="one">Después de %1$s minuto</item>
|
||||
<item quantity="many">Después de %1$s minutos</item>
|
||||
<item quantity="other">Después de %1$s minutos</item>
|
||||
</plurals>
|
||||
<plurals name="notification_chapters_generic">
|
||||
<item quantity="one">%1$d nuevo capítulo</item>
|
||||
@ -16,9 +16,9 @@
|
||||
<item quantity="other">Capítulos %1$s y %2$d más</item>
|
||||
</plurals>
|
||||
<plurals name="notification_new_chapters_summary">
|
||||
<item quantity="one">Para %d título</item>
|
||||
<item quantity="many">Para %d títulos</item>
|
||||
<item quantity="other">Para %d títulos</item>
|
||||
<item quantity="one">Para %d entrada</item>
|
||||
<item quantity="many">Para %d entradas</item>
|
||||
<item quantity="other">Para %d entradas</item>
|
||||
</plurals>
|
||||
<plurals name="update_check_notification_ext_updates">
|
||||
<item quantity="one">Actualización de extensión disponible</item>
|
||||
@ -26,9 +26,9 @@
|
||||
<item quantity="other">%d actualizaciones de extensiones disponibles</item>
|
||||
</plurals>
|
||||
<plurals name="download_queue_summary">
|
||||
<item quantity="one">Restante %1$s</item>
|
||||
<item quantity="many">Restantes %1$s</item>
|
||||
<item quantity="other">Restantes %1$s</item>
|
||||
<item quantity="one">Queda %1$s</item>
|
||||
<item quantity="many">Quedan %1$s</item>
|
||||
<item quantity="other">Quedan %1$s</item>
|
||||
</plurals>
|
||||
<plurals name="num_categories">
|
||||
<item quantity="one">%d categoría</item>
|
||||
@ -46,9 +46,9 @@
|
||||
<item quantity="other">%1$s capítulos</item>
|
||||
</plurals>
|
||||
<plurals name="num_trackers">
|
||||
<item quantity="one">%d servicio de seguimiento</item>
|
||||
<item quantity="many">%d servicios de seguimiento</item>
|
||||
<item quantity="other">%d servicios de seguimiento</item>
|
||||
<item quantity="one">%d rastreador</item>
|
||||
<item quantity="many">%d rastreadores</item>
|
||||
<item quantity="other">%d rastreadores</item>
|
||||
</plurals>
|
||||
<plurals name="missing_chapters_warning">
|
||||
<item quantity="one">Se omite %d capítulo, o bien falta en la fuente o ha sido filtrado</item>
|
||||
@ -63,12 +63,12 @@
|
||||
<plurals name="next_unread_chapters">
|
||||
<item quantity="one">Siguiente capítulo sin leer</item>
|
||||
<item quantity="many">Siguientes %d capítulos sin leer</item>
|
||||
<item quantity="other">Los siguientes %d capítulos sin leer</item>
|
||||
<item quantity="other">Siguientes %d capítulos sin leer</item>
|
||||
</plurals>
|
||||
<plurals name="download_amount">
|
||||
<item quantity="one">El siguiente capítulo</item>
|
||||
<item quantity="many">Los siguientes %d capítulos</item>
|
||||
<item quantity="other">Los siguientes %d capítulos</item>
|
||||
<item quantity="one">Siguiente capítulo</item>
|
||||
<item quantity="many">Siguientes %d capítulos</item>
|
||||
<item quantity="other">Siguientes %d capítulos</item>
|
||||
</plurals>
|
||||
<plurals name="missing_chapters">
|
||||
<item quantity="one">Falta %1$s capítulo</item>
|
||||
@ -95,4 +95,4 @@
|
||||
<item quantity="many">%1$s páginas</item>
|
||||
<item quantity="other">%1$s páginas</item>
|
||||
</plurals>
|
||||
</resources>
|
||||
</resources>
|
@ -9,7 +9,7 @@
|
||||
<string name="label_backup">Copia de seguridad y restauración</string>
|
||||
<string name="action_settings">Ajustes</string>
|
||||
<string name="action_filter">Filtrar</string>
|
||||
<string name="action_filter_unread">Con capítulos sin leer</string>
|
||||
<string name="action_filter_unread">No leídos</string>
|
||||
<string name="action_filter_empty">Quitar filtro</string>
|
||||
<string name="action_search">Buscar</string>
|
||||
<string name="action_select_all">Seleccionar todo</string>
|
||||
@ -89,7 +89,7 @@
|
||||
<string name="rotation_force_landscape">Forzar en horizontal</string>
|
||||
<string name="pref_remove_after_marked_as_read">Borrarlos tras marcarlos como leídos de forma manual</string>
|
||||
<string name="pref_remove_after_read">Borrar capítulos terminados de forma automática</string>
|
||||
<string name="services">Servicios de seguimiento</string>
|
||||
<string name="services">Rastreadores</string>
|
||||
<string name="pref_clear_chapter_cache">Limpiar la caché de capítulos</string>
|
||||
<string name="used_cache">Usado: %1$s</string>
|
||||
<string name="cache_deleted">Se vació la caché. Se han borrado %1$d archivos</string>
|
||||
@ -97,7 +97,7 @@
|
||||
<string name="pref_clear_cookies">Borrar cookies</string>
|
||||
<string name="cookies_cleared">Cookies borradas</string>
|
||||
<string name="pref_clear_database">Borrar la base de datos</string>
|
||||
<string name="pref_clear_database_summary">Borrar el historial de los elementos que no estén guardados en tu biblioteca</string>
|
||||
<string name="pref_clear_database_summary">Borra del historial los títulos que hayas leído pero no formen parte de tu biblioteca</string>
|
||||
<string name="clear_database_confirmation">¿Seguro? Perderás los capítulos leídos y el progreso de los títulos que no pertenezcan a la biblioteca</string>
|
||||
<string name="clear_database_completed">Elementos borrados</string>
|
||||
<string name="version">Versión</string>
|
||||
@ -149,7 +149,7 @@
|
||||
<string name="update_check_notification_download_in_progress">Descargando…</string>
|
||||
<string name="update_check_notification_download_complete">Toca aquí para instalar la actualización</string>
|
||||
<string name="update_check_notification_download_error">Error de descarga</string>
|
||||
<string name="update_check_notification_update_available">¡Nueva versión disponible!</string>
|
||||
<string name="update_check_notification_update_available">¡Hay una nueva versión!</string>
|
||||
<string name="information_no_downloads">No hay descargas</string>
|
||||
<string name="information_no_recent">No hay actualizaciones recientes</string>
|
||||
<string name="information_no_recent_manga">No has leído nada últimamente</string>
|
||||
@ -158,7 +158,7 @@
|
||||
<string name="download_notifier_unknown_error">No se ha podido descargar el capítulo debido a un error inesperado</string>
|
||||
<string name="download_notifier_text_only_wifi">No estás conectado a ninguna red Wi-Fi</string>
|
||||
<string name="categories">Categorías</string>
|
||||
<string name="manga">Entradas de biblioteca</string>
|
||||
<string name="manga">Contenido de la biblioteca</string>
|
||||
<string name="track">Seguimiento</string>
|
||||
<string name="history">Historial</string>
|
||||
<string name="action_filter_bookmarked">Favoritos</string>
|
||||
@ -213,7 +213,7 @@
|
||||
<string name="local_source">Fuente local</string>
|
||||
<string name="delete_downloads_for_manga">¿Quieres borrar los capítulos descargados?</string>
|
||||
<string name="chapter_paused">Pausado</string>
|
||||
<string name="manga_tracking_tab">Seguimiento</string>
|
||||
<string name="manga_tracking_tab">Rastreo</string>
|
||||
<string name="error_category_exists">¡Ya existe una categoría con este nombre!</string>
|
||||
<string name="snack_categories_deleted">Categorías eliminadas</string>
|
||||
<string name="snack_add_to_library">¿Añadir manga a la biblioteca?</string>
|
||||
@ -277,9 +277,9 @@
|
||||
<string name="pref_color_filter_mode">Mezcla de colores</string>
|
||||
<string name="filter_mode_overlay">Superponer</string>
|
||||
<string name="filter_mode_multiply">Multiplicar</string>
|
||||
<string name="filter_mode_screen">Pantalla</string>
|
||||
<string name="filter_mode_lighten">Subexponer / Aclarar</string>
|
||||
<string name="filter_mode_darken">Quemar / Oscurecer</string>
|
||||
<string name="filter_mode_screen">Trama</string>
|
||||
<string name="filter_mode_lighten">Sobreexponer / Aclarar</string>
|
||||
<string name="filter_mode_darken">Subexponer / Oscurecer</string>
|
||||
<string name="label_help">Ayuda</string>
|
||||
<string name="no_results_found">No se han encontrado resultados</string>
|
||||
<string name="migration_selection_prompt">Selecciona una fuente a migrar</string>
|
||||
@ -299,8 +299,8 @@
|
||||
<string name="action_sort_latest_chapter">Por capítulo más reciente</string>
|
||||
<string name="action_view_chapters">Ver capítulos</string>
|
||||
<string name="action_cancel_all">Cancelar todo</string>
|
||||
<string name="theme_light">Claros</string>
|
||||
<string name="theme_dark">Oscuros</string>
|
||||
<string name="theme_light">Claro</string>
|
||||
<string name="theme_dark">Oscuro</string>
|
||||
<string name="theme_system">Del sistema</string>
|
||||
<string name="pref_manage_notifications">Gestionar notificaciones</string>
|
||||
<string name="pref_category_security">Seguridad y privacidad</string>
|
||||
@ -341,7 +341,7 @@
|
||||
<string name="pinned_sources">Ancladas</string>
|
||||
<string name="action_unpin">Desanclar</string>
|
||||
<string name="action_pin">Anclar</string>
|
||||
<string name="add_tracking">Añadir seguimiento</string>
|
||||
<string name="add_tracking">Añadir rastreo</string>
|
||||
<string name="in_library">En biblioteca</string>
|
||||
<string name="add_to_library">Añadir a la biblioteca</string>
|
||||
<string name="information_webview_required">Primero instala WebView para poder ver contenido de la aplicación</string>
|
||||
@ -356,7 +356,7 @@
|
||||
<string name="restore_in_progress">La restauración ya está en curso</string>
|
||||
<string name="creating_backup_error">No se han podido respaldar los datos</string>
|
||||
<string name="backup_in_progress">La copia de seguridad ya está en curso</string>
|
||||
<string name="restore_duration">%02d min, %02d seg</string>
|
||||
<string name="restore_duration">%1$02d min, %2$02d seg</string>
|
||||
<string name="last_used_source">Usado recientemente</string>
|
||||
<string name="check_for_updates">Buscar actualizaciones</string>
|
||||
<string name="local_source_help_guide">Guía de fuente local</string>
|
||||
@ -366,10 +366,10 @@
|
||||
<string name="gray_background">Gris</string>
|
||||
<string name="battery_optimization_setting_activity_not_found">No se pudieron abrir los ajustes del dispositivo</string>
|
||||
<string name="pref_refresh_library_covers">Actualizar las portadas de la biblioteca</string>
|
||||
<string name="tracking_info">La sincronización de estos servicios solo funciona en un solo sentido. Cada elemento en tu biblioteca tiene un botón de seguimiento y tendrás que configurarlo a mano, uno a uno.</string>
|
||||
<string name="tracking_info">Sincronización unidireccional para actualizar el progreso del capítulo en los servicios de seguimiento externos. Configura el seguimiento de entradas individuales desde el botón de Rastreo.</string>
|
||||
<string name="label_data">Datos</string>
|
||||
<string name="backup_restore_missing_sources">Fuentes que faltan:</string>
|
||||
<string name="invalid_backup_file_missing_manga">La copia de seguridad no contiene ningun elemento; la biblioteca está vacía.</string>
|
||||
<string name="invalid_backup_file_missing_manga">La copia de seguridad no contiene ningún título; la biblioteca está vacía.</string>
|
||||
<string name="invalid_backup_file">El archivo de copia de seguridad no parece estar bien:</string>
|
||||
<string name="pref_library_update_refresh_metadata_summary">Comprueba si hay una nueva portada, información y descripción al actualizar la biblioteca</string>
|
||||
<string name="pref_library_update_refresh_metadata">Actualizar automáticamente los metadatos</string>
|
||||
@ -505,11 +505,11 @@
|
||||
<string name="chapter_not_found">No se ha encontrado el capítulo</string>
|
||||
<string name="notification_incognito_text">Desactivar el modo incógnito</string>
|
||||
<string name="enhanced_tracking_info">Ofrecen funciones mejoradas para ciertas fuentes. Se hace un seguimiento automático de los elementos al añadirlos a la biblioteca.</string>
|
||||
<string name="enhanced_services">Servicios de seguimiento mejorados</string>
|
||||
<string name="enhanced_services">Rastreadores mejorados</string>
|
||||
<string name="tracking_guide">Guía de seguimiento</string>
|
||||
<string name="automatic_background">Automático</string>
|
||||
<string name="off">Apagado</string>
|
||||
<string name="on">Encendido</string>
|
||||
<string name="off">No</string>
|
||||
<string name="on">Sí</string>
|
||||
<string name="categorized_display_settings">Establecer el tipo de orden para cada categoría</string>
|
||||
<string name="label_background_activity">Actividad en segundo plano</string>
|
||||
<string name="action_track">Seguir</string>
|
||||
@ -524,8 +524,8 @@
|
||||
<string name="relative_time_today">Hoy</string>
|
||||
<string name="theme_tealturquoise">Azul marino y turquesa</string>
|
||||
<string name="pref_category_appearance">Apariencia</string>
|
||||
<string name="confirm_lock_change">Identifícate para confirmar el cambio</string>
|
||||
<string name="label_default">Predeterminado</string>
|
||||
<string name="confirm_lock_change">Autentíquese para confirmar el cambio</string>
|
||||
<string name="label_default">Original</string>
|
||||
<string name="pref_remove_exclude_categories">Categorías excluidas</string>
|
||||
<string name="help_translate">Ayudar a traducir</string>
|
||||
<string name="action_sort_count">Número total de elementos</string>
|
||||
@ -549,7 +549,7 @@
|
||||
<string name="pref_auto_clear_chapter_cache">Limpiar la caché de capítulos al abrir la aplicación</string>
|
||||
<string name="database_clean">Base de datos limpia</string>
|
||||
<string name="clear_database_source_item_count">%1$d títulos que no pertenecen a la biblioteca en la base de datos</string>
|
||||
<string name="extension_api_error">No se ha podido obtener el listado de extensiones disponibles</string>
|
||||
<string name="extension_api_error">No se han podido obtener las extensiones disponibles</string>
|
||||
<string name="privacy_policy">Política de privacidad</string>
|
||||
<string name="pref_update_only_completely_read">Saltarse títulos con capítulos por leer</string>
|
||||
<string name="library_errors_help">Si necesitas ayuda para resolver los errores de actualización de la biblioteca mira en %1$s</string>
|
||||
@ -717,9 +717,8 @@
|
||||
<string name="download_cache_invalidated">Se ha borrado el índice de descargas</string>
|
||||
<string name="track_activity_name">Iniciar sesión en el servicio</string>
|
||||
<string name="create_backup_file_error">No se ha podido crear un archivo de respaldo</string>
|
||||
<string name="licensed_manga_chapters_error">Con licencia oficial, sin capítulos que mostrar</string>
|
||||
<string name="exception_unknown_host">No se ha podido acceder a %s</string>
|
||||
<string name="exception_http">HTTP %d, comprueba la página web en WebView</string>
|
||||
<string name="exception_unknown_host">%s no parece estar disponible</string>
|
||||
<string name="exception_http">HTTP %d, prueba abriendo la página web en WebView</string>
|
||||
<string name="exception_offline">Sin conexión a Internet</string>
|
||||
<string name="unlock_app_title">Desbloquear %s</string>
|
||||
<string name="action_move_to_bottom_all_for_series">Mover al último puesto</string>
|
||||
@ -737,9 +736,9 @@
|
||||
<string name="pref_flash_page">Parpadear a blanco al cambiar de página</string>
|
||||
<string name="label_data_storage">Datos y almacenamiento</string>
|
||||
<string name="pref_storage_usage">Almacenamiento utilizado</string>
|
||||
<string name="action_sort_tracker_score">Puntuación del rastreador</string>
|
||||
<string name="action_sort_tracker_score">Puntuación del servicio</string>
|
||||
<string name="action_apply">Aplicar</string>
|
||||
<string name="action_revert_to_default">Restablecer valor predeterminado</string>
|
||||
<string name="action_revert_to_default">Restablecer vista</string>
|
||||
<string name="action_create">Crear</string>
|
||||
<string name="no_scanlators_found">No se ha encontrado ningún equipo de traducción</string>
|
||||
<string name="scanlator">Equipo de traducción</string>
|
||||
@ -755,23 +754,19 @@
|
||||
<string name="onboarding_guides_new_user">¿Es la primera vez que instalas %s? Te recomendamos leer la guía de introducción.</string>
|
||||
<string name="onboarding_action_finish">Comenzar</string>
|
||||
<string name="onboarding_storage_selection_required">Tienes que elegir una carpeta</string>
|
||||
<string name="onboarding_heading">¡Bienvenid@s!</string>
|
||||
<string name="onboarding_heading">¡Bienvenido/-a!</string>
|
||||
<string name="onboarding_guides_returning_user">¿No es la primera vez que instalas %s?</string>
|
||||
<string name="onboarding_action_skip">Saltar</string>
|
||||
<string name="onboarding_action_next">Siguiente</string>
|
||||
<string name="onboarding_description">Lo primero de todo es dejar las cosas a tu gusto. Siempre puedes volver a cambiarlas más tarde en los ajustes.</string>
|
||||
<string name="onboarding_description">Primero vamos a configurar algunas cosas. Siempre puedes cambiarlas en la configuración más tarde.</string>
|
||||
<string name="no_location_set">Todavía no has proporcionado ninguna carpeta</string>
|
||||
<string name="onboarding_storage_info">Seleccione una carpeta donde %1$s almacenará las descargas de capítulos, copias de seguridad, etc.
|
||||
\n
|
||||
\nSe recomienda una carpeta dedicada.
|
||||
\n
|
||||
\nCarpeta seleccionada: %2$s</string>
|
||||
<string name="onboarding_storage_info">Elige una carpeta donde %1$s guardará los capítulos descargados, las copias de seguridad y otras cosas.\n\nTe recomendamos que sea solo para %1$s.\n\nCarpeta seleccionada: %2$s</string>
|
||||
<string name="onboarding_permission_install_apps">Permiso para instalar aplicaciones</string>
|
||||
<string name="onboarding_permission_notifications">Permiso para mostrar notificaciones</string>
|
||||
<string name="onboarding_permission_ignore_battery_opts_description">Previene cortes y retrasos al procesar tareas en segundo plano que tarden un poco; como al buscar y descargar contenido nuevo, así como al restaurar copias de respaldo.</string>
|
||||
<string name="onboarding_permission_notifications">Permitir notificaciones</string>
|
||||
<string name="onboarding_permission_ignore_battery_opts_description">Evita interrupciones en las actualizaciones de las bibliotecas, descargas y restauraciones de copias de seguridad.</string>
|
||||
<string name="onboarding_permission_ignore_battery_opts">Uso de batería en segundo plano</string>
|
||||
<string name="onboarding_permission_install_apps_description">Para instalar extensiones que te permiten buscar y descargar contenido.</string>
|
||||
<string name="onboarding_permission_notifications_description">Recibe notificaciones cuando aparece contenido nuevo en tu biblioteca y otras cosas.</string>
|
||||
<string name="onboarding_permission_install_apps_description">Para poder instalar extensiones que te dejen encontrar y descargar contenido.</string>
|
||||
<string name="onboarding_permission_notifications_description">Recibe notificaciones sobre actualizaciones de la biblioteca y mucho más.</string>
|
||||
<string name="onboarding_permission_action_grant">Conceder</string>
|
||||
<string name="available_disk_space_info">Disponible: %1$s / Total: %2$s</string>
|
||||
<string name="ext_permission_install_apps_warning">Toca aquí para conceder los permisos necesarios para instalar extensiones.</string>
|
||||
@ -808,7 +803,7 @@
|
||||
<string name="upcoming_guide">Próxima guía</string>
|
||||
<string name="upcoming_calendar_next">Próximo mes</string>
|
||||
<string name="upcoming_calendar_prev">Mes anterior</string>
|
||||
<string name="file_picker_uri_permission_unsupported">No se ha podido obtener acceso a la carpeta persistente. La aplicación puede comportarse de forma inesperada.</string>
|
||||
<string name="file_picker_uri_permission_unsupported">No se ha podido obtener un acceso continuo a la carpeta, por lo que la aplicación puede fallar de vez en cuando.</string>
|
||||
<string name="pref_flash_page_interval">Flash cada</string>
|
||||
<string name="pref_flash_with">Flash con</string>
|
||||
<string name="pref_flash_style_white">Blanco</string>
|
||||
@ -821,4 +816,24 @@
|
||||
<string name="invalid_backup_file_unknown">El archivo de la copia de seguridad está dañado</string>
|
||||
<string name="extensionRepo_settings">Repositorios de extensiones</string>
|
||||
<string name="action_copy_link">Copiar el enlace</string>
|
||||
</resources>
|
||||
<string name="pref_download_new_unread_chapters_only">Omitir la descarga de capítulos duplicados y ya leídos</string>
|
||||
<string name="add_repo_confirmation">¿Quieres añadir el repositorio «%s»?</string>
|
||||
<string name="confirm_tracker_update">¿Marcar el capítulo %d como leído en los servicios de seguimiento?</string>
|
||||
<string name="action_sort_random">Al azar</string>
|
||||
<string name="onboarding_permission_crashlytics">Enviar registros de errores</string>
|
||||
<string name="onboarding_permission_crashlytics_description">Envía registros anónimos de errores a los desarrolladores.</string>
|
||||
<string name="pref_security">Seguridad</string>
|
||||
<string name="ext_remove">Eliminar</string>
|
||||
<string name="ext_confirm_remove">¿Quieres eliminar la extensión?</string>
|
||||
<string name="remove_private_extension_message">¿Seguro que quieres quitar la extensión «%s»?</string>
|
||||
<string name="firebase_summary">El envío de registros de errores y estadísticas de uso nos permitirá identificar y solucionar problemas, mejorar el rendimiento y hacer que las versiones futuras se adapten mejor a tus necesidades</string>
|
||||
<string name="onboarding_permission_analytics">Enviar estadísticas de uso</string>
|
||||
<string name="onboarding_permission_analytics_description">Compartir estadísticas de uso para mejorar la aplicación.</string>
|
||||
<string name="pref_firebase">Informar de errores y compartir datos</string>
|
||||
<string name="non_library_settings">Todas las obras leídas</string>
|
||||
<string name="pref_auto_update_manga_on_mark_read">Actualizar el progreso al marcarlo como leído</string>
|
||||
<string name="trackers_updated_summary">El progreso de lectura ha saltado al capítulo %d</string>
|
||||
<string name="pref_hardware_bitmap_threshold_default">Predeterminado (%d)</string>
|
||||
<string name="pref_hardware_bitmap_threshold">Elegir un tamaño máximo con el que decodificar imágenes por hardware</string>
|
||||
<string name="pref_hardware_bitmap_threshold_summary">Si el visor carga una página en blanco te recomendamos ir reduciéndolo poco a poco hasta que funcione.\nLímite actual: %s</string>
|
||||
</resources>
|
@ -605,4 +605,4 @@
|
||||
<string name="action_set_interval">Ezarri denbora-bitartea</string>
|
||||
<string name="label_data_storage">Datu eta memoria</string>
|
||||
<string name="action_sort_last_manga_update">Azkenengo egunearatze egiaztapena</string>
|
||||
</resources>
|
||||
</resources>
|
@ -671,4 +671,4 @@
|
||||
<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>
|
||||
</resources>
|
@ -676,4 +676,4 @@
|
||||
<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>
|
||||
</resources>
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user