From: Stas Shtin Date: Thu, 15 Apr 2010 16:00:17 +0000 (+0400) Subject: More work on config generation. Added a workaround for QTBUG-8217 X-Git-Url: http://vcs.maemo.org/git/?p=ipypbx;a=commitdiff_plain;h=5632d39d210cd6d456319ec9e1f1482f88e23efe More work on config generation. Added a workaround for QTBUG-8217 --- diff --git a/src/ipypbx/controllers.py b/src/ipypbx/controllers.py index c4e962e..19680d3 100644 --- a/src/ipypbx/controllers.py +++ b/src/ipypbx/controllers.py @@ -285,13 +285,21 @@ class ConnectionChangeListenerController(BaseController): connection_id, _ok = index.model().data( index.sibling(index.row(), 0)).toInt() self.connection_id = connection_id - self.model.setFilter( - 'ipypbxweb_%s.connection_id = %i' % - (self.basename, connection_id)) + + # Filter is customizable in order to allow ugly hacks :-) + self.model.setFilter(self.getFilter(connection_id)) + + # Select first row. self.view_list.selectRow(0) + + # Create a new object if none exist. if not self.model.rowCount(): self.add() + def getFilter(self, connection_id): + return 'ipypbxweb_%s.connection_id = %i' % ( + self.basename, connection_id) + def objectAdded(self, row, record): """ Set connection_id from currently selected connection. @@ -392,3 +400,9 @@ class ExtensionController(ConnectionChangeListenerController): 'xml_dialplan', '') super(ExtensionController, self).objectAdded(row, record) + def getFilter(self, connection_id): + # Workaround for Qt bug: + # http://bugreports.qt.nokia.com/browse/QTBUG-8217 . Apparently they + # don't hurry to fix it. + return '1 = 1) or (ipypbxweb_%s.connection_id = %i' % ( + self.basename, connection_id) diff --git a/src/ipypbx/http.py b/src/ipypbx/http.py index cc022cc..f168c53 100644 --- a/src/ipypbx/http.py +++ b/src/ipypbx/http.py @@ -99,8 +99,9 @@ class HttpRequestParser(object): """ A simple state machine for parsing HTTP requests. """ - HTTP_NONE, HTTP_REQUEST, HTTP_HEADERS, HTTP_EMPTY, HTTP_MESSAGE = range(5) - HTTP_STATES = ['NONE', 'REQUEST', 'HEADERS', 'EMPTY', 'MESSAGE'] + HTTP_NONE, HTTP_REQUEST, HTTP_HEADERS, HTTP_EMPTY, HTTP_MESSAGE, \ + HTTP_DONE = range(6) + HTTP_STATES = ['NONE', 'REQUEST', 'HEADERS', 'EMPTY', 'MESSAGE', 'DONE'] def __init__(self): super(HttpRequestParser, self).__init__() @@ -172,6 +173,11 @@ class HttpRequestParser(object): print k, '=>', v print + for generator in self.generators: + if generator.canHandle(self.headers): + self.state += 1 + return generator.generateConfig(self.headers) + class FreeswitchConfigGenerator(object): @@ -185,24 +191,24 @@ class FreeswitchConfigGenerator(object): def __init__(self, model): self.model = model - def check_params(self, params): + def canHandle(self, params): for key, value in self.param_match.iteritems(): if params.get(key, None) != value: return False else: return True - def base_elements(self): + def baseElements(self): root_elt = etree.Element('document') section_elt = etree.SubElement( root_elt, 'section', name=self.section_name) return root_elt, section_elt - base_elements = property(base_elements) + baseElements = property(baseElements) - def generate_config(self, params): + def generateConfig(self, params): return NotImplemented - def add_params(parent_elt, params): + def addParams(parent_elt, params): for name, value in params: etree.SubElement(parent_elt, 'param', name=name, value=value) @@ -215,9 +221,9 @@ class SofiaConfGenerator(FreeswitchConfigGenerator): section_name = 'configuration' config_name = 'sofia.conf' - def generate_config(self, params): + def generateConfig(self, params): # Get base elements. - root_elt, section_elt = self.base_elements + root_elt, section_elt = self.baseElements # Create configuration, settings and profiles elements. configuration_elt = etree.SubElement(