mirror of
https://codeberg.org/icewind/tf-asset-loader.git
synced 2026-06-03 08:34:21 +02:00
updates
This commit is contained in:
parent
e27296b857
commit
7901957f3e
6 changed files with 332 additions and 146 deletions
25
src/lib.rs
25
src/lib.rs
|
|
@ -8,6 +8,8 @@ use std::sync::Arc;
|
|||
use steamlocate::SteamDir;
|
||||
use thiserror::Error;
|
||||
use tracing::warn;
|
||||
#[cfg(feature = "bsp")]
|
||||
use vbsp::BspError;
|
||||
|
||||
#[derive(Debug, Error)]
|
||||
pub enum LoaderError {
|
||||
|
|
@ -22,6 +24,17 @@ pub enum LoaderError {
|
|||
Other(String),
|
||||
}
|
||||
|
||||
#[cfg(feature = "bsp")]
|
||||
impl From<BspError> for LoaderError {
|
||||
fn from(value: BspError) -> Self {
|
||||
match value {
|
||||
BspError::Zip(err) => LoaderError::Zip(err),
|
||||
BspError::IO(err) => LoaderError::Io(err),
|
||||
err => LoaderError::Other(err.to_string()),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone)]
|
||||
pub struct Loader {
|
||||
sources: Vec<Arc<dyn AssetSource + Send + Sync>>,
|
||||
|
|
@ -120,11 +133,11 @@ fn tf2_path() -> Result<PathBuf, LoaderError> {
|
|||
Err(LoaderError::Tf2NotFound)
|
||||
}
|
||||
} else {
|
||||
Ok(SteamDir::locate()
|
||||
.ok_or(LoaderError::Tf2NotFound)?
|
||||
.app(&440)
|
||||
.ok_or(LoaderError::Tf2NotFound)?
|
||||
.path
|
||||
.clone())
|
||||
let (app, library) = SteamDir::locate()
|
||||
.map_err(|_| LoaderError::Tf2NotFound)?
|
||||
.find_app(440)
|
||||
.map_err(|_| LoaderError::Tf2NotFound)?
|
||||
.ok_or(LoaderError::Tf2NotFound)?;
|
||||
Ok(library.resolve_app_dir(&app))
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -48,23 +48,15 @@ mod vdf {
|
|||
mod vbsp {
|
||||
use super::AssetSource;
|
||||
use crate::LoaderError;
|
||||
use vbsp::{BspError, Packfile};
|
||||
use vbsp::Packfile;
|
||||
|
||||
impl AssetSource for Packfile {
|
||||
fn has(&self, path: &str) -> Result<bool, LoaderError> {
|
||||
match self.has(path) {
|
||||
Ok(found) => Ok(found),
|
||||
Err(BspError::Zip(err)) => Err(err.into()),
|
||||
Err(e) => Err(LoaderError::Other(e.to_string())), // the error *should* always be a zip error
|
||||
}
|
||||
Ok(self.has(path)?)
|
||||
}
|
||||
|
||||
fn load(&self, path: &str) -> Result<Option<Vec<u8>>, LoaderError> {
|
||||
match self.get(path) {
|
||||
Ok(data) => Ok(data),
|
||||
Err(BspError::Zip(err)) => Err(err.into()),
|
||||
Err(e) => Err(LoaderError::Other(e.to_string())), // the error *should* always be a zip error
|
||||
}
|
||||
Ok(self.get(path)?)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -82,12 +74,8 @@ mod zip {
|
|||
fn has(&self, path: &str) -> Result<bool, LoaderError> {
|
||||
match self.lock().unwrap().by_name(path) {
|
||||
Ok(_) => Ok(true),
|
||||
Err(ZipError::FileNotFound) => {
|
||||
return Ok(false);
|
||||
}
|
||||
Err(e) => {
|
||||
return Err(e.into());
|
||||
}
|
||||
Err(ZipError::FileNotFound) => Ok(false),
|
||||
Err(e) => Err(e.into()),
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue