Starting from Rust port of the project, all changes will be put into this file.
KM
: Revert back constants
- Create a new
Error
type for all sources, this replaceanyhow
error type. This should give more consistent error handling across all sources. KM
: Replace allFrom
instance that is failable intoTryFrom
instead.- All sources: Client initialization now returns
Result<Self, Error>
format instead ofSelf
.Error
is the new error type that is used across all sources.
- All sources: Make all fields private on models, you can now use getter function instead.
- Example:
data.name
now becomedata.name()
- Example:
KM
,RB
,AM
, andSJ/V
: Privatize config fields- Please use the getter function and the new
new
function to create a new config.
- Please use the getter function and the new
KM
:MagazineCategory::${Enum}.get_doc()
now returnOption<&'static str>
instead ofResult<&'static str, Error>
- It also remove
documented
related function since we now use simpler derive macro instead.
- It also remove
MU
: Add web version constants, improve the auth flow a bit more.MU
: Add a new crate featureaes-dec
that support decrypting images if needed.
MU
: Proto changes for subscription in manga detailMU
: Bump constants versionKM
: Fix precalculation of point usagesMU
,KM
, andAM
: Cleanupprecalculate
command output a bit moreRB
: Possibly faster image decryptionMP
: Fix issue when decoding title tagsMP
: Unable to download anything because of image host changes- All source: flush bytes stream on each loop iteration
- All sources: Replace
String
or&str
input on client withimpl Into<String>
orimpl AsRef<str>
instead - All sources: Add
Copy
to someCopy
-able struct - All sources: Bump constants version when possible
- Adjust exit code handling on CLI
- Simplify progress bar handling
- Fix more issue on chapter merging
- Update
tokio
,serde-*
,prost
,reqwest
, and some other CLI related dependencies - Remove
anyhow
as direct dependency for library crates - Remove
time
as dependency fortosho-amap
- Replace
futures
withfutures-util
intosho
- Remove
rayon
feature fromimage
since it's unused - Remove
documented
- Use
README.md
on each source crate as the docs instead of duplicating the content inlib.rs
- Fix issue with manual merging
Ctrl+C
handling not working properly
RB
: Try to support hidden higher resolution images
We've added a simple helper function in RBClient
to help modify the URL to get higher resolution images.
use tosho_rbean::{RBClient, config::{RBConfig, RBPlatform}};
#[tokio::main]
async fn main() {
let mut client = RBClient::new(RBConfig {
token: "",
refresh_token: "",
platform: RBPlatform::Android,
});
// Get the chapters list
let chapters = client.get_chapter_list("73cd427b-0740-4911-91bf-ed17cd13df8e").await.unwrap();
let first_chapter = chapters.chapters[0].clone();
// Get the first chapter viewer
let viewer = client.get_chapter_viewer(&first_chapter.uuid).await.unwrap();
let first_page = viewer.data.pages[0].clone();
// Get the first image URL
let image_url = first_page.image.jpg[0].clone();
// Get the high resolution image URL
let high_res_image_url = RBClient::modify_url_for_highres(&image_url);
println!("High res image URL: {}", high_res_image_url);
}
If you use CLI, this is done automatically when you use download
command.
RB
: Support downloading chapters with different quality- Available quality are:
low
,medium
,high
, andhires
(default ishires
)
- Available quality are:
KM
: Fix failed deserialization onTitleNode
on some titlesRB
: Fix auth failing when reauthenticatingRB
: Properly hide future chapters from being downloadedRB
: Do streaming decryption on image downloadMU
, andKM
: RenameIOS_CONSTANTS
toAPPLE_CONSTANTS
- Multiple: Adjustment to constants
- Multiple: Mark some
prost::Message
withCopy
- All: Rewrite
lazy_static
toLazyLock
- Use static
OnceLock
in win-term VT check - Use
LazyLock
forlinkify!
macro when checking for VT support - Simplify win-term VT check
- Expose some
_HOST
constants to public API
- Update multiple dependencies
- Remove
lazy_static
as direct dependency - Update MSRV to 1.80.0
- Reword some parts of the documentation
M+
: Allow overriding app version code.
This should help mitigates issue with needing to update to latest version.
You can use in CLI like this:
$ tosho mp -p XXX [...]
Or, in Rust code:
use tosho_mplus::MPClient;
use tosho_mplus::proto::Language;
use tosho_mplus::constants::get_constants;
#[tokio::main]
async fn main() {
let client = MPClient::new("1234", Language::English, get_constants(1))
.with_app_ver(256);
let home_view = client.get_home_page().await.unwrap();
}
KM
: Cleanup chapters information a bitM+
: Update app version- INTERNAL: Use more macros expansion on config implementation.
- Update
tokio
,serde
,prost
, anddocumented
- Add
M+
as a new source MU
: Support downloading with subscriptions- Add command to clear cache for all sources:
tosho tools clear-cache
- All source: Force use
rustls
and usehttp2
adaptive window for reqwest client. MU
: Update proto information.MU
: Only useHTTP/1.1
sinceHTTP/2
broke the API requestMU
: Rework downloader, image blocks are now stored to make less request to the APIMU
: Fix account revoke not workingRB
: Fix wrong base host used in homepage viewAM
: Add title information when purchasing/downloadingAM
,RB
, andSJ/M
: Cleanup chapters informationSJ/M
: Early fetch chapters informationSJ/M
: Improve search/pattern matchingSJ/M
: Addshow_to
to notices and add simple helper if the notice should be displayed or notSJ/M
: Return the whole series response forget_chapters
- Refactor some duplicate code
- Changes all
ToString
occurences tostd::fmt::Display
- Bump
reqwest
to 0.12 (use hyper v1) - Use
rustls
instead ofnative-tls
forreqwest
- Set
stream
feature as default onreqwest
- Compile with latest Rust stable in CI
- Bump other dependencies
- Update
SerializeEnum
rustdoc
- Check for update on startup (this is done for the next 24 hours after each check)
MU
: Fix panic when search results is less than 25AM
: Better error messages
- Change
diacritics
tosecular
because of OSS license issue. - Bump dependencies on all crates (except
macros
) - Use only
png
,jpeg
, andrayon
features forimage-rs
- Suggest using
--locked
when installing - Add crates.io version shield badge on each crates
- Move LFS data to another repo and rewrite tests to support the new path/format
SJ/M
: Download the last page properly (previously it was missing)SJ/M
: Fix failed deser on noticesSJ/M
: Show latest available chapter properly
- Pin source crate dependency on
tosho
- Add disclaimer
RB
: Remove saving JSON response on error.
- Added
小豆 (Red Bean)
as a new source - Introduce threaded/parallel image download (not chapter) for the following source:
By default, the download is sequential. If you want to enable parallel download pass --parallel
into the
argument list: tosho km download 10007 --parallel
MU
: Refactor API response parsingSJ
: Wrap descrambling withtokio::task::spawn_blocking
KM
: Wrap descrambling withtokio::task::spawn_blocking
- Internally change chapter dump to support both number (
u64
) and string (UUID
-esque) - Better progress tick on progress bar
- Self update now should support windows zip properly.
SJ
: Properly login with requested platform.SJ
: MakeDATA_VERSION_CODE
optional when sending requestsMU
: Use&static Constants
forMUClient::new()
params (BREAKING CHANGES)Macros
: Add docs forenum_error!()
macro- Make
linkify
fromtosho
crates to be crate-only (a.k.a hide it)
- Add proper documentation for
tosho-macros
- Add proper documentation for
tosho-musq
- Add proper documentation for
tosho-kmkc
- Add proper documentation for
tosho-amap
- Add proper documentation for
tosho-sjv
- Make all source crate to not follow workspace version.
- Added self updater, you can now do
tosho update
to update tosho for supported platform/architecture.
SJ
: Fix broken serde on renew field at account subcriptionsSJ
: Allow downloading "expired" chapters if you have subscription for it.SJ
: Fix failed deser on chaptersSJ
: Show excerpt of data when deser failsSJ
: Don't show/download future chapter
- Pin
windows-sys
dependencies (If you use crates.io, this is already pinned in0.3.0
) - Remove
mime
as direct dependency - Make
tosho-macros
to not follow workspace versioning.
- Added
SJ/M
as a new source
- Fix some part of command locked behind account select
KM
: Optimize descrambled PNG size (Web only)KM
: Descrambled image now follow the original color type instead of always saving as RGB8
- Remove
cookie-store
as direct dependency - Remove
prost-types
(unused) - Set
documented
to v0.3.0
- Proxy support (
--proxy
can be used globally)- Example:
tosho --proxy https://proxy.example km download 10007
- Example:
- BREAKING CHANGE: Moved
-a
or--account-id
to each source subcommand instead of each commands:- Before:
tosho km download 10007 -a 123
- After:
tosho km -a 123 download 10007
- Before:
KM
: Fix invalid deserialization on/account
KM
: Fix invalid deserialization on/user
- Bump dependencies
- Use native M1 CI for building macOS arm64 version
AM
: Addfavorites
commandKM
: Addfavorites
command
KM
: Fix favorite status deserializationAM
: Replace session v2 cookie in each request
- Add missing documentation for
tosho-amap
- Pin and bump dependencies on GitHub CI
- Smaller size by stripping debuginfo properly from
std
- Add proper version hash if
tosho
built as nightly or by yourself.
- Add missing help description for
tosho tools
- Make terminal looks more consistent
MU
: Fix rankings selector not working as intendedAM
: Simplifystrptime
to only showYYYY-MM-DD
- Rewording and grammar fixes
- Added
AM
as a new source - Support proper login for
KM
source - Support mobile source (both Android and iOS) for
KM
source.
- Port everything into Rust, legacy Python can be seen from legacy-snek branch.
- Split every sources into their own Rust crates. (prefixed with
tosho_
in folder ortosho-
in crates name)
- You would need to re-authenticate your
KM
web session since there is a bit of changes and it might not be compatible anymore.