mirror of
https://github.com/redstrate/Physis.git
synced 2025-06-07 23:27:45 +00:00
Stop crashing on first boot, with no expansions installed
This commit is contained in:
parent
22b645ec3b
commit
b3debd7839
2 changed files with 48 additions and 11 deletions
|
@ -8,7 +8,7 @@ use crate::patch::{apply_patch, PatchError};
|
||||||
use crate::repository::{string_to_category, Category, Repository};
|
use crate::repository::{string_to_category, Category, Repository};
|
||||||
use crate::sqpack::calculate_hash;
|
use crate::sqpack::calculate_hash;
|
||||||
use std::fs;
|
use std::fs;
|
||||||
use std::fs::DirEntry;
|
use std::fs::{DirEntry, ReadDir};
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
use tracing::{debug, error, info, span, warn, Level};
|
use tracing::{debug, error, info, span, warn, Level};
|
||||||
|
|
||||||
|
@ -88,26 +88,35 @@ impl GameData {
|
||||||
self.repositories.clear();
|
self.repositories.clear();
|
||||||
|
|
||||||
let mut d = PathBuf::from(self.game_directory.as_str());
|
let mut d = PathBuf::from(self.game_directory.as_str());
|
||||||
|
|
||||||
|
// add initial ffxiv directory
|
||||||
|
if let Some(base_repository) = Repository::from_existing_base(d.to_str().unwrap()) {
|
||||||
|
self.repositories.push(base_repository);
|
||||||
|
}
|
||||||
|
|
||||||
|
// add expansions
|
||||||
d.push("sqpack");
|
d.push("sqpack");
|
||||||
|
|
||||||
let repository_paths: Vec<DirEntry> = fs::read_dir(d.as_path())
|
if let Ok(repository_paths) = fs::read_dir(d.as_path()) {
|
||||||
.unwrap()
|
let repository_paths : ReadDir = repository_paths;
|
||||||
.filter_map(Result::ok)
|
|
||||||
.filter(|s| s.file_type().unwrap().is_dir())
|
|
||||||
.collect();
|
|
||||||
|
|
||||||
for repository_path in repository_paths {
|
let repository_paths : Vec<DirEntry> = repository_paths
|
||||||
debug!(repository_path=repository_path.path().to_str(), "Found repository");
|
.filter_map(Result::ok)
|
||||||
|
.filter(|s| s.file_type().unwrap().is_dir())
|
||||||
|
.collect();
|
||||||
|
|
||||||
self.repositories
|
for repository_path in repository_paths {
|
||||||
.push(Repository::from_existing(repository_path.path().to_str().unwrap()).unwrap());
|
if let Some(expansion_repository) =Repository::from_existing(repository_path.path().to_str().unwrap()) {
|
||||||
|
self.repositories.push(expansion_repository);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
self.repositories.sort();
|
self.repositories.sort();
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_index_file(&self, path: &str) -> Option<IndexFile> {
|
fn get_index_file(&self, path: &str) -> Option<IndexFile> {
|
||||||
let (repository, category) = self.parse_repository_category(path).unwrap();
|
let (repository, category) = self.parse_repository_category(path)?;
|
||||||
|
|
||||||
let index_path: PathBuf = [
|
let index_path: PathBuf = [
|
||||||
self.game_directory.clone(),
|
self.game_directory.clone(),
|
||||||
|
|
|
@ -137,6 +137,11 @@ impl Repository {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// use from_existing_base instead
|
||||||
|
if repo_type == Base {
|
||||||
|
return None
|
||||||
|
}
|
||||||
|
|
||||||
let version = if repo_type == Base {
|
let version = if repo_type == Base {
|
||||||
let mut d = PathBuf::from(dir);
|
let mut d = PathBuf::from(dir);
|
||||||
d.pop();
|
d.pop();
|
||||||
|
@ -158,6 +163,29 @@ impl Repository {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn from_existing_base(dir: &str) -> Option<Repository> {
|
||||||
|
let path = Path::new(dir);
|
||||||
|
if path.metadata().is_err() {
|
||||||
|
return None;
|
||||||
|
}
|
||||||
|
|
||||||
|
let name = String::from(path.file_stem().unwrap().to_str().unwrap());
|
||||||
|
|
||||||
|
let mut d = PathBuf::from(dir);
|
||||||
|
d.push("ffxivgame.ver");
|
||||||
|
|
||||||
|
let version = read_version(d.as_path());
|
||||||
|
if version != None {
|
||||||
|
Some(Repository {
|
||||||
|
name,
|
||||||
|
repo_type: Base,
|
||||||
|
version,
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn expansion(&self) -> i32 {
|
fn expansion(&self) -> i32 {
|
||||||
match self.repo_type {
|
match self.repo_type {
|
||||||
Base => 0,
|
Base => 0,
|
||||||
|
|
Loading…
Add table
Reference in a new issue