public async Task UpdateDescription(string channelId, Dictionary <string, string> replacements) { var videos = await this.YoutubeProvider.GetVideos(channelId); var localVideos = await this.videosService.GetChannelVideos(channelId); foreach (var video in videos .Where(v => v.Snippet != null) .OrderByDescending(v => v.Snippet.PublishedAt)) { var localVideo = localVideos.FirstOrDefault(v => v.VideoId == video.Id); if (localVideo == null) { this.Logger.LogTrace($"Video \"{video.Snippet.Title}\" skipped."); continue; } this.Logger.LogTrace($"\"{video.Snippet.Title}\" processing..."); var updatedVideo = await this.YoutubeProvider.UpdateDescription(video, DescriptionUtils.TransformDescription( channelId, localVideo.Description, replacements)); if (updatedVideo == null) { continue; } this.Logger.LogTrace($"\"{video.Snippet.Title}\" completed."); } }
public static Video ReplaceDescription( this Video video, Dictionary <string, string> replacements, string channelId) { if (video?.Snippet == null) { return(video); } video.Snippet.Title = video.Snippet.Title.ReplaceWholeWords(replacements); video.Snippet.Description = DescriptionUtils.TransformDescription( channelId, video.Snippet.Description, replacements); return(video); }
public async Task TransferMetadata( string sourceChannelId, string destChannelId, bool downloadIcon = false, Dictionary <string, string> replacements = null) { try { var sourceChannel = await this.YoutubeProvider.GetChannel(sourceChannelId); var destChannel = await this.YoutubeProvider.GetChannel(destChannelId); if (downloadIcon) { var iconFilePath = await this.YoutubeProvider.DownloadIcon(sourceChannel, this.outputFolder); this.Logger.LogTrace($"Icon downloaded to [{iconFilePath}]."); } sourceChannel.BrandingSettings.Channel.Description = DescriptionUtils.TransformDescription( destChannelId, sourceChannel.BrandingSettings.Channel.Description, replacements); if (destChannel != null) { var destVideos = await this.videosService.GetTransferVideos(sourceChannelId, destChannelId); // set trailer var trailer = destVideos.FirstOrDefault(v => v.OriginalVideoId == sourceChannel.BrandingSettings.Channel.UnsubscribedTrailer); if (trailer != null) { if (destChannel.BrandingSettings.Channel.UnsubscribedTrailer == trailer.VideoId) { return; } sourceChannel.BrandingSettings.Channel.UnsubscribedTrailer = trailer.VideoId; } else { sourceChannel.BrandingSettings.Channel.UnsubscribedTrailer = string.Empty; } // set featured channels sourceChannel.BrandingSettings.Channel.FeaturedChannelsTitle = destChannel.BrandingSettings.Channel.FeaturedChannelsTitle; sourceChannel.BrandingSettings.Channel.FeaturedChannelsUrls = destChannel.BrandingSettings.Channel.FeaturedChannelsUrls; // set country sourceChannel.BrandingSettings.Channel.Country = destChannel.BrandingSettings.Channel.Country; sourceChannel.BrandingSettings.Channel.DefaultLanguage = destChannel.BrandingSettings.Channel.DefaultLanguage; // preserve banner sourceChannel.SetBannerUrl(destChannel.GetBannerUrl()); } else { sourceChannel.BrandingSettings.Channel.UnsubscribedTrailer = string.Empty; sourceChannel.BrandingSettings.Channel.FeaturedChannelsTitle = string.Empty; sourceChannel.BrandingSettings.Channel.FeaturedChannelsUrls = new List <string>(); } await this.YoutubeProvider.UpdateMetadata(destChannelId, sourceChannel); await this.channelsService.AddOrUpdate(sourceChannelId, destChannelId, sourceChannel); } catch (Exception exc) { this.Logger.LogError(exc.Message); } }