Refactoring controllers to use publicly accessible CursorLists

This commit is contained in:
Brandon Watson
2021-04-12 21:54:21 -04:00
parent 4acf091511
commit 46173f4f99
6 changed files with 47 additions and 49 deletions

View File

@ -7,6 +7,7 @@ using Aurora.Services.Settings;
using Aurora.Models.Media;
using Aurora.Services.EventManager;
using Aurora.Utils;
using Aurora.Cursor;
namespace Aurora.Services.Controllers
{
@ -24,7 +25,7 @@ namespace Aurora.Services.Controllers
this._startDateTime = DateTime.UtcNow;
this._displayName = partyName;
this._description = description;
this._memberList = new SortedList<string, Member>();
this._memberList = new CursorList<Member>();
this._mediaList = new SortedList<string, Media>();
_libraryService = libraryService;

View File

@ -6,40 +6,50 @@ using Aurora.Proto.General;
using Aurora.Utils;
using Grpc.Core;
using Google.Protobuf.WellKnownTypes;
using Aurora.Cursor;
namespace Aurora.Services.Controllers
{
public partial class RemotePartyController : RemotePartyService.RemotePartyServiceBase
{
private SortedList<string, Member> _memberList;
private CursorList<Member> _memberList;
public CursorList<Member> MemberList
{
get
{
return this._memberList;
}
set
{
if(this._memberList != value)
{
_memberList = value;
}
}
}
public override Task<ListMembersResponse> ListMembers(ListMembersRequest request, Grpc.Core.ServerCallContext context)
{
Cursor<Member> cursor = new Cursor<Member>(ref this._memberList);
Aurora.Cursor.SortDirection direction = Aurora.Cursor.SortDirection.Asc;
CursorResult<Member> res = cursor
.WithNextPageToken(request.PageToken)
.WithSize(request.PageSize)
.GetNextPage();
//Ignoring parent field because there is only one instance of the party
ListMembersResponse resp = new ListMembersResponse();
//Determine start idx
int startIdx = 0;
if (!string.IsNullOrEmpty(request.PageToken))
resp.Members.AddRange(res.Result.ConvertAll(member => new Member()
{
startIdx = _memberList.IndexOfKey(request.PageToken) + 1;
}
int pageSize = request.PageSize;
//Assign pageSize
if (pageSize > _memberList.Count)
{
pageSize = _memberList.Count;
}
//Gather page
List<Member> members = new List<Member>(_memberList.Values);
resp.Members.AddRange(members.GetRange(startIdx, pageSize));
//Set next page token
resp.NextPageToken = resp.Members[resp.Members.Count - 1].Name;
Name = member.Name,
UserName = member.UserName,
IpAddress = member.IpAddress,
AddedOn = member.AddedOn
}));
return Task.FromResult(resp);
}
@ -76,7 +86,7 @@ namespace Aurora.Services.Controllers
request.Member.AddedOn = Timestamp.FromDateTime(DateTime.UtcNow);
request.Member.IpAddress = context.Host;
_memberList.Add(resourceName, request.Member);
_memberList.Add(request.Member);
BaseEvent @event = new BaseEvent
{