82 lines
2.6 KiB
C++
82 lines
2.6 KiB
C++
#ifndef USER_MANAGER_H
|
|
#define USER_MANAGER_H
|
|
|
|
#include <QObject>
|
|
#include <QString>
|
|
#include <QMap>
|
|
#include <QVector>
|
|
#include <QDateTime>
|
|
#include "user.h"
|
|
#include "twitchmessage.h"
|
|
|
|
class UserManager : public QObject
|
|
{
|
|
Q_OBJECT
|
|
|
|
public:
|
|
explicit UserManager(QObject *parent = nullptr);
|
|
~UserManager();
|
|
|
|
// Основные методы
|
|
QString checkUser(const QString &displayName, const TwitchMessage &msg = TwitchMessage());
|
|
User* findUser(const QString &displayName);
|
|
User* findUserById(const QString &userId);
|
|
// Статистика
|
|
int m_totalMessages;
|
|
// Обновление пользователя
|
|
void updateUserFromMessage(const QString &displayName, const TwitchMessage &msg);
|
|
void updateUserStatus(const QString &userId, bool isMod, bool isVIP, bool isSubscriber);
|
|
|
|
// Управление списком
|
|
void addUser(const User &user);
|
|
void removeUser(const QString &displayName);
|
|
void clear();
|
|
|
|
// Поиск
|
|
QVector<User*> findUsersByLogin(const QString &login);
|
|
QVector<User*> getModerators() const;
|
|
QVector<User*> getVIPs() const;
|
|
QVector<User*> getSubscribers() const;
|
|
QVector<User*> getActiveUsers(int minutes = 10) const;
|
|
const User* getRandomUser() const;
|
|
// Статистика
|
|
int getUserCount() const;
|
|
int getMessageCount() const;
|
|
|
|
// Сохранение/загрузка
|
|
bool saveToFile(const QString &filename);
|
|
bool loadFromFile(const QString &filename);
|
|
|
|
// Геттеры
|
|
User* getUserByIndex(const QString &userID);
|
|
const QMap<QString, User>& getAllUsers() const;
|
|
|
|
signals:
|
|
void userAdded(const User &user);
|
|
void userUpdated(const User &user);
|
|
void userRemoved(const QString &userId, const QString &displayName);
|
|
void userMessageCountChanged(const QString &userId, int count);
|
|
|
|
private:
|
|
// Основное хранилище (DisplayName -> User)
|
|
QMap<QString, User> m_users;
|
|
|
|
// Индексы для быстрого поиска
|
|
QMap<QString, QString> m_userIdToDisplayName; // userId -> displayName
|
|
QMap<QString, QString> m_loginToDisplayName; // login -> displayName
|
|
|
|
|
|
|
|
// Вспомогательные методы
|
|
QString generateUserId() const;
|
|
void updateIndexes(const QString &displayName, const User &user);
|
|
void cleanupOldUsers();
|
|
|
|
// Конфигурация
|
|
int m_maxUsers; // Максимальное количество пользователей в памяти
|
|
int m_cleanupInterval; // Интервал очистки в минутах
|
|
QDateTime m_lastCleanup;
|
|
};
|
|
|
|
#endif // USER_MANAGER_H
|