/// <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(); } }
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)); }
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(); } }
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); }