mirror of
				https://github.com/derrod/legendary.git
				synced 2025-11-04 10:24:49 +00:00 
			
		
		
		
	[cli/core/lfs] Allow specifying custom config file
This commit is contained in:
		
							parent
							
								
									b319cb505c
								
							
						
					
					
						commit
						ee2432c443
					
				| 
						 | 
					@ -37,8 +37,8 @@ logger = logging.getLogger('cli')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class LegendaryCLI:
 | 
					class LegendaryCLI:
 | 
				
			||||||
    def __init__(self):
 | 
					    def __init__(self, override_config=None):
 | 
				
			||||||
        self.core = LegendaryCore()
 | 
					        self.core = LegendaryCore(override_config)
 | 
				
			||||||
        self.logger = logging.getLogger('cli')
 | 
					        self.logger = logging.getLogger('cli')
 | 
				
			||||||
        self.logging_queue = None
 | 
					        self.logging_queue = None
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1195,6 +1195,8 @@ def main():
 | 
				
			||||||
    parser.add_argument('-v', '--debug', dest='debug', action='store_true', help='Set loglevel to debug')
 | 
					    parser.add_argument('-v', '--debug', dest='debug', action='store_true', help='Set loglevel to debug')
 | 
				
			||||||
    parser.add_argument('-y', '--yes', dest='yes', action='store_true', help='Default to yes for all prompts')
 | 
					    parser.add_argument('-y', '--yes', dest='yes', action='store_true', help='Default to yes for all prompts')
 | 
				
			||||||
    parser.add_argument('-V', '--version', dest='version', action='store_true', help='Print version and exit')
 | 
					    parser.add_argument('-V', '--version', dest='version', action='store_true', help='Print version and exit')
 | 
				
			||||||
 | 
					    parser.add_argument('-c', '--config-file', dest='config_file', action='store', metavar='<path/name>',
 | 
				
			||||||
 | 
					                        help='Specify custom config file or name for the config file in the default directory.')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # all the commands
 | 
					    # all the commands
 | 
				
			||||||
    subparsers = parser.add_subparsers(title='Commands', dest='subparser_name')
 | 
					    subparsers = parser.add_subparsers(title='Commands', dest='subparser_name')
 | 
				
			||||||
| 
						 | 
					@ -1441,7 +1443,7 @@ def main():
 | 
				
			||||||
            print(subparser.format_help())
 | 
					            print(subparser.format_help())
 | 
				
			||||||
        return
 | 
					        return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    cli = LegendaryCLI()
 | 
					    cli = LegendaryCLI(override_config=args.config_file)
 | 
				
			||||||
    ql = cli.setup_threaded_logging()
 | 
					    ql = cli.setup_threaded_logging()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    config_ll = cli.core.lgd.config.get('Legendary', 'log_level', fallback='info')
 | 
					    config_ll = cli.core.lgd.config.get('Legendary', 'log_level', fallback='info')
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -51,10 +51,10 @@ class LegendaryCore:
 | 
				
			||||||
    """
 | 
					    """
 | 
				
			||||||
    _egl_version = '11.0.1-14907503+++Portal+Release-Live'
 | 
					    _egl_version = '11.0.1-14907503+++Portal+Release-Live'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def __init__(self):
 | 
					    def __init__(self, override_config=None):
 | 
				
			||||||
        self.log = logging.getLogger('Core')
 | 
					        self.log = logging.getLogger('Core')
 | 
				
			||||||
        self.egs = EPCAPI()
 | 
					        self.egs = EPCAPI()
 | 
				
			||||||
        self.lgd = LGDLFS()
 | 
					        self.lgd = LGDLFS(config_file=override_config)
 | 
				
			||||||
        self.egl = EPCLFS()
 | 
					        self.egl = EPCLFS()
 | 
				
			||||||
        self.lgdapi = LGDAPI()
 | 
					        self.lgdapi = LGDAPI()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -14,7 +14,7 @@ from legendary.utils.lfs import clean_filename
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class LGDLFS:
 | 
					class LGDLFS:
 | 
				
			||||||
    def __init__(self):
 | 
					    def __init__(self, config_file=None):
 | 
				
			||||||
        self.log = logging.getLogger('LGDLFS')
 | 
					        self.log = logging.getLogger('LGDLFS')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if config_path := os.environ.get('XDG_CONFIG_HOME'):
 | 
					        if config_path := os.environ.get('XDG_CONFIG_HOME'):
 | 
				
			||||||
