public ActionResult <QueryResult <BaseItemDto> > GetUpdatedItemsQuery( [FromRoute] Guid checkpointID, [FromQuery] string?includeItemTypes, [FromQuery] string fields, [FromQuery] int?startIndex, [FromQuery] int?limit) { var request = new GetUpdatedItemsQuery { CheckpointID = checkpointID, IncludeItemTypes = includeItemTypes, Fields = fields, StartIndex = startIndex, Limit = limit }; try { return(_service.Get(request)); } catch (ArgumentException e) { return(BadRequest(e.Message)); } catch (ResourceNotFoundException e) { return(NotFound(e.Message)); } }
public QueryResult <BaseItemDto> Get(GetUpdatedItemsQuery request) { _logger.LogDebug($"InfuseSync: Updated items requested for CheckpointID '{request.CheckpointID}'"); var checkpoint = Plugin.Instance.Db.GetCheckpoint(request.CheckpointID); if (checkpoint == null) { throw new ResourceNotFoundException($"Checkpoint with ID '{request.CheckpointID}' not found."); } if (checkpoint.SyncTimestamp == null) { throw new ArgumentException($"Sync session should be started before using the checkpoint."); } var includeTypes = request.IncludeItemTypes?.Split(','); var itemsUpdated = Plugin.Instance.Db.GetItems( checkpoint.Timestamp, checkpoint.SyncTimestamp.Value, ItemStatus.Updated, includeTypes, request.StartIndex ?? 0, request.Limit ?? int.MaxValue ); var totalCount = Plugin.Instance.Db.ItemsCount( checkpoint.Timestamp, checkpoint.SyncTimestamp.Value, ItemStatus.Updated, includeTypes ); var user = _userManager.GetUserById(Guid.Parse(checkpoint.UserId)); if (user == null) { throw new ResourceNotFoundException($"User not found for checkpoint with ID '{request.CheckpointID}'."); } var items = GetUserItems(user, itemsUpdated); var options = new DtoOptions { Fields = request.GetItemFields() }; var itemDtos = _dtoService.GetBaseItemDtos(items, options, user); return(new QueryResult <BaseItemDto> { Items = itemDtos, #if JELLYFIN StartIndex = request.StartIndex ?? 0, #endif TotalRecordCount = totalCount }); }