X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Fipypbx%2Fcontrollers.py;h=316e329b8536decb8489c31f62b1200cb3e3c803;hb=bd5981b657ca38beb48faca23950ead346da102d;hp=c4e962e475035baf42b612e632267e5f6c7cb912;hpb=34b381a8a6eab96d9dc5ad949e53f00da006dd3c;p=ipypbx diff --git a/src/ipypbx/controllers.py b/src/ipypbx/controllers.py index c4e962e..316e329 100644 --- a/src/ipypbx/controllers.py +++ b/src/ipypbx/controllers.py @@ -195,7 +195,9 @@ class BaseController(QtCore.QObject): """ Save to database. """ + index = self.view_list.currentIndex() self.view_display.submit() + self.view_list.setCurrentIndex(index) self.getFieldWidget('Add').setEnabled(True) @@ -216,59 +218,63 @@ class ConnectionController(BaseController): def __init__(self, parent=None, views=None): super(ConnectionController, self).__init__(parent, views) - # We track last selected row because Qt deselects in on submit. - self.last_row = -1 - for row in range(self.model.rowCount()): # Get local IP address and port from the table for each row. - server = http.FreeswitchConfigServer() + server = http.FreeswitchConfigServer(self.parent(), ) server.setSocketData(*self.getSocketData(row)) server.startServer() self.servers.append(server) def getSocketData(self, row): - local_ip_address = self.model.record(row).value( - 'local_ip_address').toString() - local_port, _ok = self.model.record(row).value( - 'local_port').toInt() + """ + Return socket data for given row number. + """ + record = self.model.record(row) + + # Local IP address. + local_ip_address = record.value('local_ip_address').toString() + + # Local port. + local_port, _ok = record.value('local_port').toInt() if not _ok: local_port = None - return local_ip_address, local_port + + # Connection ID. + connection_id, _ok = record.value('id').toInt() + if not _ok: + connection_id = None + + return local_ip_address, local_port, connection_id def connectionChange(self, index): """ Restart config server on connection change if necessary. - """ + """ current_row = index.row() if current_row != -1: - self.last_row = current_row # Select the new row. connection_id, _ok = index.model().data( - index.sibling(index.row(), 0)).toInt() + index.sibling(current_row, 0)).toInt() - # Apply new socket location. - self.servers[self.last_row].setSocketData( - *self.getSocketData(self.last_row)) + # Apply new socket location. + self.servers[current_row].setSocketData( + *self.getSocketData(current_row)) def objectAdded(self, row, record): """ New connection added. """ - self.addServer() + self.addServer(*self.getSocketData(row)) - def addServer(self, host=None, port=None): + def addServer(self, host=None, port=None, connection_id=None): """ Add a new config server. """ - server = http.FreeswitchConfigServer(self) - server.setSocketData(host, port) + server = http.FreeswitchConfigServer(self.model) + server.setSocketData(host, port, connection_id) server.startServer() self.servers.append(server) - def save(self): - super(ConnectionController, self).save() - self.view_list.selectRow(self.last_row) - class ConnectionChangeListenerController(BaseController): """ @@ -281,17 +287,27 @@ class ConnectionChangeListenerController(BaseController): Filters table by a new connection ID and stores last connection ID locally. """ - if index.row() != -1: + index_row = index.row() + if index_row != -1: + # Get connection_id field value. 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. @@ -383,12 +399,20 @@ class ExtensionController(ConnectionChangeListenerController): QtCore.QT_TRANSLATE_NOOP('MainWindow', 'Authenticate Calls'), QtCore.QT_TRANSLATE_NOOP('MainWindow', 'Is Active')) view_list_fields = 'Destination Match', + view_display_fields_hidden = 'ID', 'Connection ID', 'Endpoint ID' relations = ( ('domain_id', 'Domain ID', 'domain', 'host_name'), - ('endpoint_id', 'Endpoint ID', 'endpoint', 'user_id')) +# ('endpoint_id', 'Endpoint ID', 'endpoint', 'user_id'), + ) def objectAdded(self, row, record): record.setValue( '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)