using System;
using System.Threading.Tasks;
using Jellyfin.Api.Constants;
using Jellyfin.Data.Queries;
using MediaBrowser.Common.Api;
using MediaBrowser.Model.Activity;
using MediaBrowser.Model.Querying;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace Jellyfin.Api.Controllers;
///
/// Activity log controller.
///
[Route("System/ActivityLog")]
[Authorize(Policy = Policies.RequiresElevation)]
public class ActivityLogController : BaseJellyfinApiController
{
private readonly IActivityManager _activityManager;
///
/// Initializes a new instance of the class.
///
/// Instance of interface.
public ActivityLogController(IActivityManager activityManager)
{
_activityManager = activityManager;
}
///
/// Gets activity log entries.
///
/// Optional. The record index to start at. All items with a lower index will be dropped from the results.
/// Optional. The maximum number of records to return.
/// Optional. The minimum date. Format = ISO.
/// Optional. Filter log entries if it has user id, or not.
/// Activity log returned.
/// A containing the log entries.
[HttpGet("Entries")]
[ProducesResponseType(StatusCodes.Status200OK)]
public async Task>> GetLogEntries(
[FromQuery] int? startIndex,
[FromQuery] int? limit,
[FromQuery] DateTime? minDate,
[FromQuery] bool? hasUserId)
{
return await _activityManager.GetPagedResultAsync(new ActivityLogQuery
{
Skip = startIndex,
Limit = limit,
MinDate = minDate,
HasUserId = hasUserId
}).ConfigureAwait(false);
}
}