75 lines
2.9 KiB
C++
75 lines
2.9 KiB
C++
#pragma once
|
|
|
|
#include <memory>
|
|
#include <PermissionRegister.h>
|
|
|
|
namespace ts::server::groups {
|
|
enum GroupType {
|
|
GROUP_TYPE_QUERY,
|
|
GROUP_TYPE_TEMPLATE,
|
|
GROUP_TYPE_NORMAL
|
|
};
|
|
|
|
enum GroupNameMode {
|
|
GROUP_NAME_MODE_HIDDEN,
|
|
GROUP_NAME_MODE_BEFORE,
|
|
GROUP_NAME_MODE_BEHIND
|
|
};
|
|
|
|
typedef uint32_t GroupSortId;
|
|
typedef uint32_t GroupIconId;
|
|
|
|
class GroupManager;
|
|
class Group {
|
|
friend class GroupManager;
|
|
public:
|
|
Group(const std::shared_ptr<GroupManager>& /* manager */, GroupId /* id */, GroupType /* type */, std::string /* name */, std::shared_ptr<permission::v2::PermissionRegister> /* permissions */);
|
|
~Group() = default;
|
|
|
|
/* information getters */
|
|
[[nodiscard]] inline GroupId group_id() const { return this->group_id_; }
|
|
[[nodiscard]] inline GroupType group_type() const { return this->type_; }
|
|
[[nodiscard]] inline const std::string& display_name() const { return this->name_; }
|
|
[[nodiscard]] inline std::shared_ptr<permission::v2::PermissionRegister> permissions() { return this->permissions_; }
|
|
|
|
[[nodiscard]] inline bool save_assignments() const {
|
|
assert(this->permissions_);
|
|
auto value = this->permissions_->permission_value_flagged(permission::b_group_is_permanent);
|
|
return value.has_value ? permission::v2::permission_granted(1, value) : true;
|
|
}
|
|
|
|
[[nodiscard]] inline GroupNameMode name_mode() const {
|
|
assert(this->permissions_);
|
|
auto value = this->permissions_->permission_value_flagged(permission::i_group_show_name_in_tree);
|
|
return value.has_value ? (GroupNameMode) value.value : GroupNameMode::GROUP_NAME_MODE_HIDDEN;
|
|
}
|
|
|
|
[[nodiscard]] inline GroupSortId sort_id() const {
|
|
assert(this->permissions_);
|
|
auto value = this->permissions_->permission_value_flagged(permission::i_group_sort_id);
|
|
return value.has_value ? value.value : 0;
|
|
}
|
|
|
|
[[nodiscard]] inline GroupIconId icon_id() const {
|
|
assert(this->permissions_);
|
|
auto value = this->permissions_->permission_value_flagged(permission::i_icon_id);
|
|
return value.has_value ? value.value : 0;
|
|
}
|
|
|
|
/* information setters */
|
|
void set_display_name(const std::string& name);
|
|
private:
|
|
std::weak_ptr<GroupManager> manager_;
|
|
|
|
const GroupId group_id_;
|
|
const GroupType type_;
|
|
std::string name_;
|
|
|
|
std::shared_ptr<permission::v2::PermissionRegister> permissions_;
|
|
|
|
void set_permissions(const std::shared_ptr<permission::v2::PermissionRegister>& /* permissions */);
|
|
};
|
|
|
|
class ServerGroup : public Group { };
|
|
class ChannelGroup : public Group { };
|
|
} |