Now UserManager::_create_user() has a User as a parameter.

This shoukld make it easier to customize user creation. Similar idea to
how TerrainWorld's _create_chunk() works.
This commit is contained in:
Relintai 2025-05-03 20:25:32 +02:00
parent ca1f9c7674
commit e9e2e72665
8 changed files with 32 additions and 28 deletions

View File

@ -69,11 +69,12 @@ Ref<User> UserManager::_get_user_email(const String &user_email) {
}
void UserManager::_save_user(Ref<User> user) {
}
Ref<User> UserManager::_create_user() {
Ref<User> u;
u.instance();
Ref<User> UserManager::_create_user(Ref<User> p_user) {
if (!p_user.is_valid()) {
p_user.instance();
}
return u;
return p_user;
}
bool UserManager::_is_username_taken(const String &user_name) {
return false;
@ -124,7 +125,7 @@ void UserManager::_bind_methods() {
BIND_VMETHOD(MethodInfo(PropertyInfo(Variant::OBJECT, "ret", PROPERTY_HINT_RESOURCE_TYPE, "User"), "_get_user_email", PropertyInfo(Variant::STRING, "user_email")));
BIND_VMETHOD(MethodInfo("_save_user", PropertyInfo(Variant::OBJECT, "user", PROPERTY_HINT_RESOURCE_TYPE, "User")));
BIND_VMETHOD(MethodInfo(PropertyInfo(Variant::OBJECT, "ret", PROPERTY_HINT_RESOURCE_TYPE, "User"), "_create_user"));
BIND_VMETHOD(MethodInfo(PropertyInfo(Variant::OBJECT, "ret", PROPERTY_HINT_RESOURCE_TYPE, "User"), "_create_user", PropertyInfo(Variant::OBJECT, "user", PROPERTY_HINT_RESOURCE_TYPE, "User")));
BIND_VMETHOD(MethodInfo(PropertyInfo(Variant::BOOL, "ret"), "_is_username_taken", PropertyInfo(Variant::STRING, "user_name")));
BIND_VMETHOD(MethodInfo(PropertyInfo(Variant::BOOL, "ret"), "_is_email_taken", PropertyInfo(Variant::STRING, "email")));
@ -146,7 +147,7 @@ void UserManager::_bind_methods() {
ClassDB::bind_method(D_METHOD("_get_user_email", "user_email"), &UserManager::_get_user_email);
ClassDB::bind_method(D_METHOD("_save_user", "user"), &UserManager::_save_user);
ClassDB::bind_method(D_METHOD("_create_user"), &UserManager::_create_user);
ClassDB::bind_method(D_METHOD("_create_user", "user"), &UserManager::_create_user);
ClassDB::bind_method(D_METHOD("_is_username_taken", "user_name"), &UserManager::_is_username_taken);
ClassDB::bind_method(D_METHOD("_is_email_taken", "email"), &UserManager::_is_email_taken);

View File

@ -61,7 +61,7 @@ public:
virtual void _save_user(Ref<User> user);
virtual Ref<User> _create_user();
virtual Ref<User> _create_user(Ref<User> p_user);
virtual bool _is_username_taken(const String &user_name);
virtual bool _is_email_taken(const String &email);

View File

@ -246,14 +246,15 @@ void UserManagerDB::_save_user(Ref<User> user) {
b->run_query();
}
}
Ref<User> UserManagerDB::_create_user() {
Ref<User> u;
u.instance();
Ref<User> UserManagerDB::_create_user(Ref<User> p_user) {
if (!p_user.is_valid()) {
p_user.instance();
}
//save_user(u);
u->connect("changed", this, "_save_user", varray(u));
p_user->connect("changed", this, "_save_user", varray(p_user));
return u;
return p_user;
}
bool UserManagerDB::_is_username_taken(const String &user_name) {
Ref<QueryBuilder> b = get_query_builder();

View File

@ -65,7 +65,7 @@ public:
void _save_user(Ref<User> user);
Ref<User> _create_user();
Ref<User> _create_user(Ref<User> p_user);
bool _is_username_taken(const String &user_name);
bool _is_email_taken(const String &email);

View File

@ -150,13 +150,15 @@ void UserManagerFile::_save_user(Ref<User> user) {
memdelete(f);
}
Ref<User> UserManagerFile::_create_user() {
Ref<User> u;
u.instance();
u->set_user_id(-1);
u->connect("changed", this, "_save_user", varray(u));
Ref<User> UserManagerFile::_create_user(Ref<User> p_user) {
if (!p_user.is_valid()) {
p_user.instance();
p_user->set_user_id(-1);
}
return u;
p_user->connect("changed", this, "_save_user", varray(p_user));
return p_user;
}
bool UserManagerFile::_is_username_taken(const String &user_name) {
// TODO check only the lowercase version, also strip it, so User and UsEr counts as the same

View File

@ -54,7 +54,7 @@ public:
virtual void _save_user(Ref<User> user);
virtual Ref<User> _create_user();
virtual Ref<User> _create_user(Ref<User> p_user);
virtual bool _is_username_taken(const String &user_name);
virtual bool _is_email_taken(const String &email);

View File

@ -68,15 +68,15 @@ Ref<User> UserManagerStatic::_get_user_email(const String &user_email) {
void UserManagerStatic::_save_user(Ref<User> user) {
//With this class Users are serialized via editor properties, ignore
}
Ref<User> UserManagerStatic::_create_user() {
Ref<User> u;
u.instance();
Ref<User> UserManagerStatic::_create_user(Ref<User> p_user) {
if (!p_user.is_valid()) {
p_user.instance();
}
u->set_user_id(_users.size());
p_user->set_user_id(_users.size());
_users.push_back(p_user);
_users.push_back(u);
return u;
return p_user;
}
bool UserManagerStatic::_is_username_taken(const String &user_name) {
for (int i = 0; i < _users.size(); ++i) {

View File

@ -51,7 +51,7 @@ public:
void _save_user(Ref<User> user);
Ref<User> _create_user();
Ref<User> _create_user(Ref<User> p_user);
bool _is_username_taken(const String &user_name);
bool _is_email_taken(const String &email);