private void StartNewsLetter(NewletterSettings newletterSettings, bool testEmail = false) { var embySettings = EmbySettings.GetSettings(); if (embySettings.Enable) { var html = EmbyNewsletter.GetNewsletterHtml(testEmail); var escapedHtml = new string(html.Where(c => !char.IsControl(c)).ToArray()); Log.Debug(escapedHtml); SendNewsletter(newletterSettings, escapedHtml, testEmail, "New Content On Emby!"); } else { var plexSettings = PlexSettings.GetSettings(); if (plexSettings.Enable) { var html = PlexNewsletter.GetNewsletterHtml(testEmail); var escapedHtml = new string(html.Where(c => !char.IsControl(c)).ToArray()); Log.Debug(escapedHtml); SendNewsletter(newletterSettings, html, testEmail); } } }
private void StartNewsLetter(NewletterSettings newletterSettings, bool testEmail = false) { var embySettings = EmbySettings.GetSettings(); if (embySettings.Enable) { var letter = EmbyNewsletter.GetNewsletter(testEmail) ?? new Newsletter(); if (letter.Send || testEmail) { SendNewsletter(newletterSettings, letter.Html, testEmail, "New Content On Emby!"); } else { Log.Warn("There is no new content to send the newsletter"); } } else { var plexSettings = PlexSettings.GetSettings(); if (plexSettings.Enable) { var letter = PlexNewsletter.GetNewsletter(testEmail) ?? new Newsletter(); if (letter.Send || testEmail) { SendNewsletter(newletterSettings, letter.Html, testEmail); } } } }
private void UpdatePlexSettings() { #if !DEBUG var s = PlexSettings.GetSettings(); if (!string.IsNullOrEmpty(s.Ip)) { s.Enable = true; PlexSettings.SaveSettings(s); } #endif }
private Response GetPlexSettings() { var model = new ApiModel <PlexSettings>(); try { var settings = PlexSettings.GetSettings(); model.Data = settings; return(ReturnReponse(model)); } catch (Exception e) { model.ErrorMessage = e.Message; model.Error = true; return(ReturnReponse(model)); } }
private void Start(NewletterSettings newletterSettings, bool testEmail = false) { var sb = new StringBuilder(); var plexSettings = PlexSettings.GetSettings(); var libs = Api.GetLibrarySections(plexSettings.PlexAuthToken, plexSettings.FullUri); var tvSection = libs.Directories.FirstOrDefault(x => x.type.Equals(PlexMediaType.Show.ToString(), StringComparison.CurrentCultureIgnoreCase)); var movieSection = libs.Directories.FirstOrDefault(x => x.type.Equals(PlexMediaType.Movie.ToString(), StringComparison.CurrentCultureIgnoreCase)); var recentlyAddedTv = Api.RecentlyAdded(plexSettings.PlexAuthToken, plexSettings.FullUri, tvSection.Key); var recentlyAddedMovies = Api.RecentlyAdded(plexSettings.PlexAuthToken, plexSettings.FullUri, movieSection.Key); GenerateMovieHtml(recentlyAddedMovies, plexSettings, sb); GenerateTvHtml(recentlyAddedTv, plexSettings, sb); var template = new RecentlyAddedTemplate(); var html = template.LoadTemplate(sb.ToString()); Send(newletterSettings, html, plexSettings, testEmail); }
private Newsletter GetHtml(bool test) { var sb = new StringBuilder(); var newsletter = new Newsletter(); var plexSettings = PlexSettings.GetSettings(); var plexContent = Content.GetAll().ToList(); var series = plexContent.Where(x => x.Type == PlexMediaType.Show).ToList(); var episodes = Episodes.GetAll().ToList(); var movie = plexContent.Where(x => x.Type == PlexMediaType.Movie).ToList(); var recentlyAdded = RecentlyAddedLog.GetAll().ToList(); var firstRun = !recentlyAdded.Any(); var filteredMovies = movie.Where(m => recentlyAdded.All(x => x.ProviderId != m.ProviderId)).ToList(); var filteredEp = episodes.Where(m => recentlyAdded.All(x => x.ProviderId != m.ProviderId)).ToList(); var filteredSeries = series.Where(x => recentlyAdded.All(c => c.ProviderId != x.ProviderId)).ToList(); var info = new List <PlexRecentlyAddedModel>(); foreach (var m in filteredMovies) { var i = Api.GetMetadata(plexSettings.PlexAuthToken, plexSettings.FullUri, m.ItemId); if (i.Video == null) { continue; } info.Add(new PlexRecentlyAddedModel { Metadata = i, Content = m }); } GenerateMovieHtml(info, sb); newsletter.MovieCount = info.Count; info.Clear(); if (filteredEp.Any()) { var recentlyAddedModel = new List <PlexRecentlyAddedModel>(); foreach (var plexEpisodes in filteredEp) { // Find related series item var relatedSeries = series.FirstOrDefault(x => x.ProviderId == plexEpisodes.ProviderId); if (relatedSeries == null) { continue; } // Get series information var i = Api.GetMetadata(plexSettings.PlexAuthToken, plexSettings.FullUri, relatedSeries.ItemId); var episodeInfo = Api.GetEpisodeMetaData(plexSettings.PlexAuthToken, plexSettings.FullUri, plexEpisodes.RatingKey); // Check if we already have this series var existingSeries = recentlyAddedModel.FirstOrDefault(x => x.Metadata.Directory.RatingKey == i.Directory.RatingKey); if (existingSeries != null) { existingSeries.EpisodeMetadata.Add(episodeInfo); } else { recentlyAddedModel.Add(new PlexRecentlyAddedModel { Metadata = i, EpisodeMetadata = new List <PlexEpisodeMetadata>() { episodeInfo }, Content = relatedSeries }); } } info.AddRange(recentlyAddedModel); } else { foreach (var t in filteredSeries) { var i = Api.GetMetadata(plexSettings.PlexAuthToken, plexSettings.FullUri, t.ItemId); if (i.Directory == null) { continue; } info.Add(new PlexRecentlyAddedModel { Metadata = i, Content = t }); } } GenerateTvHtml(info, sb); newsletter.TvCount = info.Count; var template = new RecentlyAddedTemplate(); var html = template.LoadTemplate(sb.ToString()); Log.Debug("Loaded the template"); if (!test || firstRun) { foreach (var a in filteredMovies) { RecentlyAddedLog.Insert(new RecentlyAddedLog { ProviderId = a.ProviderId, AddedAt = DateTime.UtcNow }); } foreach (var a in filteredEp) { RecentlyAddedLog.Insert(new RecentlyAddedLog { ProviderId = a.ProviderId, AddedAt = DateTime.UtcNow }); } foreach (var a in filteredSeries) { RecentlyAddedLog.Insert(new RecentlyAddedLog { ProviderId = a.ProviderId, AddedAt = DateTime.UtcNow }); } } var escapedHtml = new string(html.Where(c => !char.IsControl(c)).ToArray()); Log.Debug(escapedHtml); newsletter.Html = escapedHtml; return(newsletter); }
public void Execute(IJobExecutionContext context) { JobRecord.SetRunning(true, JobNames.PlexUserChecker); try { var settings = PlexSettings.GetSettings(); if (string.IsNullOrEmpty(settings.PlexAuthToken)) { return; } var plexUsers = PlexApi.GetUsers(settings.PlexAuthToken); var userManagementSettings = UserManagementSettings.GetSettings(); var mainPlexAccount = PlexApi.GetAccount(settings.PlexAuthToken); var requests = RequestService.GetAll().ToList(); var dbUsers = Repo.GetAll().ToList(); var localUsers = LocalUserRepository.GetAll().ToList(); // Regular users foreach (var user in plexUsers.User) { var dbUser = dbUsers.FirstOrDefault(x => x.PlexUserId == user.Id); if (dbUser != null) { // We already have the user, let's check if they have updated any of their info. var needToUpdate = false; var usernameChanged = false; if (!string.IsNullOrEmpty(user.Username)) // If true then this is a managed user, we do not want to update the email since Managed Users do not have email addresses { // Do we need up update any info? if (!dbUser.EmailAddress.Equals(user.Email, StringComparison.CurrentCultureIgnoreCase)) { dbUser.EmailAddress = user.Email; needToUpdate = true; } } if (!dbUser.Username.Equals(user.Title, StringComparison.CurrentCultureIgnoreCase)) { needToUpdate = true; usernameChanged = true; } if (needToUpdate) { if (usernameChanged) { // The username has changed, let's check if the username matches any local users var localUser = localUsers.FirstOrDefault(x => x.UserName.Equals(user.Title, StringComparison.CurrentCultureIgnoreCase)); dbUser.Username = user.Title; if (localUser != null) { // looks like we have a local user with the same name... // We should delete the local user and the Plex user will become the master, // I am not going to update the Plex Users permissions as that could end up leading to a security vulnerability // Where anyone could change their Plex Username to the PR.Net server admins name and get all the admin permissions. LocalUserRepository.Delete(localUser); } // Since the username has changed, we need to update all requests with that username (unless we are using the alias! Since the alias won't change) if (string.IsNullOrEmpty(dbUser.UserAlias)) { // Update all requests var requestsWithThisUser = requests.Where(x => x.RequestedUsers.Contains(user.Username)).ToList(); foreach (var r in requestsWithThisUser) { r.RequestedUsers.Remove(user.Title); // Remove old r.RequestedUsers.Add(dbUser.Username); // Add new } if (requestsWithThisUser.Any()) { RequestService.BatchUpdate(requestsWithThisUser); } } } Repo.Update(dbUser); } continue; } // Looks like it's a new user! var m = new PlexUsers { PlexUserId = user.Id, Permissions = UserManagementHelper.GetPermissions(userManagementSettings), Features = UserManagementHelper.GetFeatures(userManagementSettings), UserAlias = string.Empty, EmailAddress = user.Email, Username = user.Title, LoginId = Guid.NewGuid().ToString() }; Repo.Insert(m); } // Main Plex user var dbMainAcc = dbUsers.FirstOrDefault(x => x.Username.Equals(mainPlexAccount.Username, StringComparison.CurrentCulture)); var localMainAcc = localUsers.FirstOrDefault(x => x.UserName.Equals(mainPlexAccount.Username, StringComparison.CurrentCulture)); // TODO if admin acc does exist, check if we need to update it // Create the local admin account if it doesn't already exist if (dbMainAcc == null && localMainAcc == null) { var a = new PlexUsers { PlexUserId = mainPlexAccount.Id, Permissions = UserManagementHelper.GetPermissions(userManagementSettings), Features = UserManagementHelper.GetFeatures(userManagementSettings), UserAlias = string.Empty, EmailAddress = mainPlexAccount.Email, Username = mainPlexAccount.Username, LoginId = Guid.NewGuid().ToString() }; a.Permissions += (int)Permissions.Administrator; // Make admin Repo.Insert(a); } } catch (Exception e) { Log.Error(e); } finally { JobRecord.SetRunning(false, JobNames.PlexUserChecker); JobRecord.Record(JobNames.PlexUserChecker); } }
private void Start(NewletterSettings newletterSettings, bool testEmail = false) { var sb = new StringBuilder(); var plexSettings = PlexSettings.GetSettings(); Log.Debug("Got Plex Settings"); var libs = Api.GetLibrarySections(plexSettings.PlexAuthToken, plexSettings.FullUri); Log.Debug("Getting Plex Library Sections"); var tvSections = libs.Directories.Where(x => x.type.Equals(PlexMediaType.Show.ToString(), StringComparison.CurrentCultureIgnoreCase)); // We could have more than 1 lib Log.Debug("Filtered sections for TV"); var movieSection = libs.Directories.Where(x => x.type.Equals(PlexMediaType.Movie.ToString(), StringComparison.CurrentCultureIgnoreCase)); // We could have more than 1 lib Log.Debug("Filtered sections for Movies"); var plexVersion = Api.GetStatus(plexSettings.PlexAuthToken, plexSettings.FullUri).Version; var html = string.Empty; if (plexVersion.StartsWith("1.3")) { var tvMetadata = new List <Metadata>(); var movieMetadata = new List <Metadata>(); foreach (var tvSection in tvSections) { var item = Api.RecentlyAdded(plexSettings.PlexAuthToken, plexSettings.FullUri, tvSection?.Key); if (item?.MediaContainer?.Metadata != null) { tvMetadata.AddRange(item?.MediaContainer?.Metadata); } } Log.Debug("Got RecentlyAdded TV Shows"); foreach (var movie in movieSection) { var recentlyAddedMovies = Api.RecentlyAdded(plexSettings.PlexAuthToken, plexSettings.FullUri, movie?.Key); if (recentlyAddedMovies?.MediaContainer?.Metadata != null) { movieMetadata.AddRange(recentlyAddedMovies?.MediaContainer?.Metadata); } } Log.Debug("Got RecentlyAdded Movies"); Log.Debug("Started Generating Movie HTML"); GenerateMovieHtml(movieMetadata, plexSettings, sb); Log.Debug("Finished Generating Movie HTML"); Log.Debug("Started Generating TV HTML"); GenerateTvHtml(tvMetadata, plexSettings, sb); Log.Debug("Finished Generating TV HTML"); var template = new RecentlyAddedTemplate(); html = template.LoadTemplate(sb.ToString()); Log.Debug("Loaded the template"); } else { // Old API var tvChild = new List <RecentlyAddedChild>(); var movieChild = new List <RecentlyAddedChild>(); foreach (var tvSection in tvSections) { var recentlyAddedTv = Api.RecentlyAddedOld(plexSettings.PlexAuthToken, plexSettings.FullUri, tvSection?.Key); if (recentlyAddedTv?._children != null) { tvChild.AddRange(recentlyAddedTv?._children); } } Log.Debug("Got RecentlyAdded TV Shows"); foreach (var movie in movieSection) { var recentlyAddedMovies = Api.RecentlyAddedOld(plexSettings.PlexAuthToken, plexSettings.FullUri, movie?.Key); if (recentlyAddedMovies?._children != null) { tvChild.AddRange(recentlyAddedMovies?._children); } } Log.Debug("Got RecentlyAdded Movies"); Log.Debug("Started Generating Movie HTML"); GenerateMovieHtml(movieChild, plexSettings, sb); Log.Debug("Finished Generating Movie HTML"); Log.Debug("Started Generating TV HTML"); GenerateTvHtml(tvChild, plexSettings, sb); Log.Debug("Finished Generating TV HTML"); var template = new RecentlyAddedTemplate(); html = template.LoadTemplate(sb.ToString()); Log.Debug("Loaded the template"); } Send(newletterSettings, html, plexSettings, testEmail); }
private void UpdatePlexUsers() { try { var settings = PlexSettings.GetSettings(); if (string.IsNullOrEmpty(settings.PlexAuthToken)) { return; } var plexUsers = PlexApi.GetUsers(settings.PlexAuthToken); if (plexUsers?.User == null) { return; } var prSettings = PlexRequestSettings.GetSettings(); var dbUsers = PlexUsers.GetAll().ToList(); foreach (var user in plexUsers.User) { if (dbUsers.FirstOrDefault(x => x.PlexUserId == user.Id) != null) { continue; } int permissions = 0; if (prSettings.SearchForMovies) { permissions = (int)Permissions.RequestMovie; } if (prSettings.SearchForTvShows) { permissions += (int)Permissions.RequestTvShow; } if (prSettings.SearchForMusic) { permissions += (int)Permissions.RequestMusic; } if (!prSettings.RequireMovieApproval) { permissions += (int)Permissions.AutoApproveMovie; } if (!prSettings.RequireTvShowApproval) { permissions += (int)Permissions.AutoApproveTv; } if (!prSettings.RequireMusicApproval) { permissions += (int)Permissions.AutoApproveAlbum; } // Add report Issues permissions += (int)Permissions.ReportIssue; var m = new PlexUsers { PlexUserId = user.Id, Permissions = permissions, Features = 0, UserAlias = string.Empty, EmailAddress = user.Email, Username = user.Username, LoginId = Guid.NewGuid().ToString() }; PlexUsers.Insert(m); } } catch (Exception e) { Logger.Fatal("Exception when migrating Version 1.10.0 (UpdatePlexUsers)"); Logger.Fatal(e); } }
private string GetHtml(bool test) { var sb = new StringBuilder(); var plexSettings = PlexSettings.GetSettings(); var plexContent = Content.GetAll().ToList(); var series = plexContent.Where(x => x.Type == PlexMediaType.Show).ToList(); var episodes = Episodes.GetAll().ToList(); var movie = plexContent.Where(x => x.Type == PlexMediaType.Movie).ToList(); var recentlyAdded = RecentlyAddedLog.GetAll().ToList(); var firstRun = !recentlyAdded.Any(); var filteredMovies = movie.Where(m => recentlyAdded.All(x => x.ProviderId != m.ProviderId)).ToList(); var filteredEp = episodes.Where(m => recentlyAdded.All(x => x.ProviderId != m.ProviderId)).ToList(); var filteredSeries = series.Where(x => recentlyAdded.All(c => c.ProviderId != x.ProviderId)).ToList(); var info = new List <PlexRecentlyAddedModel>(); foreach (var m in filteredMovies) { var i = Api.GetMetadata(plexSettings.PlexAuthToken, plexSettings.FullUri, m.ItemId); if (i.Video == null) { continue; } info.Add(new PlexRecentlyAddedModel { Metadata = i, Content = m }); } GenerateMovieHtml(info, sb); info.Clear(); foreach (var t in filteredSeries) { var i = Api.GetMetadata(plexSettings.PlexAuthToken, plexSettings.FullUri, t.ItemId); if (i.Directory == null) { continue; } //var ep = filteredEp.Where(x => x.ShowTitle == t.Title); info.Add(new PlexRecentlyAddedModel { Metadata = i, Content = t }); //if (ep.Any()) //{ // var episodeList = new List<EmbyEpisodeInformation>(); // foreach (var embyEpisodese in ep) // { // var epInfo = Api.GetInformation(embyEpisodese.EmbyId, Ombi.Api.Models.Emby.EmbyMediaType.Episode, // embySettings.ApiKey, embySettings.AdministratorId, embySettings.FullUri); // episodeList.Add(epInfo.EpisodeInformation); // } // info.Add(new EmbyRecentlyAddedModel // { // EmbyContent = t, // EmbyInformation = i, // EpisodeInformation = episodeList // }); //} } GenerateTvHtml(info, sb); var template = new RecentlyAddedTemplate(); var html = template.LoadTemplate(sb.ToString()); Log.Debug("Loaded the template"); if (!test || firstRun) { foreach (var a in filteredMovies) { RecentlyAddedLog.Insert(new RecentlyAddedLog { ProviderId = a.ProviderId, AddedAt = DateTime.UtcNow }); } foreach (var a in filteredEp) { RecentlyAddedLog.Insert(new RecentlyAddedLog { ProviderId = a.ProviderId, AddedAt = DateTime.UtcNow }); } foreach (var a in filteredSeries) { RecentlyAddedLog.Insert(new RecentlyAddedLog { ProviderId = a.ProviderId, AddedAt = DateTime.UtcNow }); } } var escapedHtml = new string(html.Where(c => !char.IsControl(c)).ToArray()); Log.Debug(escapedHtml); return(escapedHtml); }