1############################################################################# 2## 3## Copyright (C) 2019 The Qt Company Ltd. 4## Contact: https://www.qt.io/licensing/ 5## 6## This file is part of the Qt for Python project. 7## 8## $QT_BEGIN_LICENSE:LGPL$ 9## Commercial License Usage 10## Licensees holding valid commercial Qt licenses may use this file in 11## accordance with the commercial license agreement provided with the 12## Software or, alternatively, in accordance with the terms contained in 13## a written agreement between you and The Qt Company. For licensing terms 14## and conditions see https://www.qt.io/terms-conditions. For further 15## information use the contact form at https://www.qt.io/contact-us. 16## 17## GNU Lesser General Public License Usage 18## Alternatively, this file may be used under the terms of the GNU Lesser 19## General Public License version 3 as published by the Free Software 20## Foundation and appearing in the file LICENSE.LGPL3 included in the 21## packaging of this file. Please review the following information to 22## ensure the GNU Lesser General Public License version 3 requirements 23## will be met: https://www.gnu.org/licenses/lgpl-3.0.html. 24## 25## GNU General Public License Usage 26## Alternatively, this file may be used under the terms of the GNU 27## General Public License version 2.0 or (at your option) the GNU General 28## Public license version 3 or any later version approved by the KDE Free 29## Qt Foundation. The licenses are as published by the Free Software 30## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 31## included in the packaging of this file. Please review the following 32## information to ensure the GNU General Public License requirements will 33## be met: https://www.gnu.org/licenses/gpl-2.0.html and 34## https://www.gnu.org/licenses/gpl-3.0.html. 35## 36## $QT_END_LICENSE$ 37## 38############################################################################# 39 40import logging 41 42from PySide2.QtCore import QDir, QFile, QUrl 43from PySide2.QtGui import QGuiApplication 44from PySide2.QtQml import QQmlApplicationEngine 45from PySide2.QtSql import QSqlDatabase 46 47from sqlDialog import SqlConversationModel 48 49logging.basicConfig(filename="chat.log", level=logging.DEBUG) 50logger = logging.getLogger("logger") 51 52 53def connectToDatabase(): 54 database = QSqlDatabase.database() 55 if not database.isValid(): 56 database = QSqlDatabase.addDatabase("QSQLITE") 57 if not database.isValid(): 58 logger.error("Cannot add database") 59 60 write_dir = QDir() 61 if not write_dir.mkpath("."): 62 logger.error("Failed to create writable directory") 63 64 # Ensure that we have a writable location on all devices. 65 filename = "{}/chat-database.sqlite3".format(write_dir.absolutePath()) 66 67 # When using the SQLite driver, open() will create the SQLite 68 # database if it doesn't exist. 69 database.setDatabaseName(filename) 70 if not database.open(): 71 logger.error("Cannot open database") 72 QFile.remove(filename) 73 74 75if __name__ == "__main__": 76 app = QGuiApplication() 77 connectToDatabase() 78 sql_conversation_model = SqlConversationModel() 79 80 engine = QQmlApplicationEngine() 81 # Export pertinent objects to QML 82 engine.rootContext().setContextProperty("chat_model", sql_conversation_model) 83 engine.load(QUrl("chat.qml")) 84 85 app.exec_() 86