Minor changes required for running tests
[ipypbx] / src / ipypbx / main.py
index 2aca140..f0422d6 100644 (file)
 # You should have received a copy of the GNU General Public License
 # along with IPyPBX.  If not, see <http://www.gnu.org/licenses/>.
 
+import os
 import sys
-from ipypbx import ui
-from PyQt4 import QtCore, QtGui
+from ipypbx import controllers, ui
+from PyQt4 import QtCore, QtGui, QtSql
 
 
-class MainWindow(QtGui.QMainWindow):
-    def __init__(self):
-        QtGui.QMainWindow.__init__(self)
+# Working directory path.
+PREFIX = os.path.expanduser('~/.ipypbx')
 
-        self.ui = ui.Ui_MainWindow()
-        self.ui.setupUi(self)
+# Database file name.
+DB_NAME = 'ipypbx.db'
+
+
+def setupDb(prefix=PREFIX, dbname=DB_NAME):
+    """
+    Setup database.
+    """
+    created = False
+    # Create it if necessary.
+    if prefix:
+        if not os.path.exists(prefix):
+            created = True
+            os.mkdir(prefix, 0700)
+        
+        os.chdir(prefix)
+    
+    # Connect to SQLite database.
+    db = QtSql.QSqlDatabase.addDatabase("QSQLITE")
+    db.setDatabaseName(dbname)
+    
+    if db.open():
+        if created:
+            # Load script from local file.
+            sql_script = open(os.path.join(os.path.dirname(__file__), 'create.sql')).read()
+
+            # Split into individual queries.
+            sql_queries = sql_script.split(';')
+
+            # Execute all queries except last that is empty.
+            query = QtSql.QSqlQuery()
+            for query_string in sql_queries[:-1]:
+                query.exec_(query_string)
+
+        return db, created
+    else:
+        # Something went horribly wrong.
+        QtGui.QMessageBox.warning(
+            None, "Fatal Error", "Database Error: %s" % db.lastError().text())
+        sys.exit(1)
 
 
 if __name__ == '__main__':
     app = QtGui.QApplication(sys.argv)
-    locale = QtCore.QLocale.system().name()
-    print "Locale is", locale
 
+    # Localize UI.
+    locale = QtCore.QLocale.system().name()
     translator = QtCore.QTranslator()
     
     if translator.load("ipypbx_%s" % locale.toLower(), "ipypbx/locale"):
-        app.installTranslator(translator)
-    else:
-        print "Translation not found"
+        QtGui.QApplication.installTranslator(translator)
+
+    # Initialize main window.
+    db, created = setupDb()
+    main = QtGui.QMainWindow()
+    views = ui.Ui_MainWindow()
+    views.setupUi(main)
+    main.show()
+
+    # Setup controllers.
+    main.controllers = {}
+    for basename in ('Connection', 'SipProfile', 'Domain', 'Gateway',
+                     'Endpoint', 'Extension'):
+        main.controllers[basename.lower()] = getattr(
+            controllers, basename + 'Controller'
+            )(parent=main, views=views)
+
+    # Select first row.
+    connection_model = main.controllers['connection'].model
+    connection_index = connection_model.index(0, 0)
+
+    # Get first row index.
+    first_row_id, ok = connection_model.data(
+        connection_index.sibling(0, 0)).toInt()
+    
+    if ok:
+        # We have to explicitly emit row selection signal since previous state
+        # was unselected.
+        QtCore.QObject.emit(
+            main.controllers['connection'].view_list.selectionModel(),
+            QtCore.SIGNAL('currentRowChanged(QModelIndex, QModelIndex)'),
+            connection_index, connection_index)
 
-    win = MainWindow()
-    win.show()
+    # TODO: not needed anymore?
+    if created:
+        main.controllers['connection'].add()
+    sys.exit(app.exec_())
 
-    app.exec_()