mirror of
				https://gitlab.com/comunic/comunicmessages
				synced 2025-11-03 19:54:06 +00:00 
			
		
		
		
	Can get current user ID
This commit is contained in:
		@@ -14,7 +14,8 @@ SOURCES += \
 | 
			
		||||
    helpers/configurationhelper.cpp \
 | 
			
		||||
    data/accountlogintokens.cpp \
 | 
			
		||||
    widgets/mainwindow.cpp \
 | 
			
		||||
    widgets/aboutthisappdialog.cpp
 | 
			
		||||
    widgets/aboutthisappdialog.cpp \
 | 
			
		||||
    controllers/initcontroller.cpp
 | 
			
		||||
 | 
			
		||||
HEADERS += \
 | 
			
		||||
    helpers/accounthelper.h \
 | 
			
		||||
@@ -30,7 +31,8 @@ HEADERS += \
 | 
			
		||||
    helpers/configurationhelper.h \
 | 
			
		||||
    data/accountlogintokens.h \
 | 
			
		||||
    widgets/mainwindow.h \
 | 
			
		||||
    widgets/aboutthisappdialog.h
 | 
			
		||||
    widgets/aboutthisappdialog.h \
 | 
			
		||||
    controllers/initcontroller.h
 | 
			
		||||
 | 
			
		||||
FORMS += \
 | 
			
		||||
    widgets/loginwidget.ui \
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										64
									
								
								controllers/initcontroller.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								controllers/initcontroller.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,64 @@
 | 
			
		||||
#include <QCoreApplication>
 | 
			
		||||
#include <QProgressDialog>
 | 
			
		||||
#include <QMessageBox>
 | 
			
		||||
 | 
			
		||||
#include "../helpers/accounthelper.h"
 | 
			
		||||
#include "widgets/loginwidget.h"
 | 
			
		||||
#include "widgets/mainwindow.h"
 | 
			
		||||
#include "initcontroller.h"
 | 
			
		||||
#include "config.h"
 | 
			
		||||
 | 
			
		||||
