Couple more slight tweaks :)

This commit is contained in:
Ske 2020-08-21 17:08:49 +02:00
parent 1bb5d203df
commit 10c01da39b
8 changed files with 37 additions and 22 deletions

View File

@ -245,7 +245,7 @@ namespace PluralKit.Bot
throw new PKError("You do not have permission to access this information.");
}
var groups = (await conn.QueryGroupsInSystem(system.Id))
var groups = (await conn.QueryGroupList(system.Id))
.Where(g => g.Visibility.CanAccess(pctx))
.ToList();
@ -262,14 +262,14 @@ namespace PluralKit.Bot
var title = system.Name != null ? $"Groups of {system.Name} (`{system.Hid}`)" : $"Groups of `{system.Hid}`";
await ctx.Paginate(groups.ToAsyncEnumerable(), groups.Count, 25, title, Renderer);
Task Renderer(DiscordEmbedBuilder eb, IEnumerable<PKGroup> page)
Task Renderer(DiscordEmbedBuilder eb, IEnumerable<ListedGroup> page)
{
eb.WithSimpleLineContent(page.Select(g =>
{
if (g.DisplayName != null)
return $"[`{g.Hid}`] **{g.Name}** ({g.DisplayName})";
return $"[`{g.Hid}`] **{g.Name}** ({g.DisplayName}) ({"member".ToQuantity(g.MemberCount)})";
else
return $"[`{g.Hid}`] **{g.Name}**";
return $"[`{g.Hid}`] **{g.Name}** ({"member".ToQuantity(g.MemberCount)})";
}));
eb.WithFooter($"{groups.Count} total.");
return Task.CompletedTask;

View File

@ -26,6 +26,7 @@ create table group_members (
primary key (group_id, member_id)
);
alter table systems add column group_list_privacy integer check (group_list_privacy in (1, 2)) not null default systems.member_list_privacy;
alter table systems add column group_list_privacy integer check (group_list_privacy in (1, 2)) not null default 1;
update systems set group_list_privacy = member_list_privacy;
update info set schema_version = 9;

View File

@ -12,6 +12,9 @@ namespace PluralKit.Core
public static Task<IEnumerable<SystemFronter>> QueryCurrentFronters(this IPKConnection conn, SystemId system) =>
conn.QueryAsync<SystemFronter>("select * from system_fronters where system = @system", new {system});
public static Task<IEnumerable<ListedGroup>> QueryGroupList(this IPKConnection conn, SystemId system) =>
conn.QueryAsync<ListedGroup>("select * from group_list where system = @System", new {System = system});
public static Task<IEnumerable<ListedMember>> QueryMemberList(this IPKConnection conn, SystemId system, MemberListQueryOptions opts)
{
StringBuilder query;

View File

@ -0,0 +1,7 @@
namespace PluralKit.Core
{
public class ListedGroup : PKGroup
{
public int MemberCount { get; }
}
}

View File

@ -55,3 +55,9 @@ select members.*,
-- Any other privacy (rn just '2'), return null description (missing case = null in SQL)
end as public_description
from members;
create view group_list as
select groups.*,
-- Find group member count
(select count(*) from group_members where group_id = groups.id) as member_count
from groups;

View File

@ -5,6 +5,7 @@
drop view if exists system_last_switch;
drop view if exists system_fronters;
drop view if exists member_list;
drop view if exists group_list;
drop function if exists message_context;
drop function if exists proxy_members;

View File

@ -35,9 +35,6 @@ namespace PluralKit.Core
public static Task<PKGroup?> QueryGroupByHid(this IPKConnection conn, string hid) =>
conn.QueryFirstOrDefaultAsync<PKGroup?>("select * from groups where hid = @hid", new {hid = hid.ToLowerInvariant()});
public static Task<IEnumerable<PKGroup>> QueryGroupsInSystem(this IPKConnection conn, SystemId system) =>
conn.QueryAsync<PKGroup>("select * from groups where system = @System", new {System = system});
public static Task<int> QueryGroupMemberCount(this IPKConnection conn, GroupId id,
PrivacyLevel? privacyFilter = null)
{

View File

@ -5,20 +5,20 @@ namespace PluralKit.Core
{
public class PKGroup
{
public GroupId Id { get; }
public string Hid { get; } = null!;
public SystemId System { get; }
public GroupId Id { get; private set; }
public string Hid { get; private set; } = null!;
public SystemId System { get; private set; }
public string Name { get; } = null!;
public string? DisplayName { get; }
public string? Description { get; }
public string? Icon { get; }
public string Name { get; private set; } = null!;
public string? DisplayName { get; private set; }
public string? Description { get; private set; }
public string? Icon { get; private set; }
public PrivacyLevel DescriptionPrivacy { get; }
public PrivacyLevel IconPrivacy { get; }
public PrivacyLevel ListPrivacy { get; }
public PrivacyLevel Visibility { get; }
public PrivacyLevel DescriptionPrivacy { get; private set; }
public PrivacyLevel IconPrivacy { get; private set; }
public PrivacyLevel ListPrivacy { get; private set; }
public PrivacyLevel Visibility { get; private set; }
public Instant Created { get; }
public Instant Created { get; private set; }
}
}