From d33a6203a7fff3e25d87804dcd91190f3e235dbb Mon Sep 17 00:00:00 2001 From: Jamie Date: Mon, 16 Jan 2017 08:05:37 +0000 Subject: [PATCH 01/19] Update appveyor.yml --- appveyor.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index b6ffbb171..c23f1a22a 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -3,9 +3,9 @@ configuration: Release assembly_info: patch: true file: '**\AssemblyInfo.*' - assembly_version: '2.0.0' + assembly_version: '2.0.1' assembly_file_version: '{version}' - assembly_informational_version: '2.0.0' + assembly_informational_version: '2.0.1' before_build: - cmd: appveyor-retry nuget restore build: From 86df5f11b766e818e637cc8184546dd6fd96259d Mon Sep 17 00:00:00 2001 From: Jamie Date: Tue, 17 Jan 2017 16:18:41 +0000 Subject: [PATCH 02/19] Update README.md --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index 776438511..a1014914c 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,11 @@ ____ [![Github All Releases](https://img.shields.io/github/downloads/tidusjar/Ombi/total.svg)](https://github.com/tidusjar/Ombi) [![Stories in Progress](https://badge.waffle.io/tidusjar/Ombi.svg?label=in progress&title=In Progress)](http://waffle.io/tidusjar/Ombi) +| Service | Master | Early Access | Dev | +|----------|:---------------------------:|:----------------------------:|:----------------------------:| +| AppVeyor | [![Build status](https://ci.appveyor.com/api/projects/status/hgj8j6lcea7j0yhn/branch/master?svg=true)](https://ci.appveyor.com/project/tidusjar/requestplex/branch/master) | [![Build status](https://ci.appveyor.com/api/projects/status/hgj8j6lcea7j0yhn/branch/eap?svg=true)](https://ci.appveyor.com/project/tidusjar/requestplex/branch/eap) | [![Build status](https://ci.appveyor.com/api/projects/status/hgj8j6lcea7j0yhn/branch/dev?svg=true)](https://ci.appveyor.com/project/tidusjar/requestplex/branch/dev) +| Travis | [![Travis](https://img.shields.io/travis/tidusjar/Ombi/master.svg?maxAge=60&style=flat-square)](https://travis-ci.org/tidusjar/Ombi) | [![Travis](https://img.shields.io/tidusjar/Ombi/Radarr/eap.svg?maxAge=60&style=flat-square)](https://travis-ci.org/tidusjar/Ombi) | [![Travis](https://img.shields.io/tidusjar/Ombi/Radarr/dev.svg?maxAge=60&style=flat-square)](https://travis-ci.org/tidusjar/Ombi) + # Features Here some of the features Ombi has: * All your users to Request Movies, TV Shows (Whole series, whole seaons or even single episodes!) and Albums From be206a9503c9e680a77d2b44f9be3fd244188dcd Mon Sep 17 00:00:00 2001 From: Jamie Date: Wed, 18 Jan 2017 08:49:28 +0000 Subject: [PATCH 03/19] Update README.md --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index a1014914c..9271392d8 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ ____ | Service | Master | Early Access | Dev | |----------|:---------------------------:|:----------------------------:|:----------------------------:| | AppVeyor | [![Build status](https://ci.appveyor.com/api/projects/status/hgj8j6lcea7j0yhn/branch/master?svg=true)](https://ci.appveyor.com/project/tidusjar/requestplex/branch/master) | [![Build status](https://ci.appveyor.com/api/projects/status/hgj8j6lcea7j0yhn/branch/eap?svg=true)](https://ci.appveyor.com/project/tidusjar/requestplex/branch/eap) | [![Build status](https://ci.appveyor.com/api/projects/status/hgj8j6lcea7j0yhn/branch/dev?svg=true)](https://ci.appveyor.com/project/tidusjar/requestplex/branch/dev) -| Travis | [![Travis](https://img.shields.io/travis/tidusjar/Ombi/master.svg?maxAge=60&style=flat-square)](https://travis-ci.org/tidusjar/Ombi) | [![Travis](https://img.shields.io/tidusjar/Ombi/Radarr/eap.svg?maxAge=60&style=flat-square)](https://travis-ci.org/tidusjar/Ombi) | [![Travis](https://img.shields.io/tidusjar/Ombi/Radarr/dev.svg?maxAge=60&style=flat-square)](https://travis-ci.org/tidusjar/Ombi) +| Travis | [![Travis](https://img.shields.io/travis/tidusjar/Ombi/master.svg?maxAge=60&style=flat-square)](https://travis-ci.org/tidusjar/Ombi) | [![Travis](https://img.shields.io/travis/tidusjar/Ombi/eap.svg?maxAge=60&style=flat-square)](https://travis-ci.org/tidusjar/Ombi) | [![Travis](https://img.shields.io/travis/tidusjar/Ombi/dev.svg?maxAge=60&style=flat-square)](https://travis-ci.org/tidusjar/Ombi) # Features Here some of the features Ombi has: @@ -87,3 +87,6 @@ If you feel like donating you can [here!](https://paypal.me/PlexRequestsNet) ## Stats [![Throughput Graph](https://graphs.waffle.io/tidusjar/PlexRequests.Net/throughput.svg)](https://waffle.io/tidusjar/PlexRequests.Net/metrics/throughput) +### Sponsors ### +- [JetBrains](http://www.jetbrains.com/) for providing us with free licenses to their great tools + - [ReSharper](http://www.jetbrains.com/resharper/) From a8e68256d1cff941f5d8f1f5f5e55443f3fac3f5 Mon Sep 17 00:00:00 2001 From: Jamie Date: Wed, 18 Jan 2017 08:50:13 +0000 Subject: [PATCH 04/19] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9271392d8..49f72eab2 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ ____ | Service | Master | Early Access | Dev | |----------|:---------------------------:|:----------------------------:|:----------------------------:| | AppVeyor | [![Build status](https://ci.appveyor.com/api/projects/status/hgj8j6lcea7j0yhn/branch/master?svg=true)](https://ci.appveyor.com/project/tidusjar/requestplex/branch/master) | [![Build status](https://ci.appveyor.com/api/projects/status/hgj8j6lcea7j0yhn/branch/eap?svg=true)](https://ci.appveyor.com/project/tidusjar/requestplex/branch/eap) | [![Build status](https://ci.appveyor.com/api/projects/status/hgj8j6lcea7j0yhn/branch/dev?svg=true)](https://ci.appveyor.com/project/tidusjar/requestplex/branch/dev) -| Travis | [![Travis](https://img.shields.io/travis/tidusjar/Ombi/master.svg?maxAge=60&style=flat-square)](https://travis-ci.org/tidusjar/Ombi) | [![Travis](https://img.shields.io/travis/tidusjar/Ombi/eap.svg?maxAge=60&style=flat-square)](https://travis-ci.org/tidusjar/Ombi) | [![Travis](https://img.shields.io/travis/tidusjar/Ombi/dev.svg?maxAge=60&style=flat-square)](https://travis-ci.org/tidusjar/Ombi) +| Travis | [![Travis](https://img.shields.io/travis/tidusjar/Ombi/master.svg?maxAge=60&style=flat-square)](https://travis-ci.org/tidusjar/Ombi) | [![Travis](https://img.shields.io/travis/tidusjar/Ombi/EAP.svg?maxAge=60&style=flat-square)](https://travis-ci.org/tidusjar/Ombi) | [![Travis](https://img.shields.io/travis/tidusjar/Ombi/dev.svg?maxAge=60&style=flat-square)](https://travis-ci.org/tidusjar/Ombi) # Features Here some of the features Ombi has: From e1f923a9cd5f30ded803937be15b31c91ec6c1cd Mon Sep 17 00:00:00 2001 From: Jamie Date: Wed, 18 Jan 2017 08:59:29 +0000 Subject: [PATCH 05/19] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 49f72eab2..b86ad7f27 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ ____ | Service | Master | Early Access | Dev | |----------|:---------------------------:|:----------------------------:|:----------------------------:| | AppVeyor | [![Build status](https://ci.appveyor.com/api/projects/status/hgj8j6lcea7j0yhn/branch/master?svg=true)](https://ci.appveyor.com/project/tidusjar/requestplex/branch/master) | [![Build status](https://ci.appveyor.com/api/projects/status/hgj8j6lcea7j0yhn/branch/eap?svg=true)](https://ci.appveyor.com/project/tidusjar/requestplex/branch/eap) | [![Build status](https://ci.appveyor.com/api/projects/status/hgj8j6lcea7j0yhn/branch/dev?svg=true)](https://ci.appveyor.com/project/tidusjar/requestplex/branch/dev) -| Travis | [![Travis](https://img.shields.io/travis/tidusjar/Ombi/master.svg?maxAge=60&style=flat-square)](https://travis-ci.org/tidusjar/Ombi) | [![Travis](https://img.shields.io/travis/tidusjar/Ombi/EAP.svg?maxAge=60&style=flat-square)](https://travis-ci.org/tidusjar/Ombi) | [![Travis](https://img.shields.io/travis/tidusjar/Ombi/dev.svg?maxAge=60&style=flat-square)](https://travis-ci.org/tidusjar/Ombi) +| Travis | [![Travis](https://img.shields.io/travis/tidusjar/Ombi/master.svg)](https://travis-ci.org/tidusjar/Ombi) | [![Travis](https://img.shields.io/travis/tidusjar/Ombi/EAP.svg)](https://travis-ci.org/tidusjar/Ombi) | [![Travis](https://img.shields.io/travis/tidusjar/Ombi/dev.svg)](https://travis-ci.org/tidusjar/Ombi) # Features Here some of the features Ombi has: From cb871dc88196c4776367c833443c4d62bc3481b2 Mon Sep 17 00:00:00 2001 From: tdorsey Date: Fri, 20 Jan 2017 21:44:44 -0500 Subject: [PATCH 06/19] Fix typo in readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 776438511..be5fcbf65 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ Here some of the features Ombi has: * Sending newsletters [NEW] * Fault Queue for requests (Buffer requests if Sonar/Couchpotato/SickRage is offline) [NEW] -* Allow your users to report issues and manage them seperatly +* Allow your users to report issues and manage them separately * A landing page that will give you the availability of your Plex server and also add custom notification text to inform your users of downtime. * Allow your users to get notifications! * Secure authentication so you don't have to worry about those script kiddies From e34b1ee62af57844c080616f7f68911fa312d40c Mon Sep 17 00:00:00 2001 From: Jamie Date: Fri, 27 Jan 2017 23:28:14 +0000 Subject: [PATCH 07/19] Update .gitattributes --- .gitattributes | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.gitattributes b/.gitattributes index 4bf8b8c28..49cbe02c5 100644 --- a/.gitattributes +++ b/.gitattributes @@ -62,7 +62,5 @@ #*.rtf diff=astextplain #*.RTF diff=astextplain - -PlexRequests.UI/Content/* linguist-vendored -PlexRequests.UI/Content/* linguist-vendored +Ombi.UI/Content/* linguist-vendored base.scss linguist-vendored=false From 7e26671dcaaa9b628564d6e27e0d14c09bb721f9 Mon Sep 17 00:00:00 2001 From: Haries Ramdhani Date: Sun, 29 Jan 2017 00:29:41 +0200 Subject: [PATCH 08/19] fixed typos --- README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 9b91a5b82..cf11758f0 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ Here some of the features Ombi has: * All your users to Request Movies, TV Shows (Whole series, whole seaons or even single episodes!) and Albums * Easily manage your requests -* User mangement system (supports plex.tv accounts and local accounts) [NEW] +* User management system (supports plex.tv accounts and local accounts) [NEW] * Sending newsletters [NEW] * Fault Queue for requests (Buffer requests if Sonar/Couchpotato/SickRage is offline) [NEW] @@ -29,7 +29,7 @@ Here some of the features Ombi has: * Secure authentication so you don't have to worry about those script kiddies * We check to see if the request is already in Plex, if it's already in Plex then why you requesting it?! * We have allowed the ability for a user to add a custom note on a request -* It automatically update the status of requests when they are available on Plex +* It automatically updates the status of requests when they are available on Plex * Slick, responsive and mobile friendly UI @@ -67,7 +67,7 @@ Search the existing requests to see if your suggestion has already been submitte [Ubuntu Guide!](http://www.htpcguides.com/install-plex-requests-net-ubuntu-14-x/) # FAQ -Do you have an issue or a question? if so check out our [FAQ!](https://github.com/tidusjar/Ombi/wiki/FAQ) +Do you have an issue or a question? if so check out our [FAQ](https://github.com/tidusjar/Ombi/wiki/FAQ)! # Docker @@ -77,12 +77,12 @@ Looking for a Docker Image? Well [rogueosb](https://github.com/rogueosb/) has cr We are looking for any contributions to the project! Just pick up a task, if you have any questions ask and i'll get straight on it! -Please feed free to submit a pull request! +Please feel free to submit a pull request! # Donation -If you feel like donating you can [here!](https://paypal.me/PlexRequestsNet) +If you feel like donating you can donate [here](https://paypal.me/PlexRequestsNet)! -### A massive thanks to everyone for all their help! +### A massive thanks to everyone for all their helps! ## Stats [![Throughput Graph](https://graphs.waffle.io/tidusjar/PlexRequests.Net/throughput.svg)](https://waffle.io/tidusjar/PlexRequests.Net/metrics/throughput) From ad1986e08c7e4e04951ac859a31e92aa97f94006 Mon Sep 17 00:00:00 2001 From: Jamie Date: Sun, 29 Jan 2017 22:58:50 +0000 Subject: [PATCH 09/19] Update README.md --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index cf11758f0..01f0d7ed5 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,4 @@ -# Ombi - +![](http://i.imgur.com/qQsN78U.png) ____ [![Gitter](https://badges.gitter.im/tidusjar/Ombi.svg)](https://gitter.im/tidusjar/Ombi?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) [![Build status](https://ci.appveyor.com/api/projects/status/hgj8j6lcea7j0yhn?svg=true)](https://ci.appveyor.com/project/tidusjar/requestplex) From e5835bf72065ea3c352ee827b0b9ca8d06a2493f Mon Sep 17 00:00:00 2001 From: "Jamie.Rees" Date: Mon, 30 Jan 2017 12:53:38 +0000 Subject: [PATCH 10/19] Fixed #985 --- .../Notification/NotificationEngine.cs | 29 ++++++++++++++++--- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/Ombi.Services/Notification/NotificationEngine.cs b/Ombi.Services/Notification/NotificationEngine.cs index 49340ca1a..2f51d7109 100644 --- a/Ombi.Services/Notification/NotificationEngine.cs +++ b/Ombi.Services/Notification/NotificationEngine.cs @@ -98,10 +98,31 @@ namespace Ombi.Services.Notification return; } - var localUser = - users.FirstOrDefault( x => - x.Username.Equals(user, StringComparison.CurrentCultureIgnoreCase) || - x.UserAlias.Equals(user, StringComparison.CurrentCultureIgnoreCase)); + UserHelperModel localUser = null; + //users.FirstOrDefault( x => + // x.Username.Equals(user, StringComparison.CurrentCultureIgnoreCase) || + // x.UserAlias.Equals(user, StringComparison.CurrentCultureIgnoreCase)); + + foreach (var userHelperModel in users) + { + if (!string.IsNullOrEmpty(userHelperModel.Username)) + { + if (userHelperModel.Username.Equals(user, StringComparison.CurrentCultureIgnoreCase)) + { + localUser = userHelperModel; + break; + } + } + if (!string.IsNullOrEmpty(userHelperModel.UserAlias)) + { + if (userHelperModel.UserAlias.Equals(user, StringComparison.CurrentCultureIgnoreCase)) + { + localUser = userHelperModel; + break; + } + } + } + // So if the request was from an alias, then we need to use the local user (since that contains the alias). // If we do not have a local user, then we should be using the Plex user if that user exists. From abaaafcf7ac90dd7b8443fd502c0d003967cbf22 Mon Sep 17 00:00:00 2001 From: Jamie Date: Mon, 30 Jan 2017 19:15:07 +0000 Subject: [PATCH 11/19] Update appveyor.yml --- appveyor.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index c23f1a22a..8444784af 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,11 +1,11 @@ -version: 2.0.{build} +version: 2.1.{build} configuration: Release assembly_info: patch: true file: '**\AssemblyInfo.*' - assembly_version: '2.0.1' + assembly_version: '2.1.0' assembly_file_version: '{version}' - assembly_informational_version: '2.0.1' + assembly_informational_version: '2.1.0' before_build: - cmd: appveyor-retry nuget restore build: From dd54064507a8ed7f2ee7e6f0a89331c642d1db5b Mon Sep 17 00:00:00 2001 From: "Jamie.Rees" Date: Tue, 31 Jan 2017 08:24:39 +0000 Subject: [PATCH 12/19] Fix for #1026 --- Ombi.Core/Users/UserHelper.cs | 67 ++++++++++++++++--- .../Notification/EmbyNotificationEngine.cs | 38 ++++++----- Ombi.UI/Modules/UserWizardModule.cs | 1 + 3 files changed, 79 insertions(+), 27 deletions(-) diff --git a/Ombi.Core/Users/UserHelper.cs b/Ombi.Core/Users/UserHelper.cs index 2e5b523af..ae3174de1 100644 --- a/Ombi.Core/Users/UserHelper.cs +++ b/Ombi.Core/Users/UserHelper.cs @@ -30,6 +30,7 @@ using System.Linq; using Ombi.Core.Models; using Ombi.Helpers; using Ombi.Helpers.Permissions; +using Ombi.Store.Models.Emby; using Ombi.Store.Models.Plex; using Ombi.Store.Repository; @@ -37,16 +38,18 @@ namespace Ombi.Core.Users { public class UserHelper : IUserHelper { - public UserHelper(IUserRepository userRepository, IExternalUserRepository plexUsers, ISecurityExtensions security) + public UserHelper(IUserRepository userRepository, IExternalUserRepository plexUsers, IExternalUserRepository emby, ISecurityExtensions security) { LocalUserRepository = userRepository; PlexUserRepository = plexUsers; Security = security; + EmbyUserRepository = emby; } private IUserRepository LocalUserRepository { get; } private IExternalUserRepository PlexUserRepository { get; } private ISecurityExtensions Security { get; } + private IExternalUserRepository EmbyUserRepository { get; } public IEnumerable GetUsers() @@ -54,7 +57,8 @@ namespace Ombi.Core.Users var model = new List(); var localUsers = LocalUserRepository.GetAll(); - var plexUsers = PlexUserRepository.GetAll(); + var plexUsers = PlexUserRepository.GetAll().ToList(); + var embyUsers = EmbyUserRepository.GetAll().ToList(); foreach (var user in localUsers) { @@ -69,14 +73,30 @@ namespace Ombi.Core.Users }); } - model.AddRange(plexUsers.Select(user => new UserHelperModel + if (plexUsers.Any()) { - Type = UserType.LocalUser, - Username = user.Username, - UserAlias = user.UserAlias, - EmailAddress = user.EmailAddress, - Permissions = (Permissions)user.Permissions - })); + model.AddRange(plexUsers.Select(user => new UserHelperModel + { + Type = UserType.PlexUser, + Username = user.Username, + UserAlias = user.UserAlias, + EmailAddress = user.EmailAddress, + Permissions = (Permissions) user.Permissions + })); + } + + if (embyUsers.Any()) + { + model.AddRange(embyUsers.Select(user => new UserHelperModel + { + Type = UserType.EmbyUser, + Username = user.Username, + UserAlias = user.UserAlias, + EmailAddress = user.EmailAddress, + Permissions = (Permissions)user.Permissions + })); + + } return model; } @@ -87,9 +107,11 @@ namespace Ombi.Core.Users var localUsers = LocalUserRepository.GetAll().ToList(); var plexUsers = PlexUserRepository.GetAll().ToList(); + var embyUsers = EmbyUserRepository.GetAll().ToList(); var filteredLocal = localUsers.Where(x => ((Permissions)x.Permissions).HasFlag(permission)); var filteredPlex = plexUsers.Where(x => ((Permissions)x.Permissions).HasFlag(permission)); + var filteredEmby = embyUsers.Where(x => ((Permissions)x.Permissions).HasFlag(permission)); foreach (var user in filteredLocal) @@ -108,7 +130,7 @@ namespace Ombi.Core.Users model.AddRange(filteredPlex.Select(user => new UserHelperModel { - Type = UserType.LocalUser, + Type = UserType.PlexUser, Username = user.Username, UserAlias = user.UserAlias, EmailAddress = user.EmailAddress, @@ -116,6 +138,17 @@ namespace Ombi.Core.Users Features = (Features)user.Features })); + model.AddRange(filteredEmby.Select(user => new UserHelperModel + { + Type = UserType.EmbyUser, + Username = user.Username, + UserAlias = user.UserAlias, + EmailAddress = user.EmailAddress, + Permissions = (Permissions)user.Permissions, + Features = (Features)user.Features + })); + + return model; } @@ -125,9 +158,11 @@ namespace Ombi.Core.Users var localUsers = LocalUserRepository.GetAll().ToList(); var plexUsers = PlexUserRepository.GetAll().ToList(); + var embyUsers = PlexUserRepository.GetAll().ToList(); var filteredLocal = localUsers.Where(x => ((Features)x.Features).HasFlag(features)); var filteredPlex = plexUsers.Where(x => ((Features)x.Features).HasFlag(features)); + var filteredEmby = embyUsers.Where(x => ((Features)x.Features).HasFlag(features)); foreach (var user in filteredLocal) @@ -146,7 +181,17 @@ namespace Ombi.Core.Users model.AddRange(filteredPlex.Select(user => new UserHelperModel { - Type = UserType.LocalUser, + Type = UserType.PlexUser, + Username = user.Username, + UserAlias = user.UserAlias, + EmailAddress = user.EmailAddress, + Permissions = (Permissions)user.Permissions, + Features = (Features)user.Features + })); + + model.AddRange(filteredEmby.Select(user => new UserHelperModel + { + Type = UserType.EmbyUser, Username = user.Username, UserAlias = user.UserAlias, EmailAddress = user.EmailAddress, diff --git a/Ombi.Services/Notification/EmbyNotificationEngine.cs b/Ombi.Services/Notification/EmbyNotificationEngine.cs index 6eab1cae5..ed8f587a6 100644 --- a/Ombi.Services/Notification/EmbyNotificationEngine.cs +++ b/Ombi.Services/Notification/EmbyNotificationEngine.cs @@ -12,19 +12,21 @@ using Ombi.Helpers.Permissions; using Ombi.Services.Interfaces; using Ombi.Store; using Ombi.Store.Models; +using Ombi.Store.Models.Emby; using Ombi.Store.Repository; namespace Ombi.Services.Notification { public class EmbyNotificationEngine : IEmbyNotificationEngine { - public EmbyNotificationEngine(IEmbyApi p, IRepository repo, ISettingsService embySettings, INotificationService service, IUserHelper userHelper) + public EmbyNotificationEngine(IEmbyApi p, IRepository repo, ISettingsService embySettings, INotificationService service, IUserHelper userHelper, IExternalUserRepository embyUsers) { EmbyApi = p; UserNotifyRepo = repo; Notification = service; UserHelper = userHelper; EmbySettings = embySettings; + EmbyUserRepo = embyUsers; } private IEmbyApi EmbyApi { get; } @@ -33,6 +35,7 @@ namespace Ombi.Services.Notification private INotificationService Notification { get; } private IUserHelper UserHelper { get; } private ISettingsService EmbySettings { get; } + private IExternalUserRepository EmbyUserRepo { get; } public async Task NotifyUsers(IEnumerable modelChanged, NotificationType type) { @@ -68,22 +71,23 @@ namespace Ombi.Services.Notification foreach (var user in selectedUsers) { + var localUser = + users.FirstOrDefault(x => + x.Username.Equals(user, StringComparison.CurrentCultureIgnoreCase) || + x.UserAlias.Equals(user, StringComparison.CurrentCultureIgnoreCase)); Log.Info("Notifying user {0}", user); if (user.Equals(adminUsername, StringComparison.CurrentCultureIgnoreCase)) { Log.Info("This user is the Plex server owner"); - await PublishUserNotification(userAccount?.Name, userAccount?.Name, model.Title, model.PosterPath, type, model.Type); // TODO Emby needs email address + await PublishUserNotification(userAccount?.Name, localUser?.EmailAddress, model.Title, model.PosterPath, type, model.Type); return; } - var localUser = - users.FirstOrDefault( x => - x.Username.Equals(user, StringComparison.CurrentCultureIgnoreCase) || - x.UserAlias.Equals(user, StringComparison.CurrentCultureIgnoreCase)); + // So if the request was from an alias, then we need to use the local user (since that contains the alias). - // If we do not have a local user, then we should be using the Plex user if that user exists. - // This will execute most of the time since Plex and Local users will most always be in the database. + // If we do not have a local user, then we should be using the Emby user if that user exists. + // This will execute most of the time since Emby and Local users will most always be in the database. if (localUser != null) { if (string.IsNullOrEmpty(localUser?.EmailAddress)) @@ -98,16 +102,17 @@ namespace Ombi.Services.Notification } else { + var embyUser = EmbyUserRepo.GetUserByUsername(user); var email = embyUsers.FirstOrDefault(x => x.Name.Equals(user, StringComparison.CurrentCultureIgnoreCase)); - if (string.IsNullOrEmpty(email?.Name)) // TODO this needs to be the email + if (string.IsNullOrEmpty(embyUser?.EmailAddress)) // TODO this needs to be the email { - Log.Info("There is no email address for this Emby user ({0}), cannot send notification", email?.Name); //TODO + Log.Info("There is no email address for this Emby user ({0}), cannot send notification", email?.Name); // We do not have a plex user that requested this! continue; } - Log.Info("Sending notification to: {0} at: {1}, for : {2}", email.Name, email.Name, model.Title); - await PublishUserNotification(email.Name, email.Name, model.Title, model.PosterPath, type, model.Type); //TODO + Log.Info("Sending notification to: {0} at: {1}, for : {2}", embyUser?.Username, embyUser?.EmailAddress, model.Title); + await PublishUserNotification(email?.Name, embyUser?.EmailAddress, model.Title, model.PosterPath, type, model.Type); } } } @@ -162,11 +167,12 @@ namespace Ombi.Services.Notification Log.Debug("Users being notified for this request count {0}", users.Count); foreach (var user in usersToNotify) { + var embyUser = EmbyUserRepo.GetUserByUsername(user); Log.Info("Notifying user {0}", user); if (user.Equals(adminUsername, StringComparison.CurrentCultureIgnoreCase)) { Log.Info("This user is the Emby server owner"); - await PublishUserNotification(userAccount.Name, userAccount.Name, model.Title, model.PosterPath, type, model.Type); // TODO + await PublishUserNotification(userAccount.Name, embyUser.EmailAddress, model.Title, model.PosterPath, type, model.Type); return; } @@ -174,12 +180,12 @@ namespace Ombi.Services.Notification if (email == null) { Log.Info("There is no email address for this Emby user, cannot send notification"); - // We do not have a plex user that requested this! + // We do not have a emby user that requested this! continue; } - Log.Info("Sending notification to: {0} at: {1}, for title: {2}", email.Name, email.Name, model.Title); // TODO - await PublishUserNotification(email.Name, email.Name, model.Title, model.PosterPath, type, model.Type); // TODO + Log.Info("Sending notification to: {0} at: {1}, for title: {2}", email.Name, embyUser.EmailAddress, model.Title); + await PublishUserNotification(email.Name, embyUser.EmailAddress, model.Title, model.PosterPath, type, model.Type); } } catch (Exception e) diff --git a/Ombi.UI/Modules/UserWizardModule.cs b/Ombi.UI/Modules/UserWizardModule.cs index 39cf8cc3e..884d90e52 100644 --- a/Ombi.UI/Modules/UserWizardModule.cs +++ b/Ombi.UI/Modules/UserWizardModule.cs @@ -153,6 +153,7 @@ namespace Ombi.UI.Modules var firstServer = servers.Server.FirstOrDefault(x => x.AccessToken == form.PlexAuthToken); Session[SessionKeys.UserWizardMachineId] = firstServer?.MachineIdentifier; + form.MachineIdentifier = firstServer?.MachineIdentifier; } catch (Exception e) { From 2cbba6d7543629fdc9e1d655d9193fea664bcc4e Mon Sep 17 00:00:00 2001 From: Torkil Liseth Date: Tue, 31 Jan 2017 20:24:45 +0100 Subject: [PATCH 13/19] Fixed a typo and changed wording Fixed "Enable newslette" to "Enable newsletter", and added "es" to "adresses" in "You can add multiple email address by using the ; delimiter". --- Ombi.UI/Views/Admin/NewsletterSettings.cshtml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Ombi.UI/Views/Admin/NewsletterSettings.cshtml b/Ombi.UI/Views/Admin/NewsletterSettings.cshtml index 8b0d462ff..898a7a761 100644 --- a/Ombi.UI/Views/Admin/NewsletterSettings.cshtml +++ b/Ombi.UI/Views/Admin/NewsletterSettings.cshtml @@ -20,7 +20,7 @@ } else { - + } @@ -30,7 +30,7 @@
- You can add multiple email address by using the ; delimiter + You can add multiple email addresses by using the ; delimiter
@@ -115,4 +115,4 @@ }); }); - \ No newline at end of file + From 8ede1cc8dcc953b3fb09a519908c48639baacd16 Mon Sep 17 00:00:00 2001 From: "Jamie.Rees" Date: Wed, 1 Feb 2017 08:09:19 +0000 Subject: [PATCH 14/19] Fixed #1035 --- Ombi.Api.Models/Emby/EmbyUserdata.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Ombi.Api.Models/Emby/EmbyUserdata.cs b/Ombi.Api.Models/Emby/EmbyUserdata.cs index fe86591d0..fece18a33 100644 --- a/Ombi.Api.Models/Emby/EmbyUserdata.cs +++ b/Ombi.Api.Models/Emby/EmbyUserdata.cs @@ -31,7 +31,7 @@ namespace Ombi.Api.Models.Emby { public class EmbyUserdata { - public int PlaybackPositionTicks { get; set; } + public double PlaybackPositionTicks { get; set; } public int PlayCount { get; set; } public bool IsFavorite { get; set; } public bool Played { get; set; } From a206141f9813d01baef0f61d66f0262c7a3b989a Mon Sep 17 00:00:00 2001 From: "Jamie.Rees" Date: Wed, 1 Feb 2017 08:27:16 +0000 Subject: [PATCH 15/19] Fixed #1036 --- .../Notification/EmbyNotificationEngine.cs | 13 +++++++-- .../Notification/PlexNotificationEngine.cs | 17 +++++++---- Ombi.UI/Modules/RequestsModule.cs | 28 ++++++++++++++++--- 3 files changed, 46 insertions(+), 12 deletions(-) diff --git a/Ombi.Services/Notification/EmbyNotificationEngine.cs b/Ombi.Services/Notification/EmbyNotificationEngine.cs index ed8f587a6..0b3bc3140 100644 --- a/Ombi.Services/Notification/EmbyNotificationEngine.cs +++ b/Ombi.Services/Notification/EmbyNotificationEngine.cs @@ -130,6 +130,7 @@ namespace Ombi.Services.Notification var embySettings = await EmbySettings.GetSettingsAsync(); var embyUsers = EmbyApi.GetUsers(embySettings.FullUri, embySettings.ApiKey); var userAccount = embyUsers.FirstOrDefault(x => x.Policy.IsAdministrator); + var localUsers = UserHelper.GetUsers().ToList(); var adminUsername = userAccount.Name ?? string.Empty; @@ -179,9 +180,15 @@ namespace Ombi.Services.Notification var email = embyUsers.FirstOrDefault(x => x.Name.Equals(user, StringComparison.CurrentCultureIgnoreCase)); if (email == null) { - Log.Info("There is no email address for this Emby user, cannot send notification"); - // We do not have a emby user that requested this! - continue; + // Local User? + var local = localUsers.FirstOrDefault(x => x.UsernameOrAlias.Equals(user)); + if (local != null) + { + + Log.Info("Sending notification to: {0} at: {1}, for title: {2}", local.UsernameOrAlias, local.EmailAddress, model.Title); + await PublishUserNotification(local.UsernameOrAlias, local.EmailAddress, model.Title, model.PosterPath, type, model.Type); + continue; + } } Log.Info("Sending notification to: {0} at: {1}, for title: {2}", email.Name, embyUser.EmailAddress, model.Title); diff --git a/Ombi.Services/Notification/PlexNotificationEngine.cs b/Ombi.Services/Notification/PlexNotificationEngine.cs index 9fbd7dc59..71108bf53 100644 --- a/Ombi.Services/Notification/PlexNotificationEngine.cs +++ b/Ombi.Services/Notification/PlexNotificationEngine.cs @@ -171,8 +171,9 @@ namespace Ombi.Services.Notification try { var settings = await PlexSettings.GetSettingsAsync(); - var plexUser = PlexApi.GetUsers(settings.PlexAuthToken); + var plexUser = PlexApi.GetUsers(settings.PlexAuthToken); // TODO emby var userAccount = PlexApi.GetAccount(settings.PlexAuthToken); + var localUsers = UserHelper.GetUsers().ToList(); var adminUsername = userAccount.Username ?? string.Empty; @@ -219,11 +220,17 @@ namespace Ombi.Services.Notification } var email = plexUser.User.FirstOrDefault(x => x.Username.Equals(user, StringComparison.CurrentCultureIgnoreCase)); - if (email == null) + if (email == null) // This is not a Plex User { - Log.Info("There is no email address for this Plex user, cannot send notification"); - // We do not have a plex user that requested this! - continue; + // Local User? + var local = localUsers.FirstOrDefault(x => x.UsernameOrAlias.Equals(user)); + if (local != null) + { + + Log.Info("Sending notification to: {0} at: {1}, for title: {2}", local.UsernameOrAlias, local.EmailAddress, model.Title); + await PublishUserNotification(local.UsernameOrAlias, local.EmailAddress, model.Title, model.PosterPath, type, model.Type); + continue; + } } Log.Info("Sending notification to: {0} at: {1}, for title: {2}", email.Username, email.Email, model.Title); diff --git a/Ombi.UI/Modules/RequestsModule.cs b/Ombi.UI/Modules/RequestsModule.cs index 193d11c33..29ffe20f1 100644 --- a/Ombi.UI/Modules/RequestsModule.cs +++ b/Ombi.UI/Modules/RequestsModule.cs @@ -66,8 +66,10 @@ namespace Ombi.UI.Modules ICacheProvider cache, IAnalytics an, IPlexNotificationEngine engine, + IEmbyNotificationEngine embyEngine, ISecurityExtensions security, - ISettingsService customSettings) : base("requests", prSettings, security) + ISettingsService customSettings, + ISettingsService embyS) : base("requests", prSettings, security) { Service = service; PrSettings = prSettings; @@ -81,8 +83,10 @@ namespace Ombi.UI.Modules CpApi = cpApi; Cache = cache; Analytics = an; - NotificationEngine = engine; + PlexNotificationEngine = engine; + EmbyNotificationEngine = embyEngine; CustomizationSettings = customSettings; + EmbySettings = embyS; Get["/", true] = async (x, ct) => await LoadRequests(); Get["/movies", true] = async (x, ct) => await GetMovies(); @@ -111,11 +115,13 @@ namespace Ombi.UI.Modules private ISettingsService SickRageSettings { get; } private ISettingsService CpSettings { get; } private ISettingsService CustomizationSettings { get; } + private ISettingsService EmbySettings { get; } private ISonarrApi SonarrApi { get; } private ISickRageApi SickRageApi { get; } private ICouchPotatoApi CpApi { get; } private ICacheProvider Cache { get; } - private INotificationEngine NotificationEngine { get; } + private INotificationEngine PlexNotificationEngine { get; } + private INotificationEngine EmbyNotificationEngine { get; } private async Task LoadRequests() { @@ -438,7 +444,21 @@ namespace Ombi.UI.Modules originalRequest.Available = available; var result = await Service.UpdateRequestAsync(originalRequest); - await NotificationEngine.NotifyUsers(originalRequest, available ? NotificationType.RequestAvailable : NotificationType.RequestDeclined); + + var plexSettings = await PlexSettings.GetSettingsAsync(); + if (plexSettings.Enable) + { + await + PlexNotificationEngine.NotifyUsers(originalRequest, + available ? NotificationType.RequestAvailable : NotificationType.RequestDeclined); + } + + var embySettings = await EmbySettings.GetSettingsAsync(); + if (embySettings.Enable) + { + await EmbyNotificationEngine.NotifyUsers(originalRequest, + available ? NotificationType.RequestAvailable : NotificationType.RequestDeclined); + } return Response.AsJson(result ? new { Result = true, Available = available, Message = string.Empty } : new { Result = false, Available = false, Message = "Could not update the availability, please try again or check the logs" }); From 4c79871bd7d6b1367b7289a63dee4bd1f3beae83 Mon Sep 17 00:00:00 2001 From: "Jamie.Rees" Date: Wed, 1 Feb 2017 08:31:13 +0000 Subject: [PATCH 16/19] Check if Emby/Plex is enabled before starting the job --- Ombi.Services/Jobs/EmbyAvailabilityChecker.cs | 5 ++++- Ombi.Services/Jobs/EmbyContentCacher.cs | 5 ++++- Ombi.Services/Jobs/PlexAvailabilityChecker.cs | 5 +++++ Ombi.Services/Jobs/PlexContentCacher.cs | 5 ++++- Ombi.Services/Notification/PlexNotificationEngine.cs | 1 + 5 files changed, 18 insertions(+), 3 deletions(-) diff --git a/Ombi.Services/Jobs/EmbyAvailabilityChecker.cs b/Ombi.Services/Jobs/EmbyAvailabilityChecker.cs index 1223e3eb8..a86a7469d 100644 --- a/Ombi.Services/Jobs/EmbyAvailabilityChecker.cs +++ b/Ombi.Services/Jobs/EmbyAvailabilityChecker.cs @@ -81,7 +81,10 @@ namespace Ombi.Services.Jobs public void CheckAndUpdateAll() { var embySettings = Emby.GetSettings(); - + if (!embySettings.Enable) + { + return; + } if (!ValidateSettings(embySettings)) { Log.Debug("Validation of the Emby settings failed."); diff --git a/Ombi.Services/Jobs/EmbyContentCacher.cs b/Ombi.Services/Jobs/EmbyContentCacher.cs index ac1ba7bd2..65a47df32 100644 --- a/Ombi.Services/Jobs/EmbyContentCacher.cs +++ b/Ombi.Services/Jobs/EmbyContentCacher.cs @@ -69,7 +69,10 @@ namespace Ombi.Services.Jobs public void CacheContent() { var embySettings = Emby.GetSettings(); - + if (!embySettings.Enable) + { + return; + } if (!ValidateSettings(embySettings)) { Log.Debug("Validation of emby settings failed."); diff --git a/Ombi.Services/Jobs/PlexAvailabilityChecker.cs b/Ombi.Services/Jobs/PlexAvailabilityChecker.cs index 241da9842..e9da44eb5 100644 --- a/Ombi.Services/Jobs/PlexAvailabilityChecker.cs +++ b/Ombi.Services/Jobs/PlexAvailabilityChecker.cs @@ -82,6 +82,11 @@ namespace Ombi.Services.Jobs var plexSettings = Plex.GetSettings(); + if (!plexSettings.Enable) + { + return; + } + if (!ValidateSettings(plexSettings)) { Log.Debug("Validation of the plex settings failed."); diff --git a/Ombi.Services/Jobs/PlexContentCacher.cs b/Ombi.Services/Jobs/PlexContentCacher.cs index 9a2d770e5..936a7a60b 100644 --- a/Ombi.Services/Jobs/PlexContentCacher.cs +++ b/Ombi.Services/Jobs/PlexContentCacher.cs @@ -77,7 +77,10 @@ namespace Ombi.Services.Jobs public void CacheContent() { var plexSettings = Plex.GetSettings(); - + if (!plexSettings.Enable) + { + return; + } if (!ValidateSettings(plexSettings)) { Log.Debug("Validation of the plex settings failed."); diff --git a/Ombi.Services/Notification/PlexNotificationEngine.cs b/Ombi.Services/Notification/PlexNotificationEngine.cs index 71108bf53..3d4fcd0c8 100644 --- a/Ombi.Services/Notification/PlexNotificationEngine.cs +++ b/Ombi.Services/Notification/PlexNotificationEngine.cs @@ -171,6 +171,7 @@ namespace Ombi.Services.Notification try { var settings = await PlexSettings.GetSettingsAsync(); + var plexUser = PlexApi.GetUsers(settings.PlexAuthToken); // TODO emby var userAccount = PlexApi.GetAccount(settings.PlexAuthToken); var localUsers = UserHelper.GetUsers().ToList(); From 941abac10b3bab4b3b8deede5013f2c57497e583 Mon Sep 17 00:00:00 2001 From: "Jamie.Rees" Date: Wed, 1 Feb 2017 08:46:52 +0000 Subject: [PATCH 17/19] Fixed pace loader --- Ombi.UI/Content/base.css | 19 +++++++++++++++++++ Ombi.UI/Content/base.min.css | 2 +- Ombi.UI/Content/base.scss | 23 +++++++++++++++++++++++ 3 files changed, 43 insertions(+), 1 deletion(-) diff --git a/Ombi.UI/Content/base.css b/Ombi.UI/Content/base.css index 2b67cfa3e..4232dbf6e 100644 --- a/Ombi.UI/Content/base.css +++ b/Ombi.UI/Content/base.css @@ -525,3 +525,22 @@ label { display: block !important; margin: 0 auto !important; } +.pace { + -webkit-pointer-events: none; + pointer-events: none; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; } + +.pace-inactive { + display: none; } + +.pace .pace-progress { + background: #df691a; + position: fixed; + z-index: 2000; + top: 0; + right: 100%; + width: 100%; + height: 5px; } + diff --git a/Ombi.UI/Content/base.min.css b/Ombi.UI/Content/base.min.css index 164bdc9a5..f8b174325 100644 --- a/Ombi.UI/Content/base.min.css +++ b/Ombi.UI/Content/base.min.css @@ -1 +1 @@ -@media(min-width:768px){.row{position:relative;}.bottom-align-text{position:absolute;bottom:0;right:0;}.landing-block .media{max-width:450px;}}@media(max-width:48em){.home{padding-top:1rem;}}@media(min-width:48em){.home{padding-top:4rem;}}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#fff;}hr{border:1px dashed #777;}.btn{border-radius:.25rem !important;}.btn-group-separated .btn,.btn-group-separated .btn+.btn{margin-left:3px;}.multiSelect{background-color:#4e5d6c;}.form-control-custom{background-color:#4e5d6c !important;color:#fff !important;border-radius:0;box-shadow:0 0 0 !important;}h1{font-size:3.5rem !important;font-weight:600 !important;}.request-title{margin-top:0 !important;font-size:1.9rem !important;}p{font-size:1.1rem !important;}label{display:inline-block !important;margin-bottom:.5rem !important;font-size:16px !important;}.small-label{display:inline-block !important;margin-bottom:.5rem !important;font-size:11px !important;}.small-checkbox{min-height:0 !important;}.round-checkbox{border-radius:8px;}.nav-tabs>li{font-size:13px;line-height:21px;}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{background:#4e5d6c;}.nav-tabs>li>a>.fa{padding:3px 5px 3px 3px;}.nav-tabs>li.nav-tab-right{float:right;}.nav-tabs>li.nav-tab-right a{margin-right:0;margin-left:2px;}.nav-tabs>li.nav-tab-icononly .fa{padding:3px;}.navbar .nav a .fa,.dropdown-menu a .fa{font-size:130%;top:1px;position:relative;display:inline-block;margin-right:5px;}.dropdown-menu a .fa{top:2px;}.btn-danger-outline{color:#d9534f !important;background-color:transparent;background-image:none;border-color:#d9534f !important;}.btn-danger-outline:focus,.btn-danger-outline.focus,.btn-danger-outline:active,.btn-danger-outline.active,.btn-danger-outline:hover,.open>.btn-danger-outline.dropdown-toggle{color:#fff !important;background-color:#d9534f !important;border-color:#d9534f !important;}.btn-primary-outline{color:#ff761b !important;background-color:transparent;background-image:none;border-color:#ff761b !important;}.btn-primary-outline:focus,.btn-primary-outline.focus,.btn-primary-outline:active,.btn-primary-outline.active,.btn-primary-outline:hover,.open>.btn-primary-outline.dropdown-toggle{color:#fff !important;background-color:#df691a !important;border-color:#df691a !important;}.btn-info-outline{color:#5bc0de !important;background-color:transparent;background-image:none;border-color:#5bc0de !important;}.btn-info-outline:focus,.btn-info-outline.focus,.btn-info-outline:active,.btn-info-outline.active,.btn-info-outline:hover,.open>.btn-info-outline.dropdown-toggle{color:#fff !important;background-color:#5bc0de !important;border-color:#5bc0de !important;}.btn-warning-outline{color:#f0ad4e !important;background-color:transparent;background-image:none;border-color:#f0ad4e !important;}.btn-warning-outline:focus,.btn-warning-outline.focus,.btn-warning-outline:active,.btn-warning-outline.active,.btn-warning-outline:hover,.open>.btn-warning-outline.dropdown-toggle{color:#fff !important;background-color:#f0ad4e !important;border-color:#f0ad4e !important;}.btn-success-outline{color:#5cb85c !important;background-color:transparent;background-image:none;border-color:#5cb85c !important;}.btn-success-outline:focus,.btn-success-outline.focus,.btn-success-outline:active,.btn-success-outline.active,.btn-success-outline:hover,.open>.btn-success-outline.dropdown-toggle{color:#fff !important;background-color:#5cb85c !important;border-color:#5cb85c !important;}#movieList .mix{display:none;}#tvList .mix{display:none;}.scroll-top-wrapper{position:fixed;opacity:0;visibility:hidden;overflow:hidden;text-align:center;z-index:99999999;background-color:#4e5d6c;color:#eee;width:50px;height:48px;line-height:48px;right:30px;bottom:30px;padding-top:2px;border-top-left-radius:10px;border-top-right-radius:10px;border-bottom-right-radius:10px;border-bottom-left-radius:10px;-webkit-transition:all .5s ease-in-out;-moz-transition:all .5s ease-in-out;-ms-transition:all .5s ease-in-out;-o-transition:all .5s ease-in-out;transition:all .5s ease-in-out;}.scroll-top-wrapper:hover{background-color:#637689;}.scroll-top-wrapper.show{visibility:visible;cursor:pointer;opacity:1;}.scroll-top-wrapper i.fa{line-height:inherit;}.no-search-results{text-align:center;}.no-search-results .no-search-results-icon{font-size:10em;color:#4e5d6c;}.no-search-results .no-search-results-text{margin:20px 0;color:#ccc;}.form-control-search{padding:13px 105px 13px 16px;height:100%;}.form-control-withbuttons{padding-right:105px;}.input-group-addon .btn-group{position:absolute;right:45px;z-index:3;top:10px;box-shadow:0 0 0;}.input-group-addon .btn-group .btn{border:1px solid rgba(255,255,255,.7) !important;padding:3px 12px;color:rgba(255,255,255,.7) !important;}.btn-split .btn{border-radius:0 !important;}.btn-split .btn:not(.dropdown-toggle){border-radius:.25rem 0 0 .25rem !important;}.btn-split .btn.dropdown-toggle{border-radius:0 .25rem .25rem 0 !important;padding:12px 8px;}#updateAvailable{background-color:#df691a;text-align:center;font-size:15px;padding:3px 0;}#cacherRunning{background-color:#4e5d6c;text-align:center;font-size:15px;padding:3px 0;}.checkbox label{display:inline-block;cursor:pointer;position:relative;padding-left:25px;margin-right:15px;font-size:13px;margin-bottom:10px;}.checkbox label:before{content:"";display:inline-block;width:18px;height:18px;margin-right:10px;position:absolute;left:0;bottom:1px;border:2px solid #eee;border-radius:3px;}.checkbox input[type=checkbox]{display:none;}.checkbox input[type=checkbox]:checked+label:before{content:"✓";font-size:13px;color:#fafafa;text-align:center;line-height:13px;}.small-checkbox label{display:inline-block;cursor:pointer;position:relative;padding-left:25px;margin-right:15px;font-size:13px;margin-bottom:10px;}.small-checkbox label:before{content:"";display:inline-block;width:18px;height:18px;margin-right:10px;position:absolute;left:0;bottom:1px;border:2px solid #eee;border-radius:8px;min-height:0 !important;}.small-checkbox input[type=checkbox]{display:none;}.small-checkbox input[type=checkbox]:checked+label:before{content:"✓";font-size:13px;color:#fafafa;text-align:center;line-height:13px;}.small-checkbox label{min-height:0 !important;padding-left:20px;margin-bottom:0;font-weight:normal;cursor:pointer;}.input-group-sm{padding-top:2px;padding-bottom:2px;}.tab-pane .form-horizontal .form-group{margin-right:15px;margin-left:15px;}.bootstrap-datetimepicker-widget.dropdown-menu{background-color:#4e5d6c;}.bootstrap-datetimepicker-widget.dropdown-menu.bottom:after{border-bottom:6px solid #4e5d6c !important;}.bootstrap-datetimepicker-widget table td.active,.bootstrap-datetimepicker-widget table td.active:hover{color:#fff !important;}.landing-header{display:block;margin:60px auto;}.landing-block{background:#2f2f2f !important;padding:5px;}.landing-block .media{margin:30px auto;max-width:450px;}.landing-block .media .media-left{display:inline-block;float:left;width:70px;}.landing-block .media .media-left i.fa{font-size:3em;}.landing-title{font-weight:bold;}.checkbox-custom{margin-top:0 !important;margin-bottom:0 !important;}.tooltip_templates{display:none;}.shadow{-moz-box-shadow:3px 3px 5px 6px #191919;-webkit-box-shadow:3px 3px 5px 6px #191919;box-shadow:3px 3px 5px 6px #191919;}.img-circle{border-radius:50%;}#wrapper{padding-left:0;-webkit-transition:all .5s ease;-moz-transition:all .5s ease;-o-transition:all .5s ease;transition:all .5s ease;}#wrapper.toggled{padding-right:250px;}#sidebar-wrapper{z-index:1000;position:fixed;right:250px;width:0;height:100%;margin-right:-250px;overflow-y:auto;background:#4e5d6c;padding-left:0;-webkit-transition:all .5s ease;-moz-transition:all .5s ease;-o-transition:all .5s ease;transition:all .5s ease;}#wrapper.toggled #sidebar-wrapper{width:500px;}#page-content-wrapper{width:100%;position:absolute;padding:15px;}#wrapper.toggled #page-content-wrapper{position:absolute;margin-left:-250px;}.sidebar-nav{position:absolute;top:0;width:500px;margin:0;padding-left:0;list-style:none;}.sidebar-nav li{text-indent:20px;line-height:40px;}.sidebar-nav li a{display:block;text-decoration:none;color:#999;}.sidebar-nav li a:hover{text-decoration:none;color:#fff;background:rgba(255,255,255,.2);}.sidebar-nav li a:active,.sidebar-nav li a:focus{text-decoration:none;}.sidebar-nav>.sidebar-brand{height:65px;font-size:18px;line-height:60px;}.sidebar-nav>.sidebar-brand a{color:#999;}.sidebar-nav>.sidebar-brand a:hover{color:#fff;background:none;}@media(min-width:768px){#wrapper{padding-right:250px;}#wrapper.toggled{padding-right:0;}#sidebar-wrapper{width:500px;}#wrapper.toggled #sidebar-wrapper{width:0;}#page-content-wrapper{padding:20px;position:relative;}#wrapper.toggled #page-content-wrapper{position:relative;margin-right:0;}}#lightbox{background-color:#808080;filter:alpha(opacity=50);opacity:.5;-moz-opacity:.5;top:0;left:0;z-index:20;height:100%;width:100%;background-repeat:no-repeat;background-position:center;position:absolute;}.list-group-item-dropdown{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#3e3e3e;border:1px solid transparent;}.wizard-heading{text-align:center;}.wizard-img{width:300px;display:block !important;margin:0 auto !important;} \ No newline at end of file +@media(min-width:768px){.row{position:relative;}.bottom-align-text{position:absolute;bottom:0;right:0;}.landing-block .media{max-width:450px;}}@media(max-width:48em){.home{padding-top:1rem;}}@media(min-width:48em){.home{padding-top:4rem;}}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#fff;}hr{border:1px dashed #777;}.btn{border-radius:.25rem !important;}.btn-group-separated .btn,.btn-group-separated .btn+.btn{margin-left:3px;}.multiSelect{background-color:#4e5d6c;}.form-control-custom{background-color:#4e5d6c !important;color:#fff !important;border-radius:0;box-shadow:0 0 0 !important;}h1{font-size:3.5rem !important;font-weight:600 !important;}.request-title{margin-top:0 !important;font-size:1.9rem !important;}p{font-size:1.1rem !important;}label{display:inline-block !important;margin-bottom:.5rem !important;font-size:16px !important;}.small-label{display:inline-block !important;margin-bottom:.5rem !important;font-size:11px !important;}.small-checkbox{min-height:0 !important;}.round-checkbox{border-radius:8px;}.nav-tabs>li{font-size:13px;line-height:21px;}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{background:#4e5d6c;}.nav-tabs>li>a>.fa{padding:3px 5px 3px 3px;}.nav-tabs>li.nav-tab-right{float:right;}.nav-tabs>li.nav-tab-right a{margin-right:0;margin-left:2px;}.nav-tabs>li.nav-tab-icononly .fa{padding:3px;}.navbar .nav a .fa,.dropdown-menu a .fa{font-size:130%;top:1px;position:relative;display:inline-block;margin-right:5px;}.dropdown-menu a .fa{top:2px;}.btn-danger-outline{color:#d9534f !important;background-color:transparent;background-image:none;border-color:#d9534f !important;}.btn-danger-outline:focus,.btn-danger-outline.focus,.btn-danger-outline:active,.btn-danger-outline.active,.btn-danger-outline:hover,.open>.btn-danger-outline.dropdown-toggle{color:#fff !important;background-color:#d9534f !important;border-color:#d9534f !important;}.btn-primary-outline{color:#ff761b !important;background-color:transparent;background-image:none;border-color:#ff761b !important;}.btn-primary-outline:focus,.btn-primary-outline.focus,.btn-primary-outline:active,.btn-primary-outline.active,.btn-primary-outline:hover,.open>.btn-primary-outline.dropdown-toggle{color:#fff !important;background-color:#df691a !important;border-color:#df691a !important;}.btn-info-outline{color:#5bc0de !important;background-color:transparent;background-image:none;border-color:#5bc0de !important;}.btn-info-outline:focus,.btn-info-outline.focus,.btn-info-outline:active,.btn-info-outline.active,.btn-info-outline:hover,.open>.btn-info-outline.dropdown-toggle{color:#fff !important;background-color:#5bc0de !important;border-color:#5bc0de !important;}.btn-warning-outline{color:#f0ad4e !important;background-color:transparent;background-image:none;border-color:#f0ad4e !important;}.btn-warning-outline:focus,.btn-warning-outline.focus,.btn-warning-outline:active,.btn-warning-outline.active,.btn-warning-outline:hover,.open>.btn-warning-outline.dropdown-toggle{color:#fff !important;background-color:#f0ad4e !important;border-color:#f0ad4e !important;}.btn-success-outline{color:#5cb85c !important;background-color:transparent;background-image:none;border-color:#5cb85c !important;}.btn-success-outline:focus,.btn-success-outline.focus,.btn-success-outline:active,.btn-success-outline.active,.btn-success-outline:hover,.open>.btn-success-outline.dropdown-toggle{color:#fff !important;background-color:#5cb85c !important;border-color:#5cb85c !important;}#movieList .mix{display:none;}#tvList .mix{display:none;}.scroll-top-wrapper{position:fixed;opacity:0;visibility:hidden;overflow:hidden;text-align:center;z-index:99999999;background-color:#4e5d6c;color:#eee;width:50px;height:48px;line-height:48px;right:30px;bottom:30px;padding-top:2px;border-top-left-radius:10px;border-top-right-radius:10px;border-bottom-right-radius:10px;border-bottom-left-radius:10px;-webkit-transition:all .5s ease-in-out;-moz-transition:all .5s ease-in-out;-ms-transition:all .5s ease-in-out;-o-transition:all .5s ease-in-out;transition:all .5s ease-in-out;}.scroll-top-wrapper:hover{background-color:#637689;}.scroll-top-wrapper.show{visibility:visible;cursor:pointer;opacity:1;}.scroll-top-wrapper i.fa{line-height:inherit;}.no-search-results{text-align:center;}.no-search-results .no-search-results-icon{font-size:10em;color:#4e5d6c;}.no-search-results .no-search-results-text{margin:20px 0;color:#ccc;}.form-control-search{padding:13px 105px 13px 16px;height:100%;}.form-control-withbuttons{padding-right:105px;}.input-group-addon .btn-group{position:absolute;right:45px;z-index:3;top:10px;box-shadow:0 0 0;}.input-group-addon .btn-group .btn{border:1px solid rgba(255,255,255,.7) !important;padding:3px 12px;color:rgba(255,255,255,.7) !important;}.btn-split .btn{border-radius:0 !important;}.btn-split .btn:not(.dropdown-toggle){border-radius:.25rem 0 0 .25rem !important;}.btn-split .btn.dropdown-toggle{border-radius:0 .25rem .25rem 0 !important;padding:12px 8px;}#updateAvailable{background-color:#df691a;text-align:center;font-size:15px;padding:3px 0;}#cacherRunning{background-color:#4e5d6c;text-align:center;font-size:15px;padding:3px 0;}.checkbox label{display:inline-block;cursor:pointer;position:relative;padding-left:25px;margin-right:15px;font-size:13px;margin-bottom:10px;}.checkbox label:before{content:"";display:inline-block;width:18px;height:18px;margin-right:10px;position:absolute;left:0;bottom:1px;border:2px solid #eee;border-radius:3px;}.checkbox input[type=checkbox]{display:none;}.checkbox input[type=checkbox]:checked+label:before{content:"✓";font-size:13px;color:#fafafa;text-align:center;line-height:13px;}.small-checkbox label{display:inline-block;cursor:pointer;position:relative;padding-left:25px;margin-right:15px;font-size:13px;margin-bottom:10px;}.small-checkbox label:before{content:"";display:inline-block;width:18px;height:18px;margin-right:10px;position:absolute;left:0;bottom:1px;border:2px solid #eee;border-radius:8px;min-height:0 !important;}.small-checkbox input[type=checkbox]{display:none;}.small-checkbox input[type=checkbox]:checked+label:before{content:"✓";font-size:13px;color:#fafafa;text-align:center;line-height:13px;}.small-checkbox label{min-height:0 !important;padding-left:20px;margin-bottom:0;font-weight:normal;cursor:pointer;}.input-group-sm{padding-top:2px;padding-bottom:2px;}.tab-pane .form-horizontal .form-group{margin-right:15px;margin-left:15px;}.bootstrap-datetimepicker-widget.dropdown-menu{background-color:#4e5d6c;}.bootstrap-datetimepicker-widget.dropdown-menu.bottom:after{border-bottom:6px solid #4e5d6c !important;}.bootstrap-datetimepicker-widget table td.active,.bootstrap-datetimepicker-widget table td.active:hover{color:#fff !important;}.landing-header{display:block;margin:60px auto;}.landing-block{background:#2f2f2f !important;padding:5px;}.landing-block .media{margin:30px auto;max-width:450px;}.landing-block .media .media-left{display:inline-block;float:left;width:70px;}.landing-block .media .media-left i.fa{font-size:3em;}.landing-title{font-weight:bold;}.checkbox-custom{margin-top:0 !important;margin-bottom:0 !important;}.tooltip_templates{display:none;}.shadow{-moz-box-shadow:3px 3px 5px 6px #191919;-webkit-box-shadow:3px 3px 5px 6px #191919;box-shadow:3px 3px 5px 6px #191919;}.img-circle{border-radius:50%;}#wrapper{padding-left:0;-webkit-transition:all .5s ease;-moz-transition:all .5s ease;-o-transition:all .5s ease;transition:all .5s ease;}#wrapper.toggled{padding-right:250px;}#sidebar-wrapper{z-index:1000;position:fixed;right:250px;width:0;height:100%;margin-right:-250px;overflow-y:auto;background:#4e5d6c;padding-left:0;-webkit-transition:all .5s ease;-moz-transition:all .5s ease;-o-transition:all .5s ease;transition:all .5s ease;}#wrapper.toggled #sidebar-wrapper{width:500px;}#page-content-wrapper{width:100%;position:absolute;padding:15px;}#wrapper.toggled #page-content-wrapper{position:absolute;margin-left:-250px;}.sidebar-nav{position:absolute;top:0;width:500px;margin:0;padding-left:0;list-style:none;}.sidebar-nav li{text-indent:20px;line-height:40px;}.sidebar-nav li a{display:block;text-decoration:none;color:#999;}.sidebar-nav li a:hover{text-decoration:none;color:#fff;background:rgba(255,255,255,.2);}.sidebar-nav li a:active,.sidebar-nav li a:focus{text-decoration:none;}.sidebar-nav>.sidebar-brand{height:65px;font-size:18px;line-height:60px;}.sidebar-nav>.sidebar-brand a{color:#999;}.sidebar-nav>.sidebar-brand a:hover{color:#fff;background:none;}@media(min-width:768px){#wrapper{padding-right:250px;}#wrapper.toggled{padding-right:0;}#sidebar-wrapper{width:500px;}#wrapper.toggled #sidebar-wrapper{width:0;}#page-content-wrapper{padding:20px;position:relative;}#wrapper.toggled #page-content-wrapper{position:relative;margin-right:0;}}#lightbox{background-color:#808080;filter:alpha(opacity=50);opacity:.5;-moz-opacity:.5;top:0;left:0;z-index:20;height:100%;width:100%;background-repeat:no-repeat;background-position:center;position:absolute;}.list-group-item-dropdown{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#3e3e3e;border:1px solid transparent;}.wizard-heading{text-align:center;}.wizard-img{width:300px;display:block !important;margin:0 auto !important;}.pace{-webkit-pointer-events:none;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;}.pace-inactive{display:none;}.pace .pace-progress{background:#df691a;position:fixed;z-index:2000;top:0;right:100%;width:100%;height:5px;} \ No newline at end of file diff --git a/Ombi.UI/Content/base.scss b/Ombi.UI/Content/base.scss index 8c0c6e066..69c9c5aec 100644 --- a/Ombi.UI/Content/base.scss +++ b/Ombi.UI/Content/base.scss @@ -650,4 +650,27 @@ $border-radius: 10px; width: 300px; display: block $i; margin: 0 auto $i; +} + +.pace { + -webkit-pointer-events: none; + pointer-events: none; + + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; +} + +.pace-inactive { + display: none; +} + +.pace .pace-progress { + background: $primary-colour; + position: fixed; + z-index: 2000; + top: 0; + right: 100%; + width: 100%; + height: 5px; } \ No newline at end of file From 6b7f33d725ab7ca1f8af72726d40c6563d8828e9 Mon Sep 17 00:00:00 2001 From: d2dyno Date: Wed, 1 Feb 2017 03:36:21 -0600 Subject: [PATCH 18/19] Fix Radarr labels Fixed references to TV, instead of Movies. --- Ombi.UI/Views/Integration/Radarr.cshtml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Ombi.UI/Views/Integration/Radarr.cshtml b/Ombi.UI/Views/Integration/Radarr.cshtml index 3d4520e68..124fdf21c 100644 --- a/Ombi.UI/Views/Integration/Radarr.cshtml +++ b/Ombi.UI/Views/Integration/Radarr.cshtml @@ -64,10 +64,10 @@
- +
- +
@@ -241,4 +241,4 @@ }) - \ No newline at end of file + From 102612742d7dd58f09ad198cde2e323cbc48aca8 Mon Sep 17 00:00:00 2001 From: d2dyno Date: Wed, 1 Feb 2017 03:39:46 -0600 Subject: [PATCH 19/19] Update Radarr placeholder --- Ombi.UI/Views/Integration/Radarr.cshtml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Ombi.UI/Views/Integration/Radarr.cshtml b/Ombi.UI/Views/Integration/Radarr.cshtml index 124fdf21c..1ccccc40f 100644 --- a/Ombi.UI/Views/Integration/Radarr.cshtml +++ b/Ombi.UI/Views/Integration/Radarr.cshtml @@ -66,7 +66,7 @@
- +