InitController::InitController() : QObject()
 | 
			
		||||
{
 | 
			
		||||
    mAccountHelper = new AccountHelper;
 | 
			
		||||
    connect(mAccountHelper, &AccountHelper::refreshCurrentUserIDResult, this, &InitController::getUserIDCallback);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
InitController::~InitController()
 | 
			
		||||
{
 | 
			
		||||
    mAccountHelper->deleteLater();
 | 
			
		||||
 | 
			
		||||
    if(mProgressdialog != nullptr)
 | 
			
		||||
        mProgressdialog->deleteLater();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void InitController::init()
 | 
			
		||||
{
 | 
			
		||||
    //Define some basic values
 | 
			
		||||
    QCoreApplication::setOrganizationName(ORGANIZATION_NAME);
 | 
			
		||||
    QCoreApplication::setOrganizationDomain(ORGANIZATION_DOMAIN);
 | 
			
		||||
    QCoreApplication::setApplicationName(APPLICATION_NAME);
 | 
			
		||||
 | 
			
		||||
    //Determine whether user is signed in or not
 | 
			
		||||
    if(!mAccountHelper->signedIn()) {
 | 
			
		||||
        LoginWidget *widget = new LoginWidget();
 | 
			
		||||
        widget->show();
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    //Display startup splash screen
 | 
			
		||||
    mProgressdialog = new QProgressDialog(QObject::tr("Starting up..."), QString(), 0, 3);
 | 
			
		||||
    mProgressdialog->show();
 | 
			
		||||
 | 
			
		||||
    //First, we need to refresh current user ID
 | 
			
		||||
    mProgressdialog->setLabelText(tr("Get current user ID..."));
 | 
			
		||||
    mProgressdialog->setValue(1);
 | 
			
		||||
    mAccountHelper->refreshCurrentUserID();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void InitController::getUserIDCallback(bool success)
 | 
			
		||||
{
 | 
			
		||||
    if(!success){
 | 
			
		||||
        QMessageBox::warning(mProgressdialog, tr("Error"), tr("Could not get current user ID! Please check your internet connection..."));
 | 
			
		||||
        deleteLater();
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    mProgressdialog->setLabelText(tr("Open main window..."));
 | 
			
		||||
    mProgressdialog->setValue(2);
 | 
			
		||||
    (new MainWindow())->show();
 | 
			
		||||
 | 
			
		||||
    mProgressdialog->hide();
 | 
			
		||||
    deleteLater();
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										41
									
								
								controllers/initcontroller.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								controllers/initcontroller.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,41 @@
 | 
			
		||||
/**
 | 
			
		||||
 * Initialization controller
 | 
			
		||||
 *
 | 
			
		||||
 * Used to initialize the application
 | 
			
		||||
 *
 | 
			
		||||
 * @author Pierre HUBERT
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef INITCONTROLLER_H
 | 
			
		||||
#define INITCONTROLLER_H
 | 
			
		||||
 | 
			
		||||
#include <QObject>
 | 
			
		||||
 | 
			
		||||
class QProgressDialog;
 | 
			
		||||
class AccountHelper;
 | 
			
		||||
 | 
			
		||||
class InitController : public QObject
 | 
			
		||||
{
 | 
			
		||||
    Q_OBJECT
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
    InitController();
 | 
			
		||||
    ~InitController();
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Initialize the application. This operation can be
 | 
			
		||||
     * run several times
 | 
			
		||||
     */
 | 
			
		||||
    void init();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
private slots:
 | 
			
		||||
 | 
			
		||||
    void getUserIDCallback(bool success);
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    AccountHelper *mAccountHelper = nullptr;
 | 
			
		||||
    QProgressDialog *mProgressdialog = nullptr;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif // INITCONTROLLER_H
 | 
			
		||||
@@ -6,6 +6,9 @@
 | 
			
		||||
#include "../data/accountlogintokens.h"
 | 
			
		||||
#include "../helpers/apihelper.h"
 | 
			
		||||
 | 
			
		||||
//Current user ID
 | 
			
		||||
static int mUserID = -1;
 | 
			
		||||
 | 
			
		||||
AccountHelper::AccountHelper(QObject *parent) : QObject(parent)
 | 
			
		||||
{
 | 
			
		||||
    mAPIHelper = new APIHelper;
 | 
			
		||||
@@ -39,6 +42,15 @@ void AccountHelper::login(const AccountLoginRequest &info)
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void AccountHelper::refreshCurrentUserID()
 | 
			
		||||
{
 | 
			
		||||
    APIRequest *request = new APIRequest;
 | 
			
		||||
    request->setURI("user/getCurrentUserID");
 | 
			
		||||
    connect(request, &APIRequest::error, this, &AccountHelper::getUserIdCallbackError);
 | 
			
		||||
    connect(request, &APIRequest::success, this, &AccountHelper::getUserIdCallbackSuccess);
 | 
			
		||||
    mAPIHelper->execute(request);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void AccountHelper::loginError(int code)
 | 
			
		||||
{
 | 
			
		||||
    //Delete API request
 | 
			
		||||
@@ -80,3 +92,35 @@ void AccountHelper::requestLoginResult(const QJsonDocument &document)
 | 
			
		||||
    //Success
 | 
			
		||||
    emit loginResult(LoginResult::LOGIN_SUCCESS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void AccountHelper::getUserIdCallbackError()
 | 
			
		||||
{
 | 
			
		||||
    qobject_cast<APIRequest *>(sender())->deleteLater();
 | 
			
		||||
 | 
			
		||||
    emit refreshCurrentUserIDResult(false);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void AccountHelper::getUserIdCallbackSuccess(const QJsonDocument &document)
 | 
			
		||||
{
 | 
			
		||||
    qobject_cast<APIRequest *>(sender())->deleteLater();
 | 
			
		||||
 | 
			
		||||
    int userID = document.object().value("userID").toInt(-1);
 | 
			
		||||
 | 
			
		||||
    if(userID < 0){
 | 
			
		||||
        qWarning("Could not get user ID!");
 | 
			
		||||
        emit refreshCurrentUserIDResult(false);
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    mUserID = userID;
 | 
			
		||||
 | 
			
		||||
    emit refreshCurrentUserIDResult(true);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int AccountHelper::getUserID()
 | 
			
		||||
{
 | 
			
		||||
    if(mUserID < 1)
 | 
			
		||||
        qWarning("An attempt to get user ID has been made while user ID has not been refreshed yet!");
 | 
			
		||||
 | 
			
		||||
    return mUserID;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -39,6 +39,19 @@ public:
 | 
			
		||||
     */
 | 
			
		||||
    void login(const AccountLoginRequest &info);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Refresh current user ID
 | 
			
		||||
     */
 | 
			
		||||
    void refreshCurrentUserID();
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get current cached user ID
 | 
			
		||||
     *
 | 
			
		||||
     * @return The ID of the user ID / note : invalid value if user ID
 | 
			
		||||
     * is not available yet
 | 
			
		||||
     */
 | 
			
		||||
    static int getUserID();
 | 
			
		||||
 | 
			
		||||
signals:
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@@ -48,6 +61,13 @@ signals:
 | 
			
		||||
     */
 | 
			
		||||
    void loginResult(LoginResult result);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Refresh current user ID result
 | 
			
		||||
     *
 | 
			
		||||
     * @param success TRUE in case of success / FALSE else
 | 
			
		||||
     */
 | 
			
		||||
    void refreshCurrentUserIDResult(bool success);
 | 
			
		||||
 | 
			
		||||
public slots:
 | 
			
		||||
 | 
			
		||||
private slots:
 | 
			
		||||
@@ -56,6 +76,10 @@ private slots:
 | 
			
		||||
    void loginError(int code);
 | 
			
		||||
    void requestLoginResult(const QJsonDocument &document);
 | 
			
		||||
 | 
			
		||||
    //Get current user id callbacks
 | 
			
		||||
    void getUserIdCallbackError();
 | 
			
		||||
    void getUserIdCallbackSuccess(const QJsonDocument &document);
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    APIHelper *mAPIHelper;
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
@@ -2,6 +2,9 @@
 | 
			
		||||
#include <QJsonDocument>
 | 
			
		||||
 | 
			
		||||
#include "apihelper.h"
 | 
			
		||||
#include "accounthelper.h"
 | 
			
		||||
#include "configurationhelper.h"
 | 
			
		||||
#include "../data/accountlogintokens.h"
 | 
			
		||||
#include "../config.h"
 | 
			
		||||
 | 
			
		||||
APIHelper::APIHelper(QObject *parent) : QObject(parent)
 | 
			
		||||
@@ -20,6 +23,13 @@ void APIHelper::execute(APIRequest *request)
 | 
			
		||||
    request->addString("serviceName", API_SERVICE_NAME);
 | 
			
		||||
    request->addString("serviceToken", API_SERVICE_TOKEN);
 | 
			
		||||
 | 
			
		||||
    //Add account tokens if available
 | 
			
		||||
    if(AccountHelper().signedIn()){
 | 
			
		||||
        AccountLoginTokens tokens = ConfigurationHelper().getAccountTokens();
 | 
			
		||||
        request->addString("userToken1", tokens.token1());
 | 
			
		||||
        request->addString("userToken2", tokens.token2());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    //Prepare request
 | 
			
		||||
    //See this SO question to learn more : https://stackoverflow.com/questions/2599423
 | 
			
		||||
    QUrlQuery queryData;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										21
									
								
								main.cpp
									
									
									
									
									
								
							
							
						
						
									
										21
									
								
								main.cpp
									
									
									
									
									
								
							@@ -4,28 +4,13 @@
 | 
			
		||||
 | 
			
		||||
#include <QApplication>
 | 
			
		||||
 | 
			
		||||
#include "helpers/accounthelper.h"
 | 
			
		||||
#include "widgets/loginwidget.h"
 | 
			
		||||
#include "widgets/mainwindow.h"
 | 
			
		||||
#include "config.h"
 | 
			
		||||
#include "controllers/initcontroller.h"
 | 
			
		||||
 | 
			
		||||
int main(int argc, char** argv){
 | 
			
		||||
    QApplication app(argc, argv);
 | 
			
		||||
 | 
			
		||||
    //Define some basic values
 | 
			
		||||
    QCoreApplication::setOrganizationName(ORGANIZATION_NAME);
 | 
			
		||||
    QCoreApplication::setOrganizationDomain(ORGANIZATION_DOMAIN);
 | 
			
		||||
    QCoreApplication::setApplicationName(APPLICATION_NAME);
 | 
			
		||||
 | 
			
		||||
    //Determine whether user is signed in or not
 | 
			
		||||
    if(AccountHelper().signedIn()){
 | 
			
		||||
        MainWindow *mainWindow = new MainWindow;
 | 
			
		||||
        mainWindow->show();
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
        LoginWidget *widget = new LoginWidget();
 | 
			
		||||
        widget->show();
 | 
			
		||||
    }
 | 
			
		||||
    //Initialize app
 | 
			
		||||
    (new InitController())->init();
 | 
			
		||||
 | 
			
		||||
    return app.exec();
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,7 @@
 | 
			
		||||
 | 
			
		||||
#include "loginwidget.h"
 | 
			
		||||
#include "ui_loginwidget.h"
 | 
			
		||||
#include "mainwindow.h"
 | 
			
		||||
#include "../controllers/initcontroller.h"
 | 
			
		||||
#include "../utils/accountutils.h"
 | 
			
		||||
#include "../helpers/accounthelper.h"
 | 
			
		||||
 | 
			
		||||
@@ -26,9 +26,8 @@ void LoginWidget::loginResult(LoginResult result)
 | 
			
		||||
    if(result == LoginResult::LOGIN_SUCCESS){
 | 
			
		||||
        qDebug("User successfully signed in.");
 | 
			
		||||
 | 
			
		||||
        //Open the window
 | 
			
		||||
        MainWindow *mainWindow = new MainWindow();
 | 
			
		||||
        mainWindow->show();
 | 
			
		||||
        //Restart application
 | 
			
		||||
        (new InitController())->init();
 | 
			
		||||
 | 
			
		||||
        close();
 | 
			
		||||
        return;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user