| 
						 | 
					@ -35,6 +35,17 @@ class LGDLFS:
 | 
				
			||||||
        # Config with game specific settings (e.g. start parameters, env variables)
 | 
					        # Config with game specific settings (e.g. start parameters, env variables)
 | 
				
			||||||
        self.config = LGDConf(comment_prefixes='/', allow_no_value=True)
 | 
					        self.config = LGDConf(comment_prefixes='/', allow_no_value=True)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if config_file:
 | 
				
			||||||
 | 
					            # if user specified a valid relative/absolute path use that,
 | 
				
			||||||
 | 
					            # otherwise create file in legendary config directory
 | 
				
			||||||
 | 
					            if os.path.exists(config_file):
 | 
				
			||||||
 | 
					                self.config_path = os.path.abspath(config_file)
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
 | 
					                self.config_path = os.path.join(self.path, clean_filename(config_file))
 | 
				
			||||||
 | 
					            self.log.info(f'Using non-default config file "{self.config_path}"')
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            self.config_path = os.path.join(self.path, 'config.ini')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # ensure folders exist.
 | 
					        # ensure folders exist.
 | 
				
			||||||
        for f in ['', 'manifests', 'metadata', 'tmp']:
 | 
					        for f in ['', 'manifests', 'metadata', 'tmp']:
 | 
				
			||||||
            if not os.path.exists(os.path.join(self.path, f)):
 | 
					            if not os.path.exists(os.path.join(self.path, f)):
 | 
				
			||||||
| 
						 | 
					@ -69,7 +80,7 @@ class LGDLFS:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # try loading config
 | 
					        # try loading config
 | 
				
			||||||
        try:
 | 
					        try:
 | 
				
			||||||
            self.config.read(os.path.join(self.path, 'config.ini'))
 | 
					            self.config.read(self.config_path)
 | 
				
			||||||
        except Exception as e:
 | 
					        except Exception as e:
 | 
				
			||||||
            self.log.error(f'Unable to read configuration file, please ensure that file is valid! '
 | 
					            self.log.error(f'Unable to read configuration file, please ensure that file is valid! '
 | 
				
			||||||
                           f'(Error: {repr(e)})')
 | 
					                           f'(Error: {repr(e)})')
 | 
				
			||||||
| 
						 | 
					@ -283,15 +294,14 @@ class LGDLFS:
 | 
				
			||||||
        if self.config.read_only or not self.config.modified:
 | 
					        if self.config.read_only or not self.config.modified:
 | 
				
			||||||
            return
 | 
					            return
 | 
				
			||||||
        # if config file has been modified externally, back-up the user-modified version before writing
 | 
					        # if config file has been modified externally, back-up the user-modified version before writing
 | 
				
			||||||
        config_path = os.path.join(self.path, 'config.ini')
 | 
					        if os.path.exists(self.config_path):
 | 
				
			||||||
        if os.path.exists(config_path):
 | 
					            if (modtime := int(os.stat(self.config_path).st_mtime)) != self.config.modtime:
 | 
				
			||||||
            if (modtime := int(os.stat(config_path).st_mtime)) != self.config.modtime:
 | 
					 | 
				
			||||||
                new_filename = f'config.{modtime}.ini'
 | 
					                new_filename = f'config.{modtime}.ini'
 | 
				
			||||||
                self.log.warning(f'Configuration file has been modified while legendary was running, '
 | 
					                self.log.warning(f'Configuration file has been modified while legendary was running, '
 | 
				
			||||||
                                 f'user-modified config will be renamed to "{new_filename}"...')
 | 
					                                 f'user-modified config will be renamed to "{new_filename}"...')
 | 
				
			||||||
                os.rename(os.path.join(self.path, 'config.ini'), os.path.join(self.path, new_filename))
 | 
					                os.rename(self.config_path, os.path.join(os.path.dirname(self.config_path), new_filename))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        with open(config_path, 'w') as cf:
 | 
					        with open(self.config_path, 'w') as cf:
 | 
				
			||||||
            self.config.write(cf)
 | 
					            self.config.write(cf)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def get_dir_size(self):
 | 
					    def get_dir_size(self):
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue