Esempio n. 1
0
        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));
            }
        }
Esempio n. 2
0
        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
            });
        }