Files
AZKi/AZKiServer/Services/AZKiRpcService.cs

47 lines
1.5 KiB
C#

using AZKiServer.Models;
using AZKiServer.RPC;
using Google.Protobuf;
using Grpc.Core;
namespace AZKiServer.Services;
public class AZKiRpcService(MediaService mediaService) : RPC.AZKi.AZKiBase
{
public override async Task<MediaList> GetMediaEntriesInRange(MediaRangeRequest request, ServerCallContext context)
{
var from = request.From.ToDateTime();
var to = request.To.ToDateTime();
var items = await mediaService.GetEntriesInRangeAsync(request.Type.FromRpc(), from, to);
var result = new MediaList();
result.Entries.AddRange(items.Select(e => e.ToRpc()));
return result;
}
public override async Task<PlaybackInfo> GetMediaPlayback(MediaPlaybackRequest request, ServerCallContext context)
{
var from = request.Date.ToDateTime().Date;
var to = request.Date.ToDateTime().Date.AddDays(1);
var items = await mediaService.GetEntriesInRangeAsync(Models.MediaType.All, from, to);
var channels = items.GroupBy(i => i.CameraId).Select(c =>
{
var images = c.Where(m => m.Type == Models.MediaType.Image).Select(m => m.ToRpc());
var videos = c.Where(m => m.Type == Models.MediaType.Video).Select(m => m.ToRpc());
var result = new MediaChannel
{
CameraId = c.Key,
};
result.Images.AddRange(images);
result.Videos.AddRange(videos);
return result;
});
var playback = new PlaybackInfo
{
Date = Google.Protobuf.WellKnownTypes.Timestamp.FromDateTime(from),
};
playback.Channels.AddRange(channels);
return playback;
}
}