tooncher 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. #!/usr/bin/env python3
  2. # PYTHON_ARGCOMPLETE_OK
  3. import os
  4. import sys
  5. import tooncher
  6. import tooncher.controls
  7. import yaml
  8. def run(username, config_path, engine_path=None, validate_ssl_certs=True,
  9. cpu_limit_percent=None, enable_extended_keyboard_controls=False,
  10. extended_keyboard_control_toggle_keysym_name=None,
  11. engine_window_name=None):
  12. if os.path.exists(config_path):
  13. with open(config_path) as f:
  14. config = yaml.load(f.read())
  15. else:
  16. config = {}
  17. if engine_path is None:
  18. if 'engine_path' in config:
  19. engine_path = config['engine_path']
  20. else:
  21. raise Exception('missing path to toontown engine')
  22. accounts = config['accounts'] if 'accounts' in config else []
  23. for account in accounts:
  24. if account['username'] == username:
  25. tooncher.launch(
  26. engine_path=engine_path,
  27. username=account['username'],
  28. password=account['password'],
  29. validate_ssl_certs=validate_ssl_certs,
  30. cpu_limit_percent=cpu_limit_percent,
  31. enable_extended_keyboard_controls=enable_extended_keyboard_controls,
  32. extended_keyboard_control_toggle_keysym_name=extended_keyboard_control_toggle_keysym_name,
  33. engine_window_name=engine_window_name,
  34. )
  35. def _init_argparser():
  36. import argparse
  37. argparser = argparse.ArgumentParser(description=None)
  38. argparser.add_argument('username')
  39. argparser.add_argument(
  40. '--config',
  41. '-c',
  42. metavar='path',
  43. dest='config_path',
  44. help='path to config file (default: %(default)s)',
  45. default=os.path.join(os.path.expanduser('~'), '.tooncher'),
  46. )
  47. argparser.add_argument(
  48. '--engine-path',
  49. '-e',
  50. metavar='path',
  51. dest='engine_path',
  52. default=tooncher.TOONTOWN_ENGINE_DEFAULT_PATH,
  53. help='\n'.join([
  54. 'path to toontown engine.',
  55. 'this overrides the one specified in config file',
  56. '(default: %(default)s)',
  57. ]),
  58. )
  59. argparser.add_argument(
  60. '--no-ssl-cert-validation',
  61. '-k',
  62. dest='validate_ssl_certs',
  63. help='do not validate ssl certificates',
  64. action='store_false',
  65. )
  66. argparser.add_argument(
  67. '--cpu-limit',
  68. dest='cpu_limit_percent',
  69. type=int,
  70. default=None,
  71. help='maximally allowed cpu usage in percent'
  72. + ' (requires cpulimit command, default: %(default)s)',
  73. )
  74. argparser.add_argument(
  75. '--extended-controls',
  76. dest='enable_extended_keyboard_controls',
  77. action='store_true',
  78. help='enable extended keyboard controls'
  79. + ', e.g. walk with WASD'
  80. + ' (requires xlib for python, default: %(default)s)',
  81. )
  82. argparser.add_argument(
  83. '--extended-controls-toggle',
  84. metavar='KEYSYM_NAME',
  85. dest='extended_keyboard_control_toggle_keysym_name',
  86. default=tooncher.controls.EXTENDED_CONTROLS_DEFAULT_TOGGLE_KEYSYM_NAME,
  87. help='key to turn extended keyboard controls on / off.'
  88. + ' any keysym name may be used'
  89. + ' (see XStringToKeysym & X11/keysymdef.h, '
  90. + ' default: %(default)s)',
  91. )
  92. argparser.add_argument(
  93. '--change-window-name',
  94. metavar='ENGINE_WINDOW_NAME',
  95. dest='engine_window_name',
  96. default=None,
  97. help='Change window name of engine after launch.'
  98. + ' This requires Extended Controls to be enabled.'
  99. + ' (default: no change)',
  100. )
  101. return argparser
  102. def main(argv):
  103. argparser = _init_argparser()
  104. try:
  105. import argcomplete
  106. argcomplete.autocomplete(argparser)
  107. except ImportError:
  108. pass
  109. args = argparser.parse_args(argv)
  110. run(**vars(args))
  111. return 0
  112. if __name__ == "__main__":
  113. sys.exit(main(sys.argv[1:]))