mirror of
https://github.com/Yuyi-Oak/BlueArchiveToolkit.git
synced 2026-07-22 06:28:00 +08:00
fix(daemon): 区分当前下载与历史失败状态
This commit is contained in:
@@ -2020,6 +2020,7 @@ fn prepare_in_progress_version_state(
|
||||
completed_unix_seconds: None,
|
||||
},
|
||||
);
|
||||
remove_matching_version_failures(&mut state.failed_versions, &record);
|
||||
state.in_progress_version = Some(record.clone());
|
||||
state.updated_unix_seconds = now;
|
||||
write_version_state(path, &state)?;
|
||||
@@ -2049,7 +2050,7 @@ fn complete_version_state(
|
||||
..record
|
||||
});
|
||||
if let Some(current) = state.current_completed_version.as_ref() {
|
||||
remove_completed_version_failures(&mut state.failed_versions, current);
|
||||
remove_matching_version_failures(&mut state.failed_versions, current);
|
||||
}
|
||||
state.in_progress_version = None;
|
||||
state.updated_unix_seconds = unix_seconds_now();
|
||||
@@ -2132,9 +2133,10 @@ fn upsert_failed_version(
|
||||
error: &str,
|
||||
failed_unix_seconds: u64,
|
||||
) {
|
||||
if let Some(index) = failed_versions.iter().position(|failed| {
|
||||
failed_version_matches(&failed.version, &record) && failed.error == error
|
||||
}) {
|
||||
if let Some(index) = failed_versions
|
||||
.iter()
|
||||
.position(|failed| failed_version_matches(&failed.version, &record))
|
||||
{
|
||||
failed_versions.remove(index);
|
||||
}
|
||||
failed_versions.push(OfficialFailedVersionRecord {
|
||||
@@ -2144,11 +2146,11 @@ fn upsert_failed_version(
|
||||
});
|
||||
}
|
||||
|
||||
fn remove_completed_version_failures(
|
||||
fn remove_matching_version_failures(
|
||||
failed_versions: &mut Vec<OfficialFailedVersionRecord>,
|
||||
completed: &OfficialVersionRecord,
|
||||
version: &OfficialVersionRecord,
|
||||
) {
|
||||
failed_versions.retain(|failed| !failed_version_matches(&failed.version, completed));
|
||||
failed_versions.retain(|failed| !failed_version_matches(&failed.version, version));
|
||||
}
|
||||
|
||||
fn failed_version_matches(left: &OfficialVersionRecord, right: &OfficialVersionRecord) -> bool {
|
||||
@@ -2844,7 +2846,9 @@ mod tests {
|
||||
.unwrap();
|
||||
fail_version_state(&path, failed, "download 404").unwrap();
|
||||
let state = read_version_state(&path).unwrap().unwrap();
|
||||
assert_eq!(state.failed_versions.len(), 2);
|
||||
assert_eq!(state.failed_versions.len(), 1);
|
||||
assert_eq!(state.failed_versions[0].version.id, "broken-3");
|
||||
assert_eq!(state.failed_versions[0].error, "download 404");
|
||||
|
||||
let staging = temp.path().join(".staging/fixed");
|
||||
let fixed = prepare_in_progress_version_state(
|
||||
|
||||
Reference in New Issue
Block a user