Exemple #1
0
    private async Task <Either <BaseError, string> > Synchronize(
        RequestParameters parameters,
        CancellationToken cancellationToken)
    {
        try
        {
            var            lastScan = new DateTimeOffset(parameters.Library.LastScan ?? SystemTime.MinValueUtc, TimeSpan.Zero);
            DateTimeOffset nextScan = lastScan + TimeSpan.FromHours(parameters.LibraryRefreshInterval);
            if (parameters.ForceScan || nextScan < DateTimeOffset.Now)
            {
                Either <BaseError, Unit> result = parameters.Library.MediaKind switch
                {
                    LibraryMediaKind.Movies =>
                    await _plexMovieLibraryScanner.ScanLibrary(
                        parameters.ConnectionParameters.ActiveConnection,
                        parameters.ConnectionParameters.PlexServerAuthToken,
                        parameters.Library,
                        parameters.FFmpegPath,
                        parameters.FFprobePath,
                        parameters.DeepScan,
                        cancellationToken),
                    LibraryMediaKind.Shows =>
                    await _plexTelevisionLibraryScanner.ScanLibrary(
                        parameters.ConnectionParameters.ActiveConnection,
                        parameters.ConnectionParameters.PlexServerAuthToken,
                        parameters.Library,
                        parameters.FFmpegPath,
                        parameters.FFprobePath,
                        parameters.DeepScan,
                        cancellationToken),
                    _ => Unit.Default
                };

                if (result.IsRight)
                {
                    parameters.Library.LastScan = DateTime.UtcNow;
                    await _libraryRepository.UpdateLastScan(parameters.Library);
                }

                return(result.Map(_ => parameters.Library.Name));
            }
            else
            {
                _logger.LogDebug(
                    "Skipping unforced scan of plex media library {Name}",
                    parameters.Library.Name);
            }

            return(parameters.Library.Name);
        }
        finally
        {
            _entityLocker.UnlockLibrary(parameters.Library.Id);
        }
    }
        private async Task <Unit> Synchronize(RequestParameters parameters)
        {
            var lastScan = new DateTimeOffset(parameters.Library.LastScan ?? DateTime.MinValue, TimeSpan.Zero);

            if (parameters.ForceScan || lastScan < DateTimeOffset.Now - TimeSpan.FromHours(6))
            {
                switch (parameters.Library.MediaKind)
                {
                case LibraryMediaKind.Movies:
                    await _plexMovieLibraryScanner.ScanLibrary(
                        parameters.ConnectionParameters.ActiveConnection,
                        parameters.ConnectionParameters.PlexServerAuthToken,
                        parameters.Library);

                    break;

                case LibraryMediaKind.Shows:
                    await _plexTelevisionLibraryScanner.ScanLibrary(
                        parameters.ConnectionParameters.ActiveConnection,
                        parameters.ConnectionParameters.PlexServerAuthToken,
                        parameters.Library);

                    break;
                }

                parameters.Library.LastScan = DateTime.UtcNow;
                await _mediaSourceRepository.Update(parameters.Library);
            }
            else
            {
                _logger.LogDebug(
                    "Skipping unforced scan of plex media library {Name}",
                    parameters.Library.Name);
            }

            _entityLocker.UnlockLibrary(parameters.Library.Id);
            return(Unit.Default);
        }