Exemplo n.º 1
0
        /// <summary>
        /// Retrieves the latest <see cref="PlexServer"/> data, and the corresponding <see cref="PlexLibrary"/>, from the PlexAPI and stores it in the Database.
        /// </summary>
        /// <param name="plexAccount">PlexAccount to use to retrieve the servers.</param>
        /// <returns>Is successful.</returns>
        public async Task <Result <bool> > RefreshPlexServersAsync(PlexAccount plexAccount)
        {
            if (plexAccount == null)
            {
                return(Result.Fail("plexAccount was null").LogWarning());
            }

            Log.Debug($"Refreshing Plex servers for PlexAccount: {plexAccount.Id}");

            var token = await _plexAuthenticationService.GetPlexApiTokenAsync(plexAccount);

            if (string.IsNullOrEmpty(token))
            {
                Log.Warning("Token was empty");
                return(Result.Fail("Token was empty"));
            }

            var serverList = await _plexServiceApi.GetServersAsync(token);

            if (!serverList.Any())
            {
                return(Result.Ok(false));
            }

            // Add initial entry for the plex servers
            var result = await _mediator.Send(new AddOrUpdatePlexServersCommand(plexAccount, serverList));

            if (result.IsFailed)
            {
                return(result);
            }

            var plexServersResult = await InspectPlexServers(plexAccount, serverList);

            if (plexServersResult.IsFailed)
            {
                return(plexServersResult.ToResult());
            }

            return(await _mediator.Send(new UpdatePlexServersCommand(plexServersResult.Value)));
        }