示例#1
0
        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);
                    }
                }
            }
        }
示例#3
0
        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));
            }
        }
示例#5
0
        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);
        }
示例#6
0
        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);
        }
示例#7
0
        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);
            }
        }
示例#8
0
        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);
        }
示例#9
0
        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);
            }
        }
示例#10
0
        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);
        }