File indexing completed on 2024-12-08 10:25:49

0001 /*
0002    SPDX-FileCopyrightText: 2018-2024 Laurent Montel <montel@kde.org>
0003 
0004    SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #pragma once
0008 
0009 #include "authenticationinfo.h"
0010 #include "libruqolacore_export.h"
0011 #include "model/rocketchataccountfilterproxymodel.h"
0012 #include "model/rocketchataccountmodel.h"
0013 #include "parsemessageurlutils.h"
0014 
0015 #include <QObject>
0016 class RocketChatAccount;
0017 
0018 class LIBRUQOLACORE_EXPORT AccountManager : public QObject
0019 {
0020     Q_OBJECT
0021 public:
0022     struct LIBRUQOLACORE_EXPORT AccountManagerInfo {
0023         QVector<AuthenticationInfo> authenticationInfos;
0024         QString displayName;
0025         QString accountName;
0026         QString userName;
0027         QString serverUrl;
0028         QString password;
0029         bool canResetPassword = false;
0030         bool enabled = true;
0031         bool canRegisterAccount = false;
0032     };
0033 
0034     explicit AccountManager(QObject *parent = nullptr);
0035     ~AccountManager() override;
0036 
0037     void removeAccount(const QString &accountName, bool removeLogFiles = false);
0038     void addAccount(const AccountManagerInfo &info);
0039 
0040     RocketChatAccount *account() const;
0041     RocketChatAccountModel *rocketChatAccountModel() const;
0042 
0043     RocketChatAccountFilterProxyModel *rocketChatAccountProxyModel() const;
0044 
0045     void addAccount(RocketChatAccount *account);
0046 
0047     void setCurrentAccount(const QString &accountName);
0048     [[nodiscard]] QString currentAccount() const;
0049     void selectAccount(const QString &accountName);
0050 
0051     void modifyAccount(const AccountManagerInfo &info);
0052     [[nodiscard]] QStringList accountsName() const;
0053 
0054     [[nodiscard]] int accountNumber() const;
0055     void openMessageUrl(const QString &messageUrl);
0056     [[nodiscard]] bool showMessage(const ParseMessageUrlUtils &parseUrl);
0057     [[nodiscard]] RocketChatAccount *accountFromName(const QString &accountName);
0058 
0059     [[nodiscard]] QStringList accountNamesSorted() const;
0060 
0061 Q_SIGNALS:
0062     void logoutAccountDone(const QString &accountName);
0063     void updateNotification(bool hasAlert, int nbUnread, const QString &accountName);
0064     void currentAccountChanged();
0065     void roomNeedAttention();
0066     void messageUrlNotFound(const QString &str);
0067 
0068 private:
0069     LIBRUQOLACORE_NO_EXPORT void removeDatabaseAccount(const QString &accountName);
0070     LIBRUQOLACORE_NO_EXPORT void removeDirectory(const QString &directory);
0071     LIBRUQOLACORE_NO_EXPORT void removeLogs(const QString &accountName);
0072     LIBRUQOLACORE_NO_EXPORT void loadAccount();
0073     LIBRUQOLACORE_NO_EXPORT void connectToAccount(RocketChatAccount *account);
0074     LIBRUQOLACORE_NO_EXPORT void slotSwitchToAccountAndRoomName(const QString &accountName, const QString &roomName, const QString &channelType);
0075     LIBRUQOLACORE_NO_EXPORT void loadExcludeEmoticons();
0076     RocketChatAccount *mCurrentAccount = nullptr;
0077     RocketChatAccountModel *const mRocketChatAccountModel;
0078     RocketChatAccountFilterProxyModel *const mRocketChatAccountProxyModel;
0079 };
0080 Q_DECLARE_TYPEINFO(AccountManager::AccountManagerInfo, Q_MOVABLE_TYPE);