@@ -38,6 +38,13 @@ fn missing_value(key: &str) {
3838///
3939/// A `PathBuf` containing the default backup directory path
4040fn default_ios_backup_directory ( ) -> PathBuf {
41+ let backup_dir = PathBuf :: from (
42+ squire:: env_var ( "backup_dir" , Some ( vec ! [ "source_dir" , "source" , "src" ] ) )
43+ . unwrap_or_default ( ) ,
44+ ) ;
45+ if backup_dir. exists ( ) {
46+ return backup_dir;
47+ }
4148 let home = dirs:: home_dir ( ) . expect ( "Could not determine home directory" ) ;
4249 if cfg ! ( target_os = "windows" ) {
4350 home. join ( "AppData/Roaming/Apple Computer/MobileSync/Backup" )
@@ -46,6 +53,23 @@ fn default_ios_backup_directory() -> PathBuf {
4653 }
4754}
4855
56+ /// Default output directory
57+ ///
58+ /// # Returns
59+ ///
60+ /// A `PathBuf` containing the default output directory path
61+ fn default_output_directory ( ) -> PathBuf {
62+ let output_str = squire:: env_var (
63+ "output_dir" ,
64+ Some ( vec ! [ "destination_dir" , "destination" , "dst" ] ) ,
65+ )
66+ . unwrap_or_default ( ) ;
67+ if output_str. is_empty ( ) {
68+ return PathBuf :: from ( "extracted" ) ;
69+ }
70+ PathBuf :: from ( output_str)
71+ }
72+
4973/// Helper function to print the command-line arguments.
5074///
5175/// # Returns
@@ -82,6 +106,7 @@ pub fn arguments(metadata: &constant::MetaData) -> ArgConfig {
82106 let mut debug = false ;
83107 let mut serial = String :: new ( ) ;
84108 let mut workers = String :: new ( ) ;
109+ let mut env_file = String :: new ( ) ;
85110 let mut backup_dir = String :: new ( ) ;
86111 let mut output_dir = String :: new ( ) ;
87112 let mut organize = Organizer :: Auto ;
@@ -122,6 +147,14 @@ pub fn arguments(metadata: &constant::MetaData) -> ArgConfig {
122147 missing_value ( & args[ i - 1 ] ) ;
123148 }
124149 }
150+ "--env" | "--env-file" => {
151+ i += 1 ; // Move to the next argument.
152+ if i < args. len ( ) {
153+ env_file = args[ i] . clone ( ) ;
154+ } else {
155+ missing_value ( & args[ i - 1 ] ) ;
156+ }
157+ }
125158 "--organize" => {
126159 i += 1 ; // Move to the next argument.
127160 if i < args. len ( ) {
@@ -166,6 +199,12 @@ pub fn arguments(metadata: &constant::MetaData) -> ArgConfig {
166199 println ! ( "{} {}" , & metadata. pkg_name, & metadata. pkg_version) ;
167200 std:: process:: exit ( 0 )
168201 }
202+
203+ if env_file. is_empty ( ) {
204+ env_file = squire:: env_var ( "env_file" , None ) . unwrap_or ( ".env" . to_string ( ) )
205+ }
206+ let _ = dotenv:: from_path ( env_file) ;
207+
169208 let backup_dir_final = if backup_dir. is_empty ( ) {
170209 default_ios_backup_directory ( )
171210 } else {
@@ -181,7 +220,7 @@ pub fn arguments(metadata: &constant::MetaData) -> ArgConfig {
181220 }
182221 } ;
183222 let output_dir_final = if output_dir. is_empty ( ) {
184- PathBuf :: from ( "extracted" )
223+ default_output_directory ( )
185224 } else {
186225 PathBuf :: from ( output_dir)
187226 } ;
@@ -190,11 +229,18 @@ pub fn arguments(metadata: &constant::MetaData) -> ArgConfig {
190229 } else {
191230 workers. parse :: < usize > ( ) . unwrap ( )
192231 } ;
232+ if serial. is_empty ( ) {
233+ serial = squire:: env_var ( "serial" , None ) . unwrap_or_default ( )
234+ }
193235 let serial_numbers: Vec < String > = serial
194236 . split ( "," )
195237 . filter ( |s| !s. is_empty ( ) )
196238 . map ( String :: from)
197239 . collect ( ) ;
240+ // todo: implement env var check for all CLI arguments
241+ // todo: remove the debug step
242+ println ! ( "{:?}" , backup_dir_final) ;
243+ println ! ( "{:?}" , output_dir_final) ;
198244 ArgConfig {
199245 list,
200246 all,
0 commit comments