utils to ConfiguratorGetter split
This commit is contained in:
parent
1adb8605c0
commit
cdc32b7cc0
143
syncplay/ConfigurationGetter.py
Normal file
143
syncplay/ConfigurationGetter.py
Normal file
@ -0,0 +1,143 @@
|
|||||||
|
import ConfigParser
|
||||||
|
import argparse
|
||||||
|
import sys
|
||||||
|
import os
|
||||||
|
|
||||||
|
class ConfigurationGetter(object):
|
||||||
|
def __init__(self):
|
||||||
|
self._config = None
|
||||||
|
self._args = None
|
||||||
|
self._syncplayClient = None
|
||||||
|
self._workingDir = None
|
||||||
|
self._parser = None
|
||||||
|
|
||||||
|
def _findWorkingDirectory(self):
|
||||||
|
frozen = getattr(sys, 'frozen', '')
|
||||||
|
if not frozen:
|
||||||
|
self._workingDir = os.path.dirname(os.path.dirname(__file__))
|
||||||
|
elif frozen in ('dll', 'console_exe', 'windows_exe'):
|
||||||
|
self._workingDir = os.path.dirname(sys.executable)
|
||||||
|
else:
|
||||||
|
raise Exception('Working dir not found')
|
||||||
|
|
||||||
|
def _prepareArgParser(self):
|
||||||
|
self._parser = argparse.ArgumentParser(description='Solution to synchronize playback of multiple MPlayer and MPC-HC instances over the network.',
|
||||||
|
epilog='If no options supplied _config values will be used')
|
||||||
|
self._parser.add_argument('--no-gui', action='store_true', help='show no GUI')
|
||||||
|
self._parser.add_argument('--host', metavar='hostname', type=str, help='server\'s address')
|
||||||
|
self._parser.add_argument('--name', metavar='username', type=str, help='desired username')
|
||||||
|
self._parser.add_argument('-d','--debug', action='store_true', help='debug mode')
|
||||||
|
self._parser.add_argument('--no-store', action='store_true', help='don\'t store values in syncplay.ini')
|
||||||
|
self._parser.add_argument('--room', metavar='room', type=str, nargs='?', help='default room')
|
||||||
|
self._parser.add_argument('--password', metavar='password', type=str, nargs='?', help='server password')
|
||||||
|
self._parser.add_argument('file', metavar='file', type=str, nargs='?', help='file to play')
|
||||||
|
self._parser.add_argument('_args', metavar='options', type=str, nargs='*', help='player options, if you need to pass options starting with - prepend them with single \'--\' argument')
|
||||||
|
|
||||||
|
def _openConfigFile(self):
|
||||||
|
if(not self._config):
|
||||||
|
self._config = ConfigParser.RawConfigParser(allow_no_value=True)
|
||||||
|
self._config.read(os.path.join(self._workingDir, 'syncplay.ini'))
|
||||||
|
|
||||||
|
def _getSectionName(self):
|
||||||
|
return 'sync' if not self._args.debug else 'debug'
|
||||||
|
|
||||||
|
def saveValuesIntoConfigFile(self):
|
||||||
|
self._openConfigFile()
|
||||||
|
section_name = self._getSectionName()
|
||||||
|
if(not self._args.no_store):
|
||||||
|
with open(os.path.join(self._workingDir, 'syncplay.ini'), 'wb') as configfile:
|
||||||
|
if(not self._config.has_section(section_name)):
|
||||||
|
self._config.add_section(section_name)
|
||||||
|
self._setUpValuesToSave(section_name)
|
||||||
|
self._config.write(configfile)
|
||||||
|
|
||||||
|
def _setUpValuesToSave(self, section_name):
|
||||||
|
self._config.set(section_name, 'host', self._args.host)
|
||||||
|
self._config.set(section_name, 'name', self._args.name)
|
||||||
|
self._config.set(section_name, 'room', self._args.room)
|
||||||
|
self._config.set(section_name, 'password', self._args.password)
|
||||||
|
|
||||||
|
def _readConfigValue(self, section_name, name):
|
||||||
|
try:
|
||||||
|
return self._config.get(section_name, name)
|
||||||
|
except ConfigParser.NoOptionError:
|
||||||
|
return None
|
||||||
|
|
||||||
|
def _readMissingValuesFromConfigFile(self):
|
||||||
|
self._openConfigFile()
|
||||||
|
section_name = self._getSectionName()
|
||||||
|
try:
|
||||||
|
self._valuesToReadFromConfig(section_name)
|
||||||
|
except ConfigParser.NoSectionError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
def _valuesToReadFromConfig(self, section_name):
|
||||||
|
if (self._args.host == None):
|
||||||
|
self._args.host = self._readConfigValue(section_name, 'host')
|
||||||
|
if (self._args.name == None):
|
||||||
|
self._args.name = self._readConfigValue(section_name, 'name')
|
||||||
|
if (self._args.room == None):
|
||||||
|
self._args.room = self._readConfigValue(section_name, 'room')
|
||||||
|
if (self._args.password == None):
|
||||||
|
self._args.password = self._readConfigValue(section_name, 'password')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def _splitPortAndHost(self):
|
||||||
|
if(self._args.host):
|
||||||
|
if ':' in self._args.host:
|
||||||
|
self._args.host, port = self._args.host.split(':', 1)
|
||||||
|
self._args.port = int(port)
|
||||||
|
else:
|
||||||
|
self._args.port = 8999
|
||||||
|
|
||||||
|
def getConfiguration(self):
|
||||||
|
self._findWorkingDirectory()
|
||||||
|
self._prepareArgParser()
|
||||||
|
self._args = self._parser.parse_args()
|
||||||
|
self._readMissingValuesFromConfigFile()
|
||||||
|
self.saveValuesIntoConfigFile()
|
||||||
|
self._splitPortAndHost()
|
||||||
|
return self._args
|
||||||
|
|
||||||
|
|
||||||
|
class MPCConfigurationGetter(ConfigurationGetter):
|
||||||
|
def _prepareArgParser(self):
|
||||||
|
ConfigurationGetter._prepareArgParser(self)
|
||||||
|
self._parser.add_argument('--mpc-path', metavar='path', type=str, help='path to mpc-hc.exe (only for sync_mpc_api client)')
|
||||||
|
|
||||||
|
def _setUpValuesToSave(self, section_name):
|
||||||
|
ConfigurationGetter._setUpValuesToSave(self, section_name)
|
||||||
|
self._config.set(section_name, 'mpc_path', self._args.mpc_path)
|
||||||
|
|
||||||
|
def _valuesToReadFromConfig(self, section_name):
|
||||||
|
ConfigurationGetter._valuesToReadFromConfig(self, section_name)
|
||||||
|
if (self._args.mpc_path == None):
|
||||||
|
self._args.mpc_path = self._readConfigValue(section_name, 'mpc_path')
|
||||||
|
|
||||||
|
def __addSpecialMPCFlags(self):
|
||||||
|
self._args._args.extend(['/open', '/new'])
|
||||||
|
|
||||||
|
def getConfiguration(self):
|
||||||
|
ConfigurationGetter.getConfiguration(self)
|
||||||
|
self.__addSpecialMPCFlags()
|
||||||
|
return self._args
|
||||||
|
|
||||||
|
|
||||||
|
class ServerConfigurationGetter(ConfigurationGetter):
|
||||||
|
def getConfiguration(self):
|
||||||
|
self._prepareArgParser()
|
||||||
|
self._args = self._parser.parse_args()
|
||||||
|
if(self._args.port == None):
|
||||||
|
self._args.port = 8999
|
||||||
|
return self._args
|
||||||
|
|
||||||
|
def _prepareArgParser(self):
|
||||||
|
self._parser = argparse.ArgumentParser(description='Solution to synchronize playback of multiple MPlayer and MPC-HC instances over the network. Server instance',
|
||||||
|
epilog='If no options supplied _config values will be used')
|
||||||
|
self._parser.add_argument('--port', metavar='port', type=str, nargs='?', help='server TCP port')
|
||||||
|
self._parser.add_argument('--password', metavar='password', type=str, nargs='?', help='server password')
|
||||||
|
self._parser.add_argument('--isolate-rooms', action='store_true', help='should rooms be isolated?')
|
||||||
|
|
||||||
|
|
||||||
@ -1,7 +1,5 @@
|
|||||||
#coding:utf8
|
#coding:utf8
|
||||||
|
|
||||||
import ConfigParser
|
|
||||||
import argparse
|
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
import sys
|
import sys
|
||||||
@ -81,141 +79,3 @@ def stdin_thread(manager):
|
|||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
class ConfigurationGetter(object):
|
|
||||||
def __init__(self):
|
|
||||||
self._config = None
|
|
||||||
self._args = None
|
|
||||||
self._syncplayClient = None
|
|
||||||
self._workingDir = None
|
|
||||||
self._parser = None
|
|
||||||
|
|
||||||
def _findWorkingDirectory(self):
|
|
||||||
frozen = getattr(sys, 'frozen', '')
|
|
||||||
if not frozen:
|
|
||||||
self._workingDir = os.path.dirname(os.path.dirname(__file__))
|
|
||||||
elif frozen in ('dll', 'console_exe', 'windows_exe'):
|
|
||||||
self._workingDir = os.path.dirname(sys.executable)
|
|
||||||
else:
|
|
||||||
raise Exception('Working dir not found')
|
|
||||||
|
|
||||||
def _prepareArgParser(self):
|
|
||||||
self._parser = argparse.ArgumentParser(description='Solution to synchronize playback of multiple MPlayer and MPC-HC instances over the network.',
|
|
||||||
epilog='If no options supplied _config values will be used')
|
|
||||||
self._parser.add_argument('--no-gui', action='store_true', help='show no GUI')
|
|
||||||
self._parser.add_argument('--host', metavar='hostname', type=str, help='server\'s address')
|
|
||||||
self._parser.add_argument('--name', metavar='username', type=str, help='desired username')
|
|
||||||
self._parser.add_argument('-d','--debug', action='store_true', help='debug mode')
|
|
||||||
self._parser.add_argument('--no-store', action='store_true', help='don\'t store values in syncplay.ini')
|
|
||||||
self._parser.add_argument('--room', metavar='room', type=str, nargs='?', help='default room')
|
|
||||||
self._parser.add_argument('--password', metavar='password', type=str, nargs='?', help='server password')
|
|
||||||
self._parser.add_argument('file', metavar='file', type=str, nargs='?', help='file to play')
|
|
||||||
self._parser.add_argument('_args', metavar='options', type=str, nargs='*', help='player options, if you need to pass options starting with - prepend them with single \'--\' argument')
|
|
||||||
|
|
||||||
def _openConfigFile(self):
|
|
||||||
if(not self._config):
|
|
||||||
self._config = ConfigParser.RawConfigParser(allow_no_value=True)
|
|
||||||
self._config.read(os.path.join(self._workingDir, 'syncplay.ini'))
|
|
||||||
|
|
||||||
def _getSectionName(self):
|
|
||||||
return 'sync' if not self._args.debug else 'debug'
|
|
||||||
|
|
||||||
def saveValuesIntoConfigFile(self):
|
|
||||||
self._openConfigFile()
|
|
||||||
section_name = self._getSectionName()
|
|
||||||
if(not self._args.no_store):
|
|
||||||
with open(os.path.join(self._workingDir, 'syncplay.ini'), 'wb') as configfile:
|
|
||||||
if(not self._config.has_section(section_name)):
|
|
||||||
self._config.add_section(section_name)
|
|
||||||
self._setUpValuesToSave(section_name)
|
|
||||||
self._config.write(configfile)
|
|
||||||
|
|
||||||
def _setUpValuesToSave(self, section_name):
|
|
||||||
self._config.set(section_name, 'host', self._args.host)
|
|
||||||
self._config.set(section_name, 'name', self._args.name)
|
|
||||||
self._config.set(section_name, 'room', self._args.room)
|
|
||||||
self._config.set(section_name, 'password', self._args.password)
|
|
||||||
|
|
||||||
def _readConfigValue(self, section_name, name):
|
|
||||||
try:
|
|
||||||
return self._config.get(section_name, name)
|
|
||||||
except ConfigParser.NoOptionError:
|
|
||||||
return None
|
|
||||||
|
|
||||||
def _readMissingValuesFromConfigFile(self):
|
|
||||||
self._openConfigFile()
|
|
||||||
section_name = self._getSectionName()
|
|
||||||
try:
|
|
||||||
self._valuesToReadFromConfig(section_name)
|
|
||||||
except ConfigParser.NoSectionError:
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
def _valuesToReadFromConfig(self, section_name):
|
|
||||||
if (self._args.host == None):
|
|
||||||
self._args.host = self._readConfigValue(section_name, 'host')
|
|
||||||
if (self._args.name == None):
|
|
||||||
self._args.name = self._readConfigValue(section_name, 'name')
|
|
||||||
if (self._args.room == None):
|
|
||||||
self._args.room = self._readConfigValue(section_name, 'room')
|
|
||||||
if (self._args.password == None):
|
|
||||||
self._args.password = self._readConfigValue(section_name, 'password')
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def _splitPortAndHost(self):
|
|
||||||
if(self._args.host):
|
|
||||||
if ':' in self._args.host:
|
|
||||||
self._args.host, port = self._args.host.split(':', 1)
|
|
||||||
self._args.port = int(port)
|
|
||||||
else:
|
|
||||||
self._args.port = 8999
|
|
||||||
|
|
||||||
def getConfiguration(self):
|
|
||||||
self._findWorkingDirectory()
|
|
||||||
self._prepareArgParser()
|
|
||||||
self._args = self._parser.parse_args()
|
|
||||||
self._readMissingValuesFromConfigFile()
|
|
||||||
self.saveValuesIntoConfigFile()
|
|
||||||
self._splitPortAndHost()
|
|
||||||
return self._args
|
|
||||||
|
|
||||||
|
|
||||||
class MPCConfigurationGetter(ConfigurationGetter):
|
|
||||||
def _prepareArgParser(self):
|
|
||||||
ConfigurationGetter._prepareArgParser(self)
|
|
||||||
self._parser.add_argument('--mpc-path', metavar='path', type=str, help='path to mpc-hc.exe (only for sync_mpc_api client)')
|
|
||||||
|
|
||||||
def _setUpValuesToSave(self, section_name):
|
|
||||||
ConfigurationGetter._setUpValuesToSave(self, section_name)
|
|
||||||
self._config.set(section_name, 'mpc_path', self._args.mpc_path)
|
|
||||||
|
|
||||||
def _valuesToReadFromConfig(self, section_name):
|
|
||||||
ConfigurationGetter._valuesToReadFromConfig(self, section_name)
|
|
||||||
if (self._args.mpc_path == None):
|
|
||||||
self._args.mpc_path = self._readConfigValue(section_name, 'mpc_path')
|
|
||||||
|
|
||||||
def __addSpecialMPCFlags(self):
|
|
||||||
self._args._args.extend(['/open', '/new'])
|
|
||||||
|
|
||||||
def getConfiguration(self):
|
|
||||||
ConfigurationGetter.getConfiguration(self)
|
|
||||||
self.__addSpecialMPCFlags()
|
|
||||||
return self._args
|
|
||||||
|
|
||||||
|
|
||||||
class ServerConfigurationGetter(ConfigurationGetter):
|
|
||||||
def getConfiguration(self):
|
|
||||||
self._prepareArgParser()
|
|
||||||
self._args = self._parser.parse_args()
|
|
||||||
if(self._args.port == None):
|
|
||||||
self._args.port = 8999
|
|
||||||
return self._args
|
|
||||||
|
|
||||||
def _prepareArgParser(self):
|
|
||||||
self._parser = argparse.ArgumentParser(description='Solution to synchronize playback of multiple MPlayer and MPC-HC instances over the network. Server instance',
|
|
||||||
epilog='If no options supplied _config values will be used')
|
|
||||||
self._parser.add_argument('--port', metavar='port', type=str, nargs='?', help='server TCP port')
|
|
||||||
self._parser.add_argument('--password', metavar='password', type=str, nargs='?', help='server password')
|
|
||||||
self._parser.add_argument('--isolate-rooms', action='store_true', help='should rooms be isolated?')
|
|
||||||
|
|
||||||
|
|
||||||
Loading…
x
Reference in New Issue
Block a user