fix: Download chunks with wrong indexes

Migrated to using checksums as indexes instead

Signed-off-by: quexeky <git@quexeky.dev>
This commit is contained in:
quexeky
2025-06-18 09:51:49 +10:00
parent e8bcc67ed4
commit abf371c9fc
2 changed files with 8 additions and 8 deletions

View File

@ -36,7 +36,7 @@ pub struct GameDownloadAgent {
pub version: String, pub version: String,
pub control_flag: DownloadThreadControl, pub control_flag: DownloadThreadControl,
contexts: Mutex<Vec<DropDownloadContext>>, contexts: Mutex<Vec<DropDownloadContext>>,
completed_contexts: Mutex<SliceDeque<usize>>, completed_contexts: Mutex<SliceDeque<String>>,
pub manifest: Mutex<Option<DropManifest>>, pub manifest: Mutex<Option<DropManifest>>,
pub progress: Arc<ProgressObject>, pub progress: Arc<ProgressObject>,
sender: Sender<DownloadManagerSignal>, sender: Sender<DownloadManagerSignal>,
@ -260,7 +260,7 @@ impl GameDownloadAgent {
let progress_handle = ProgressHandle::new(progress, self.progress.clone()); let progress_handle = ProgressHandle::new(progress, self.progress.clone());
// If we've done this one already, skip it // If we've done this one already, skip it
if self.completed_contexts.lock().unwrap().contains(&index) { if self.completed_contexts.lock().unwrap().contains(&context.checksum) {
progress_handle.skip(context.length); progress_handle.skip(context.length);
continue; continue;
} }
@ -299,7 +299,7 @@ impl GameDownloadAgent {
"Finished context #{} with checksum {}", "Finished context #{} with checksum {}",
index, context.checksum index, context.checksum
); );
completed_indexes.push(index); completed_indexes.push(context.checksum.clone());
} }
Ok(false) => { Ok(false) => {
debug!( debug!(
@ -321,7 +321,7 @@ impl GameDownloadAgent {
let completed_lock_len = { let completed_lock_len = {
let mut completed_contexts_lock = self.completed_contexts.lock().unwrap(); let mut completed_contexts_lock = self.completed_contexts.lock().unwrap();
for (_, item) in newly_completed.iter() { for (_, item) in newly_completed.iter() {
completed_contexts_lock.push_front(*item); completed_contexts_lock.push_front(item.clone());
} }
completed_contexts_lock.len() completed_contexts_lock.len()

View File

@ -2,12 +2,12 @@ use std::{fs::File, io::{Read, Write}, path::PathBuf};
use log::{error, warn}; use log::{error, warn};
use native_model::{Decode, Encode}; use native_model::{Decode, Encode};
use serde_binary::binary_stream::Endian;
pub type DropData = v1::DropData; pub type DropData = v1::DropData;
static DROP_DATA_PATH: &str = ".dropdata"; static DROP_DATA_PATH: &str = ".dropdata";
pub mod v1 { pub mod v1 {
use std::{path::PathBuf, sync::Mutex}; use std::{path::PathBuf, sync::Mutex};
@ -19,7 +19,7 @@ pub mod v1 {
pub struct DropData { pub struct DropData {
game_id: String, game_id: String,
game_version: String, game_version: String,
pub completed_contexts: Mutex<Vec<usize>>, pub completed_contexts: Mutex<Vec<String>>,
pub base_path: PathBuf, pub base_path: PathBuf,
} }
@ -78,10 +78,10 @@ impl DropData {
Err(e) => error!("{}", e), Err(e) => error!("{}", e),
}; };
} }
pub fn set_completed_contexts(&self, completed_contexts: &[usize]) { pub fn set_completed_contexts(&self, completed_contexts: &[String]) {
*self.completed_contexts.lock().unwrap() = completed_contexts.to_owned(); *self.completed_contexts.lock().unwrap() = completed_contexts.to_owned();
} }
pub fn get_completed_contexts(&self) -> Vec<usize> { pub fn get_completed_contexts(&self) -> Vec<String> {
self.completed_contexts.lock().unwrap().clone() self.completed_contexts.lock().unwrap().clone()
} }
} }