Example #1
0
        /// <remarks>
        /// FYI: This method is rather just a wrapper, as the only way to update any metadata of an Emby item is to
        /// send all of the item's metadata properties back to the server. So the heavy work is done in  EmbyRepository.
        /// </remarks>
        public async Task <bool> UpdateMetadataAsync(IPlexMovieMetadata plexMovieMetadata, IMovieIdentifier movieIdentifier)
        {
            await SemSlim.WaitAsync();

            try
            {
                var embyMovieMetadata = new EmbyMovieMetadata
                {
                    Name           = plexMovieMetadata.Title,
                    ForcedSortName = plexMovieMetadata.TitleSort
                };
                Logger.Log(Severity.Info, "Updating metadata.");
                await Repository.UpdateMetadataAsync(Client, embyMovieMetadata, movieIdentifier.Id);

                return(true);
            }
            catch (Exception ex)
            {
                LogException(ex, "Failed to update metadata:");
                return(false);
            }
            finally
            {
                SemSlim.Release();
            }
        }
Example #2
0
        public async Task <bool> RunAsync(IPlexMovieMetadata plexMovieMetadata, IMovieIdentifier embyMovieIdentifier)
        {
            var importableImages = new[]
            {
                new ImportableImage {
                    SourceUri = plexMovieMetadata.ThumbUri, ImageType = ImageType.Primary
                },
                new ImportableImage {
                    SourceUri = plexMovieMetadata.ArtUri, ImageType = ImageType.Backdrop
                },
            };

            return(await AddImagesToMovieWithDelete(importableImages, embyMovieIdentifier));
        }
Example #3
0
        public async Task <bool> UpdateWatchedStatusAsync(IPlexMovieMetadata plexMovieMetadata,
                                                          IMovieIdentifier movieIdentifier)
        {
            await SemSlim.WaitAsync();

            try
            {
                Logger.Log(Severity.Info, "Determining Watched/Unwatched status.");
                var playCount = plexMovieMetadata.ViewCount ?? 0;

                var lastPlayedDate = plexMovieMetadata.LastViewedAt == null
                    ? default(DateTime?)
                                     : new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc)
                                     .AddSeconds(Convert.ToDouble(plexMovieMetadata.LastViewedAt));

                Logger.Log(Severity.Info, "Setting as 'Unwatched'.");
                await Repository.SetMovieAsUnwatchedAsync(Client, movieIdentifier.Id);

                if (playCount > 0)
                {
                    if (lastPlayedDate == null)
                    {
                        throw new Exception("LastPlayedDate is null and PlayCount greater than 0.");
                    }

                    Logger.Log(Severity.Info, $"Setting as 'Watched' with playcount '{playCount}'.");
                    for (var i = 0; i < playCount; i++)
                    {
                        await Repository.SetMovieAsWatchedAsync(Client, lastPlayedDate.Value, movieIdentifier.Id);
                    }
                }

                return(true);
            }
            catch (Exception ex)
            {
                LogException(ex, "Failed to update Watched/Unwatched:");
                return(false);
            }
            finally
            {
                SemSlim.Release();
            }
        }
        public async Task <bool> RunAsync(IPlexMovieMetadata plexMovieMetadata, IMovieIdentifier embyMovieIdentifier)
        {
            var retval = true;

            await SemSlim.WaitAsync();

            try
            {
                _logger.Log(Severity.Info, $"Processing '{plexMovieMetadata.Title}'");

                // Add movie to all collections (create if necessary).
                var embyImportMovieCollectionsLogic = _logicFactory.CreateLogic <IEmbyImportMovieCollectionsLogic>();
                if (await embyImportMovieCollectionsLogic.RunAsync(plexMovieMetadata.Collections, embyMovieIdentifier) == false)
                {
                    var msg = $"Failed to update Emby collections for '{plexMovieMetadata.Title}'.";
                    _logger.Log(Severity.Warn, msg);
                    retval = false;
                }

                // Add images to movie.
                var embyImportMovieImagesLogic = _logicFactory.CreateLogic <IEmbyImportMovieImagesLogic>();
                if (await embyImportMovieImagesLogic.RunAsync(plexMovieMetadata, embyMovieIdentifier) == false)
                {
                    _logger.Log(Severity.Warn, $"One or more images could not be properly added to '{plexMovieMetadata.Title}'.");
                    retval = false;
                }

                // Update movie metadata.
                var embyImportMovieMetadataLogic = _logicFactory.CreateLogic <IEmbyImportMovieMetadataLogic>();
                if (await embyImportMovieMetadataLogic.RunAsync(plexMovieMetadata, embyMovieIdentifier) == false)
                {
                    _logger.Log(Severity.Warn, $"Metadata could not be updated on '{plexMovieMetadata.Title}'.");
                    retval = false;
                }

                return(retval);
            }
            finally
            {
                OnItemProcessed();
                SemSlim.Release();
            }
        }
Example #5
0
        public async Task <bool> RunAsync(IPlexMovieMetadata plexMovieMetadata, IMovieIdentifier movieIdentifier)
        {
            var retval = true;

            var metadataService = _serviceFactory.CreateService <IEmbyMetadataService>();


            // Update Watched/Unwatched.
            if (await metadataService.UpdateWatchedStatusAsync(plexMovieMetadata, movieIdentifier) == false)
            {
                _logger.Log(Severity.Warn, $"Failed to update Watched/Unwatched for '{movieIdentifier.Filename}'.");
                retval = false;
            }

            // Update other metadata.
            if (await metadataService.UpdateMetadataAsync(plexMovieMetadata, movieIdentifier) == false)
            {
                _logger.Log(Severity.Warn, $"Failed to update metadata for '{movieIdentifier.Filename}'.");
                retval = false;
            }

            return(retval);
        }