Skip to content
This repository has been archived by the owner on Jul 22, 2023. It is now read-only.

Commit

Permalink
fixes provider names in preview and pdf (#405)
Browse files Browse the repository at this point in the history
  • Loading branch information
crapStone authored Mar 31, 2021
1 parent 45021aa commit 9bd02c6
Show file tree
Hide file tree
Showing 6 changed files with 51 additions and 12 deletions.
10 changes: 6 additions & 4 deletions src-tauri/cabr2_load_save/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@
#![allow(clippy::unnecessary_unwrap)]
#![allow(clippy::upper_case_acronyms)]

use tauri::plugin::Plugin;

mod cmd;
mod error;
mod handler;
Expand All @@ -13,19 +11,23 @@ mod beryllium;
mod cabr2;
mod pdf;

use tauri::plugin::Plugin;

use cabr2_types::ProviderMapping;

use cmd::Cmd;

pub struct LoadSave;

impl LoadSave {
pub fn new() -> LoadSave {
pub fn new(provider_mapping: ProviderMapping) -> LoadSave {
let mut loaders = handler::REGISTERED_LOADERS.lock().unwrap();
loaders.insert("cb2", Box::new(cabr2::CaBr2));
loaders.insert("be", Box::new(beryllium::Beryllium));

let mut savers = handler::REGISTERED_SAVERS.lock().unwrap();
savers.insert("cb2", Box::new(cabr2::CaBr2));
savers.insert("pdf", Box::new(pdf::PDF));
savers.insert("pdf", Box::new(pdf::PDF::new(provider_mapping)));

LoadSave
}
Expand Down
19 changes: 17 additions & 2 deletions src-tauri/cabr2_load_save/src/pdf/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,15 @@ mod merge;
mod types;

use std::{
collections::HashMap,
fs::OpenOptions,
io::{BufReader, Read},
path::PathBuf,
sync::{mpsc, Arc, Mutex},
thread,
};

use cabr2_types::ProviderMapping;
use handlebars::Handlebars;
use lazy_static::lazy_static;
use lopdf::Document;
Expand All @@ -23,9 +25,20 @@ use super::{
types::{CaBr2Document, Saver},
};

type PDFThreadChannels = Arc<Mutex<(mpsc::SyncSender<(String, String)>, mpsc::Receiver<Result<Vec<u8>>>)>>;

lazy_static! {
pub static ref PROVIDER_MAPPING: Arc<Mutex<ProviderMapping>> = Arc::new(Mutex::new(HashMap::new()));
}

pub struct PDF;

type PDFThreadChannels = Arc<Mutex<(mpsc::SyncSender<(String, String)>, mpsc::Receiver<Result<Vec<u8>>>)>>;
impl PDF {
pub fn new(provider_mapping: ProviderMapping) -> PDF {
PROVIDER_MAPPING.lock().unwrap().extend(provider_mapping.into_iter());
PDF
}
}

impl Saver for PDF {
fn save_document(&self, filename: PathBuf, document: CaBr2Document) -> Result<()> {
Expand Down Expand Up @@ -200,7 +213,7 @@ mod handlebar_helpers {

use cabr2_config::{get_hazard_symbols, GHSSymbols};

use super::types::PDFSubstanceData;
use super::{types::PDFSubstanceData, PROVIDER_MAPPING};

lazy_static! {
static ref GHS_SYMBOLS: Arc<Mutex<GHSSymbols>> = Arc::new(Mutex::new(get_hazard_symbols().unwrap_or_default()));
Expand Down Expand Up @@ -337,10 +350,12 @@ mod handlebar_helpers {

let providers: BTreeSet<String> = substances.into_iter().map(|s| s.source.provider).collect();

let provider_mapping = PROVIDER_MAPPING.lock().unwrap();
// kill empty string from empty substance lines
for (i, provider) in providers
.iter()
.filter(|p| !(p.is_empty() || p.as_str() == "custom"))
.map(|p| provider_mapping.get(p).unwrap())
.enumerate()
{
if i > 0 {
Expand Down
12 changes: 12 additions & 0 deletions src-tauri/cabr2_search/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ mod types;

mod gestis;

use std::collections::HashMap;

use tauri::plugin::Plugin;
use ureq::AgentBuilder;

Expand All @@ -27,6 +29,16 @@ impl Search {

Search
}

pub fn get_provider_mapping(&self) -> HashMap<String, String> {
let providers = handler::REGISTERED_PROVIDERS.lock().unwrap();
let mut mapping = HashMap::new();
for (id, provider) in providers.iter() {
mapping.insert(id.to_string(), provider.get_name());
}

mapping
}
}

impl Plugin for Search {
Expand Down
4 changes: 4 additions & 0 deletions src-tauri/cabr2_types/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

pub mod logging;

use std::collections::HashMap;

use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};

Expand Down Expand Up @@ -76,3 +78,5 @@ pub enum Unit {
SolutionMicromol,
Custom(String),
}

pub type ProviderMapping = HashMap<String, String>;
2 changes: 1 addition & 1 deletion src-tauri/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ fn main() {
let logger = cabr2_logger::Logger::new();

let config = cabr2_config::Config;
let load_save = cabr2_load_save::LoadSave::new();
let search = cabr2_search::Search::new();
let load_save = cabr2_load_save::LoadSave::new(search.get_provider_mapping());

log::debug!("initializing tauri application...");

Expand Down
16 changes: 11 additions & 5 deletions src/app/preview/preview.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ import { Amount } from '../@core/models/substances.model';
import { GlobalModel } from '../@core/models/global.model';
import { Header } from '../@core/interfaces/Header';
import { LocalizedStrings } from '../@core/services/i18n/i18n.service';
import { ProviderMapping } from '../@core/services/provider/provider.model';
import { ProviderService } from '../@core/services/provider/provider.service';

// TODO ViewSubstanceData and move
interface SimpleSubstanceData {
Expand Down Expand Up @@ -36,11 +38,14 @@ export class PreviewComponent implements OnInit {
header!: Header;

substanceData!: SimpleSubstanceData[];
providerMapping!: ProviderMapping;

sources: string[] = [];
sources: Set<string> = new Set();

constructor(public globals: GlobalModel, private sanitizer: DomSanitizer) {
constructor(public globals: GlobalModel, private providerService: ProviderService, private sanitizer: DomSanitizer) {
this.globals.localizedStringsObservable.subscribe((strings) => (this.strings = strings));

this.providerService.providerMappingsObservable.subscribe((providers) => (this.providerMapping = providers));
}

ngOnInit(): void {
Expand All @@ -50,8 +55,9 @@ export class PreviewComponent implements OnInit {
.pipe(
map((data) =>
data.map<SimpleSubstanceData>((value) => {
if (this.sources.indexOf(value.source.provider) === -1) {
this.sources.push(value.source.provider);
const provider = this.providerMapping.get(value.source.provider);
if (provider && provider.identifier !== 'custom') {
this.sources.add(provider.name);
}

return {
Expand Down Expand Up @@ -122,6 +128,6 @@ export class PreviewComponent implements OnInit {
}

getProviders(): string {
return this.sources.join(', ');
return Array.from(this.sources.values()).join(', ');
}
}

0 comments on commit 9bd02c6

Please sign in to comment.