* Remove the unused mark duplicate as read preference.
* Migrate the old preference to new preference
(cherry picked from commit 71470b9e02bc5e3e7607d7de57f90a882810bb49)
* Update DMCA UUID list using Mangadex Massacre Google Sheet
* Fix: add trailing newline to mangadex_dmca_uuids.txt
* Re-add trailing newline for formatting consistency
* Add dependency com.journeyapps:zxing-android-embedded:4.3.0
* Add widget parameter to EditTextPreferenceWidget
* Add QR code scanner icon button to sync API key preference which launches a ScanContract
* Remove screenOrientation property from CaptureActivity manifest
* Allow scanning both normal and inverted codes
* store values and make code more concise
Co-authored-by: jobobby04 <jobobby04@users.noreply.github.com>
* Import local context
---------
Co-authored-by: jobobby04 <jobobby04@users.noreply.github.com>
(cherry picked from commit 84c7da5a7d244ffc0cd7155d15e0a200f548ad35)
* feat(MangaDex): use tracker links to associate mangas automatically with trackers (jobobby04/TachiyomiSY#1387)
* feat: add searchById support to trackers (MAL, AniList, MangaUpdates only)
* feat: add new preference to toggle auto selection of tracker items using source metadata if available
* feat: add new preference to toggle auto selection of tracker items using source metadata if available
* feat: add automatic title selection using source metadata to TrackInfoDialog.kt
* style: apply spotless
* refactor: remove hardcoded MangaDexSearchMetadata cast and introduce common interface
(cherry picked from commit 217503eab0e2fe551943e3b702cc6df4aaae8ebf)
* Handle null when searchId failed
* Wrap the await() call in a use block to ensure the OkHttp Response is properly closed after use
* Simplify Regex
* Injection via construction
* Wrap the blocking HTTP call in an IO dispatcher context
---------
Co-authored-by: Tim Schneeberger <tim.schneeberger@outlook.de>
* feat(ui): Improve migration bottom sheet layout with scrollable content
* Using with(binding) and remove redundant Box
* Simplify checkbox listener setup in MigrationBottomSheetDialog
* Fix reference ID should not create new ID
* feat(updates-screen): Swipe actions for chapter updates
* Smaller cover size & add option to hide cover images (debug menu)
* Correctly apply passed-in modifier
* Memoize `getSwipeAction(...)`` invocations with Compose’s `remember` (keyed on the action and state) to avoid recreating those objects on every recomposition
* fix(storage): setting app's data folder on Android TV
Also check if set location is actually accessible then update UI compose accordingly (for all devices) in some cases (e.g. location set but actual folder was deleted or permission revoked)
(cherry picked from commit ef56b7f11ef0d243ef14816e85afa360f1137fe8)
* chore(storage): improve permission handling for older Android version & Fire TV
(cherry picked from commit 5ee009a6db73d33687e55ee8f4ad6412a9e320d4)
* Add indicator for source incognito mode
Adds an indicator to the manga info header to show if a source is running in incognito mode.
Also moves the source incognito check logic to `SourceExtensions`.
(cherry picked from commit 5e547efda51cdeaa7bc71198b932c8ac9aecc312)
* Replaced incognito icon with animated glasses_with_hat icon.
This commit introduces an animated vector drawable for the incognito mode icon and updates the related icons in the app.
- Adds `anim_incognito.xml`, a new animated vector drawable for incognito mode.
- Adds `ic_glasses_with_hat_24dp.xml`, a new icon for incognito mode.
- Updates the incognito mode icon in the following places:
- MoreScreen
- ExtensionDetailsScreen
- App notification
- Manga info header
- Updates `SwitchPreferenceWidget` and `TextPreferenceWidget` to accept any type of icons.
(cherry picked from commit 2a28673e078ff15fe0a7c2a030ffc6ce6cbe6b31)
* move incognito icon
* issue: Use stringResource for contentDescription to support localization
* Wrap the ImageVector.vectorResource call in remember to avoid inflating the drawable on every recomposition.
---------
Co-authored-by: Cuong-Tran <cuongtran.tm@gmail.com>
* fix(tracker-login): allow autofill on tracker's login dialog
* add loading state to tracking login dialog
* improve error color handling and dynamic height measurement in login dialog
* enable autofill for email and password fields in login dialog
* improve code
* refactor: optimize state management and improve dialog width measurement
* refactor: optimize dialog height measurement and error state handling
- Update markdown to 0.33.0
- Use github flavour for github changelog
- Fix bullet list alignment
(cherry picked from commit e2915a1f69340cad515962de8a0b9d11ecff8d42)
* Combine ChangeMangaCategoryDialog
* Allow migrating a single manga when using Bulk-favorite
* Allow migrating mangas one by one when using Bulk-favorite
* set visibility
* Fix duplicate toggleSelection after migration
* After migration, continue adding favorites if there are more to bulk-favorite or push new Manga screen if it's a single manga being added by long-click
* fix usage of ChangeMangaCategory
* improve toggleSelection code
* refactoring ChangeMangasCategory
* switch LocalNavigator.currentOrThrow to current
* split composable to `presentation`
* hoisting the state to a common parent composable
* Fix migration dialog dismissed when clicking on Show entry
* Don't push new Manga screen after migration of duplicated entries everywhere
* Add Appearance option to set if cover should be vertically aligned in the manga info view
* Apply align modifier with `CenterVertically` or `Top` instead of using `.apply`
* Change option to align cover to top
* Add a toolbar option to open source settings from manga info screen
This commit adds a new option in the manga info screen to directly open the extension settings.
This option will only be shown if the source is not a local or a stub source.
(cherry picked from commit 2304152368ecccfaa8fddaf0cfa2e82977a789db)
* rework Source settings on BrowseSource, SourceFeed & MangaScreen
* spotless
---------
Co-authored-by: Jery <jery99961@gmail.com>
This will avoid the need to know which forks has which version numbers
and avoid confusion in support.
(cherry picked from commit eddf07f9ac31bab57d06515e42df9c854bc50eed)
This prefix searches entries in the library based on the ID in the
database. It is a niche feature but could be very helpful in certain
situations, such as a corrupted cover causing a crash that just shows
"🚨 Failed - MangaCover(mangaId=2245, sourceId=1, isMangaFavorite=true, url=, lastModified=0)".
With this prefix search it is possible to find the entry in question
without much hassle.
Notably, the database includes literally anything Mihon has ever seen
from extension and such, even if they weren't added to the collection.
This means that IDs actually present in the collection are not
expected to be purely sequential.
For example, in my emulator, I had two entries in the collection but
the assigned IDs were 5 and 56.
(cherry picked from commit 05012de569130e131be92b71fbfc9308ea6c629c)
* Implement vertical page panning in paged reader mode when using hardware keys
* Pan to top or bottom of the page instead of directly moving to the previous/next page.
* Add `canPanUp`, `canPanDown`, `panUp`, `panDown` to `ReaderPageImageView`.
* Modify `moveUp` and `moveDown` in `PagerViewer` to utilize the new panning functions.
* add annotation
This theme is mainly geared towards e-Ink displays with limited/no
colour capabilities. Previous themes like Yin & Yang would make heavy
use of greyscale colours which could look off on some devices.
This theme is probably not conformant to Material Design 3 colour
scheme guidelines, but it does boast some amazing WebAIM contrast
ratios (#FFFFFF text on #000000 background gets a ratio of 21:1, vice
versa too).
Initially, this was intended as a purely black and white theme but
some contrast issues arose, such as the download badges (tertiary
background, onTertiary text colour) having the same colour as unread
badges (primary/onPrimary), or the step indicators (stops) not being
visible on sliders (since they use the colours of the opposite state
track (active region stops are the colour of the inactive region track and vice versa).
To mitigate this, each variant (dark/light) of the theme has one
additional grey mixed in for their tertiary and secondaryContainer
colours each. For the dark variant, this is a #A0A0A0 background for
#000000 text (8.03:1 contrast ratio) and for the light variant, it is
a #505050 background for #FFFFFF text (8.06:1 contrast ratio).
This results in distinct unread vs download badges and visible steps
in the sliders.
---------
Co-authored-by: Sunspark-007 <73711243+Sunspark-007@users.noreply.github.com>
Co-authored-by: AntsyLich <59261191+AntsyLich@users.noreply.github.com>
(cherry picked from commit 8b48d1016b851b425e4f66d44bca098220585c37)
Caused by mihonapp/mihon#1748.
Two different issues actually.
Firstly, the getUsername API call uses the authClient, which uses the
BangumiInterceptor to get the current OAuth data and attach the
Authorization header. However, on login, mihonapp/mihon#1748 did not try to set the
new auth details until after attempting to call getUsername.
This would cause Mihon to think the user was not authenticated with
Bangumi and cancel the process.
This is fixed by having Mihon store the OAuth credentials in the
interceptor first before attempting to call getUsername.
The second issue is a simple trailing dollar sign in the API URL for
the getUsername method. This was removed.
(cherry picked from commit badc229a2312c0c750c34631f303ac4ca970dc71)
Most if not all other trackers do this too. Technically this causes
some request duplication (since things like the BaseTracker's
setRemoteLastChapterRead fire anyway due to the tracker sheet being
open. But considering the reduced number of requests in other places,
I think this is still acceptable.
This change will allow mihonapp/mihon#1736 to proceed, hopefully.
(cherry picked from commit 277d8bad8e8d21cd74dc1681da09a4b980f455e0)
This comes with many benefits:
- Starting dates are now available and shown to users
- Lays groundwork to add private tracking for Bangumi, e.g. in mihonapp/mihon#1736
- Mihon makes approximately 2-4 times fewer calls to Bangumi's API
- Simplified interceptor for the access token addition
- v0 does not allow access tokens in the query string
- There is actively maintained documentation for it
Also shrunk the DTOs for Bangumi by removing attributes we have no
use for either now or in the foreseeable future. Volume data remains
in case Mihon wants to ever support volumes. But attributes such as
user avatars, nicknames, data relating to Bangumi's tag & meta-tag
systems, etc. have been removed or just not added to the DTOs.
Co-authored-by: cuong-tran <cuongtran.tm@gmail.com>
(cherry picked from commit a96fbba3dc354e363b85923c52feceb88dc34447)
* Add missing @EncodeDefault annotation to MALOAuth
Similar to the situation with Bangumi, the missing annotation means
kotlinx.serialization would _provide_ the default value upon
instantiation but not serialise it to disk. This means the isExpired()
calculation would effectively rarely/never do its job correctly,
leading to Mihon sending expired tokens to MAL and causing problems
for everyone involved.
Overall, this change _could_ (should) lead to a drastic reduction in
MAL requests failing, leading to users having to relink their MAL
accounts.
Also switched createdAt to be in seconds instead of milliseconds as
all other trackers use seconds for timestamps (except for AniList,
which uses milliseconds but doesn't use a createdAt timestamp anyway).
* Add CHANGELOG.md entry
(cherry picked from commit 29ec7c125a3f1a1f39a90f8eba2d3e39b5af9797)
* Fix Bangumi tracking losing track of login state
kotlinx.serialization does NOT serialize default values (like
createdAt in BGMOAuth.kt), so every time the Bangumi tracker
deserialized the tracker OAuth, createdAt was set to the time of the
read, not the time of issuance.
Separately, BangumiInterceptor did correctly fetch new OAuth
credentials upon detected expiry of the stored credentials and saved
them, but did not use them for the current request (the new
credentials were used for all subsequent requests only). This led to
401 errors from Bangumi because the expired access_token was provided.
A subsequent request using the newly acquired access_token would end
up being successful.
* Add CHANGELOG.md entry
(cherry picked from commit dce6aacf02d07f3f123b19b1b74cbbe18c28852b)
* Add zoned date & time to debug info & logs
This should help distinguish log entries that happened recently and
may be related to crashes from older entries that occurred before now.
* Change logcat date and time output format
After some discussion, it was decided to adjust the logcat date and
time display to include the year and the timezone in the logcat
output. This results in a line start like this:
`2025-01-27 18:37:46.662 +0100`
which follows the following DateTimeFormatter pattern:
`yyyy-MM-dd HH:mm:ss.SSS Z`
* Add CHANGELOG.md entry
(cherry picked from commit 503d0be66772c37e08e69e5d022475245b706fd1)
* switch off integrated H to show E-H source & extension
* More languages for E-H/ExH, also more popular with rate 5
* Don't hide Multi source when toggle Integrated H
* Avoid crash trying to load ehentaiBrowseDisplayMode
* change source ID to matching general extension
* migration old source ID to new source ID
* Allow importing of EHentai extension backups
* limit library update & metadata source to only Multi lang
* update app version
* fix spotless
* also migrate saved search/feed & pinned EH/EXH source ID when restore from backup or update app
* add color to notification
* add app icon to extension update notification
* add app icon to download error notification
* add large app icon to all the notification
* set large image for chapter update & save image notification
* Fix: background color of download list when using custom theme
* Fix background color in Migration's source list
* Fix custom theme color in manga's Edit Info
* Fix custom theme color in manga's Migration Config
* Fix custom theme color in manga's Migration Config
* Fix custom theme color & relayout merge setting's dialog
* using CustomColorScheme for DownloadQueue
* using CustomColorScheme for metadata source