47 lines
1.5 KiB
C#
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;
|
|
}
|
|
}
|