@@ -486,6 +486,7 @@ pub fn build_wix_app_installer(
486486 data. insert ( "binaries" , binaries_json) ;
487487
488488 let resources = generate_resource_data ( settings) ?;
489+ println ! ( "{:?}" , serde_json:: to_string( & resources) . unwrap( ) ) ;
489490 let mut resources_wix_string = String :: from ( "" ) ;
490491 let mut files_ids = Vec :: new ( ) ;
491492 for ( _, dir) in resources {
@@ -703,19 +704,35 @@ fn generate_resource_data(settings: &Settings) -> crate::Result<ResourceMap> {
703704 } ;
704705
705706 // split the resource path directories
706- let mut directories = src
707+ let directories = src
707708 . components ( )
708709 . filter ( |component| {
709710 let comp = component. as_os_str ( ) ;
710711 comp != "." && comp != ".."
711712 } )
712713 . collect :: < Vec < _ > > ( ) ;
713- directories. truncate ( directories. len ( ) - 1 ) ;
714714 // transform the directory structure to a chained vec structure
715715 let first_directory = directories
716716 . first ( )
717717 . map ( |d| d. as_os_str ( ) . to_string_lossy ( ) . into_owned ( ) )
718718 . unwrap_or_else ( String :: new) ;
719+
720+ if !resources. contains_key ( & first_directory) {
721+ resources. insert (
722+ first_directory. clone ( ) ,
723+ ResourceDirectory {
724+ path : first_directory. clone ( ) ,
725+ name : first_directory. clone ( ) ,
726+ directories : vec ! [ ] ,
727+ files : vec ! [ ] ,
728+ } ,
729+ ) ;
730+ }
731+
732+ let mut directory_entry = resources
733+ . get_mut ( & first_directory)
734+ . expect ( "Unable to handle resources" ) ;
735+
719736 let last_index = directories. len ( ) - 1 ;
720737 let mut path = String :: new ( ) ;
721738 for ( i, directory) in directories. into_iter ( ) . enumerate ( ) {
@@ -725,57 +742,30 @@ fn generate_resource_data(settings: &Settings) -> crate::Result<ResourceMap> {
725742 . into_string ( )
726743 . expect ( "failed to read resource folder name" ) ;
727744 path. push_str ( directory_name. as_str ( ) ) ;
745+ path. push ( std:: path:: MAIN_SEPARATOR ) ;
728746
729- // if the directory is already on the map
730- if resources. contains_key ( & first_directory) {
731- let directory_entry = & mut resources
732- . get_mut ( & first_directory)
733- . expect ( "Unable to handle resources" ) ;
734- if last_index == 0 {
735- // the directory entry is the root of the chain
736- directory_entry. add_file ( resource_entry. clone ( ) ) ;
737- } else {
738- let index = directory_entry
739- . directories
740- . iter ( )
741- . position ( |f| f. path == path) ;
742- if let Some ( index) = index {
743- // the directory entry is already a part of the chain
744- if i == last_index {
745- let dir = directory_entry
746- . directories
747- . get_mut ( index)
748- . expect ( "Unable to get directory" ) ;
749- dir. add_file ( resource_entry. clone ( ) ) ;
750- }
751- } else {
752- // push it to the chain
747+ if i == last_index {
748+ directory_entry. add_file ( resource_entry) ;
749+ break ;
750+ } else if i == 0 {
751+ continue ;
752+ } else {
753+ let index = directory_entry
754+ . directories
755+ . iter ( )
756+ . position ( |f| f. path == path) ;
757+ match index {
758+ Some ( i) => directory_entry = directory_entry. directories . iter_mut ( ) . nth ( i) . unwrap ( ) ,
759+ None => {
753760 directory_entry. directories . push ( ResourceDirectory {
754761 path : path. clone ( ) ,
755- name : directory_name. clone ( ) ,
762+ name : directory_name,
756763 directories : vec ! [ ] ,
757- files : if i == last_index {
758- vec ! [ resource_entry. clone( ) ]
759- } else {
760- vec ! [ ]
761- } ,
764+ files : vec ! [ ] ,
762765 } ) ;
766+ directory_entry = directory_entry. directories . iter_mut ( ) . last ( ) . unwrap ( ) ;
763767 }
764768 }
765- } else {
766- resources. insert (
767- directory_name. clone ( ) ,
768- ResourceDirectory {
769- path : path. clone ( ) ,
770- name : directory_name. clone ( ) ,
771- directories : vec ! [ ] ,
772- files : if i == last_index {
773- vec ! [ resource_entry. clone( ) ]
774- } else {
775- vec ! [ ]
776- } ,
777- } ,
778- ) ;
779769 }
780770 }
781771 }
0 commit comments