Finds a similar-ish wad txt file
This commit is contained in:
@@ -13,4 +13,5 @@ native-dialog = "0.6.3"
|
|||||||
rfd = "0.11.4"
|
rfd = "0.11.4"
|
||||||
serde = "1.0.163"
|
serde = "1.0.163"
|
||||||
serde_derive = "1.0.163"
|
serde_derive = "1.0.163"
|
||||||
|
strsim = "0.10.0"
|
||||||
toml = "0.7.4"
|
toml = "0.7.4"
|
||||||
|
|||||||
44
src/wad.rs
44
src/wad.rs
@@ -2,8 +2,10 @@ use bincode;
|
|||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use std::fs::File;
|
use std::fs::File;
|
||||||
|
use std::fs;
|
||||||
use std::io::{BufReader, Seek, SeekFrom};
|
use std::io::{BufReader, Seek, SeekFrom};
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
|
use strsim;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
A great document I've used as a reference is The Unofficial Doom Specs v1.666
|
A great document I've used as a reference is The Unofficial Doom Specs v1.666
|
||||||
@@ -57,11 +59,26 @@ pub struct OpenWad {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn find_txt_file(path: &PathBuf) -> Option<PathBuf> {
|
pub fn find_txt_file(path: &PathBuf) -> Option<PathBuf> {
|
||||||
// get folder WAD is in
|
if !path.exists() || !path.is_file() {
|
||||||
// get name of WAD
|
return None
|
||||||
// iterate through all txt/TXT files
|
}
|
||||||
// if name is like 50% the same/similar, return match
|
if let (Some(f), Some(p)) = (path.file_name(), path.parent()) {
|
||||||
// return if found anything, otherwise None
|
let files_in_folder = fs::read_dir(&p).unwrap();
|
||||||
|
let mut txt_file = PathBuf::from(f);
|
||||||
|
txt_file.set_extension(".txt");
|
||||||
|
let txt_file = txt_file.into_os_string().into_string().unwrap().to_lowercase();
|
||||||
|
for f in files_in_folder {
|
||||||
|
// Jesus this can't be the right way to do things
|
||||||
|
let f1 = f.unwrap().path().file_name().unwrap().to_os_string().into_string().unwrap();
|
||||||
|
let f2 = f1.clone().to_lowercase();
|
||||||
|
let result = strsim::normalized_levenshtein(&txt_file, &f2);
|
||||||
|
if result > 0.5 {
|
||||||
|
let mut f3 = PathBuf::from(p);
|
||||||
|
f3.push(f1);
|
||||||
|
return Some(f3);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -276,7 +293,7 @@ mod tests {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_open_wad() {
|
fn test_open_wad() {
|
||||||
let freedoom_iwad = PathBuf::from("freedoom1.wad");
|
let freedoom_iwad = PathBuf::from("test_files/freedoom1.wad");
|
||||||
assert!(
|
assert!(
|
||||||
freedoom_iwad.exists(),
|
freedoom_iwad.exists(),
|
||||||
"WAD test need freedoom1.wad - get it from here https://freedoom.github.io"
|
"WAD test need freedoom1.wad - get it from here https://freedoom.github.io"
|
||||||
@@ -288,7 +305,7 @@ mod tests {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_num_levels_correct() {
|
fn test_num_levels_correct() {
|
||||||
let freedoom_iwad = PathBuf::from("freedoom1.wad");
|
let freedoom_iwad = PathBuf::from("test_files/freedoom1.wad");
|
||||||
let ow = open_wad(&freedoom_iwad);
|
let ow = open_wad(&freedoom_iwad);
|
||||||
let summary = get_enemies_and_health_per_level(ow);
|
let summary = get_enemies_and_health_per_level(ow);
|
||||||
assert_eq!(summary.len(), 9 * 4);
|
assert_eq!(summary.len(), 9 * 4);
|
||||||
@@ -296,7 +313,7 @@ mod tests {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_enemies_correct() {
|
fn test_enemies_correct() {
|
||||||
let freedoom_iwad = PathBuf::from("freedoom1.wad");
|
let freedoom_iwad = PathBuf::from("test_files/freedoom1.wad");
|
||||||
let ow = open_wad(&freedoom_iwad);
|
let ow = open_wad(&freedoom_iwad);
|
||||||
let summary = get_enemies_and_health_per_level(ow);
|
let summary = get_enemies_and_health_per_level(ow);
|
||||||
let (c1m1e, _) = summary.get("E1M1\0\0\0\0").unwrap();
|
let (c1m1e, _) = summary.get("E1M1\0\0\0\0").unwrap();
|
||||||
@@ -305,7 +322,7 @@ mod tests {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_health_correct() {
|
fn test_health_correct() {
|
||||||
let freedoom_iwad = PathBuf::from("freedoom1.wad");
|
let freedoom_iwad = PathBuf::from("test_files/freedoom1.wad");
|
||||||
let ow = open_wad(&freedoom_iwad);
|
let ow = open_wad(&freedoom_iwad);
|
||||||
let summary = get_enemies_and_health_per_level(ow);
|
let summary = get_enemies_and_health_per_level(ow);
|
||||||
let (_, c1m1h) = summary.get("E1M1\0\0\0\0").unwrap();
|
let (_, c1m1h) = summary.get("E1M1\0\0\0\0").unwrap();
|
||||||
@@ -318,7 +335,7 @@ mod tests {
|
|||||||
#[test]
|
#[test]
|
||||||
#[ignore]
|
#[ignore]
|
||||||
fn test_guess_at_difficulty() {
|
fn test_guess_at_difficulty() {
|
||||||
let freedoom_iwad = PathBuf::from("freedoom1.wad");
|
let freedoom_iwad = PathBuf::from("test_files/freedoom1.wad");
|
||||||
let ow = open_wad(&freedoom_iwad);
|
let ow = open_wad(&freedoom_iwad);
|
||||||
let summary = get_enemies_and_health_per_level(ow);
|
let summary = get_enemies_and_health_per_level(ow);
|
||||||
let mut levels = Vec::new();
|
let mut levels = Vec::new();
|
||||||
@@ -338,6 +355,13 @@ mod tests {
|
|||||||
panic!();
|
panic!();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_txt_file_finding() {
|
||||||
|
let wad_path = PathBuf::from("test_files/10amBreakM.wad");
|
||||||
|
let txt_file = find_txt_file(&wad_path);
|
||||||
|
assert_eq!(txt_file, Some(PathBuf::from("test_files/10amBreakM.txt")));
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_struct_size() {
|
fn test_struct_size() {
|
||||||
// This probably isn't really neccesary... but it might catch a mistake, maybe?
|
// This probably isn't really neccesary... but it might catch a mistake, maybe?
|
||||||
|
|||||||
Reference in New Issue
Block a user