Implemented selective symbol and footprint import in config
This commit is contained in:
30
src/main.rs
30
src/main.rs
@@ -16,6 +16,7 @@ use zip::ZipArchive;
|
|||||||
#[derive(Debug, Deserialize, Serialize)]
|
#[derive(Debug, Deserialize, Serialize)]
|
||||||
struct Config {
|
struct Config {
|
||||||
libraries: LibConfig,
|
libraries: LibConfig,
|
||||||
|
options: Option<OptionsConfig>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Config {
|
impl Config {
|
||||||
@@ -34,6 +35,7 @@ impl Config {
|
|||||||
libraries: LibConfig {
|
libraries: LibConfig {
|
||||||
path: PathBuf::from("~/KiCad/libraries/"),
|
path: PathBuf::from("~/KiCad/libraries/"),
|
||||||
},
|
},
|
||||||
|
options: None,
|
||||||
};
|
};
|
||||||
let contents = toml::to_string_pretty(&config).map_err(|_| ConfigError::ConfigErr)?;
|
let contents = toml::to_string_pretty(&config).map_err(|_| ConfigError::ConfigErr)?;
|
||||||
fs::write(&config_path, contents).map_err(|_| ConfigError::ConfigErr)?;
|
fs::write(&config_path, contents).map_err(|_| ConfigError::ConfigErr)?;
|
||||||
@@ -47,6 +49,12 @@ struct LibConfig {
|
|||||||
path: PathBuf,
|
path: PathBuf,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Deserialize, Serialize, Clone)]
|
||||||
|
struct OptionsConfig {
|
||||||
|
symbols: Option<bool>,
|
||||||
|
footprints: Option<bool>,
|
||||||
|
}
|
||||||
|
|
||||||
enum SourceType {
|
enum SourceType {
|
||||||
SymacSys,
|
SymacSys,
|
||||||
UltraLibrarian,
|
UltraLibrarian,
|
||||||
@@ -311,7 +319,7 @@ fn import_symacsys(path: &Path, config: &Config) -> Result<(), ImportError> {
|
|||||||
let sym = root.join("SymacSys_Components.kicad_sym");
|
let sym = root.join("SymacSys_Components.kicad_sym");
|
||||||
let pretty = root.join("SymacSys_Footprints.pretty");
|
let pretty = root.join("SymacSys_Footprints.pretty");
|
||||||
|
|
||||||
install_library(sym_files, mod_files, &root, &sym, &pretty)?;
|
install_library(sym_files, mod_files, &root, &sym, &pretty, config)?;
|
||||||
|
|
||||||
fs::remove_dir_all(tmp_path).map_err(|_| ImportError::InvalidPath)?;
|
fs::remove_dir_all(tmp_path).map_err(|_| ImportError::InvalidPath)?;
|
||||||
Ok(())
|
Ok(())
|
||||||
@@ -365,7 +373,7 @@ fn import_ultralibrarian(path: &Path, config: &Config) -> Result<(), ImportError
|
|||||||
let sym = root.join("UltraLibrarian_Components.kicad_sym");
|
let sym = root.join("UltraLibrarian_Components.kicad_sym");
|
||||||
let pretty = root.join("UltraLibrarian_Footprints.pretty");
|
let pretty = root.join("UltraLibrarian_Footprints.pretty");
|
||||||
|
|
||||||
install_library(sym_files, mod_files, &root, &sym, &pretty)?;
|
install_library(sym_files, mod_files, &root, &sym, &pretty, config)?;
|
||||||
|
|
||||||
fs::remove_dir_all(tmp_path).map_err(|_| ImportError::InvalidPath)?;
|
fs::remove_dir_all(tmp_path).map_err(|_| ImportError::InvalidPath)?;
|
||||||
Ok(())
|
Ok(())
|
||||||
@@ -406,7 +414,7 @@ fn import_snapmagic(path: &Path, config: &Config) -> Result<(), ImportError> {
|
|||||||
let sym = root.join("SnapMagic_components.kicad_sym");
|
let sym = root.join("SnapMagic_components.kicad_sym");
|
||||||
let pretty = root.join("SnapMagic_Footprints.pretty");
|
let pretty = root.join("SnapMagic_Footprints.pretty");
|
||||||
|
|
||||||
install_library(sym_files, mod_files, &root, &sym, &pretty)?;
|
install_library(sym_files, mod_files, &root, &sym, &pretty, config)?;
|
||||||
|
|
||||||
fs::remove_dir_all(data_dir).map_err(|_| ImportError::InvalidPath)?;
|
fs::remove_dir_all(data_dir).map_err(|_| ImportError::InvalidPath)?;
|
||||||
Ok(())
|
Ok(())
|
||||||
@@ -418,10 +426,23 @@ fn install_library(
|
|||||||
lib_root: &Path,
|
lib_root: &Path,
|
||||||
sym_file: &Path,
|
sym_file: &Path,
|
||||||
pretty_dir: &Path,
|
pretty_dir: &Path,
|
||||||
|
config: &Config,
|
||||||
) -> Result<(), ImportError> {
|
) -> Result<(), ImportError> {
|
||||||
|
let symbols = config
|
||||||
|
.options
|
||||||
|
.as_ref()
|
||||||
|
.and_then(|o| o.symbols)
|
||||||
|
.unwrap_or(true);
|
||||||
|
let footprints = config
|
||||||
|
.options
|
||||||
|
.as_ref()
|
||||||
|
.and_then(|o| o.footprints)
|
||||||
|
.unwrap_or(true);
|
||||||
|
|
||||||
fs::create_dir_all(lib_root).map_err(|_| ImportError::InvalidPath)?;
|
fs::create_dir_all(lib_root).map_err(|_| ImportError::InvalidPath)?;
|
||||||
fs::create_dir_all(pretty_dir).map_err(|_| ImportError::InvalidPath)?;
|
fs::create_dir_all(pretty_dir).map_err(|_| ImportError::InvalidPath)?;
|
||||||
|
|
||||||
|
if symbols {
|
||||||
// Load or create symbol library
|
// Load or create symbol library
|
||||||
let mut current_lib = if sym_file.exists() {
|
let mut current_lib = if sym_file.exists() {
|
||||||
let contents = fs::read_to_string(sym_file).map_err(|_| ImportError::InvalidPath)?;
|
let contents = fs::read_to_string(sym_file).map_err(|_| ImportError::InvalidPath)?;
|
||||||
@@ -446,13 +467,16 @@ fn install_library(
|
|||||||
let output = current_lib.write();
|
let output = current_lib.write();
|
||||||
fs::write(sym_file, output).map_err(|_| ImportError::InvalidPath)?;
|
fs::write(sym_file, output).map_err(|_| ImportError::InvalidPath)?;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if footprints {
|
||||||
// Install footprints
|
// Install footprints
|
||||||
for mod_path in mod_files {
|
for mod_path in mod_files {
|
||||||
let filename = mod_path.file_name().ok_or(ImportError::InvalidPath)?;
|
let filename = mod_path.file_name().ok_or(ImportError::InvalidPath)?;
|
||||||
let target = pretty_dir.join(filename);
|
let target = pretty_dir.join(filename);
|
||||||
fs::copy(mod_path, target).map_err(|_| ImportError::InvalidPath)?;
|
fs::copy(mod_path, target).map_err(|_| ImportError::InvalidPath)?;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user