2020-05-14 21:13:45 +00:00
using System ;
using System.Globalization ;
using System.Linq ;
using Jellyfin.Data.Entities ;
2019-11-17 22:05:39 +00:00
using MediaBrowser.Controller.Configuration ;
2019-01-13 19:24:58 +00:00
using MediaBrowser.Controller.Net ;
2014-08-10 22:13:17 +00:00
using MediaBrowser.Model.Activity ;
using MediaBrowser.Model.Querying ;
2016-10-25 19:02:04 +00:00
using MediaBrowser.Model.Services ;
2019-11-17 22:05:39 +00:00
using Microsoft.Extensions.Logging ;
2014-08-10 22:13:17 +00:00
namespace MediaBrowser.Api.System
{
[Route("/System/ActivityLog/Entries", "GET", Summary = "Gets activity log entries")]
public class GetActivityLogs : IReturn < QueryResult < ActivityLogEntry > >
{
/// <summary>
/// Skips over a given number of items within the results. Use for paging.
/// </summary>
/// <value>The start index.</value>
[ApiMember(Name = "StartIndex", Description = "Optional. The record index to start at. All items with a lower index will be dropped from the results.", IsRequired = false, DataType = "int", ParameterType = "query", Verb = "GET")]
public int? StartIndex { get ; set ; }
/// <summary>
2020-06-15 22:37:52 +00:00
/// The maximum number of items to return.
2014-08-10 22:13:17 +00:00
/// </summary>
/// <value>The limit.</value>
[ApiMember(Name = "Limit", Description = "Optional. The maximum number of records to return", IsRequired = false, DataType = "int", ParameterType = "query", Verb = "GET")]
public int? Limit { get ; set ; }
2014-08-14 13:24:30 +00:00
2018-09-12 17:26:21 +00:00
[ApiMember(Name = "MinDate", Description = "Optional. The minimum date. Format = ISO", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")]
2014-08-14 13:24:30 +00:00
public string MinDate { get ; set ; }
2018-09-12 17:26:21 +00:00
public bool? HasUserId { get ; set ; }
2014-08-10 22:13:17 +00:00
}
2014-11-15 02:31:03 +00:00
[Authenticated(Roles = "Admin")]
2014-08-10 22:13:17 +00:00
public class ActivityLogService : BaseApiService
{
private readonly IActivityManager _activityManager ;
2019-11-17 22:05:39 +00:00
public ActivityLogService (
ILogger < ActivityLogService > logger ,
IServerConfigurationManager serverConfigurationManager ,
IHttpResultFactory httpResultFactory ,
IActivityManager activityManager )
: base ( logger , serverConfigurationManager , httpResultFactory )
2014-08-10 22:13:17 +00:00
{
_activityManager = activityManager ;
}
public object Get ( GetActivityLogs request )
{
2020-05-14 21:13:45 +00:00
DateTime ? minDate = string . IsNullOrWhiteSpace ( request . MinDate ) ?
( DateTime ? ) null :
DateTime . Parse ( request . MinDate , null , DateTimeStyles . RoundtripKind ) . ToUniversalTime ( ) ;
var filterFunc = new Func < IQueryable < ActivityLog > , IQueryable < ActivityLog > > (
2020-07-17 18:17:11 +00:00
entries = > entries . Where ( entry = > entry . DateCreated > = minDate
& & ( ! request . HasUserId . HasValue | | ( request . HasUserId . Value
? entry . UserId ! = Guid . Empty
: entry . UserId = = Guid . Empty ) ) ) ) ;
2020-05-14 21:13:45 +00:00
var result = _activityManager . GetPagedResult ( filterFunc , request . StartIndex , request . Limit ) ;
2014-08-10 22:13:17 +00:00
return ToOptimizedResult ( result ) ;
}
}
}