using System;
using System.Threading.Tasks;
using Jellyfin.Api.Helpers;
using Jellyfin.Data.Enums;
using Jellyfin.Data.Queries;
using Jellyfin.Database.Implementations.Enums;
using MediaBrowser.Common.Api;
using MediaBrowser.Model.Activity;
using MediaBrowser.Model.Querying;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
namespace Jellyfin.Api.Controllers;
///
/// Activity log controller.
///
[Route("System/ActivityLog")]
[Authorize(Policy = Policies.RequiresElevation)]
[Tags("System")]
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.
///
/// The record index to start at. All items with a lower index will be dropped from the results.
/// The maximum number of records to return.
/// The minimum date.
/// The maximum date.
/// Filter log entries if it has user id, or not.
/// Filter by name.
/// Filter by overview.
/// Filter by short overview.
/// Filter by type.
/// Filter by item id.
/// Filter by username.
/// Filter by log severity.
/// Specify one or more sort orders. Format: SortBy=Name,Type.
/// Sort Order..
/// 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] DateTime? maxDate,
[FromQuery] bool? hasUserId,
[FromQuery] string? name,
[FromQuery] string? overview,
[FromQuery] string? shortOverview,
[FromQuery] string? type,
[FromQuery] Guid? itemId,
[FromQuery] string? username,
[FromQuery] LogLevel? severity,
[FromQuery] ActivityLogSortBy[]? sortBy,
[FromQuery] SortOrder[]? sortOrder)
{
var query = new ActivityLogQuery
{
Skip = startIndex,
Limit = limit,
MinDate = minDate,
MaxDate = maxDate,
HasUserId = hasUserId,
Name = name,
Overview = overview,
ShortOverview = shortOverview,
Type = type,
ItemId = itemId,
Username = username,
Severity = severity,
OrderBy = RequestHelpers.GetOrderBy(sortBy ?? [], sortOrder ?? []),
};
return await _activityManager.GetPagedResultAsync(query).ConfigureAwait(false);
}
}