data: Made data flow in fallback clearer
This commit is contained in:
		
							
								
								
									
										50
									
								
								src/data.rs
									
									
									
									
									
								
							
							
						
						
									
										50
									
								
								src/data.rs
									
									
									
									
									
								
							@ -97,6 +97,8 @@ impl fmt::Display for DataSource {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type LayoutSource = (ArrangementKind, DataSource);
 | 
			
		||||
 | 
			
		||||
/// Lists possible sources, with 0 as the most preferred one
 | 
			
		||||
/// Trying order: native lang of the right kind, native base,
 | 
			
		||||
/// fallback lang of the right kind, fallback base
 | 
			
		||||
@ -104,19 +106,12 @@ fn list_layout_sources(
 | 
			
		||||
    name: &str,
 | 
			
		||||
    kind: ArrangementKind,
 | 
			
		||||
    keyboards_path: Option<PathBuf>,
 | 
			
		||||
) -> Vec<(ArrangementKind, DataSource)> {
 | 
			
		||||
    let mut ret = Vec::new();
 | 
			
		||||
    {
 | 
			
		||||
        fn name_with_arrangement(name: String, kind: &ArrangementKind)
 | 
			
		||||
            -> String
 | 
			
		||||
        {
 | 
			
		||||
            match kind {    
 | 
			
		||||
                ArrangementKind::Base => name,
 | 
			
		||||
                ArrangementKind::Wide => name + "_wide",
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        let mut add_by_name = |name: &str, kind: &ArrangementKind| {
 | 
			
		||||
) -> Vec<LayoutSource> {
 | 
			
		||||
    let add_by_name = |
 | 
			
		||||
        mut ret: Vec<LayoutSource>,
 | 
			
		||||
        name: &str,
 | 
			
		||||
        kind: &ArrangementKind,
 | 
			
		||||
    | -> Vec<LayoutSource> {
 | 
			
		||||
        if let Some(path) = keyboards_path.clone() {
 | 
			
		||||
            ret.push((
 | 
			
		||||
                kind.clone(),
 | 
			
		||||
@ -130,28 +125,43 @@ fn list_layout_sources(
 | 
			
		||||
            kind.clone(),
 | 
			
		||||
            DataSource::Resource(name.into())
 | 
			
		||||
        ));
 | 
			
		||||
        ret
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
        match &kind {
 | 
			
		||||
            ArrangementKind::Base => {},
 | 
			
		||||
    let ret = {
 | 
			
		||||
        fn name_with_arrangement(name: String, kind: &ArrangementKind)
 | 
			
		||||
            -> String
 | 
			
		||||
        {
 | 
			
		||||
            match kind {    
 | 
			
		||||
                ArrangementKind::Base => name,
 | 
			
		||||
                ArrangementKind::Wide => name + "_wide",
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        let ret = Vec::new();
 | 
			
		||||
 | 
			
		||||
        let ret = match &kind {
 | 
			
		||||
            ArrangementKind::Base => ret,
 | 
			
		||||
            kind => add_by_name(
 | 
			
		||||
                ret,
 | 
			
		||||
                &name_with_arrangement(name.into(), &kind),
 | 
			
		||||
                &kind,
 | 
			
		||||
            ),
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        add_by_name(name, &ArrangementKind::Base);
 | 
			
		||||
        let ret = add_by_name(ret, name, &ArrangementKind::Base);
 | 
			
		||||
 | 
			
		||||
        match &kind {
 | 
			
		||||
            ArrangementKind::Base => {},
 | 
			
		||||
        let ret = match &kind {
 | 
			
		||||
            ArrangementKind::Base => ret,
 | 
			
		||||
            kind => add_by_name(
 | 
			
		||||
                ret,
 | 
			
		||||
                &name_with_arrangement(FALLBACK_LAYOUT_NAME.into(), &kind),
 | 
			
		||||
                &kind,
 | 
			
		||||
            ),
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        add_by_name(FALLBACK_LAYOUT_NAME, &ArrangementKind::Base);
 | 
			
		||||
    }
 | 
			
		||||
        add_by_name(ret, FALLBACK_LAYOUT_NAME, &ArrangementKind::Base)
 | 
			
		||||
    };
 | 
			
		||||
    ret
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user