diff --git a/src/server/CMakeLists.txt b/src/server/CMakeLists.txt index 98a994e94..ad42ae3ff 100644 --- a/src/server/CMakeLists.txt +++ b/src/server/CMakeLists.txt @@ -1,279 +1,279 @@ include(qt_helper) set(GCOMPRIS_SERVER_EXECUTABLE_NAME gcompris-server) # Note: put .cpp files before .h files in the following or cmake messes up # moc generation -- WTF! set(server_SRCS MessageHandler.cpp MessageHandler.h ActivityData.cpp ActivityData.h ClientData.cpp ClientData.h Database.cpp Database.h GroupData.cpp GroupData.h UserData.cpp UserData.h Server.cpp Server.h ) qt5_wrap_cpp(server_MOC ${server_SRCS}) # Add files that do no need to pass through the moc processor set(server_SRCS ${server_SRCS} main.cpp ) include_directories( ../core/ # messages "${CMAKE_CURRENT_BINARY_DIR}/../core" # to find config.h ) set(used_qt_modules Qml Quick Gui Multimedia Core Svg Xml XmlPatterns Sensors Sql) - +# qt5_add_resources(EXTRAS resources.qrc) if(ANDROID) add_library(${GCOMPRIS_SERVER_EXECUTABLE_NAME} SHARED ${server_SRCS} ${server_MOC}) set(used_qt_modules ${used_qt_modules} AndroidExtras) elseif(CMAKE_HOST_APPLE) add_executable(${GCOMPRIS_SERVER_EXECUTABLE_NAME} MACOSX_BUNDLE ${server_SRCS} ${server_MOC} ${gcompris_RES}) elseif(CMAKE_HOST_WIN32) add_executable(${GCOMPRIS_SERVER_EXECUTABLE_NAME} WIN32 ${server_SRCS} ${server_MOC} ${gcompris_RES}) else() add_executable(${GCOMPRIS_SERVER_EXECUTABLE_NAME} ${server_SRCS} ${server_MOC} ${gcompris_RES}) endif() qt5_use_modules(${GCOMPRIS_SERVER_EXECUTABLE_NAME} ${used_qt_modules}) target_link_libraries(${GCOMPRIS_SERVER_EXECUTABLE_NAME} gcompris_core) -GCOMPRIS_ADD_RCC(server main.qml views/*.qml views/*/*/*.qml) +GCOMPRIS_ADD_RCC(server main.qml views/*.qml views/*/*/*.qml resources/password_images/*.png) # Installation # ============ install(TARGETS ${GCOMPRIS_SERVER_EXECUTABLE_NAME} ARCHIVE DESTINATION bin RUNTIME DESTINATION bin LIBRARY DESTINATION lib BUNDLE DESTINATION .) if(BUILD_STANDALONE) # Qt plugins to install set(_qt_plugins "") if(NOT SAILFISHOS) list(APPEND _qt_plugins Qt5::QJpegPlugin) endif() if(APPLE) list(APPEND _qt_plugins Qt5::QTgaPlugin Qt5::QTiffPlugin) elseif(WIN32) list(APPEND _qt_plugins Qt5::QWindowsIntegrationPlugin Qt5::QWindowsAudioPlugin Qt5::AudioCaptureServicePlugin Qt5::DSServicePlugin) elseif(UNIX AND NOT ANDROID AND NOT SAILFISHOS) list(APPEND _qt_plugins Qt5::QXcbIntegrationPlugin) endif() list(APPEND _qt_plugins Qt5::genericSensorPlugin Qt5::QtSensorGesturePlugin Qt5::QShakeSensorGesturePlugin) # Qml plugins to install if(WIN32) set(_lib_prefix "") else() set(_lib_prefix "lib") endif() set(_qt_plugins2 imageformats/${_lib_prefix}qsvg) if(UNIX AND NOT ANDROID AND NOT APPLE AND NOT SAILFISHOS) list(APPEND _qt_plugins2 mediaservice/${_lib_prefix}gstaudiodecoder mediaservice/${_lib_prefix}gstcamerabin mediaservice/${_lib_prefix}gstmediacapture mediaservice/${_lib_prefix}gstmediaplayer) elseif(APPLE) list(APPEND _qt_plugins2 mediaservice/${_lib_prefix}qavfmediaplayer mediaservice/${_lib_prefix}qtmedia_audioengine mediaservice/${_lib_prefix}qavfcamera) endif() set(_qml_plugins QtQuick/Window.2/${_lib_prefix}windowplugin QtQuick/Particles.2/${_lib_prefix}particlesplugin QtQuick.2/${_lib_prefix}qtquick2plugin QtMultimedia/${_lib_prefix}declarative_multimedia QtSensors/${_lib_prefix}declarative_sensors) if(NOT SAILFISHOS) list(APPEND _qml_plugins QtQuick/Controls/${_lib_prefix}qtquickcontrolsplugin QtQuick/Layouts/${_lib_prefix}qquicklayoutsplugin) endif() if(NOT WIN32 AND NOT SAILFISHOS) list(APPEND _qml_plugins QtAudioEngine/${_lib_prefix}declarative_audioengine) if (NOT "${QML_BOX2D_MODULE}" STREQUAL "submodule") list(APPEND _qml_plugins Box2D.2.0/${_lib_prefix}Box2D) endif() endif() set(GCOMPRIS_OTHER_LIBS) if(APPLE) set(_app gcompris-qt.app) set(_qtconf_destdir ${_app}/Contents/Resources) set(_qt_plugins_destdir ${_app}/Contents/plugins) set(_qt_qml_destdir ${_app}/Contents/qml) set(GCOMPRIS_BUNDLE "\${CMAKE_INSTALL_PREFIX}/${_app}") set_target_properties(gcompris-qt PROPERTIES MACOSX_BUNDLE_INFO_STRING "GCompris, Educational game for children 2 to 10" MACOSX_BUNDLE_ICON_FILE "${gcompris_icon}" MACOSX_BUNDLE_GUI_IDENTIFIER "net.gcompris" MACOSX_BUNDLE_LONG_VERSION_STRING "${GCOMPRIS_MAJOR_VERSION}.${GCOMPRIS_MINOR_VERSION}.${GCOMPRIS_PATCH_VERSION}" MACOSX_BUNDLE_BUNDLE_NAME "gcompris-qt" MACOSX_BUNDLE_SHORT_VERSION_STRING "${GCOMPRIS_VERSION}" MACOSX_BUNDLE_BUNDLE_VERSION "${GCOMPRIS_VERSION}" MACOSX_BUNDLE_COPYRIGHT "GPL License, Copyright 2000-2016 Bruno Coudoin and Others.") set_source_files_properties(${GCOMPRIS_RESOURCES}/${gcompris_icon} PROPERTIES MACOSX_PACKAGE_LOCATION "Resources") else() set(_qtconf_destdir bin) set(_qt_plugins_destdir bin/plugins) set(_qt_qml_destdir bin/qml) if(CMAKE_HOST_WIN32) set(GCOMPRIS_BUNDLE "\${CMAKE_INSTALL_PREFIX}/bin/${GCOMPRIS_SERVER_EXECUTABLE_NAME}.exe") else() set(GCOMPRIS_BUNDLE "\${CMAKE_INSTALL_PREFIX}/bin/${GCOMPRIS_SERVER_EXECUTABLE_NAME}") endif() endif() # install qt.conf file install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/qt.conf DESTINATION ${_qtconf_destdir}) # install qt plugins foreach(_plugin ${_qt_plugins}) installQtPlugin(${_plugin} ${_qt_plugins_destdir} _lib) list(APPEND GCOMPRIS_OTHER_LIBS ${_lib}) endforeach() foreach(_plugin ${_qt_plugins2}) installQtPlugin2(${_plugin} ${_qt_plugins_destdir} _lib) list(APPEND GCOMPRIS_OTHER_LIBS ${_lib}) endforeach() # install qml plugins foreach(_plugin ${_qml_plugins}) installQmlPlugin(${_plugin} ${_qt_qml_destdir} _lib) list(APPEND GCOMPRIS_OTHER_LIBS ${_lib}) endforeach() # install QtGraphicalEffects (which is not a lib but only qml files) set(_qml_subdir QtGraphicalEffects) getQtQmlPath(_qt_qml_path) install(DIRECTORY ${_qt_qml_path}/QtGraphicalEffects DESTINATION ${_qt_qml_destdir}) # Fix for Linux 'make package' that fails to link with libicu if(UNIX AND NOT APPLE AND NOT SAILFISHOS AND NOT ANDROID) add_library( libicudata SHARED IMPORTED ) FILE(GLOB LIBICUDATA_SO "${Qt5_DIR}/../../libicudata.so.[0-9][0-9]") if ("${LIBICUDATA_SO}" STREQUAL "") FILE(GLOB LIBICUDATA_SO "/usr/lib/*/libicudata.so.[0-9][0-9]") endif() set_target_properties( libicudata PROPERTIES IMPORTED_LOCATION ${LIBICUDATA_SO} ) add_library( libicui18n SHARED IMPORTED ) FILE(GLOB LIBICUI18N_SO "${Qt5_DIR}/../../libicui18n.so.[0-9][0-9]") if ("${LIBICUI18N_SO}" STREQUAL "") FILE(GLOB LIBICUI18N_SO "/usr/lib/*/libicui18n.so.[0-9][0-9]") endif() set_target_properties( libicui18n PROPERTIES IMPORTED_LOCATION ${LIBICUI18N_SO} ) add_library( libicuuc SHARED IMPORTED ) FILE(GLOB LIBICUUC_SO "${Qt5_DIR}/../../libicuuc.so.[0-9][0-9]") if ("${LIBICUUC_SO}" STREQUAL "") FILE(GLOB LIBICUUC_SO "/usr/lib/*/libicuuc.so.[0-9][0-9]") endif() set_target_properties( libicuuc PROPERTIES IMPORTED_LOCATION ${LIBICUUC_SO} ) TARGET_LINK_LIBRARIES(${GCOMPRIS_SERVER_EXECUTABLE_NAME} libicudata libicui18n libicuuc) endif() endif(BUILD_STANDALONE) # Hack: do not fixup Qt and Qml plugins on Windows because fixup_bundle takes ages (cmake bug ?) -> Johnny : we need this even if it takes time because some required dependencies are pulled here #if(WIN32) set(GCOMPRIS_OTHER_LIBS "") endif() # install fixup_bundle script to resolve and fixup runtime dependencies if(BUILD_STANDALONE) configure_file(${CMAKE_SOURCE_DIR}/cmake/FixBundle.cmake.in FixBundle.cmake) install(SCRIPT ${CMAKE_CURRENT_BINARY_DIR}/FixBundle.cmake) # install a startup script for linux bundle if(UNIX AND NOT APPLE AND NOT SAILFISHOS) install(PROGRAMS ../../tools/gcompris-qt.sh DESTINATION bin) endif() endif() if(WIN32) set(VCREDIST_DIR "" CACHE PATH "Path to vcredist dlls") # install libEGL.dll, libGLESv2.dll, d3dcompiler_47.dll from Qt installation. Not sure if there is a clean way to get them... # Qt5_Dir is like C:/Qt/Qt5.5.1/5.5/mingw492_32/lib/cmake/Qt5 install(FILES ${Qt5_DIR}/../../../bin/icudt54.dll DESTINATION bin) install(FILES ${Qt5_DIR}/../../../bin/icuin54.dll DESTINATION bin) install(FILES ${Qt5_DIR}/../../../bin/icuuc54.dll DESTINATION bin) install(FILES ${Qt5_DIR}/../../../bin/libEGL.dll DESTINATION bin) install(FILES ${Qt5_DIR}/../../../bin/libGLESv2.dll DESTINATION bin) install(FILES ${Qt5_DIR}/../../../../../Tools/QtCreator/bin/d3dcompiler_47.dll DESTINATION bin) install(FILES ${VCREDIST_DIR}/msvcp140.dll DESTINATION bin) install(FILES ${VCREDIST_DIR}/vcruntime140.dll DESTINATION bin) endif() # Packaging # ========= set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "GCompris is a high quality educational software suite comprising of numerous activities for children aged 2 to 10.") set(CPACK_PACKAGE_VERSION_MAJOR ${GCOMPRIS_MAJOR_VERSION}) set(CPACK_PACKAGE_VERSION_MINOR ${GCOMPRIS_MINOR_VERSION}) set(CPACK_PACKAGE_VERSION_PATCH ${GCOMPRIS_PATCH_VERSION}) set(CPACK_PACKAGE_VERSION ${GCOMPRIS_VERSION}) set(CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/COPYING") set(CPACK_RESOURCE_FILE_README "${PROJECT_SOURCE_DIR}/README") if(WIN32) set(CPACK_PACKAGE_INSTALL_DIRECTORY "${GCOMPRIS_SERVER_EXECUTABLE_NAME}-Qt") set(CPACK_PACKAGE_INSTALL_REGISTRY_KEY "${GCOMPRIS_SERVER_EXECUTABLE_NAME}-Qt") set(CPACK_PACKAGE_ICON "${PROJECT_SOURCE_DIR}/installer\\\\gcompris-header.bmp") set(CPACK_NSIS_MUI_ICON "${PROJECT_SOURCE_DIR}/installer\\\\GCompris-install.ico") set(CPACK_NSIS_MUI_UNIICON "${PROJECT_SOURCE_DIR}/installer\\\\GCompris-uninstall.ico") set(CPACK_NSIS_EXECUTABLES_DIRECTORY "bin") set(CPACK_PACKAGE_EXECUTABLES "${GCOMPRIS_SERVER_EXECUTABLE_NAME};GCompris") set(CPACK_CREATE_DESKTOP_LINKS "${GCOMPRIS_SERVER_EXECUTABLE_NAME};GCompris") set(CPACK_NSIS_URL_INFO_ABOUT "http:\\\\\\\\gcompris.net") set(CPACK_NSIS_DISPLAY_NAME "GCompris Educational Software") set(CPACK_NSIS_MUI_FINISHPAGE_RUN "${GCOMPRIS_SERVER_EXECUTABLE_NAME}") else(WIN32) set(CPACK_PACKAGE_ICON "${PROJECT_SOURCE_DIR}/GCompris64.png") endif() if(APPLE) set(CPACK_GENERATOR "DragNDrop") set(CPACK_DMG_DS_STORE "${GCOMPRIS_RESOURCES}/dmg_DS_Store") set(CPACK_DMG_BACKGROUND_IMAGE "${GCOMPRIS_RESOURCES}/dmg_background.png") elseif(WIN32) set(CPACK_GENERATOR "NSIS") elseif(SAILFISHOS) configure_file(${PROJECT_SOURCE_DIR}/platforms/sailfishOS/harbour-gcompris-qt.spec.cmake ${CMAKE_BINARY_DIR}/harbour-gcompris-qt.spec @ONLY) install(FILES ${PROJECT_SOURCE_DIR}/platforms/sailfishOS/harbour-gcompris-qt.desktop DESTINATION share/applications) install(FILES ${PROJECT_SOURCE_DIR}/platforms/sailfishOS/harbour-gcompris-qt.png DESTINATION share/icons/hicolor/86x86/apps) set(CPACK_RPM_PACKAGE_SUMMARY "gcompris-qt") # BUILD_ARCH is either armv7hl or i486 set(CPACK_RPM_PACKAGE_ARCHITECTURE "${BUILD_ARCH}") set(CPACK_RPM_PACKAGE_NAME "${GCOMPRIS_SERVER_EXECUTABLE_NAME}") set(CPACK_RPM_PACKAGE_VERSION "${GCOMPRIS_VERSION}") set(CPACK_RPM_PACKAGE_LICENSED "GPLv3") set(CPACK_RPM_PACKAGE_URL "https://www.gcompris.org") set(CPACK_RPM_PACKAGE_DESCRIPTION "GCompris is a high quality educational software suite comprising of numerous activities for children aged 2 to 10.") set(CPACK_RPM_USER_BINARY_SPECFILE "${CMAKE_BINARY_DIR}/harbour-gcompris-qt.spec") set(CMAKE_INSTALL_PREFIX "/usr") set(CPACK_PACKAGING_INSTALL_PREFIX "/usr") set(CPACK_GENERATOR "RPM") else() set(CPACK_GENERATOR "STGZ") endif() include(CPack) diff --git a/src/server/MessageHandler.cpp b/src/server/MessageHandler.cpp index 013946e3d..7f641a556 100644 --- a/src/server/MessageHandler.cpp +++ b/src/server/MessageHandler.cpp @@ -1,325 +1,335 @@ /* GComprisServer - MessageHandler.cpp * * Copyright (C) 2016 Johnny Jazeix * * Authors: * Johnny Jazeix * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include #include "Server.h" #include "Database.h" #include "MessageHandler.h" #include +#include #include MessageHandler* MessageHandler::_instance = 0; MessageHandler::MessageHandler() { Server &server = *Server::getInstance(); connect(&server, &Server::loginReceived, this, &MessageHandler::onLoginReceived); connect(&server, &Server::activityDataReceived, this, &MessageHandler::onActivityDataReceived); connect(&server, &Server::newClientReceived, this, &MessageHandler::onNewClientReceived); connect(&server, &Server::clientDisconnected, this, &MessageHandler::onClientDisconnected); // retrieve all the existing users and groups QList users; Database::getInstance()->retrieveAllExistingUsers(users); for(auto it = users.begin(); it != users.end(); it++) { m_users.push_back(*it); } QList groups; Database::getInstance()->retrieveAllExistingGroups(groups); for(auto it = groups.begin(); it != groups.end(); it++) { m_groups.push_back(*it); } // add users to their respective groups QMultiMap groupUsers = Database::getInstance()->retrieveGroupUsers(); QMapIterator itr(groupUsers); while(itr.hasNext()) { itr.next(); GroupData* grp = getGroup(itr.key()); QList values = groupUsers.values(itr.key()); for(const auto &user: values) { UserData* usr = getUser(user); if(grp && usr) { grp->addUser(usr); } } } + + + QDir dir(":/gcompris/src/server"); + qDebug() << "dir exists : " << dir.exists(); + for(const QString& img: dir.entryList()) { + + qDebug() << "img path : " << dir.absoluteFilePath(img); + m_passwords << dir.absoluteFilePath(img); + } } MessageHandler* MessageHandler::getInstance() { if (!_instance) _instance = new MessageHandler; return _instance; } QObject *MessageHandler::systeminfoProvider(QQmlEngine *engine, QJSEngine *scriptEngine) { Q_UNUSED(engine) Q_UNUSED(scriptEngine) return getInstance(); } void MessageHandler::init() { getInstance(); qmlRegisterType(); qmlRegisterType(); qmlRegisterSingletonType("GCompris", 1, 0, "MessageHandler", systeminfoProvider); } void MessageHandler::createGroup(const QString &newGroup, const QString &description, const QStringList &users) { //1. add group to database //2. make a new a group and add it to m_groups; qDebug() << "Create group" << users; if(Database::getInstance()->addGroup(newGroup, description,users)) { GroupData *c = new GroupData(); c->setName(newGroup); c->setDescription(description); m_groups.push_back((QObject*)c); for(const auto &user: users) { UserData* usr = getUser(user); if(usr) { c->addUser(usr); } } emit newGroups(); } } void MessageHandler::updateGroup(const QString &oldGroup, const QString &groupName, const QString &description, const QStringList& users) { // todo // update in database: // * table groups (for the name) // * group_users (for all the users, remove previous group name and for each added user, add the group name) // if both OK, update the group to update the name, clean all the users and add them } void MessageHandler::deleteGroup(const QString &groupName) { //delete from database if(Database::getInstance()->deleteGroup(groupName)) { GroupData *c = getGroup(groupName); qDebug() << c; m_groups.removeAll(c); delete c; emit newGroups(); } else { qDebug() << "could not delete the group from database"; } } void MessageHandler::createUser(const QString &name, const QString &age, const QString &password, const QStringList &groups) { // Add the user in the database UserData *u = new UserData(name, age, password); if(Database::getInstance()->addUser(*u)) { qDebug() << "createUser '" << name << "' in groups " << groups; for(const QString &aGroup: groups) { GroupData *group = getGroup(aGroup); if(group) { group->addUser(u); } } m_users.push_back((QObject*)u); emit newUsers(); } else { delete u; qDebug() << "Error while creating user " << name; } } void MessageHandler::addUserToGroup(const QStringList &groups, const QStringList &users) { // 1. add user to group -In database; // 2. associate users with groups; for(const auto &user: users) { UserData* usr = getUser(user); for (const auto &group: groups) { if(Database::getInstance()->addUserToGroup(group, user)) { GroupData* grp = getGroup(group); if(grp && usr) { grp->addUser(usr); } } } } } void MessageHandler::updateUser(const QString &oldUser, const QString &newUser, const QString &avatar, const QStringList &groups) { UserData *user = getUser(oldUser); if (user) { user->setName(newUser); // for each group, remove the user if not in the new groups and add it in the new ones removeUserFromAllGroups(user); for(const QString &aGroup: groups) { GroupData *group = getGroup(aGroup); group->addUser(user); } emit newUsers(); } } UserData *MessageHandler::getUser(const QString &userName) { for (QObject *oUser: m_users) { UserData *user = (UserData *) oUser; if (user->getName() == userName) { return user; } } return nullptr; } GroupData *MessageHandler::getGroup(const QString &groupName) { for (QObject *oGroup: m_groups) { GroupData *group = (GroupData *) oGroup; if (group->getName() == groupName) { return group; } } return nullptr; } void MessageHandler::removeUserFromAllGroups(UserData *user) { for (QObject *oGroup: m_groups) { GroupData *group = (GroupData *) oGroup; group->removeUser(user); } } void MessageHandler::deleteUser(const QString &userName) { if(Database::getInstance()->deleteUser(userName)) { for (QObject *oUser: m_users) { UserData *user = (UserData *) oUser; if (user->getName() == userName) { m_users.removeAll(user); removeUserFromAllGroups(user); delete user; emit newUsers(); } } } else { qDebug() << "Unable to delete" << userName; } } void MessageHandler::onLoginReceived(QTcpSocket *socket, const Login &data) { qDebug() << "Login received '" << data._name << "'"; ClientData *c = getClientData(socket); for(QObject *oClient: m_clients) { ClientData *c = (ClientData*)oClient; if(c->getUserData() && c->getUserData()->getName() == data._name) { // found a client with the same user name.(i.e someone chose the wrong login) qDebug() << "a client with the same user name already exists"; return; //todo: // return an error message to client and inform that you have chosen the wrong login } } for(QObject *oUser: m_users) { UserData *user = (UserData*)oUser; qDebug() << "received login " << data._name << " " << c->getSocket(); if(user->getName() == data._name) { c->setUser(user); return; } } // Should not happen when login will be done properly... todo display an error message qDebug() << "Error: login " << data._name << " received, but no user found"; } void MessageHandler::onActivityDataReceived(QTcpSocket* socket, const ActivityRawData &act) { qDebug() << "Activity: " << act.activityName << ", date: " << act.date << ", data:" << act.data << ", user: " << act.username; Database::getInstance()->addDataToDatabase(act); ClientData* client = getClientData(socket); if(client) { if(client->getUserData()) { client->getUserData()->addData(act); } } emit newActivityData(); } void MessageHandler::onNewClientReceived(QTcpSocket* socket) { qDebug() << "New client"; ClientData *c = new ClientData; c->setSocket(socket); m_clients.push_back((QObject*)c); emit newClients(); } void MessageHandler::onClientDisconnected(QTcpSocket* socket) { qDebug() << "client disconnected"; ClientData *c = getClientData(socket); c->setUser(nullptr); m_clients.removeAll(c); delete c; emit newClients(); } ClientData *MessageHandler::getClientData(QTcpSocket* socket) { for (QObject *oc: m_clients) { ClientData *c = (ClientData *) oc; if (c->getSocket() == socket) { return c; } } } diff --git a/src/server/MessageHandler.h b/src/server/MessageHandler.h index 098a8f090..7cd9f2708 100644 --- a/src/server/MessageHandler.h +++ b/src/server/MessageHandler.h @@ -1,128 +1,135 @@ /* GComprisServer - MessageHandler.h * * Copyright (C) 2016 Johnny Jazeix * * Authors: * Johnny Jazeix * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef MESSAGEHANDLER_H #define MESSAGEHANDLER_H #include "Messages.h" #include "ClientData.h" #include "GroupData.h" #include "UserData.h" #include #include /** * @class MessageHandler * @short Handles all the messages received by the socket * * JOB: * -Handle messages received by the socket * -Create, update, delete information about: * --users * --groups * -Linking users, clients and groups with each other * * * @sa UserData * @sa GroupData * @sa ClientData */ class MessageHandler: public QObject { Q_OBJECT Q_PROPERTY(QList clients MEMBER m_clients NOTIFY newClients) Q_PROPERTY(QList groups MEMBER m_groups NOTIFY newGroups) Q_PROPERTY(QList users MEMBER m_users NOTIFY newUsers) + Q_PROPERTY(QList passwords READ getPasswords); + private: MessageHandler(); // prohibit external creation, we are a singleton! static MessageHandler* _instance; // singleton instance public: /** * Registers MessageHandler singleton in the QML engine. */ static void init(); static QObject *systeminfoProvider(QQmlEngine *engine, QJSEngine *scriptEngine); static MessageHandler* getInstance(); Q_INVOKABLE void createGroup(const QString &groupName, const QString &description = QString(), const QStringList &users = QStringList()); Q_INVOKABLE void updateGroup(const QString &oldGroup, const QString &groupName, const QString &description = QString(), const QStringList& users = QStringList()); Q_INVOKABLE void deleteGroup(const QString &groupName); Q_INVOKABLE void createUser(const QString &userName, const QString &age, const QString &avatar = QString(), const QStringList &groups = QStringList()); Q_INVOKABLE void updateUser(const QString &oldUser, const QString &newUser, const QString &avatar = QString(), const QStringList &groups = QStringList()); Q_INVOKABLE void deleteUser(const QString &userName); Q_INVOKABLE void addUserToGroup(const QStringList& groups, const QStringList& users); Q_INVOKABLE UserData *getUser(const QString &userName); Q_INVOKABLE GroupData *getGroup(const QString &groupName); Q_INVOKABLE QList returnGroupUsers(const QString& group) { GroupData* g = getGroup(group); if(g) { return g->getUsers(); } } QList returnUsers() { return m_users; } /*QList returnClients() { return m_clients; }*/ + const QList& getPasswords() { + return m_passwords; + } public slots: void onLoginReceived(QTcpSocket* socket, const Login &data); void onActivityDataReceived(QTcpSocket* socket, const ActivityRawData &act); void onNewClientReceived(QTcpSocket* socket); void onClientDisconnected(QTcpSocket* socket); signals: void newClients(); void newGroups(); void newUsers(); void newActivityData(); private: ClientData *getClientData(QTcpSocket* socket); void removeUserFromAllGroups(UserData *user); // ClientData* QList m_clients; // GroupData* QList m_groups; // UserData* QList m_users; + + QList m_passwords; }; #endif diff --git a/src/server/resources/password_images/README b/src/server/resources/password_images/README new file mode 100644 index 000000000..2f0db37c6 --- /dev/null +++ b/src/server/resources/password_images/README @@ -0,0 +1,3 @@ +The images and voices comes from the Art4Apps project: http://www.art4apps.org/ +They are under Creative Common License BY-SA http://creativecommons.org/licenses/by-sa/3.0/ + diff --git a/src/server/resources/password_images/animal.png b/src/server/resources/password_images/animal.png new file mode 100644 index 000000000..233890265 Binary files /dev/null and b/src/server/resources/password_images/animal.png differ diff --git a/src/server/resources/password_images/apple.png b/src/server/resources/password_images/apple.png new file mode 100644 index 000000000..9c9c25b6d Binary files /dev/null and b/src/server/resources/password_images/apple.png differ diff --git a/src/server/resources/password_images/apricot.png b/src/server/resources/password_images/apricot.png new file mode 100644 index 000000000..8cba305c9 Binary files /dev/null and b/src/server/resources/password_images/apricot.png differ diff --git a/src/server/resources/password_images/arm.png b/src/server/resources/password_images/arm.png new file mode 100644 index 000000000..e8a48e2b0 Binary files /dev/null and b/src/server/resources/password_images/arm.png differ diff --git a/src/server/resources/password_images/back.png b/src/server/resources/password_images/back.png new file mode 100644 index 000000000..256318954 Binary files /dev/null and b/src/server/resources/password_images/back.png differ diff --git a/src/server/resources/password_images/bear.png b/src/server/resources/password_images/bear.png new file mode 100644 index 000000000..7789371b8 Binary files /dev/null and b/src/server/resources/password_images/bear.png differ diff --git a/src/server/resources/password_images/bee.png b/src/server/resources/password_images/bee.png new file mode 100644 index 000000000..271e30847 Binary files /dev/null and b/src/server/resources/password_images/bee.png differ diff --git a/src/server/resources/password_images/beetle.png b/src/server/resources/password_images/beetle.png new file mode 100644 index 000000000..a960d0885 Binary files /dev/null and b/src/server/resources/password_images/beetle.png differ diff --git a/src/server/resources/password_images/bird.png b/src/server/resources/password_images/bird.png new file mode 100644 index 000000000..125e01102 Binary files /dev/null and b/src/server/resources/password_images/bird.png differ diff --git a/src/server/resources/password_images/black.png b/src/server/resources/password_images/black.png new file mode 100644 index 000000000..84d4a7614 Binary files /dev/null and b/src/server/resources/password_images/black.png differ diff --git a/src/server/resources/password_images/blue.png b/src/server/resources/password_images/blue.png new file mode 100644 index 000000000..d60bc1f42 Binary files /dev/null and b/src/server/resources/password_images/blue.png differ diff --git a/src/server/resources/password_images/boy.png b/src/server/resources/password_images/boy.png new file mode 100644 index 000000000..254a1b23e Binary files /dev/null and b/src/server/resources/password_images/boy.png differ diff --git a/src/server/resources/password_images/brain.png b/src/server/resources/password_images/brain.png new file mode 100644 index 000000000..951b36389 Binary files /dev/null and b/src/server/resources/password_images/brain.png differ diff --git a/src/server/resources/password_images/brother.png b/src/server/resources/password_images/brother.png new file mode 100644 index 000000000..39796355a Binary files /dev/null and b/src/server/resources/password_images/brother.png differ diff --git a/src/server/resources/password_images/brown.png b/src/server/resources/password_images/brown.png new file mode 100644 index 000000000..568773c32 Binary files /dev/null and b/src/server/resources/password_images/brown.png differ diff --git a/src/server/resources/password_images/bug.png b/src/server/resources/password_images/bug.png new file mode 100644 index 000000000..effef6afb Binary files /dev/null and b/src/server/resources/password_images/bug.png differ diff --git a/src/server/resources/password_images/bull.png b/src/server/resources/password_images/bull.png new file mode 100644 index 000000000..26ab4490e Binary files /dev/null and b/src/server/resources/password_images/bull.png differ diff --git a/src/server/resources/password_images/butterfly.png b/src/server/resources/password_images/butterfly.png new file mode 100644 index 000000000..a5eb30d14 Binary files /dev/null and b/src/server/resources/password_images/butterfly.png differ diff --git a/src/server/resources/password_images/camel.png b/src/server/resources/password_images/camel.png new file mode 100644 index 000000000..47bc8f704 Binary files /dev/null and b/src/server/resources/password_images/camel.png differ diff --git a/src/server/resources/password_images/cat.png b/src/server/resources/password_images/cat.png new file mode 100644 index 000000000..eb15138c9 Binary files /dev/null and b/src/server/resources/password_images/cat.png differ diff --git a/src/server/resources/password_images/chicken.png b/src/server/resources/password_images/chicken.png new file mode 100644 index 000000000..1beeec77d Binary files /dev/null and b/src/server/resources/password_images/chicken.png differ diff --git a/src/server/resources/password_images/child.png b/src/server/resources/password_images/child.png new file mode 100644 index 000000000..fcaeae957 Binary files /dev/null and b/src/server/resources/password_images/child.png differ diff --git a/src/server/resources/password_images/coconut.png b/src/server/resources/password_images/coconut.png new file mode 100644 index 000000000..b6764cbdd Binary files /dev/null and b/src/server/resources/password_images/coconut.png differ diff --git a/src/server/resources/password_images/color.png b/src/server/resources/password_images/color.png new file mode 100644 index 000000000..e1f71168f Binary files /dev/null and b/src/server/resources/password_images/color.png differ diff --git a/src/server/resources/password_images/cow.png b/src/server/resources/password_images/cow.png new file mode 100644 index 000000000..fb05c63a8 Binary files /dev/null and b/src/server/resources/password_images/cow.png differ diff --git a/src/server/resources/password_images/dad.png b/src/server/resources/password_images/dad.png new file mode 100644 index 000000000..336b27a8a Binary files /dev/null and b/src/server/resources/password_images/dad.png differ diff --git a/src/server/resources/password_images/dog.png b/src/server/resources/password_images/dog.png new file mode 100644 index 000000000..3e78e55d9 Binary files /dev/null and b/src/server/resources/password_images/dog.png differ diff --git a/src/server/resources/password_images/dolphin.png b/src/server/resources/password_images/dolphin.png new file mode 100644 index 000000000..88bd782ae Binary files /dev/null and b/src/server/resources/password_images/dolphin.png differ diff --git a/src/server/resources/password_images/dragon.png b/src/server/resources/password_images/dragon.png new file mode 100644 index 000000000..e62a09ba8 Binary files /dev/null and b/src/server/resources/password_images/dragon.png differ diff --git a/src/server/resources/password_images/duck.png b/src/server/resources/password_images/duck.png new file mode 100644 index 000000000..cc6edc1e2 Binary files /dev/null and b/src/server/resources/password_images/duck.png differ diff --git a/src/server/resources/password_images/ear.png b/src/server/resources/password_images/ear.png new file mode 100644 index 000000000..5809c84fc Binary files /dev/null and b/src/server/resources/password_images/ear.png differ diff --git a/src/server/resources/password_images/eight.png b/src/server/resources/password_images/eight.png new file mode 100644 index 000000000..468e6e01d Binary files /dev/null and b/src/server/resources/password_images/eight.png differ diff --git a/src/server/resources/password_images/eleven.png b/src/server/resources/password_images/eleven.png new file mode 100644 index 000000000..8986fa4c5 Binary files /dev/null and b/src/server/resources/password_images/eleven.png differ diff --git a/src/server/resources/password_images/eyes.png b/src/server/resources/password_images/eyes.png new file mode 100644 index 000000000..00a3659ed Binary files /dev/null and b/src/server/resources/password_images/eyes.png differ diff --git a/src/server/resources/password_images/face.png b/src/server/resources/password_images/face.png new file mode 100644 index 000000000..8bd42d1f9 Binary files /dev/null and b/src/server/resources/password_images/face.png differ diff --git a/src/server/resources/password_images/family.png b/src/server/resources/password_images/family.png new file mode 100644 index 000000000..75979f86f Binary files /dev/null and b/src/server/resources/password_images/family.png differ diff --git a/src/server/resources/password_images/feet.png b/src/server/resources/password_images/feet.png new file mode 100644 index 000000000..34fa0e7f1 Binary files /dev/null and b/src/server/resources/password_images/feet.png differ diff --git a/src/server/resources/password_images/finger.png b/src/server/resources/password_images/finger.png new file mode 100644 index 000000000..64d723552 Binary files /dev/null and b/src/server/resources/password_images/finger.png differ diff --git a/src/server/resources/password_images/fish.png b/src/server/resources/password_images/fish.png new file mode 100644 index 000000000..4910d26d5 Binary files /dev/null and b/src/server/resources/password_images/fish.png differ diff --git a/src/server/resources/password_images/five.png b/src/server/resources/password_images/five.png new file mode 100644 index 000000000..900a5dd75 Binary files /dev/null and b/src/server/resources/password_images/five.png differ diff --git a/src/server/resources/password_images/flies.png b/src/server/resources/password_images/flies.png new file mode 100644 index 000000000..29e19b89f Binary files /dev/null and b/src/server/resources/password_images/flies.png differ diff --git a/src/server/resources/password_images/foot.png b/src/server/resources/password_images/foot.png new file mode 100644 index 000000000..8fb119323 Binary files /dev/null and b/src/server/resources/password_images/foot.png differ diff --git a/src/server/resources/password_images/four.png b/src/server/resources/password_images/four.png new file mode 100644 index 000000000..92eeb6fbb Binary files /dev/null and b/src/server/resources/password_images/four.png differ diff --git a/src/server/resources/password_images/fox.png b/src/server/resources/password_images/fox.png new file mode 100644 index 000000000..93aa42477 Binary files /dev/null and b/src/server/resources/password_images/fox.png differ diff --git a/src/server/resources/password_images/friend.png b/src/server/resources/password_images/friend.png new file mode 100644 index 000000000..c8ebe9835 Binary files /dev/null and b/src/server/resources/password_images/friend.png differ diff --git a/src/server/resources/password_images/frog.png b/src/server/resources/password_images/frog.png new file mode 100644 index 000000000..1985dfa16 Binary files /dev/null and b/src/server/resources/password_images/frog.png differ diff --git a/src/server/resources/password_images/fruit.png b/src/server/resources/password_images/fruit.png new file mode 100644 index 000000000..d65d9edf1 Binary files /dev/null and b/src/server/resources/password_images/fruit.png differ diff --git a/src/server/resources/password_images/giraffe.png b/src/server/resources/password_images/giraffe.png new file mode 100644 index 000000000..de5a9aaf3 Binary files /dev/null and b/src/server/resources/password_images/giraffe.png differ diff --git a/src/server/resources/password_images/girl.png b/src/server/resources/password_images/girl.png new file mode 100644 index 000000000..32a68b55a Binary files /dev/null and b/src/server/resources/password_images/girl.png differ diff --git a/src/server/resources/password_images/gorilla.png b/src/server/resources/password_images/gorilla.png new file mode 100644 index 000000000..8be6632bc Binary files /dev/null and b/src/server/resources/password_images/gorilla.png differ diff --git a/src/server/resources/password_images/grandmother.png b/src/server/resources/password_images/grandmother.png new file mode 100644 index 000000000..68a989a94 Binary files /dev/null and b/src/server/resources/password_images/grandmother.png differ diff --git a/src/server/resources/password_images/gray.png b/src/server/resources/password_images/gray.png new file mode 100644 index 000000000..e5d679553 Binary files /dev/null and b/src/server/resources/password_images/gray.png differ diff --git a/src/server/resources/password_images/green.png b/src/server/resources/password_images/green.png new file mode 100644 index 000000000..0163ef86d Binary files /dev/null and b/src/server/resources/password_images/green.png differ diff --git a/src/server/resources/password_images/hair.png b/src/server/resources/password_images/hair.png new file mode 100644 index 000000000..6a9535de1 Binary files /dev/null and b/src/server/resources/password_images/hair.png differ diff --git a/src/server/resources/password_images/hand.png b/src/server/resources/password_images/hand.png new file mode 100644 index 000000000..a861b28a0 Binary files /dev/null and b/src/server/resources/password_images/hand.png differ diff --git a/src/server/resources/password_images/head.png b/src/server/resources/password_images/head.png new file mode 100644 index 000000000..f44dc27a1 Binary files /dev/null and b/src/server/resources/password_images/head.png differ diff --git a/src/server/resources/password_images/hedgehog.png b/src/server/resources/password_images/hedgehog.png new file mode 100644 index 000000000..e97ab871e Binary files /dev/null and b/src/server/resources/password_images/hedgehog.png differ diff --git a/src/server/resources/password_images/hippopotamus.png b/src/server/resources/password_images/hippopotamus.png new file mode 100644 index 000000000..ded4a4668 Binary files /dev/null and b/src/server/resources/password_images/hippopotamus.png differ diff --git a/src/server/resources/password_images/horse.png b/src/server/resources/password_images/horse.png new file mode 100644 index 000000000..4913c6772 Binary files /dev/null and b/src/server/resources/password_images/horse.png differ diff --git a/src/server/resources/password_images/kangaroo.png b/src/server/resources/password_images/kangaroo.png new file mode 100644 index 000000000..50639a564 Binary files /dev/null and b/src/server/resources/password_images/kangaroo.png differ diff --git a/src/server/resources/password_images/kiwi.png b/src/server/resources/password_images/kiwi.png new file mode 100644 index 000000000..16f02940a Binary files /dev/null and b/src/server/resources/password_images/kiwi.png differ diff --git a/src/server/resources/password_images/knee.png b/src/server/resources/password_images/knee.png new file mode 100644 index 000000000..52fdcceaf Binary files /dev/null and b/src/server/resources/password_images/knee.png differ diff --git a/src/server/resources/password_images/leg.png b/src/server/resources/password_images/leg.png new file mode 100644 index 000000000..0ffa223c0 Binary files /dev/null and b/src/server/resources/password_images/leg.png differ diff --git a/src/server/resources/password_images/lemon.png b/src/server/resources/password_images/lemon.png new file mode 100644 index 000000000..dfa22ec6a Binary files /dev/null and b/src/server/resources/password_images/lemon.png differ diff --git a/src/server/resources/password_images/lizard.png b/src/server/resources/password_images/lizard.png new file mode 100644 index 000000000..f47b110e4 Binary files /dev/null and b/src/server/resources/password_images/lizard.png differ diff --git a/src/server/resources/password_images/man.png b/src/server/resources/password_images/man.png new file mode 100644 index 000000000..5e26a9416 Binary files /dev/null and b/src/server/resources/password_images/man.png differ diff --git a/src/server/resources/password_images/mauve.png b/src/server/resources/password_images/mauve.png new file mode 100644 index 000000000..922481b2b Binary files /dev/null and b/src/server/resources/password_images/mauve.png differ diff --git a/src/server/resources/password_images/melon.png b/src/server/resources/password_images/melon.png new file mode 100644 index 000000000..f3cf3fef7 Binary files /dev/null and b/src/server/resources/password_images/melon.png differ diff --git a/src/server/resources/password_images/mosquito.png b/src/server/resources/password_images/mosquito.png new file mode 100644 index 000000000..d37ea4fb5 Binary files /dev/null and b/src/server/resources/password_images/mosquito.png differ diff --git a/src/server/resources/password_images/mother.png b/src/server/resources/password_images/mother.png new file mode 100644 index 000000000..a08e2fd6b Binary files /dev/null and b/src/server/resources/password_images/mother.png differ diff --git a/src/server/resources/password_images/mouse.png b/src/server/resources/password_images/mouse.png new file mode 100644 index 000000000..ce4f6bbec Binary files /dev/null and b/src/server/resources/password_images/mouse.png differ diff --git a/src/server/resources/password_images/mouth.png b/src/server/resources/password_images/mouth.png new file mode 100644 index 000000000..a5e9e1001 Binary files /dev/null and b/src/server/resources/password_images/mouth.png differ diff --git a/src/server/resources/password_images/neck.png b/src/server/resources/password_images/neck.png new file mode 100644 index 000000000..10dc62956 Binary files /dev/null and b/src/server/resources/password_images/neck.png differ diff --git a/src/server/resources/password_images/nine.png b/src/server/resources/password_images/nine.png new file mode 100644 index 000000000..c47afa37c Binary files /dev/null and b/src/server/resources/password_images/nine.png differ diff --git a/src/server/resources/password_images/nose.png b/src/server/resources/password_images/nose.png new file mode 100644 index 000000000..4bb2b17b7 Binary files /dev/null and b/src/server/resources/password_images/nose.png differ diff --git a/src/server/resources/password_images/one.png b/src/server/resources/password_images/one.png new file mode 100644 index 000000000..58802b62e Binary files /dev/null and b/src/server/resources/password_images/one.png differ diff --git a/src/server/resources/password_images/orange-color.png b/src/server/resources/password_images/orange-color.png new file mode 100644 index 000000000..1187fe8c3 Binary files /dev/null and b/src/server/resources/password_images/orange-color.png differ diff --git a/src/server/resources/password_images/orange.png b/src/server/resources/password_images/orange.png new file mode 100644 index 000000000..5fca88457 Binary files /dev/null and b/src/server/resources/password_images/orange.png differ diff --git a/src/server/resources/password_images/owl.png b/src/server/resources/password_images/owl.png new file mode 100644 index 000000000..805a54078 Binary files /dev/null and b/src/server/resources/password_images/owl.png differ diff --git a/src/server/resources/password_images/panda.png b/src/server/resources/password_images/panda.png new file mode 100644 index 000000000..86940fbf8 Binary files /dev/null and b/src/server/resources/password_images/panda.png differ diff --git a/src/server/resources/password_images/peach.png b/src/server/resources/password_images/peach.png new file mode 100644 index 000000000..110907c1b Binary files /dev/null and b/src/server/resources/password_images/peach.png differ diff --git a/src/server/resources/password_images/pear.png b/src/server/resources/password_images/pear.png new file mode 100644 index 000000000..9c5bba5a1 Binary files /dev/null and b/src/server/resources/password_images/pear.png differ diff --git a/src/server/resources/password_images/pig.png b/src/server/resources/password_images/pig.png new file mode 100644 index 000000000..61e9a41a7 Binary files /dev/null and b/src/server/resources/password_images/pig.png differ diff --git a/src/server/resources/password_images/pink.png b/src/server/resources/password_images/pink.png new file mode 100644 index 000000000..db1b11100 Binary files /dev/null and b/src/server/resources/password_images/pink.png differ diff --git a/src/server/resources/password_images/plum.png b/src/server/resources/password_images/plum.png new file mode 100644 index 000000000..8f1207b06 Binary files /dev/null and b/src/server/resources/password_images/plum.png differ diff --git a/src/server/resources/password_images/rabbit.png b/src/server/resources/password_images/rabbit.png new file mode 100644 index 000000000..934eec5fc Binary files /dev/null and b/src/server/resources/password_images/rabbit.png differ diff --git a/src/server/resources/password_images/raspberry.png b/src/server/resources/password_images/raspberry.png new file mode 100644 index 000000000..349fabd5f Binary files /dev/null and b/src/server/resources/password_images/raspberry.png differ diff --git a/src/server/resources/password_images/red.png b/src/server/resources/password_images/red.png new file mode 100644 index 000000000..59fbc92f0 Binary files /dev/null and b/src/server/resources/password_images/red.png differ diff --git a/src/server/resources/password_images/reptile.png b/src/server/resources/password_images/reptile.png new file mode 100644 index 000000000..00e124546 Binary files /dev/null and b/src/server/resources/password_images/reptile.png differ diff --git a/src/server/resources/password_images/rhinoceros.png b/src/server/resources/password_images/rhinoceros.png new file mode 100644 index 000000000..b858df13f Binary files /dev/null and b/src/server/resources/password_images/rhinoceros.png differ diff --git a/src/server/resources/password_images/seven.png b/src/server/resources/password_images/seven.png new file mode 100644 index 000000000..844f242b7 Binary files /dev/null and b/src/server/resources/password_images/seven.png differ diff --git a/src/server/resources/password_images/shark.png b/src/server/resources/password_images/shark.png new file mode 100644 index 000000000..a710b7423 Binary files /dev/null and b/src/server/resources/password_images/shark.png differ diff --git a/src/server/resources/password_images/sheep.png b/src/server/resources/password_images/sheep.png new file mode 100644 index 000000000..b411cf8cf Binary files /dev/null and b/src/server/resources/password_images/sheep.png differ diff --git a/src/server/resources/password_images/sister.png b/src/server/resources/password_images/sister.png new file mode 100644 index 000000000..2ea9b85dc Binary files /dev/null and b/src/server/resources/password_images/sister.png differ diff --git a/src/server/resources/password_images/six.png b/src/server/resources/password_images/six.png new file mode 100644 index 000000000..4a61ad8c4 Binary files /dev/null and b/src/server/resources/password_images/six.png differ diff --git a/src/server/resources/password_images/sixteen.png b/src/server/resources/password_images/sixteen.png new file mode 100644 index 000000000..7dddfce93 Binary files /dev/null and b/src/server/resources/password_images/sixteen.png differ diff --git a/src/server/resources/password_images/skin.png b/src/server/resources/password_images/skin.png new file mode 100644 index 000000000..69a97985e Binary files /dev/null and b/src/server/resources/password_images/skin.png differ diff --git a/src/server/resources/password_images/snail.png b/src/server/resources/password_images/snail.png new file mode 100644 index 000000000..a151c5752 Binary files /dev/null and b/src/server/resources/password_images/snail.png differ diff --git a/src/server/resources/password_images/snake.png b/src/server/resources/password_images/snake.png new file mode 100644 index 000000000..665b6311e Binary files /dev/null and b/src/server/resources/password_images/snake.png differ diff --git a/src/server/resources/password_images/son.png b/src/server/resources/password_images/son.png new file mode 100644 index 000000000..d37b43bd8 Binary files /dev/null and b/src/server/resources/password_images/son.png differ diff --git a/src/server/resources/password_images/spider.png b/src/server/resources/password_images/spider.png new file mode 100644 index 000000000..2429dfcfc Binary files /dev/null and b/src/server/resources/password_images/spider.png differ diff --git a/src/server/resources/password_images/strawberry.png b/src/server/resources/password_images/strawberry.png new file mode 100644 index 000000000..fcf77ad8b Binary files /dev/null and b/src/server/resources/password_images/strawberry.png differ diff --git a/src/server/resources/password_images/teeth.png b/src/server/resources/password_images/teeth.png new file mode 100644 index 000000000..ac4998389 Binary files /dev/null and b/src/server/resources/password_images/teeth.png differ diff --git a/src/server/resources/password_images/ten.png b/src/server/resources/password_images/ten.png new file mode 100644 index 000000000..d1083909c Binary files /dev/null and b/src/server/resources/password_images/ten.png differ diff --git a/src/server/resources/password_images/three.png b/src/server/resources/password_images/three.png new file mode 100644 index 000000000..2a2ec73fe Binary files /dev/null and b/src/server/resources/password_images/three.png differ diff --git a/src/server/resources/password_images/thumb.png b/src/server/resources/password_images/thumb.png new file mode 100644 index 000000000..a569c68d5 Binary files /dev/null and b/src/server/resources/password_images/thumb.png differ diff --git a/src/server/resources/password_images/tongue.png b/src/server/resources/password_images/tongue.png new file mode 100644 index 000000000..78bca2a28 Binary files /dev/null and b/src/server/resources/password_images/tongue.png differ diff --git a/src/server/resources/password_images/turkey.png b/src/server/resources/password_images/turkey.png new file mode 100644 index 000000000..0240fc6ae Binary files /dev/null and b/src/server/resources/password_images/turkey.png differ diff --git a/src/server/resources/password_images/turtle.png b/src/server/resources/password_images/turtle.png new file mode 100644 index 000000000..52aa167dd Binary files /dev/null and b/src/server/resources/password_images/turtle.png differ diff --git a/src/server/resources/password_images/twelve.png b/src/server/resources/password_images/twelve.png new file mode 100644 index 000000000..cc1d0d6db Binary files /dev/null and b/src/server/resources/password_images/twelve.png differ diff --git a/src/server/resources/password_images/two.png b/src/server/resources/password_images/two.png new file mode 100644 index 000000000..271f45ace Binary files /dev/null and b/src/server/resources/password_images/two.png differ diff --git a/src/server/resources/password_images/whale.png b/src/server/resources/password_images/whale.png new file mode 100644 index 000000000..8da35deb1 Binary files /dev/null and b/src/server/resources/password_images/whale.png differ diff --git a/src/server/resources/password_images/white.png b/src/server/resources/password_images/white.png new file mode 100644 index 000000000..c059da90f Binary files /dev/null and b/src/server/resources/password_images/white.png differ diff --git a/src/server/resources/password_images/wolf.png b/src/server/resources/password_images/wolf.png new file mode 100644 index 000000000..d4563224a Binary files /dev/null and b/src/server/resources/password_images/wolf.png differ diff --git a/src/server/resources/password_images/woman.png b/src/server/resources/password_images/woman.png new file mode 100644 index 000000000..e0a548663 Binary files /dev/null and b/src/server/resources/password_images/woman.png differ diff --git a/src/server/resources/password_images/yellow.png b/src/server/resources/password_images/yellow.png new file mode 100644 index 000000000..6762d383a Binary files /dev/null and b/src/server/resources/password_images/yellow.png differ diff --git a/src/server/resources/password_images/zero.png b/src/server/resources/password_images/zero.png new file mode 100644 index 000000000..2f366587c Binary files /dev/null and b/src/server/resources/password_images/zero.png differ diff --git a/src/server/views/AddUpdateUser.qml b/src/server/views/AddUpdateUser.qml index c7b389506..fc9340eec 100644 --- a/src/server/views/AddUpdateUser.qml +++ b/src/server/views/AddUpdateUser.qml @@ -1,320 +1,337 @@ /* GCompris - AddUpdateUser.qml * * Copyright (C) 2017 Johnny Jazeix * * Authors: * Johnny Jazeix * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ import QtQuick 2.1 import GCompris 1.0 import QtQuick.Controls 1.1 import QtQuick.Controls.Styles 1.0 import "../../core" import "qrc:/gcompris/src/core/core.js" as Core Rectangle { id: addUpdateRectangle anchors.fill: parent color: "white" signal addUsers(ListModel model) - ListModel { id: userToUpdateModel } TableView { id: users width: parent.width - 50 height: parent.height - (bar.height * 2) + property var _passwords: MessageHandler.passwords; property string name: ""; property string dateOfBirth: "" property string password: ""; function save() { console.log("saving user") if(name != "" && dateOfBirth != "") { console.log("name of the user: ", name, "date of birth of the user: ", dateOfBirth, "password : ", password) userToUpdateModel.append({ "name": name, "dateOfBirth": dateOfBirth, "password": password }) name="" dateOfBirth="" password="" console.log("total number of users: ", userToUpdateModel.count) } } model: userToUpdateModel selectionMode: SelectionMode.MultiSelection rowDelegate: Rectangle { height: 50 width: childrenRect.width SystemPalette { id: myPalette; colorGroup: SystemPalette.Active } color: { var baseColor = styleData.alternate ? myPalette.alternateBase : myPalette.base return styleData.selected ? myPalette.highlight : baseColor } } TableViewColumn { role: "name" title: qsTr("Name") - width: 100 + width: users.width/4 } TableViewColumn { role: "dateOfBirth" title: qsTr("Birth year") - width: 100 + width: users.width/4 } TableViewColumn { id: passwordColumn role: "password" - width: 100 + width: users.width/4 + signal randomPass(); + property string imgSrc: ''; title: qsTr("Password") delegate: Item { - id: passwordColumn + id: passwordColumn2 width: passwordColumn.width // same as rowDelegate Item { id: passwordField anchors.fill: parent Component.onCompleted: { users.password = passwordImage.source.toString() } MouseArea { anchors.fill: parent onClicked: { passwordImage.visible = !passwordImage.visible } } GCText { id: passwordText visible: !passwordImage.visible - verticalAlignment: Text.AlignVCenter + anchors.centerIn: parent fontSizeMode: Text.Fit - text: modelData ? modelData.password : "" + text: "auto-generated" + font.pointSize: regularSize + color: "white" } Image { id: passwordImage - source: "qrc:/gcompris/src/activities/sudoku/sudoku.svg" + anchors.centerIn: parent + source: passwordColumn.imgSrc sourceSize.height: 50 } } } } TableViewColumn { id: saveDelete resizable: true title: qsTr("Save or Delete") signal forceFocus() - width: users.width/3 + width: users.width/4 delegate: Item { id: itemDel width: 100 height: 40 anchors.topMargin: 20 Rectangle { id: save width: 100 height: 40 color: "black" anchors.rightMargin: 10 GCText { anchors.centerIn: parent fontSize: tinySize color: "white" text: qsTr("Save") } MouseArea { id: saveMouseArea anchors.fill: parent onClicked: { saveDelete.forceFocus() users.save() } } } Rectangle { id: deleteUser width: 100 height: 40 anchors.leftMargin: 10 anchors.left: save.right color: "black" GCText { anchors.centerIn: parent fontSize: tinySize color: "white" text: qsTr("Delete") } MouseArea { anchors.fill: parent onClicked: { userToUpdateModel.remove(styleData.row) users.selection.clear(); } } } } } itemDelegate: Rectangle { id: rect SystemPalette { id: myPalette; colorGroup: SystemPalette.Active } color: { var baseColor = styleData.row % 2 == 1 ? myPalette.alternateBase : myPalette.base return styleData.selected ? myPalette.highlight : baseColor } MouseArea { id: cellMouseArea anchors.fill: parent onClicked: { // Column index are zero based if(styleData.column === 0 || styleData.column === 1) { loader.visible = true loader.item.forceActiveFocus() } } } Loader { id: loader anchors { verticalCenter: parent.verticalCenter left: parent.left } height: parent.height width: parent.width visible: true sourceComponent: visible ? input : undefined Connections { target: saveDelete // forcing the focus triggers 'editingFinised' signal of TextField. onForceFocus: { loader.item.forceActiveFocus() } } Component { id: input TextField { anchors.fill: parent visible: true text: "" onAccepted: { loader.visible = false } onEditingFinished: { switch(styleData.column) { case 0: { if(text != "") users.name = text break; } case 1: { if(text != "") users.dateOfBirth = text break; } } } } } } } } Column { id: addRemoveColumn anchors.left: users.right anchors.bottom: users.bottom spacing: 5 width: 50 Button { id: removeSelectedUsers text: qsTr("-") enabled: users.selection.count != 0 width: parent.width style: GCButtonStyle {} onClicked: { var idToRemove = [] users.selection.forEach(function(rowIndex) { idToRemove.push(rowIndex) }); for(var i = idToRemove.length-1 ; i >= 0 ; -- i) { userToUpdateModel.remove(idToRemove[i]); } users.selection.clear() } } Button { id: addUsersButton text: qsTr("+") width: parent.width style: GCButtonStyle {} + Connections { + target: passwordColumn + onRandomPass: { + console.log("generate random pass") + console.log(users._passwords[0]); + // use the first image for now + passwordColumn.imgSrc = users._passwords[0]; + + console.log(passwordColumn.imgSrc); + } + } onClicked: { // add empty user at first index. The first user is always going to be empty + passwordColumn.randomPass() userToUpdateModel.insert(0, {"name": "", "dateOfBirth": "", "password": ""}) } } } Grid { rows: 1 anchors.top: users.bottom spacing: 5 Button { id: createButton text: qsTr("Create") style: GCButtonStyle {} onClicked: { addUsers(userToUpdateModel) addUpdateRectangle.visible = false } } Button { id: cancelUserButton text: qsTr("Cancel") style: GCButtonStyle {} onClicked: { addUpdateRectangle.visible = false userToUpdateModel.clear() } } } }