Skip to content
This repository was archived by the owner on Feb 19, 2026. It is now read-only.

Commit de8a17e

Browse files
committed
chore: bump bms-rs to 0.10.1
1 parent be375c3 commit de8a17e

File tree

5 files changed

+123
-33
lines changed

5 files changed

+123
-33
lines changed

Cargo.lock

Lines changed: 88 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ regex = "1.11.2"
1919
once_cell = "1.20.0"
2020

2121
# BMS
22-
bms-rs = "0.9.0"
22+
bms-rs = { version = "0.10.1", features = ["bmson"] }
2323
encoding_rs = "0.8.35"
2424
serde = { version = "1.0.219", features = ["derive"] }
2525
serde_json = "1.0.142"

cli/src/bms.rs

Lines changed: 23 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -41,16 +41,21 @@ async fn read_bms_file(file: &Path) -> io::Result<Vec<u8>> {
4141
}
4242

4343
/// 仅负责解析 BMS 字节(CPU 密集,单线程执行)
44-
fn parse_bms_bytes(bytes: &[u8]) -> BmsOutput {
44+
fn parse_bms_bytes(bytes: &[u8]) -> io::Result<BmsOutput> {
4545
let (str, _encoding, _has_error) = encoding_rs::SHIFT_JIS.decode(bytes);
46-
parse_bms(&str)
46+
let config = bms_rs::bms::ParseConfig::<(), (), ()>::default()
47+
.key_mapper::<bms_rs::bms::command::channel::mapper::KeyLayoutBeat>()
48+
.prompter(bms_rs::bms::parse::prompt::AlwaysWarnAndUseNewer)
49+
.rng(bms_rs::bms::rng::JavaRandom::default())
50+
.use_common();
51+
parse_bms(&str, config).map_err(io::Error::other)
4752
}
4853

4954
/// 包装:读取 + 解析
5055
pub async fn parse_bms_file(file: &Path) -> io::Result<BmsOutput> {
5156
let bytes = read_bms_file(file).await?;
5257
// 解析阶段保持单线程(不在此处并发)
53-
Ok(parse_bms_bytes(&bytes))
58+
parse_bms_bytes(&bytes)
5459
}
5560

5661
/// 仅负责读取 BMSON 文件(异步 IO)
@@ -135,10 +140,7 @@ pub async fn get_dir_bms_list(dir: &Path) -> io::Result<Vec<BmsOutput>> {
135140
// Stage 2: 解析(CPU 密集,受限并发)
136141
.map(|pending| async move {
137142
let parsed: io::Result<BmsOutput> = match pending {
138-
PendingParse::Bms(bytes) => {
139-
let r = unblock(move || parse_bms_bytes(&bytes)).await;
140-
Ok(r)
141-
}
143+
PendingParse::Bms(bytes) => unblock(move || parse_bms_bytes(&bytes)).await,
142144
PendingParse::Bmson(bytes) => unblock(move || parse_bmson_bytes(&bytes)).await,
143145
};
144146
if let Ok(out) = parsed {
@@ -172,13 +174,13 @@ pub async fn get_dir_bms_info(dir: &Path) -> io::Result<Option<Bms>> {
172174
// Header
173175
let titles: Vec<_> = bms_list
174176
.iter()
175-
.filter_map(|BmsOutput { bms, .. }| bms.header.title.as_deref())
177+
.filter_map(|BmsOutput { bms, .. }| bms.music_info.title.as_deref())
176178
.collect();
177179
let title = extract_work_name(titles.as_slice(), true, &[]);
178-
bms.header.title = Some(title);
180+
bms.music_info.title = Some(title);
179181
let artists: Vec<_> = bms_list
180182
.iter()
181-
.filter_map(|BmsOutput { bms, .. }| bms.header.artist.as_deref())
183+
.filter_map(|BmsOutput { bms, .. }| bms.music_info.artist.as_deref())
182184
.collect();
183185
let artist = extract_work_name(
184186
artists.as_slice(),
@@ -187,27 +189,26 @@ pub async fn get_dir_bms_info(dir: &Path) -> io::Result<Option<Bms>> {
187189
"/", ":", ":", "-", "obj", "obj.", "Obj", "Obj.", "OBJ", "OBJ.",
188190
],
189191
);
190-
bms.header.artist = Some(artist);
192+
bms.music_info.artist = Some(artist);
191193
let genres: Vec<_> = bms_list
192194
.iter()
193-
.filter_map(|BmsOutput { bms, .. }| bms.header.genre.as_deref())
195+
.filter_map(|BmsOutput { bms, .. }| bms.music_info.genre.as_deref())
194196
.collect();
195197
let genre = extract_work_name(genres.as_slice(), true, &[]);
196-
bms.header.genre = Some(genre);
198+
bms.music_info.genre = Some(genre);
197199
// Defines
198-
bms.notes.wav_files = bms_list
200+
bms.wav.wav_files = bms_list
199201
.iter()
200202
.fold(HashMap::new(), |mut map, BmsOutput { bms, .. }| {
201-
map.extend(bms.notes.wav_files.clone());
203+
map.extend(bms.wav.wav_files.clone());
204+
map
205+
});
206+
bms.bmp.bmp_files = bms_list
207+
.iter()
208+
.fold(HashMap::new(), |mut map, BmsOutput { bms, .. }| {
209+
map.extend(bms.bmp.bmp_files.clone());
202210
map
203211
});
204-
bms.graphics.bmp_files =
205-
bms_list
206-
.iter()
207-
.fold(HashMap::new(), |mut map, BmsOutput { bms, .. }| {
208-
map.extend(bms.graphics.bmp_files.clone());
209-
map
210-
});
211212
Ok(Some(bms))
212213
}
213214

cli/src/options/root_event.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -75,9 +75,9 @@ pub async fn generate_work_info_table(root: &Path) -> io::Result<()> {
7575
let Some(info) = info else { continue };
7676
let row = (row + 1) as u32;
7777
sheet.write_number(row, 0, id as f64, None)?;
78-
sheet.write_string(row, 1, &info.header.title.unwrap_or_default(), None)?;
79-
sheet.write_string(row, 2, &info.header.artist.unwrap_or_default(), None)?;
80-
sheet.write_string(row, 3, &info.header.genre.unwrap_or_default(), None)?;
78+
sheet.write_string(row, 1, &info.music_info.title.unwrap_or_default(), None)?;
79+
sheet.write_string(row, 2, &info.music_info.artist.unwrap_or_default(), None)?;
80+
sheet.write_string(row, 3, &info.music_info.genre.unwrap_or_default(), None)?;
8181
}
8282

8383
workbook.close()?;

cli/src/options/work.rs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,14 @@ pub async fn set_name_by_bms(
9292
log::info!("Bms file not found, skipping: {}", work_dir.display());
9393
return Ok(());
9494
};
95-
let title = bms_info.header.title.unwrap_or(DEFAULT_TITLE.to_string());
96-
let artist = bms_info.header.artist.unwrap_or(DEFAULT_ARTIST.to_string());
95+
let title = bms_info
96+
.music_info
97+
.title
98+
.unwrap_or(DEFAULT_TITLE.to_string());
99+
let artist = bms_info
100+
.music_info
101+
.artist
102+
.unwrap_or(DEFAULT_ARTIST.to_string());
97103
let work_dir_name = work_dir
98104
.file_name()
99105
.ok_or(io::Error::other("Dir name not exists"))?

0 commit comments

Comments
 (0)