diff --git a/.gitignore b/.gitignore
index 771a7bacd..587f09568 100644
--- a/.gitignore
+++ b/.gitignore
@@ -243,3 +243,6 @@ _Pvt_Extensions
# CAKE - C# Make
/Tools/*
*.db-journal
+
+# Ignore local vscode config
+*.vscode
diff --git a/CHANGELOG.md b/CHANGELOG.md
index ea279eae7..655689bec 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4344 +1,1596 @@
# Changelog
-## v3.0.3111 (2018-03-27)
-
-### **New Features**
-
-- Added the Recently Added Newsletter! You are welcome. [tidusjar]
-
-- Added a new scrollbar to Ombi. [tidusjar]
-
-- Added the ability to automatically generate the API Key on startup if it does not exist #2070. [tidusjar]
-
-- Updated npm dependancies. [Jamie]
-
-- Update README.md. [Jamie]
-
-- Update README.md. [Jamie]
-
-- Update ISSUE_TEMPLATE.md. [Jamie]
-
-- Update appveyor.yml. [Jamie]
-
-- Added recently added stuff. [Jamie]
-
-- Added the recently added engine with some basic methods. [Jamie]
-
-- Added the ability to refresh out backend metadata (#2078) [Jamie]
-
-- Update README.md. [zobe123]
-
-### **Fixes**
-
-- Specific favicons for different platforms. [louis-lau]
-
-- MovieDbId was switched to string fron number so accomodated for change. [Anojh]
-
-- Removing duplicate functions. [Anojh Thayaparan]
-
-- Conflict resolving and adopting Jamie's new method. [Anojh]
-
-- Wrote new calls to just get poster and bg. [Anojh]
-
-- Fix for issue #1907, which is to add content poster and bg to issue details page. [Anojh]
-
-- Dynamic Background Animation. [Anojh]
-
-- Improved the message for #2037. [tidusjar]
-
-- Improved the way we use the notification variables, we have now split out the Username and Alias (Requested User is depricated but not removed) [tidusjar]
-
-- Removed redundant timers. [Anojh]
-
-- More optimizations by reducing requests. [Anojh]
-
-- Improved version. [Anojh]
-
-- Dynamic Background Animation. [Anojh]
-
-- Fixed #2055 and #1903. [Jamie]
-
-- Small changes to the auto updater, let's see how this works. [Jamie]
-
-- Fixed build. [Jamie]
-
-- Fixed the update check for the master build. [Jamie]
-
-- Fixed build. [Jamie]
-
-- Fixed #2074 and #2079. [Jamie]
-
-
-## v3.0.3030 (2018-03-14)
-
-### **New Features**
-
-- Updated the .Net core dependancies #2072. [Jamie]
-
-### **Fixes**
-
-- Delete Ombi.testdb. [Jamie]
-
-
-## v3.0.3020 (2018-03-13)
-
-### **Fixes**
-
-- Small memory improvements in the Plex Sync. [Jamie]
-
-- Fixed the sort issue on the user Management page. Also added sorting to the Movie Requests page. [tidusjar]
-
-- Downgraded the angular2-jwt library since it has a bug in it. #2064. [tidusjar]
-
-- Fixed an issue when Plex decideds to reuse the Plex Key for a different media item... #2038. [tidusjar]
-
-- Fixed an issue where we might show the Imdb link when we do not have a imdbid #1797. [tidusjar]
-
-- Fixed the issue where we can no longer select Pending Approval in the filters #2057. [tidusjar]
-
-- Fixed the API key not working when attempting to get requests #2058. [tidusjar]
-
-- Fixed #2056. [tidusjar]
-
-- Experimental, set the Webpack base root to the ombi base path if we have it. This should hopefully fix the reverse proxy issues. [Jamie]
-
-- Fixed #2056. [tidusjar]
-
-
-## v3.0.3000 (2018-03-09)
-
-### **New Features**
-
-- Added the ability to override root and quality options in Sonarr (#2049) [Jamie]
-
-- Added Pending Approval into the filters list. [tidusjar]
-
-- Added the ability to hide requests that have not been made by that user (#2052) [Jamie]
-
-- Update README.md. [Jamie]
-
-- Update README.md. [Louis Laureys]
-
-### **Fixes**
-
-- Fixed #2042. [Jamie]
-
-
-## v3.0.0 (2018-03-04)
-
-### **New Features**
-
-- Update build.cake. [Jamie]
-
-- Update README.md. [Jamie]
-
-- Update README.md. [Jamie]
-
-- Added a similar button to the movie searches. Makes movie discoverablility easier. [tidusjar]
-
-- Update README.md. [Jamie]
-
-- Update README.md. [Jamie]
-
-- Update ISSUE_TEMPLATE.md. [Jamie]
-
-- Update appveyor.yml. [Jamie]
-
-- Update ISSUE_TEMPLATE.md. [PotatoQuality]
-
-- Update ISSUE_TEMPLATE.md. [PotatoQuality]
-
-- Update README.md. [Jamie]
-
-- Update README.md. [Jamie]
-
-- Update README.md. [Jamie]
-
-- Update README.md. [PotatoQuality]
-
-- Change the default templates to use {IssueUser} [Jamie]
-
-- Changed the base url validation. [tidusjar]
-
-- Added bulk editing (#1941) [Jamie]
-
-- Change the poster size to w300 #1932. [Jamie]
-
-- Added a default user agent on all API calls. [tidusjar]
-
-- Update request.service.ts. [Jamie]
-
-- Added a filter onto the movies requests page for some inital feedback. [Jamie]
-
-- Added ordering to the User Management screen. [Jamie]
-
-- Update README.md. [Jamie]
-
-- Added custom donation url (#1902) [m4tta]
-
-- Changed the url scheme to make it easier to parse. [Jamie]
-
-- Added Norwegian to the translation code, forgot to check this in. [Jamie]
-
-- Added Norwegian to the language dropdown. [Jamie]
-
-- Added the stuff needed for omBlur. [tidusjar]
-
-- Update README.md (#1872) [xnaas]
-
-- Update README.md. [Jamie]
-
-- Update plex.component.html. [Jamie]
-
-- Change plus to list in menu (#1855) [Louis Laureys]
-
-- Update README.md. [Jamie]
-
-- Update README.md. [Jamie]
-
-- Added user request limits, We can now set the limit for a user. [tidusjar]
-
-- Updated the UI JWT framework. [Jamie]
-
-- Added missing migrations #1744. [Jamie]
-
-- Added the SickRage API integration. [Jamie]
-
-- Update the Emby Connect Username in the user importer. To update the emby connect email address we do it when the user logs in, since the only way to get that information is to use the users Username and Password, since we do not keep this information we cannot do it in the User Importer, but if they have successfully logged in via Emby Connect then we check if we need to update the email address on login. [Jamie]
-
-- Update the connectuserid for emby users. [tidusjar]
-
-- Added the ability to customize job scheudles. [Jamie]
-
-- Update README.md. [Jamie]
-
-- Added the option to import the plex admin. [tidusjar]
-
-- Added the route name as an Id on the container div #1698. [Jamie]
-
-- Updated packages including uglify-es and the package-lock #1683. [Jamie]
-
-- Updated to Angular5 with best practises. [Jamie]
-
-- Update README.md. [Jamie]
-
-- Added the new backgrounds for the requests pages. [tidusjar]
-
-- Added caching to the settings. [tidusjar]
-
-- Added some better handling when adding existing seasons to a tv show in the Plex cacher. [tidusjar]
-
-- Added Telegram Notification support, Not tested. [Jamie]
-
-- Added the new banner background for tv shows. [tidusjar]
-
-- Added a new customization option to provide a css link. [Jamie]
-
-- Update README.md. [Jamie]
-
-- Update README.md. [Jamie]
-
-- Changed to discord link. [tidusjar]
-
-- Added more translations. [Jamie]
-
-- Added more logging for #1643. [tidusjar]
-
-- Update README.md. [Jamie]
-
-- Update Crowdin configuration file. [Jamie]
-
-- Added more translations. [Jamie]
-
-- Update da.json (#1634) [Lixumos]
-
-- Added 32bit version of Ombi. [Jamie]
-
-- Added more translations. [Jamie]
-
-- Added translations. [Jamie]
-
-- Updated the npm packages. [Jamie.Rees]
-
-- Added four new endpoints to change the availability for TV shows and Movies #1601. [Jamie.Rees]
-
-- Added the ability to run a user defined update script #1460. [Jamie.Rees]
-
-- Added logging around creating the wizard user #1604. [tidusjar]
-
-- Added the option to run the content cacher from the settings page, it will no longer get triggered when we press save. [tidusjar]
-
-- Added the ability to specify how many episodes we should cache at a time. #1598. [tidusjar]
-
-- Added usersname and password option for the updater #1460. [Jamie.Rees]
-
-- Changed the way we download the .zip files in the auto updater #1460 This might make a difference to the permissions issue. but not 100% sure. [Jamie.Rees]
-
-- Changed cake. [Jamie.Rees]
-
-- Added feedback when we send a welcome email #1578. [Jamie.Rees]
-
-- Update README.md. [Jamie]
-
-- Added some logging into the PlexCachers and set the log level to informational. [tidusjar]
-
-- Added Couchpotato support and fixed #1548. [tidusjar]
-
-- Update ISSUE_TEMPLATE.md. [PotatoQuality]
-
-- Update ISSUE_TEMPLATE.md. [PotatoQuality]
-
-- Update README.md. [Jamie]
-
-- Added the ability to use a cookie to login. Mainly for Org. [tidusjar]
-
-- Added support for a new TV and Movie provider. DogNZB. [tidusjar]
-
-- Added a PartlyAvailable flag for tv shows. [Jamie.Rees]
-
-- Added some feedback on the request buttons for movies #1536. [Jamie.Rees]
-
-- Added a fix for the poster path issue #1533. [Jamie.Rees]
-
-- Added back the log path writing #865. [Jamie.Rees]
-
-- Update README.md. [Jamie]
-
-- Added support for email login #1513. [tidusjar]
-
-- Added some more logging around the plex user importer fixed the discord notification issue #1513. [tidusjar]
-
-- Update README.md. [PotatoQuality]
-
-- Update README.md. [PotatoQuality]
-
-- Update README.md. [PotatoQuality]
-
-- Update README.md. [PotatoQuality]
-
-- Update README.md. [PotatoQuality]
-
-- Update Readme for V3. [PotatoQuality]
-
-- Added some wiki pages and also made it so we cannot edit Plex Users email address (since they will get overwrote via the Importer) #865. [Jamie.Rees]
-
-- Added transparency to icon files (#1520) [Auwen]
-
-- Added an application URL in the customization settings #1513. [Jamie.Rees]
-
-- Update ISSUE_TEMPLATE.md. [Jamie]
-
-- Added the ability to enable Plex User importing. We also allow you to exclude users #1456. [tidusjar]
-
-- Update Startup.cs. [Jamie]
-
-- Added an about page #865. [Jamie.Rees]
-
-- Changelog. [Jamie.Rees]
-
-- Changed the way we download the updates #865. [Jamie.Rees]
-
-- Updated packages and more logging. [Jamie.Rees]
-
-- Update versioning. [Jamie.Rees]
-
-- Update nuget packages and added logging to the Updater #865. [tidusjar]
-
-- Added the ForwardedHeaders middlewear for Reverse Proxy scenarios #865. [tidusjar]
-
-- Update build.cake. [Jamie]
-
-- Update DiscordApi.cs. [Jamie]
-
-- Update README.md. [PotatoQuality]
-
-- Added a authorization filter so we can see hangfire outisde of the local requests. [TidusJar]
-
-- Added more logging for the updater. [Jamie.Rees]
-
-- Added the emby episode cacher and the job to check if items are available on emby #1464 #865. [tidusjar]
-
-- Added the Emby Cacher, we now cache the Emby data! [tidusjar]
-
-- Updated CHangelog. [Jamie.Rees]
-
-- Updated changelog. [Jamie.Rees]
-
-- Updated assembly versions. [Jamie.Rees]
-
-- Added the logo in the email notifications to use the application image #1459. [Jamie.Rees]
-
-- Change Os to VS2015. [Jamie.Rees]
-
-- Added multiple emby server support and enabled it for Plex #865. [tidusjar]
-
-- Update ISSUE_TEMPLATE.md. [Jamie]
-
-- Update README.md. [Jamie]
-
-- Added slack #1459 #865. [Jamie.Rees]
-
-- Added a checkbox to the usermanagement screen.. Does nothing yet #865 #1456. [Jamie.Rees]
-
-- Update build.cake. [Jamie]
-
-- Added swagger into the .zips. [Jamie.Rees]
-
-- Added Cake build #865. [Jamie.Rees]
-
-- Added Pushbullet notifications #1459 #865. [Jamie.Rees]
-
-- Update README.md. [Jamie]
-
-- Update README.md. [Jamie]
-
-- Update README.md. [Jamie]
-
-- Added the logging endpoint at /api/v1/Logging for the UI logs #1465. [tidusjar]
-
-- Change the RID. [Jamie.Rees]
-
-- Update README.md. [Jamie]
-
-- Update README.md. [Jamie]
-
-- Updated Changelog. [Jamie.Rees]
-
-- Added changelog. [Jamie.Rees]
-
-- Update README.md. [Jamie]
-
-- Updated stuff. [Jamie.Rees]
-
-- Update ISSUE_TEMPLATE.md. [PotatoQuality]
-
-- Update ISSUE_TEMPLATE.md. [PotatoQuality]
-
-- Added the Ombi or customized logo onto the login page #865. [TidusJar]
-
-- Added new login page #865. [Jamie]
-
-- Added Migrations rather than a manual DB Script #865. [Jamie.Rees]
-
-- Updated all the packages. [tidusjar]
-
-- Added a skip options #865. [tidusjar]
-
-- Added the minimumAvailability #865. [tidusjar]
-
-- Updater build script. [Jamie.Rees]
-
-- Added the testing notifications and discord notification #865. [Jamie.Rees]
-
-- Added tests into the build. [Jamie.Rees]
-
-- Added Swagger. [Jamie.Rees]
-
-- Added Discord notification #865. [Jamie.Rees]
-
-- Added the Movie Sender, Movies will be sent to Radarr now #865. [Jamie.Rees]
-
-- Added SQLite storage for Hangfire. [Jamie.Rees]
-
-- Added the Radarr cacher #865. [tidusjar]
-
-- Added Radarr and Sonarr settings pages #865. [Jamie.Rees]
-
-- Update appveyor.yml. [Jamie]
-
-- Update appveyor.yml. [Jamie]
-
-- Update appveyor.yml. [Jamie]
-
-- Update appveyor.yml. [Jamie]
-
-- Updated build script. [tidusjar]
-
-- Added the Rules Engine Pattern and the Auto approve and request rules #865. [tidusjar]
-
-- Update .gitattributes. [Jamie]
-
-- Added the TraktApi back. [tidusjar]
-
-- Changes. [Jamie.Rees]
-
-- Added some sonarr stuff. [Jamie.Rees]
-
-- Added Hangfire #865. [tidusjar]
-
-- Update node again... [Jamie.Rees]
-
-- Update node. [Jamie.Rees]
-
-- Changes. [Jamie.Rees]
-
-- Update StringCipher.cs. [Jamie]
-
-### **Fixes**
-
-- New translations en.json (Norwegian) (#2020) [Jamie]
-
-- Publish 32bit build of windows. [tidusjar]
-
-- Fixing incorrect filter translation targets (#1987) [Jono Cairns]
-
-- New Crowdin translations (#2017) [Jamie]
-
-- Fixed #1997. [tidusjar]
-
-- We now show the digital release date in the search if available #1962. [tidusjar]
-
-- Css fixes (#2014) [Louis Laureys]
-
-- API improvements. [Jamie]
-
-- Fix #1599 (#2008) [Louis Laureys]
-
-- Issue button fix (#2006) [Louis Laureys]
-
-- Fixed #1886 #1865. [Jamie]
-
-- Fixed the outstanding issue on #1995. [Jamie]
-
-- Fixed an issue for #1951. [tidusjar]
-
-- Try and fuzzy match the title and release if we cannot get the tvdb id or imdbid (depends on the media agents in Plex) #1951. [tidusjar]
-
-- Fixed #1989 #1719. [Jamie]
-
-- Small changes that might fix #1985 but doubt it. [Jamie]
-
-- Should fix #1975. [tidusjar]
-
-- Fixed #1789. [tidusjar]
-
-- Fixed #1968. [tidusjar]
-
-- Fixed #1978. [tidusjar]
-
-- Fixed #1954. [tidusjar]
-
-- Small changes to the auto updater, let's see how this works. [Jamie]
-
-- Fixed build. [Jamie]
-
-- Fixed the update check for the master build. [Jamie]
-
-- Removed accidently merged files. [Jamie]
-
-- Create CODE_OF_CONDUCT.md. [Jamie]
-
-- Windows installation guide link update. [PotatoQuality]
-
-- Fixed the issue comment issue #1914 also added another variable for issues {IssueUser} which is the user that reported the issue. [Jamie]
-
-- Fix #1914. [tidusjar]
-
-- Fixed #1914. [tidusjar]
-
-- Fixed build and added logging. [TidusJar]
-
-- New Crowdin translations (#1934) [Jamie]
-
-- Potential fix for #1942. [Jamie]
-
-- Quick change to the Emby Availability rule to make it in line slightly with the Plex one. #1950. [Jamie]
-
-- Turn off mobile notifications. [tidusjar]
-
-- FIXED PLEX!!!!! [tidusjar]
-
-- Batch the PlexContentSync and increase the plex episode batch size. [tidusjar]
-
-- Fixed the migration issue, it's too difficult to migrate the tables. [tidusjar]
-
-- Fixed #1942. [tidusjar]
-
-- Fixed checkboxes style. [Jamie]
-
-- These are not the droids you are looking for. [Jamie]
-
-- Fixed the wrong translation and see if we can VACUUM the db. [tidusjar]
-
-- More translations and added a check on the baseurl to ensure it starts with a '/' [Jamie]
-
-- More translations. [Jamie]
-
-- Fixed #1878 and added a Request all button when selecting episodes. [Jamie]
-
-- New translations en.json (Dutch) [Jamie]
-
-- New translations en.json (German) [Jamie]
-
-- New translations en.json (German) [Jamie]
-
-- New translations en.json (Danish) [Jamie]
-
-- New translations en.json (Norwegian) [Jamie]
-
-- New translations en.json (Norwegian) [Jamie]
-
-- New translations en.json (Norwegian) [Jamie]
-
-- New translations en.json (Italian) [Jamie]
-
-- New translations en.json (German) [Jamie]
-
-- New translations en.json (Dutch) [Jamie]
-
-- New translations en.json (Swedish) [Jamie]
-
-- New translations en.json (Spanish) [Jamie]
-
-- New translations en.json (French) [Jamie]
-
-- New translations en.json (Danish) [Jamie]
-
-- New translations en.json (Norwegian) [Jamie]
-
-- New translations en.json (Italian) [Jamie]
-
-- New translations en.json (German) [Jamie]
-
-- New translations en.json (Dutch) [Jamie]
-
-- New translations en.json (Swedish) [Jamie]
-
-- New translations en.json (Spanish) [Jamie]
-
-- New translations en.json (French) [Jamie]
-
-- New translations en.json (Danish) [Jamie]
-
-- New translations en.json (Danish) [Jamie]
-
-- New translations en.json (Norwegian) [Jamie]
-
-- New translations en.json (Italian) [Jamie]
-
-- New translations en.json (German) [Jamie]
-
-- New translations en.json (Dutch) [Jamie]
-
-- New translations en.json (Swedish) [Jamie]
-
-- New translations en.json (Spanish) [Jamie]
-
-- New translations en.json (French) [Jamie]
-
-- New translations en.json (Danish) [Jamie]
-
-- New translations en.json (Swedish) [Jamie]
-
-- New translations en.json (Norwegian) [Jamie]
-
-- Working on the movie matching. Stop dupes #1869. [tidusjar]
-
-- Delete plex episodes on every run due to a bug, need to spend quite a bit of time on this. [tidusjar]
-
-- Fixed the issue where we were always adding emby episodes. Also fixed #1933. [tidusjar]
-
-- New Crowdin translations (#1906) [Jamie]
-
-- Add plain password for emby login (#1925) [dorian ALKOUM]
-
-- Fixed #1924. [Jamie]
-
-- Fixed the issue where I knocked out the ordering of notifications, oops. [tidusjar]
-
-- #1914 for the issue resolved notification. [Jamie]
-
-- #1916. [Jamie]
-
-- Remove the placeholder. [Jamie]
-
-- Feature arm (#1909) [Jamie]
-
-- New Crowdin translations (#1897) [Jamie]
-
-- Fix logo cut off on login screen (#1896) [Louis Laureys]
-
-- E-Mails: Only add poster table row if img is set (#1899) [Louis Laureys]
-
-- New Crowdin translations (#1884) [Jamie]
-
-- Fix mobile layout (#1888) [Louis Laureys]
-
-- Smal changes to the api. [tidusjar]
-
-- OmBlur. [tidusjar]
-
-- Hide the password field if it's not needed #1815. [Jamie]
-
-- Should fix #1885. [Jamie]
-
-- Make user management table responsive (#1882) [Louis Laureys]
-
-- Fixed some stuff for omBlur. [Jamie]
-
-- Some work... No one take a look at this, it's a suprise. [Jamie]
-
-- New Crowdin translations (#1858) [Jamie]
-
-- When requesting Anime, we now mark it correctly as Anime in Sonarr. [tidusjar]
-
-- Fixed #1879 and added the spans. [tidusjar]
-
-- Some work on the auto updater #1460. [tidusjar]
-
-- Removed the potential locking. [tidusjar]
-
-- Fixed #1863. [tidusjar]
-
-- Moved the update check code from the External azure service into Ombi at /api/v1/update/BRANCH. [Jamie]
-
-- Fixed the UI erroring out, also dont show tv with no externals. [tidusjar]
-
-- More memory management and improvements. [tidusjar]
-
-- These are not needed, added accidentally (#1860) [Louis Laureys]
-
-- Some memory management improvements. [tidusjar]
-
-- Fixed #1857. [tidusjar]
-
-- Delete old v2 ombi from v3 branch. [tidusjar]
-
-- New Crowdin translations (#1840) [Jamie]
-
-- Better login backgrounds! (#1852) [Louis Laureys]
-
-- Fixed #1851. [tidusjar]
-
-- Fixed #1826. [tidusjar]
-
-- Redo change #1848. [tidusjar]
-
-- Fix the issue for welcome emails not sending. [tidusjar]
-
-- Fix typo (#1845) [Kyle Lucy]
-
-- Fix user mentions in Slack notifications (#1846) [Aljosa Asanovic]
-
-- If Radarr/Sonarr has noticed that the media is available, then mark it as available in the UI. [Jamie]
-
-- Fixed #1835. [Jamie]
-
-- Enable Multi MIME and add alt tags to images (#1838) [Louis Laureys]
-
-- New Crowdin translations (#1816) [Jamie]
-
-- Fixed #1832. [tidusjar]
-
-- Switch to use a single HTTPClient rather than a new one every request !dev. [tidusjar]
-
-- Fix non-admin rights (#1820) [Rob Gökemeijer]
-
-- Fix duplicated "Requests" element ID on new Issues link (#1817) [Shoghi Cervantes]
-
-- Add the Issue Reporting functionality (#1811) [Jamie]
-
-- Removed the forum. [tidusjar]
-
-- #1659 Made the option to ignore notifcations for auto approve. [Jamie]
-
-- New Crowdin translations (#1806) [Jamie]
-
-- Fixed a launch issue. [Jamie]
-
-- Allow users to login without a password. [Jamie]
-
-- Fixed the emby notifications not being sent. [Jamie]
-
-- #1802 and other small fixes. [tidusjar]
-
-- So... This sickrage thing should work now. [tidusjar]
-
-- Fixed emby connect login issue. [tidusjar]
-
-- Stop making unnecessary calls to the update service. [Jamie]
-
-- Fixed a bug where it blocked users with 0 limits. [Jamie]
-
-- Done #1788. [tidusjar]
-
-- More logging. [Jamie]
-
-- Fixed #1738. [Jamie]
-
-- Fixed build. [Jamie]
-
-- Fixed the issue where notifications were not sendind unless we restarted #1732. [tidusjar]
-
-- Fixed an issue with a trailing space in the subdir. [tidusjar]
-
-- Fixed #1774. [Jamie]
-
-- #1773. [Jamie]
-
-- Roll back rxjs (#1778) [bazhip]
-
-- Fixed build. [Jamie]
-
-- Fixed #1763. [Jamie]
-
-- Fix "content length error" on preview gif (#1768) [OoGuru]
-
-- New preview gif for Ombi V3 README (#1767) [OoGuru]
-
-- Remove debug code. [tidusjar]
-
-- Fix #1762. [tidusjar]
-
-- Fixed the preset themes not loading. [tidusjar]
-
-- Fixed #1760 and improvements on the auto updater. We may now support windows services... #1460. [Jamie]
-
-- Fixed #1754. [Jamie]
-
-- Hide the subject when it's not being used. [Jamie]
-
-- Error handling #1749. [Jamie]
-
-- New Crowdin translations (#1741) [Jamie]
-
-- #1732 #1722 #1711. [Jamie]
-
-- Fixed an issue with switching the preset themes. [Jamie]
-
-- Fixed #1743. [Jamie]
-
-- Fixed #1742. [tidusjar]
-
-- Fix #1742. [tidusjar]
-
-- Fixed landing page. [Jamie]
-
-- Fixed. [Jamie]
-
-- Translated the Requests page and fixed #1740. [Jamie]
-
-- Fix crash. [Jamie]
-
-- Sickrage done. Ish... So i've written all the code by looking at the API. the key there is i've looked at the api. I have not tested anything so expect this to fail. [Jamie]
-
-- SickRage settings UI. [Jamie]
-
-- Fixed #1721. [tidusjar]
-
-- Fixed the preset themes issue. [tidusjar]
-
-- New Crowdin translations (#1654) [Jamie]
-
-- Fix build. [Jamie]
-
-- #1460. [Jamie]
-
-- Fixed tests. [Jamie]
-
-- Return css as MIME text/css. [Jamie]
-
-- More added for the preset themes. [Jamie]
-
-- Moved around the custom styles. [Jamie]
-
-- More renames. [Jamie]
-
-- Renames. [Jamie]
-
-- Load the first 100 requests. [Jamie]
-
-- Reduce the memory consumption #1720. [Jamie]
-
-- Moved the schedules jobs into it's own database, see if it helps with the db locking #1720. [Jamie]
-
-- Fixed #1712. [tidusjar]
-
-- Potential fix for #1702. [tidusjar]
-
-- Fixed #1708. [tidusjar]
-
-- Fixed #1677. [tidusjar]
-
-- Fixed build. [tidusjar]
-
-- Potential fix for the DB locking issue #1720. [tidusjar]
-
-- #1698. [Jamie]
-
-- Fixed #1705. [tidusjar]
-
-- Fixed #1703. [tidusjar]
-
-- Finished adding preset themes. [Jamie]
-
-- Fixed #17000. [Jamie]
-
-- Remove the themes because waiting for a merge from lerams project. [Jamie]
-
-- Finsihed adding preset themes. [Jamie]
-
-- Fixed #1677. [Jamie]
-
-- Temp fix for #1683. [Jamie]
-
-- Fixed #1685. [Jamie]
-
-- Lossless Compression of images saves 83 KB (#1676) [Fish2]
-
-- Fixed the availability checker. [tidusjar]
-
-- Fixed build. [tidusjar]
-
-- Push out missing migration. [tidusjar]
-
-- Potential fix for #1674. [tidusjar]
-
-- Fixed an issue with the caching. [tidusjar]
-
-- Fixed telegram #1667. [tidusjar]
-
-- Fixed #1663. [tidusjar]
-
-- Should fix #1663. [tidusjar]
-
-- Stop logged in users going to the login page. [Jamie]
-
-- Fixed it not updating. Styles should be good now. [Jamie]
-
-- Re did some of the styling on the movie search page, let me know your thoughts. [Jamie]
-
-- Fixed #1657. [Jamie]
-
-- Fixed #1655. [Jamie]
-
-- Removed authentication resul. [Jamie]
-
-- New Crowdin translations (#1651) [Jamie]
-
-- New Crowdin translations (#1648) [Jamie]
-
-- New Crowdin translations (#1638) [Jamie]
-
-- Fixed #1644. [Jamie]
-
-- Moar logs #1643. [tidusjar]
-
-- Fixed #1640. [tidusjar]
-
-- Fixed the null ref exception #1460. [tidusjar]
-
-- Fixed landing page. [TidusJar]
-
-- Fixed #1641. [TidusJar]
-
-- Fixed #1641. [TidusJar]
-
-- New Crowdin translations (#1635) [Jamie]
-
-- Fixed #1631 and improved translation support Included startup args for the auto updater #1460 Mark TV requests as available #1632. [tidusjar]
-
-- Remove 32bit. [Jamie]
-
-- More 32bit support. [Jamie]
-
-- We now show "Available" for tv shows that is fully available #1602. [tidusjar]
-
-- Fixed the issue where we have got an episode but not the related series. #1620. [tidusjar]
-
-- Fixed the dropdown not working on iOS in the settings #1615. [tidusjar]
-
-- Fixed sonarr not monitoring the latest season #1534. [tidusjar]
-
-- Fixed the issue with firefox #1544. [tidusjar]
-
-- Fixed discord #1623. [tidusjar]
-
-- Add browserstack thanks (#1627) [Matt Jeanes]
-
-- Fix the exception #1613. [Jamie]
-
-- Found where we potentially are setting a new poster path, looks like the entity was being modified and being set as Tracked by entity framework, so the next time we called SaveChangesAsync() it would save the new posterpath on the entity. [Jamie]
-
-- Small modifications. [Jamie]
-
-- Fixed #1622. [Jamie]
-
-- Various improvements to webpack/gulp/vscode support (#1617) [Matt Jeanes]
-
-- Episodes in requests are now in order #1597 (#1614) [masterhuck]
-
-- Fixed a null reference issue in the Plex Content Cacher. [Jamie.Rees]
-
-- Fixed #1610. [tidusjar]
-
-- Really fixed the build this time. [tidusjar]
-
-- Fixed build. [tidusjar]
-
-- Made the updater work again #1460. [tidusjar]
-
-- Adding logging into the auto updater and also added more logging around the create inital user for #1604. [tidusjar]
-
-- Fixed the issue where we did not check if they are already in sonarr when choosing certain options #1540. [tidusjar]
-
-- We can now delete tv child requests and the parent will get remove #1603. [tidusjar]
-
-- Finished the api changes requested #1601. [tidusjar]
-
-- Fixed the Hangfire server timeout issue #1605. [tidusjar]
-
-- Fixed notifications not sending #1594. [tidusjar]
-
-- Fixed #1583 you can now delete users. Fixed the issue where the requested by was not showing. Finally fixed the broken poster paths. [tidusjar]
-
-- Fixed the issue where movie requests were no longer being requested. [tidusjar]
-
-- Started adding some more unit tests #1596. [Jamie.Rees]
-
-- #1588 When we make changes to any requests that we can trigger a notification, always send it to all notification agents, even if the user wont recieve it. [Jamie.Rees]
-
-- Add a message when email notifications are not setup when requesting a password reset. #1590. [Jamie.Rees]
-
-- Removed text that we no longer need. [Jamie.Rees]
-
-- Fixed #1574. [Jamie.Rees]
-
-- #1460 looks like the permissions issue has been resolved. Just need to make sure the Ombi process is terminated. [Jamie.Rees]
-
-- Put back the old download code. [Jamie.Rees]
-
-- Test. [Jamie]
-
-- Build sln. [Jamie.Rees]
-
-- Order by the username #1581. [Jamie.Rees]
-
-- Remove sonarr episodes from the cache table. [Jamie.Rees]
-
-- Couchpotato finished. [tidusjar]
-
-- Disable run import button if no import options are selected. [tidusjar]
-
-- Fixed #1574. [tidusjar]
-
-- Fixed build. [tidusjar]
-
-- Fixes the issue with non windows systems unable to unzip the tarball #1460. [tidusjar]
-
-- Finished the couchpotato settings. [tidusjar]
-
-- Fixed build. [tidusjar]
-
-- Fixed #1570 #1571. [tidusjar]
-
-- Fixed #1547. [tidusjar]
-
-- Should fix #1538. [tidusjar]
-
-- Fixed #1553. [tidusjar]
-
-- Fixed #1546. [tidusjar]
-
-- Fixed #1543. [tidusjar]
-
-- Fixes an issue with Movie caching not working on develop branch of Radarr (#1567) [Jeffrey Peters]
-
-- This adds two fields to the Email Notifications settings page. It allows for the disabling of TLS/SSL as well as the ability to disable certificate validation when sending notification emails. (#1552) [Jeffrey Peters]
-
-- Fixed typo (#1551) [Codehhh]
-
-- Use Sqlite storage for Hangfire. [tidusjar]
-
-- Fixed the overrides #1539 also display it on screen now too. [tidusjar]
-
-- Fixed #1542 also added VSCode support. [tidusjar]
-
-- Fixed some cosmetic issues #865. [Jamie.Rees]
-
-- Fixed #1531. [Jamie.Rees]
-
-- Small fixes #865. [Jamie.Rees]
-
-- Some errors fixed and some ui improvements #865. [tidusjar]
-
-- Auto-scale large images down to container size (#1529) [Avi]
-
-- Fix logo on login page. (#1528) [Avi]
-
-- Another potential issue? :/ [tidusjar]
-
-- Real fix. [tidusjar]
-
-- #1513 Added storage path. [Jamie.Rees]
-
-- Fixed the discord issue relating to images #1513. [Jamie.Rees]
-
-- Fixed the issue sending movies to Radarr #1513 Fixed typo #1524. [Jamie.Rees]
-
-- Fixed logo on reset password pages fixed the run importer button on the user management settings. [Jamie.Rees]
-
-- Fixed crash/error #865. [tidusjar]
-
-- #1513 fixed the landing page and also the reverse proxy images. [tidusjar]
-
-- #1513 correctly set the child requests as approved. [tidusjar]
-
-- Fixed an issue that potentially causes as issue when siging into plex #865. [tidusjar]
-
-- Remove dev branch. [PotatoQuality]
-
-- Prepare readme for upcoming beta. [PotatoQuality]
-
-- #1513 partially fixed a bug. [tidusjar]
-
-- Fixed the exception. [tidusjar]
-
-- Fixed the application url not saving #1513. [tidusjar]
-
-- Fixed liniting. [tidusjar]
-
-- REVERSE PROXY BITCH! #1513. [tidusjar]
-
-- Fixed a bug where we were marking the wrong episodes as available #1513 #865. [Jamie.Rees]
-
-- Fixed an issue where we messed up the pages and routing. [Jamie.Rees]
-
-- Emby user importer is now therer! #1456. [tidusjar]
-
-- #1513 Added the update available icon. [tidusjar]
-
-- Fixed the issue of it showing as not requested when we find it in Radarr. Made the tv shows match a bit more to the movie requests Added the ability for plex and emby users to login Improved the welcome email, will only show for users that have not logged in Fixed discord notifications the about screen now checks if there is an update ready #1513. [tidusjar]
-
-- Support email addresses as usernames #1513. [Jamie.Rees]
-
-- Link to issue treath. [PotatoQuality]
-
-- Give correct feedback when testing email notifications #1513. [Jamie.Rees]
-
-- Report issue removed and the deny dropdown removed #1513. [Jamie.Rees]
-
-- #1513 removed the discord text when testing pushbullet. [Jamie.Rees]
-
-- Made a lot of changes around the notifcations to support the custom app name also started on the welcome email ##1456. [Jamie.Rees]
-
-- Fixed the bug where we were displaying shows where we do not have enough information to request #1513. [Jamie.Rees]
-
-- #1513 added the network to tv shows. [Jamie.Rees]
-
-- Fixed the whitespace issue #1513. [Jamie.Rees]
-
-- Fixed the swagger endpoint #865 #1513 Fixed the custom image issue on the login page Fixed the bug when clicking on the tab on the requests page it would switch to the wrong one Swagger is now back @ /swagger. [tidusjar]
-
-- Optimized images, Update old compressed image with a new lossless one. (#1514) [camjac251]
-
-- #1513 #865 Fixed the issue where we do not send the requests to Radarr/Sonarr when approving. [tidusjar]
-
-- #1506 #865 Fixed an issue with the test buttons not working correctly. [tidusjar]
-
-- #865 Added donation link. [tidusjar]
-
-- Fixed a bunch of issues on #1513. [tidusjar]
-
-- #1460 Added the Updater, it all seems to be working correctly. #865. [Jamie.Rees]
-
-- Removed percentage. [Jamie.Rees]
-
-- Fixed linter. [Jamie.Rees]
-
-- Fixed some bugs in the UI #865. [Jamie.Rees]
-
-- Improved the search buttons #865. [Jamie.Rees]
-
-- More logging #865. [Jamie.Rees]
-
-- Made build faster. [Jamie.Rees]
-
-- More logging. [Jamie.Rees]
-
-- Set debug level to Debug for now. [Jamie.Rees]
-
-- Add linting and indexes for interfaces/services (#1510) [Matt Jeanes]
-
-- Fixed the issue with the tv search not working #1463. [Jamie.Rees]
-
-- Latest practices... also probably broke some styles - sorry (#1508) [Matt Jeanes]
-
-- Build with the branch version. [tidusjar]
-
-- Build fix. [tidusjar]
-
-- Fixed build. [tidusjar]
-
-- Omgwtf so many changes. #865. [tidusjar]
-
-- Tests. [Jamie.Rees]
-
-- #1456 Started on the User Importer Also added the remember me button. [Jamie.Rees]
-
-- Made some UI changes, reworked the Emby and Plex screens to make them more user friendly and no so fugly. #865 Also made the login page placeholder text slightly lighter. [Jamie.Rees]
-
-- Cake skip verification build stuff #865. [Jamie.Rees]
-
-- Some fixes around the UI and managing requests #865. [tidusjar]
-
-- #1486. [Jamie.Rees]
-
-- #1486. [Jamie.Rees]
-
-- Upgraded to .net core 2.0 #1486. [Jamie.Rees]
-
-- #865 Finished the landing page, we now check the server's status. [Jamie.Rees]
-
-- Fixed build. [TidusJar]
-
-- Removed the telegram api. [Jamie.Rees]
-
-- Small changes on the updater #1460 #865. [Jamie.Rees]
-
-- Remove unused functions. [Dhruv Bhavsar]
-
-- Make Episode picker similar to Requests Child view. #1457 #1463. [Dhruv Bhavsar]
-
-- Fix merge conflict for TvRequests component. [Dhruv Bhavsar]
-
-- Upstream Changes... [Dhruv Bhavsar]
-
-- Clean up Requests page code by moving children request to old component, remove additional REST calls when merging and update component names to make more sense. [Dhruv Bhavsar]
-
-- Lots of different UI enhancements and fixes #865. [tidusjar]
-
-- Gitchangelog. [tidusjar]
-
-- Fixed the issue where we were using the wrong availability options. [tidusjar]
-
-- Fixed a bunch of bugs in Ombi #865. [tidusjar]
-
-- Build versioning. [Jamie.Rees]
-
-- #1460 The assembly versioning seems to work correctly now. [Jamie.Rees]
-
-- More build versioning changes #865. [tidusjar]
-
-- Fixed cake script. [Jamie.Rees]
-
-- WIP on the build versioning for the Updater #1460 #865. [Jamie.Rees]
-
-- Versioning. [Jamie.Rees]
-
-- Package versions. [Jamie.Rees]
-
-- #1460 #865 working on the auto updater. [Jamie.Rees]
-
-- Fixed build. [Jamie.Rees]
-
-- Small changes around the roles #865. [tidusjar]
-
-- Improvements to the UI and also finished the availability checker #865 #1464. [Jamie.Rees]
-
-- Availability Checker #1464 #865. [Jamie.Rees]
-
-- Fixed ##1492 and finished the episode searcher for #1464. [Jamie.Rees]
-
-- #1464. [tidusjar]
-
-- Reload the settings #1464 #865. [Jamie.Rees]
-
-- #1464 added the Plex episode cacher #865. [Jamie.Rees]
-
-- Fixed some issues around the tv requests area Added mattermost and telegram notifications #1459 #865 #1457. [tidusjar]
-
-- Fix global.json. [Dhruv Bhavsar]
-
-- Working UI for Requests. Approval/Deny does not work as it doesn't in your code either. [Dhruv Bhavsar]
-
-- Enable diagnostic on build #865. [Jamie.Rees]
-
-- Fixed the user token issue #865. [Jamie.Rees]
-
-- Some small refresh token work #865. [Jamie.Rees]
-
-- Initial TV Requests UI rebuild. [Dhruv Bhavsar]
-
-- Made a start on supporting multiple emby servers, the UI needs rework #865. [Jamie.Rees]
-
-- #865 #1459 Added the Sender From field for email notifcations. We can now have "Friendly Names" for email notifications. [Jamie.Rees]
-
-- Redirect to the landing page when enabled #1458 #865. [Jamie.Rees]
-
-- Removed IdentityServer, it was overkill #865. [Jamie.Rees]
-
-- Fixed another bug with identity. #865 I'm thinking about removing it. Causing more hassle than it's worth. [tidusjar]
-
-- #1460 #865. [tidusjar]
-
-- Delete appveyor_old.yml. [Jamie]
-
-- Fixed path. [Jamie.Rees]
-
-- Silent build level. [Jamie.Rees]
-
-- #1459 Forgot to get the Pushbullet agent to look up the pusbullet templates rather than the Discord ones. Updated the Gitchange log. [Jamie.Rees]
-
-- Made the placeholder color on the login page a bit lighter #865. [Jamie.Rees]
-
-- Landing and login page changes #865 #1485. [tidusjar]
-
-- #1458 #865 More work on landing. [Jamie.Rees]
-
-- Working on the landing page #1458 #865. [tidusjar]
-
-- A lot of clean up and added a new Image api #865. [Jamie.Rees]
-
-- Cleaned up the Logging API slightly #1465 #865. [Jamie.Rees]
-
-- Fixed the Identity Server discovery bug #1456 #865. [tidusjar]
-
-- Fixed the issue with the Identity Server running on a different port, we can now use -url #865. [Jamie.Rees]
-
-- Try again. [TidusJar]
-
-- Publish ubuntu 16.04. [Jamie.Rees]
-
-- Chnaged the updater job from Minutely to Hourly. [Jamie.Rees]
-
-- Some work around the Auto Updater and other small changes #1460 #865. [Jamie.Rees]
-
-- Missed a file. [tidusjar]
-
-- Fixed the swagger issue. [tidusjar]
-
-- RDP issues. [tidusjar]
-
-- Appveyor build rdp investigation. [tidusjar]
-
-- Working on the requests page #1457 #865. [tidusjar]
-
-- Made the password reset email style the same as other email notifications #1456 #865. [Jamie.Rees]
-
-- Fixed some bugs around the authentication #1456 #865. [Jamie.Rees]
-
-- Fixed build. [Jamie.Rees]
-
-- Fixed build #1456. [Jamie.Rees]
-
-- #1456 #865 Started on allowing Plex Users to sign in through the new authentication server. [Jamie.Rees]
-
-- Removed covalent. [Jamie.Rees]
-
-- #1456 Reset Password stuff #865. [Jamie.Rees]
-
-- Finished implimenting Identity with IdentityServer4. #865 #1456. [Jamie.Rees]
-
-- Moved over to using Identity Server with Asp.Net Core Identity #1456 #865. [Jamie.Rees]
-
-- Started on the requests rework #865. [Jamie.Rees]
-
-- Extended the Emby API. [Jamie.Rees]
-
-- Started reworking the usermanagement page #1456 #865. [tidusjar]
-
-- Lots of refactoring #865. [Jamie.Rees]
-
-- Created an individual user api endpoint so we can make the user management pages better #865. [TidusJar]
-
-- Lot's of refactoring. [Jamie.Rees]
-
-- #1462 #865 Had to refactor how we use notificaitons. So we now have more notification fields about the request. [Jamie.Rees]
-
-- Looks like Sonarr is finished and works. A lot simplier this time around. #865. [tidusjar]
-
-- More work on the Sonarr Api Integration #865. [tidusjar]
-
-- Started on sonarr #865. [tidusjar]
-
-- Small changes #865. [tidusjar]
-
-- Damn son. So many changes... Fixed alot of stuff around tv episodes with the new DB model #865. [tidusjar]
-
-- Fixed the TV Requests issue #865. [Jamie.Rees]
-
-- Fixed a load of bugs need to figure out what is wrong with tv requests #865. [tidusjar]
-
-- #865 rework the backend data. Actually use real models rather than a JSON store. [Jamie.Rees]
-
-- Fixed the build issue #865. [tidusjar]
-
-- Allow us to use Emby as a media server. [tidusjar]
-
-- More Update #865. [Jamie.Rees]
-
-- Deployment changes. [Jamie.Rees]
-
-- More work on the Updater. [Jamie.Rees]
-
-- Lots of fixes. Becoming more stable now. #865. [tidusjar]
-
-- Small fixes around the searching. [Jamie.Rees]
-
-- Some rules #865. [Jamie.Rees]
-
-- Oops. [TidusJar]
-
-- Started on the Discord API settings page. [TidusJar]
-
-- Email Notifications are now fully customizable and work! #865. [Jamie.Rees]
-
-- Small changes and fixed some stylingon the plex page #865. [Jamie.Rees]
-
-- More on #865 TODO, Find out whats going on with the notifications and why exceptions are being thrown. [Jamie.Rees]
-
-- Oops. [Jamie.Rees]
-
-- Ok #865 fixed the published exe. [Jamie.Rees]
-
-- Fixed errors. [Jamie.Rees]
-
-- Fixed build script. [Jamie.Rees]
-
-- Fixed build. [Jamie.Rees]
-
-- Some more #865. [Jamie.Rees]
-
-- Create appveyor.yml. [Jamie]
-
-- The Approving child requests now work! [Jamie.Rees]
-
-- Fixed many bugs #865. [Jamie.Rees]
-
-- Loads of changes, improved the movie search stylings is back. [Jamie.Rees]
-
-- Moved to webpack and started on new style. [Jamie.Rees]
-
-- Fixed the TV search via Trakt not returning Images anymore. #865. [Jamie.Rees]
-
-- Rules changes and rework. [Jamie.Rees]
-
-- Request Grid test. [Jamie.Rees]
-
-- Small cleanup #865. [Jamie.Rees]
-
-- Fixed build. [Jamie.Rees]
-
-- Started the Radarr Settings #865. [Jamie.Rees]
-
-- Massive amount of rework on the plex settings page. It's pretty decent now! #865. [tidusjar]
-
-- Fixed build. [Jamie.Rees]
-
-- Fixed build. [tidusjar]
-
-- Rules #865. [tidusjar]
-
-- Stuff. [Jamie.Rees]
-
-- Forgot to uncomment. [Jamie.Rees]
-
-- Tetsd. [Jamie.Rees]
-
-- Build task changes. [Jamie.Rees]
-
-- Adsa. [Jamie.Rees]
-
-- Appveyor. [Jamie.Rees]
-
-- Stuff around tokens and also builds. [Jamie.Rees]
-
-- Finished the Plex Content Cacher. Need to do the episodes part but things are now showing as available! #865. [tidusjar]
-
-- Small user changes #865. [Jamie.Rees]
-
-- Stuff #865 need to work on the claims correctly. [Jamie.Rees]
-
-- Reworked the TV model AGAIN #865. [Jamie.Rees]
-
-- The move! [Jamie.Rees]
-
-- Fixed build #865. [Jamie.Rees]
-
-- Fixed the user management #865. [Jamie.Rees]
-
-- #865 Added support for multiple plex servers. [Jamie.Rees]
-
-- Bleh. [tidusjar]
-
-- Small changes. [Jamie.Rees]
-
-- Fixed the build. [Jamie.Rees]
-
-- Fixes. [Jamie.Rees]
-
-- Bundling changes. [Jamie.Rees]
-
-- Some series information stuff, changes the pace theme too. [Jamie.Rees]
-
-- Docker support and more, redesign the episodes. [tidusjar]
-
-- Stuff around episode/season searching/requesting. [Jamie.Rees]
-
-- Removed redundant folders. [tidusjar]
-
-- Lots of backend work. [tidusjar]
-
-- Fixed build. [Jamie.Rees]
-
-- TV Request stuff. [Jamie.Rees]
-
-- Work around the user management. [tidusjar]
-
-- More. [Jamie.Rees]
-
-- Lots and Lots of work. [Jamie.Rees]
-
-- Diagnostic changes. [tidusjar]
-
-- Fixed hangfire exception. [tidusjar]
-
-- Remove xunit. [tidusjar]
-
-- Lots more work :( [Jamie.Rees]
-
-- More changes. [tidusjar]
-
-- #865. [Jamie.Rees]
-
-- Small changes. [Jamie.Rees]
-
-- Fixed build. [Jamie.Rees]
-
-- More mapping. [Jamie.Rees]
-
-- Mapping mainly. [Jamie.Rees]
-
-- Fix systemjs config not being included. [Matt Jeanes]
-
-- Fixed bundling and various improvements. [Matt Jeanes]
-
-- Finished the emby wizard #865. [tidusjar]
-
-- Finished the wizard #865 (For Plex Anyway) [tidusjar]
-
-- Small changes. [tidusjar]
-
-- More work on Wizard and Plex API #865. [tidusjar]
-
-- Settings. [Jamie.Rees]
-
-- Settings for Ombi. [Jamie.Rees]
-
-- Fixed some issues around the identity. [Jamie.Rees]
-
-- #865 more for the authentication. [tidusjar]
-
-- Auth. [Jamie.Rees]
-
-- More on the search and requests page. It's almost there for movies. Need to add some filtering logic #865. [tidusjar]
-
-- #865. [Jamie.Rees]
-
-- Fixed build. [tidusjar]
-
-- Messing around with the settings. [tidusjar]
-
-- Fixed the yml. [Jamie.Rees]
-
-- Remove unneeded bundle config. [Matt Jeanes]
-
-- Redo dotnet publish targets. [Jamie.Rees]
-
-- Bundling changes. [Jamie.Rees]
-
-- Stuff. [Jamie.Rees]
-
-- Move app into wwwroot. [Jamie.Rees]
-
-- Put uglify back in! [Jamie.Rees]
-
-- Wrong line. [Jamie.Rees]
-
-- Matt is helping. [Jamie.Rees]
-
-- Revert. [tidusjar]
-
-- Small tweaks. [tidusjar]
-
-- Upgrade to .Net Standard 1.6. [tidusjar]
-
-
-## v2.2.1 (2017-04-09)
-
-### **New Features**
-
-- Update README.md. [Jamie]
-
-- Update README.md. [Jamie]
-
-- Added the forums. [tidusjar]
-
-- Updates. [tidusjar]
-
-- Update gulpfile.js. [Jamie]
-
-- Update gulpfile.js. [Jamie]
-
-- Update gulpfile.js. [Jamie]
-
-- Update gulpfile.js. [Jamie]
-
-- Update appveyor.yml. [Jamie]
-
-- Update gulpfile.js. [Jamie]
-
-- Update appveyor.yml. [Jamie]
-
-- Update appveyor.yml. [Jamie]
-
-- Update appveyor.yml. [Jamie]
-
-- Update appveyor.yml. [Jamie]
-
-- Added a retry policy around the emby newsletter. [Jamie.Rees]
-
-### **Fixes**
-
-- Revert "Merge branch 'DotNetCore' into dev" [tidusjar]
-
-- More borken build. [Jamie.Rees]
-
-- Started adding requesting. [Jamie.Rees]
-
-- Done the movie searching. [tidusjar]
-
-- #865. [tidusjar]
-
-- More. [tidusjar]
-
-- Moar. [tidusjar]
-
-- Small changes. [tidusjar]
-
-- Styling. [Jamie.Rees]
-
-- MOre changes. [Jamie.Rees]
-
-- Spacing. [Jamie.Rees]
-
-- Try again. [Jamie.Rees]
-
-- More. [Jamie.Rees]
-
-- Again. [Jamie.Rees]
-
-- Anbother. [Jamie.Rees]
-
-- Another. [Jamie.Rees]
-
-- Another. [Jamie.Rees]
-
-- Retry. [Jamie.Rees]
-
-- A. [Jamie.Rees]
-
-- Fixed. [Jamie.Rees]
-
-- Cahnge 2. [Jamie.Rees]
-
-- Appveyor change. [Jamie.Rees]
-
-- The start of a new world. [Jamie.Rees]
-
-- Fixed the migration number and order by the added date for the newsletter #1264. [tidusjar]
-
-- Forgot this change. [tidusjar]
-
-- Also fixed the issue for the Emby Newsletter where episodes were not getting added :( [tidusjar]
-
-- #1264 "They may take our lives, but they'll never take our freedom!" [tidusjar]
-
-- Finished reworking the Sonarr Integration. Seems to be working as expected, faster and most stable. It's Not A Toomah! [tidusjar]
-
-- Small bit of work. [Jamie.Rees]
-
-- Made a start on the new Sonarr integration. [tidusjar]
-
-- For test emails, if there is no new content then just grab some old data. [tidusjar]
-
-- Fixed an issue where the emby newsletter was always showing series. [tidusjar]
-
-
-## v2.2.0 (2017-03-30)
-
-### **New Features**
-
-- Update appveyor.yml. [Jamie]
-
-- Update README.md. [Jamie]
-
-- Update README.md. [Jamie]
-
-- Added a new setting for the Netflix option, we can now disable it appearing in the search. [tidusjar]
-
-- Update German Translation. [Marius Schiffer]
-
-- Added a release notes page, you can access via Admin>Updates>Recent Changes tab. Note to self, need to put better comments in for users to understand! [Jamie.Rees]
-
-- Added gravitar image. [Jamie.Rees]
-
-- Added a missing `await` for an HP AddArtist call. Added some more Trace logging. [smcpeck]
-
-- Added a missing `await` for an HP AddArtist call. Added some more Trace logging. [smcpeck]
-
-- Added some logging around API calls. [smcpeck]
-
-- Changed IEmbyAvailabilityChecker to use IEnumberables + checking actor search against Emby content + PR feedback. [smcpeck]
-
-- Changed actor searching to support non-actors too. [smcpeck]
-
-- Added a 10 second timer to refresh some new caching I put in. [smcpeck]
-
-- Added root folder and approving quality profiles in radarr #1065. [tidusjar]
-
-- Added some debugging code around the newsletter for Emby #1116. [tidusjar]
-
-- Added a TMDB Rate limiter for the newsletter. [tidusjar]
-
-- Added port check in wizard. also fixed favicon. [tidusjar]
-
-- Update Radarr placeholder. [d2dyno]
-
-- Added the user login for emby users #435. [tidusjar]
-
-- Added User Management support for Emby #435. [tidusjar]
-
-- Added emby to the sidebar #435. [tidusjar]
-
-- Added API endpoint for /actor/new/ to support searching for movies not already available/requested. [smcpeck]
-
-- Update ISSUE_TEMPLATE.md. [Jamie]
-
-- Update README.md. [SuperPotatoMen]
-
-- Update README.md. [SuperPotatoMen]
-
-- Update README.md. [SuperPotatoMen]
-
-### **Fixes**
-
-- Translation changes. [Jamie.Rees]
-
-- Syntax error. [tidusjar]
-
-- Fixed an issue where we were retrying the API call when the Plex users login creds were invalid. #1217. [tidusjar]
-
-- Slightly increased the wait time for the emby newsletter also fixed a potential error in the plex user checker. [Jamie.Rees]
-
-- Fixed an issue where we were not notifiying emby users. [Jamie.Rees]
-
-- Fixed the issue where the recent changes page was not showing the correct date. #1296. [Jamie.Rees]
-
-- Fixed #1252 (Show the correct user type on the management page for Plex Users) [Jamie.Rees]
-
-- Fixed the casting error #1292. [Jamie.Rees]
-
-- Fix test newletter not sending when empty. [Dhruv Bhavsar]
-
-- Quick fix for email false positive message. ISSUE: #1286. [Dhruv Bhavsar]
-
-- Fixes around the newsletter. We will now correctly show newly added shows and also newly added episodes. #1163. [tidusjar]
-
-- Fixed a sonarr deseralization error. [tidusjar]
-
-- Increased the delay for the Episode information api calls. #1163. [tidusjar]
-
-- Looks like we were overloading emby with out api calls. [tidusjar]
-
-- Fixed the root path escaping issue for Radarr too! [tidusjar]
-
-- Some small backend newsletter changes, we can now detect if there are any movies and/or tv shows, if there are none then we will no longer send out an empty newsletter. [Jamie.Rees]
-
-- Remoddeled the notificaiton settings to make it easier to add more. This is some techinical changes that no one except me will ever notice :( [Jamie.Rees]
-
-- Fixed #1234. [Jamie.Rees]
-
-- A fix to the about page and also started to rework the notification backend slightly to easily add more notifications. [Jamie.Rees]
-
-- Adding more logging into the Plex Cacher. [Jamie.Rees]
-
-- #1218 changed the text when we cannot display release notes for dev and EAP branches. [Jamie.Rees]
-
-- Fix for #1236. [SuperPotatoMen]
-
-- Tooltips. [Jamie.Rees]
-
-- #236. [Jamie.Rees]
-
-- #1102. [Jamie.Rees]
-
-- Done #1012. [Jamie.Rees]
-
-- Oops #1134. [Jamie.Rees]
-
-- Fixed #1121. [Jamie.Rees]
-
-- Fixed #1210. [Jamie.Rees]
-
-- Fixed typo #1134. [Jamie.Rees]
-
-- Fixed #1223. [Jamie.Rees]
-
-- Another newsletter fix attempt #1163 #1116. [tidusjar]
-
-- Fixup! Reset the branch on v2.1.0 tag to get to a shared state between dev and Master. [distaula]
-
-- Fixed a bug in the Plex Newsletter. [tidusjar]
-
-- Typo. [tidusjar]
-
-- Fixed around the newsletter and a small feature around the permissions/features (#1215) [Jamie]
-
-- Fixed #1189. [tidusjar]
-
-- Fixed #1195. [Jamie.Rees]
-
-- Fixed #1195. [Jamie.Rees]
-
-- Fixed #1192. [Jamie.Rees]
-
-- Fixed issue where we could get null rating keys on Plex. [tidusjar]
-
-- Needed to treat a 201 as success, too. + removed some commented out code. [Shaun McPeck]
-
-- Normalized spacing/tabs. [smcpeck]
-
-- Move local user login to be the first thing checked; renamed old Api variable to PlexApi now that Emby is in play. [smcpeck]
-
-- Remove all the polling/retry logic around HP requests. This was a problem do to not properly awaiting the initial AddArtist API call being sent to HP. Also fix SetAlbumStatus to use ReleaseId instead of MusicBrainsId (same fix previously applied to AddArtist). [smcpeck]
-
-- Restore checking of HTTP StatusCode on ApiRequests; remove checking of response.ErrorException. [smcpeck]
-
-- Reverted (for now) non-200 response handling; added some extra logging. [smcpeck]
-
-- Tweaked ApiRequest behavior on non-200 responses; think it was breaking login. :-" [smcpeck]
-
-- Only deserialize response payload in ApiRequest when StatusCode == 200. Will a default return value in other cases cause other issues? [smcpeck]
-
-- Headphones - added releaseID to generic RequestedModel and passing that through to HP request. Their API doesn't request via the MusicBrainzId. [smcpeck]
-
-- Fixed #1038. [tidusjar]
-
-- Fixed a slight issue where we could click the change folders button rather than the dropdown arrow #1189. [tidusjar]
-
-- Bunch of updater files. [tidusjar]
-
-- #1163 #117. [tidusjar]
-
-- Removed some unnecessary 'ConfigureAwait` uses. [smcpeck]
-
-- Remove meaningless html class from actor searching checkbox. [smcpeck]
-
-- Fixed an issue where we were not always showing movies from external programs. [tidusjar]
-
-- Remove extra delay when filtering out existing movies. [smcpeck]
-
-- Post merge build fixes. [smcpeck]
-
-- Fix. [tidusjar]
-
-- Fixed #1177. [tidusjar]
-
-- Fixed #1152. [tidusjar]
-
-- Fixed #1123. [tidusjar]
-
-- Fixed a bug when sending to radarr. [tidusjar]
-
-- Fixed #1133. [tidusjar]
-
-- Fixed issues img. [Jamie.Rees]
-
-- Stop Plex being enabled on the first time installing #1048. [Jamie.Rees]
-
-- The landing page now works for emby #435. [tidusjar]
-
-- Fixed #1104. [tidusjar]
-
-- Fixed #1090. [tidusjar]
-
-- Fixed #1103. [tidusjar]
-
-- Small changes. [tidusjar]
-
-- Break out Mass Email feature into its own tab, upgrade Font Awesome and clean up some comments. [dhruvb14]
-
-- Fix typo. [Travis Bybee]
-
-- Fixed #1066. [Jamie.Rees]
-
-- Fixed broken builds. [Jamie.Rees]
-
-- Fixed #1083. [Jamie.Rees]
-
-- #1049. [tidusjar]
-
-- Fixed #1071. [tidusjar]
-
-- Fixed #1048 #1081. [tidusjar]
-
-- #1074. [Jamie.Rees]
-
-- #1069. [Jamie.Rees]
-
-- Fix for #1068. [tidusjar]
-
-- Remove duplciate tv show status. [tidusjar]
-
-- Some request ui changes. [tidusjar]
-
-- Removed references to Plex. [tidusjar]
-
-- Removed plex from the scheduled jobs ui. [tidusjar]
-
-- First run of the newsletter set it to a test. [tidusjar]
-
-- Reworked the newsletter for Emby! Need to rework it for Plex and use the new way to do it. [tidusjar]
-
-- Fixed build. [tidusjar]
-
-- Fixed the mass email, it was only being set to users with the newsletter feature #358. [tidusjar]
-
-- Removed Plex Request from the notifications. [tidusjar]
-
-- Finish implementing mass email feature. [dhruvb14]
-
-- @tidusjar pointed out runtime error!! [dhruvb14]
-
-- Does not compile, need to get data from UI into nancy somehow and figure out why IMassEmail is not initializing. [dhruvb14]
-
-- Begin Implementing Mass Email Section. [dhruvb14]
-
-- Hide the auto update btn #236 Fixed where we were not populating the emby episodes #435. [tidusjar]
-
-- Fix Radarr labels. [d2dyno]
-
-- Fixed pace loader. [Jamie.Rees]
-
-- Check if Emby/Plex is enabled before starting the job. [Jamie.Rees]
-
-- Fixed #1036. [Jamie.Rees]
-
-- Fixed a typo and changed wording. [Torkil Liseth]
-
-- Fixed #1035. [Jamie.Rees]
-
-- Fix for #1026. [Jamie.Rees]
-
-- Fixed #1042. [tidusjar]
-
-- #435. [Jamie.Rees]
-
-- #435 Started the wizard. [Jamie.Rees]
-
-- Removed. [tidusjar]
-
-- Final Fixes. [dhruvb14]
-
-- Partial fix for broken HR tag's in Email... [dhruvb14]
-
-- DAMN! #435 that's a lot of code! [tidusjar]
-
-- Started adding Emby, Lots of backend work done. Need a few more services done and login and user management. #435. [tidusjar]
-
-- UI changes to add checkbox and support searching for only new matches via new API. [smcpeck]
-
-- REFACTOR: IAvailabilityChecker - changed arrays to IEnumerables. [smcpeck]
-
-- UI changes to consume actor searching API. [smcpeck]
-
-- API changes to allow for searching movies by actor. [smcpeck]
-
-- Enforcing async/await in synchronous methods that were marked async. [smcpeck]
-
-
-## v2.1.0 (2017-01-31)
-
-### **New Features**
-
-- Update README.md. [Jamie]
-
-- Update .gitattributes. [Jamie]
-
-- Update README.md. [Jamie]
-
-- Update README.md. [Jamie]
-
-- Update README.md. [Jamie]
-
-- Update README.md. [Jamie]
-
-- Update appveyor.yml. [Jamie]
-
-- Added the new labels to the search. [tidusjar]
-
-- Added a switch to use the new search or not, just in case people do not like it. added a migration to turn on the new search. [Jamie.Rees]
-
-- Added a bunch of categories for tv search similar to what we have for movies. [Jamie.Rees]
-
-### **Fixes**
-
-- Fixed typos. [Haries Ramdhani]
-
-- Fix typo in readme. [tdorsey]
-
-- Fixed #985. [Jamie.Rees]
-
-- FIxed #978. [tidusjar]
-
-- Fixed the approval issue for #939. [tidusjar]
-
-- Some general improvements. [tidusjar]
-
-- Turned off migration for now. [tidusjar]
-
-- Fixed #998. [tidusjar]
-
-- Additional movie information. [Jamie.Rees]
-
-- Debug info around the notifications. [Jamie.Rees]
-
-- Small changes. [tidusjar]
-
-- Fixed #995. [tidusjar]
-
-- Fix for #978. [tidusjar]
-
-- Fixed #991. [tidusjar]
-
-- Fixed the login issue and pass Radarr the year #990. [Jamie.Rees]
-
-- More small tweaks around the username/alias. [Jamie.Rees]
-
-- Possible issue with the empty username. [Jamie.Rees]
-
-- Potential Fix for #985. [Jamie.Rees]
-
-- Small changed to the sidebar. [Jamie.Rees]
-
-- Small changes. [Jamie.Rees]
-
-- Done #627. [Jamie.Rees]
-
-- Finished #535 #445 #170. [tidusjar]
-
-- Fixed tests. [Jamie.Rees]
-
-- Started to add the specify Sonarr root folders. [Jamie.Rees]
-
-- Fixed #968. [Jamie.Rees]
-
-- Fixed #970. [Jamie.Rees]
-
-- Done #924. [Jamie.Rees]
-
-- Fixed. [Jamie.Rees]
-
-- Fixed #955. [Jamie.Rees]
-
-- #956. [Jamie.Rees]
-
-- Fixed #947. [Jamie.Rees]
-
-- #951. [tidusjar]
-
-- Finished #923 !!! [tidusjar]
-
-- More for #923. [Jamie.Rees]
-
-- Radarr integartion in progress #923. [tidusjar]
-
-- Fixed #940 don't show any shows without a tvdb id. [tidusjar]
-
-- Finished #739. [Jamie.Rees]
-
-- Initial impliementation of #739. [Jamie.Rees]
-
-- Improved the search UI and made it more consistant. Finished the Netflix API Part #884. [Jamie.Rees]
-
-
-## v2.0.1 (2017-01-16)
-
-### **New Features**
-
-- Update appveyor.yml. [Jamie]
-
-- Added a netflix api. [Jamie.Rees]
-
-### **Fixes**
-
-- Fixed #934. [Jamie.Rees]
-
-
-## v2.0 (2017-01-14)
-
-### **New Features**
-
-- Update ISSUE_TEMPLATE.md. [SuperPotatoMen]
-
-- Update ISSUE_TEMPLATE.md. [SuperPotatoMen]
-
-- Update ISSUE_TEMPLATE.md. [SuperPotatoMen]
-
-- Update README.md. [SuperPotatoMen]
-
-- Update README.md. [SuperPotatoMen]
-
-- Update ISSUE_TEMPLATE.md. [SuperPotatoMen]
-
-- Update ISSUE_TEMPLATE.md. [SuperPotatoMen]
-
-- Update README.md. [SuperPotatoMen]
-
-- Update README.md. [SuperPotatoMen]
-
-- Added the settings for #925 but need to apply the settings to the UI. [Jamie.Rees]
-
-- Changed the settings name from Plex Requests to Ombi. [Jamie.Rees]
-
-- Added support for Managed Users #811. [Jamie.Rees]
-
-- Change solution name in travis. [mhann]
-
-- Update ISSUE_TEMPLATE.md. [SuperPotatoMen]
-
-### **Fixes**
-
-- Finished #925. [Jamie.Rees]
-
-- Some TODO's. [Jamie.Rees]
-
-- Fixed #915. [Jamie.Rees]
-
-- Fixed the issue where notifications are not being sent to users with Aliases #912. [Jamie.Rees]
-
-- Fixed #891. [Jamie.Rees]
-
-- Fix indentation issue. [Marcus Hann]
-
-- Implement simple button. [Marcus Hann]
-
-- Plex Username Case Sensitivity Fix. [thegame3202]
-
-- Fixed #882. [Jamie.Rees]
-
-- Api changed again, so more fixes for #878. [Jamie.Rees]
-
-- Possible fix for #893. [Jamie.Rees]
-
-- Fixed #898. [Jamie.Rees]
-
-- Fixed #878. [TidusJar]
-
-- * userManagementController.js: fixed #881. [TidusJar]
-
-- More work on watcher, should all be good now. #878. [Jamie.Rees]
-
-- Delete PlexRequests.sln.DotSettings. [Jamie]
-
-- Fixed #862. [Jamie.Rees]
-
-- #399 and #398 finished. [Jamie.Rees]
-
-- More work on #399. [Jamie.Rees]
-
-- Finished #884. [Jamie.Rees]
-
-- More for #844. [Jamie.Rees]
-
-- Another #844. [Jamie.Rees]
-
-- Fixed a dependancy issue with #844. [Jamie.Rees]
-
-- Finished the main part of #844 just need testing. [Jamie.Rees]
-
-- Fixed #832. [Jamie.Rees]
-
-- Fixed build. [Jamie.Rees]
-
-- Fix tiny readme typo. [mhann]
-
-- Fixed #850 also started #844 (Wrote the API interaction) [Jamie.Rees]
-
-- #801 #292 done. [Jamie.Rees]
-
-- Should fix #841 #835 #810. [Jamie.Rees]
-
-- Fix small typo in ticket overview page. [mhann]
-
-- More work on the combined login. [Jamie.Rees]
-
-- Fixed db issue. [Jamie.Rees]
-
-- Name changes. [Jamie.Rees]
-
-- All Sln changes. [tidusjar]
-
-- Moved API Sln dir. [tidusjar]
-
-- Fixed build. [tidusjar]
-
-- Moved namespaces. [tidusjar]
-
-- Renamed zip. [tidusjar]
-
-- Product name change. [tidusjar]
-
-
-## v1.10.1 (2016-12-17)
-
-### **Fixes**
-
-- #788 fixed! [tidusjar]
-
-- Fixed #788 and #791. [tidusjar]
-
-- #399 #398. [Jamie.Rees]
-
-- Fixed build. [Jamie.Rees]
-
-- Small refactorings. [Jamie.Rees]
-
-- #782. [Jamie.Rees]
-
-- #785. [Jamie.Rees]
-
-
-## v1.10.0 (2016-12-15)
-
-### **New Features**
-
-- Update README.md. [Jamie]
-
-- Added optional launch args for the auto updater. [Jamie.Rees]
-
-- Update README.md. [Jamie]
-
-- Update README.md. [Jamie]
-
-- Update _Navbar.cshtml. [Jamie]
-
-- Update README.md. [Jamie]
-
-- Update _Navbar.cshtml. [Jamie]
-
-- Update README.md. [Jamie]
-
-- Added a new permission to bypass the request limit. [Jamie.Rees]
-
-- Update Version1100.cs. [SuperPotatoMen]
-
-- Added logging around the Newsletter #717. [Jamie.Rees]
-
-- Added missing migration. [tidusjar]
-
-- Added loading spinner. [Jamie.Rees]
-
-- Update UI.resx. [SuperPotatoMen]
-
-- Update Version1100.cs. [Jamie]
-
-- Update ISSUE_TEMPLATE.md. [SuperPotatoMen]
-
-### **Fixes**
-
-- Fixed an issue where the HTML in the newsletter was incorrect. [Jamie.Rees]
-
-- Fixed #201. [Jamie.Rees]
-
-- Fixed #720 and added better error handling around the migrations. [Jamie.Rees]
-
-- Fixed #769. [Jamie.Rees]
-
-- Write out the actual file version. [Jamie.Rees]
-
-- Error checking around GA. [TidusJar]
-
-- Fixed #761. [tidusjar]
-
-- Fixed #749 Fixed an issue where we were adding the read only permission when creating the admin. [tidusjar]
-
-- Fixed #757. [tidusjar]
-
-- Fixes around the server admin #754. [Jamie.Rees]
-
-- Removed the trace option from the UI, it is only accessible when appending the url with "?developer" #753. [Jamie.Rees]
-
-- Fixed an issue where the admin could not be updated. [Jamie.Rees]
-
-- Fixed #745. [Jamie.Rees]
-
-- Fixed #748. [Jamie.Rees]
-
-- Workaround for #748. [SuperPotatoMen]
-
-- Another attempt to fix #717. [tidusjar]
-
-- Fixed #744. [Jamie.Rees]
-
-- Tidied up the warnings. [Jamie.Rees]
-
-- Small bit of analytics. [Jamie.Rees]
-
-- Removed the whitelist. [Jamie.Rees]
-
-- Should fix #696 Fixed an issue with the scheduled jobs where it could use a different trigger if the order between the schedules and the triggers were in different positions in the array... Stupid me, ordering both arrays by the name now. [tidusjar]
-
-- Some better null object handling #731. [Jamie.Rees]
-
-- Small tweaks. [Jamie.Rees]
-
-- Fixed #728. [Jamie.Rees]
-
-- Fixed #727. [Jamie.Rees]
-
-- Fixed admin redirect issue. [tidusjar]
-
-- Fixed #718. [tidusjar]
-
-- Lots of small fixes and tweaks. [Jamie.Rees]
-
-- Tidied up some of the angular code, split the UI into it's own directives for easier maintainability. [Jamie.Rees]
-
-- Small tweaks to the Request Page. [Jamie.Rees]
-
-- Reverted the PR that may have caused #619. [Jamie.Rees]
-
-- Some small tweaks around #218 Just added the link to the settings and some angular improvements. [Jamie.Rees]
-
-- Test. [Jamie.Rees]
-
-- Attempt at fixing #686. [Jamie.Rees]
-
-- Finished #707. [Jamie.Rees]
-
-- Fixed #704. [Jamie.Rees]
-
-- Fixed #705. [Jamie.Rees]
-
-- Fixed #706. [Jamie.Rees]
-
-- #547. [Jamie.Rees]
-
-- Default tabs #304. [Jamie.Rees]
-
-- Fixed #703. [Jamie.Rees]
-
-- #233. [Jamie.Rees]
-
-- Done #678. [Jamie.Rees]
-
-- Fixed #670. [Jamie.Rees]
-
-- #456 Update all the requests when we identify that the username changes. [Jamie.Rees]
-
-- More user management. [Jamie.Rees]
-
-- #218. [Jamie.Rees]
-
-- Fixed build. [tidusjar]
-
-- Implimented the features #218. [tidusjar]
-
-- Use the user alias everywhere if it is set #218. [tidusjar]
-
-- Implimented auto approve permissions #218. [tidusjar]
-
-- A. [tidusjar]
-
-- Fixed an IOC issue. [tidusjar]
-
-- Fixed the issue with user management, needed to implement our own authentication provider. [Jamie.Rees]
-
-- Small changes including #666. [Jamie.Rees]
-
-- Done #679. [tidusjar]
-
-- Reduce the retry time. [Jamie.Rees]
-
-- Remove all references to the claims. [Jamie.Rees]
-
-- Lots of fixed and stuff. [Jamie.Rees]
-
-- Fixed potential crash #683. [Jamie.Rees]
-
-- Fixed #681. [Jamie.Rees]
-
-- More user management. [Jamie.Rees]
-
-- Finishing off the user management page #218 #359 #195. [Jamie.Rees]
-
-- Finished #646 and fixed #664. [Jamie.Rees]
-
-- Started on #646. Fixed #657. [Jamie.Rees]
-
-- Fixed #665. [Jamie.Rees]
-
-- Migrate users. [TidusJar]
-
-- Fixed build. [Jamie.Rees]
-
-- Convert the for to foreach for better readability. Still need to rework this area. [Jamie.Rees]
-
-- Final Tweaks #483. [Jamie.Rees]
-
-- Finished #483. [Jamie.Rees]
-
-- Finished the queue #483. [Jamie.Rees]
-
-- Started on the queue for requests #483 TV Requests with missing information has been completed. [Jamie.Rees]
-
-- Fixed build. [Jamie.Rees]
-
-- Finished the notification for the fault queue. [Jamie.Rees]
-
-- Finished #556. [Jamie.Rees]
-
-- Finished #633 (First part of the queuing) [Jamie.Rees]
-
-- Finished #659 #236 has been modified slightly. Needs testing on Different systems. [Jamie.Rees]
-
-- Almost finished #659. [Jamie.Rees]
-
-- Started on #483. [Jamie.Rees]
-
-- #544. [Jamie.Rees]
-
-- Fixed #656 and more work on #218. [Jamie.Rees]
-
-- Fixed some issues with the user management work. [TidusJar]
-
-- Fixed build issue. [TidusJar]
-
-- User perms. [Jamie.Rees]
-
-
-## v1.9.7 (2016-11-02)
-
-### **New Features**
-
-- Update appveyor.yml. [Jamie]
-
-- Update appveyor.yml. [Jamie]
-
-### **Fixes**
-
-- Potential fix for #629. [TidusJar]
-
-- Fixed an issue to stop blatting over the base url. [tidusjar]
-
-- Fixed #643. [TidusJar]
-
-- Fixed #622. [TidusJar]
-
-
-## v1.9.6 (2016-10-28)
-
-### **New Features**
-
-- Update appveyor.yml. [Jamie]
-
-### **Fixes**
-
-- Fixed #586. [Jamie.Rees]
-
-- Fixed #622. [Jamie.Rees]
-
-- Fixed #621. [Jamie.Rees]
-
-
-## v1.9.5 (2016-10-27)
-
-### **New Features**
-
-- Added our own custom migrations, a lot easier to migrate DB versions now. [tidusjar]
-
-### **Fixes**
-
-- Bump version. [Jamie.Rees]
-
-- Small bit of work on the user claims. [Jamie.Rees]
-
-- Fix #612 again. [Jamie.Rees]
-
-- User management styling. [Jamie.Rees]
-
-- Fixed #608 and some other small stuff. [tidusjar]
-
-- More user mapping. [tidusjar]
-
-- Fixed #615. [tidusjar]
-
-- Fixed #610. [tidusjar]
-
-- User management stuff. [Jamie.Rees]
-
-- User management work. [Jamie.Rees]
-
-- Revert the TVSender to use the old code. [Jamie.Rees]
-
-- Fixed the view issue. [tidusjar]
-
-- S582: admin improvements part 2. [Jim MacKenzie]
-
-- Fix #612. [Jamie.Rees]
-
-- User management, migration and newsletter. [Jamie.Rees]
-
-- #602 recently added improvements. [tidusjar]
-
-- Revert "Sorting out the current state of migrations" [Jamie.Rees]
-
-- Sorting out the current state of migrations. [Jamie.Rees]
-
-- Marked as obsolete. [Jim MacKenzie]
-
-- Migration setup. [Jim MacKenzie]
-
-- Removed extra line breaks. [Jim MacKenzie]
-
-- Moved Newsletter Settings to its own page. [Jim MacKenzie]
-
-- Reverted TMDB package. [Jamie.Rees]
-
-- Remove DB Option. [Jamie.Rees]
-
-- Upgrade the movie DB package and fixed #370 To fix this I had to make another API call... It slows down the search... [tidusjar]
-
-- Lots of small fixes including #475. [tidusjar]
-
-- A better fix for #587. [tidusjar]
-
-- Fixed #553. [tidusjar]
-
-- #601. [Jamie.Rees]
-
-- More rework to use the Plex DB. [Jamie.Rees]
-
-- More work around using the PlexDatabase. [Jamie.Rees]
-
-- Plex DB. [Jamie.Rees]
-
-- Allow to process even know we had an error #578. [Jamie.Rees]
-
-- Fix boostrapper-datetimepicker imports (#586) [David Torosyan]
-
-- Potential work around for #587. [tidusjar]
-
-- Fixed #589. [tidusjar]
-
-
-## v1.9.4 (2016-10-10)
-
-### **New Features**
-
-- Update appveyor.yml. [Jamie]
-
-- Added Paypalme options, no UI yet (#568) [Jim MacKenize]
-
-- Update appveyor.yml. [Jamie]
-
-- Update README.md. [Jamie]
-
-### **Fixes**
-
-- Reverted. [tidusjar]
-
-- Make sure it's enabled before sending the recently added. [tidusjar]
-
-- Moved the HR inside the table for TV Shows. [Jamie.Rees]
-
-- FIXED!!!!! YES BITCH! #550. [tidusjar]
-
-- Moved the horizontal rules inside the table row. [tidusjar]
-
-
-## v1.9.3 (2016-10-09)
-
-### **New Features**
-
-- Added properties to disable tv requests for specific episodes or seasons and wired up to admin settings. [Matt McHughes]
-
-- Added different sonarr search commands. [tidusjar]
-
-### **Fixes**
-
-- Fixed #515. [tidusjar]
-
-- Fixed #561 and a small bit of work on #569. [tidusjar]
-
-- #569. [tidusjar]
-
-- Fixed case typo. [Matt McHughes]
-
-- Finished wiring tv request settings to tv search. [Matt McHughes]
-
-- WIP hide tv request options based on admin settings. [Matt McHughes]
-
-- Set meta charset to be utf-8. [Madeleine Schönemann]
-
-- F#552: updated labels text. [Jim MacKenize]
-
-- F#552: Re-design lables. [Jim MacKenzie]
-
-- Last correction.. Now the translation is ready to be used. [Michael Reber]
-
-- Forgot to correct two incorrect translations. [Michael Reber]
-
-- Correction of the German translation. [Michael Reber]
-
-- Notification improvements. [tidusjar]
-
-- #515. [tidusjar]
-
-
-## v1.9.2 (2016-09-18)
-
-### **New Features**
-
-- Update appveyor.yml. [Jamie]
-
-- Update CouchPotatoCacher.cs. [Jamie]
-
-- Added some error handing around the GetMovie area #517. [tidusjar]
-
-- Added a version endpoint in "/api/version" #529. [tidusjar]
+## (unreleased)
### **Fixes**
-- Trying to fix the auto CP. [tidusjar]
-
-- Increase the notice message text box #527. [tidusjar]
-
-- #536 this should fix notification settings when it is being unsubscribed when testing. [tidusjar]
-
-- Improved how the TV search looks and feels. [tidusjar]
-
-- Fix for reverse proxy when using the wizard. [Devin Buhl]
-
-- Fixed #532. [tidusjar]
-
-- This should fix some issues with the episode requests #514. [tidusjar]
-
-- Small changes around existing series. [tidusjar]
-
-- Fixed #514 and the unit tests. [tidusjar]
-
-- If there is a bad password when changing it, we now inform the user. [tidusjar]
+- Fixed the issue with notifications not sending. [Jamie]
-- When logging out as admin remove the username from the session. [tidusjar]
+- Removes Legacy command result variables. [Qstick]
-- Sorted out some of the UI for #18. [tidusjar]
-- Finished #18. [tidusjar]
-
-
-## v1.9.1 (2016-08-30)
+## v3.0.3786 (2018-09-22)
### **New Features**
-- Update appveyor.yml. [Jamie]
-
-- Added french to the navbar. [tidusjar]
-
-- Changed the way we use the setTimeout function. Should fix #403 #491 #492. [tidusjar]
-
-- Change the redirection to use a relative uri redirect #473. [tidusjar]
+- Update CHANGELOG.md. [Jamie]
### **Fixes**
-- Fixed tests. [tidusjar]
-
-- Fixed #491 and added more logging around the email messages under the Info level. [tidusjar]
-
-- Finished #415. [tidusjar]
-
-- Fixed an issue where there were some JS errors on the landing page settings and stopped us being redirected to the login sometimes as an admin. [tidusjar]
-
-- Fixed #480. [tidusjar]
-
-- User management. [tidusjar]
-
-- Fixed #505. [tidusjar]
-
-- Append the application version to the end of our JS/CSS files. [tidusjar]
-
-- Fixed issue #487. [tidusjar]
-
-- Remove the datetime picker css from the main assets block and only load it on the pages it needs. #493. [tidusjar]
-
-- Redirect to search if we are already logged in #488. [tidusjar]
-
-- Fixed build. [tidusjar]
-
-- Fixed an issue where you could set the base url as requests #479. [tidusjar]
-
-- Working on the beta releases page and also the user management. [tidusjar]
-
-- User work. [tidusjar]
-
-
-## v1.9.0 (2016-08-18)
-
-### **New Features**
-
-- Update the availability checker to search for TV Episodes. [tidusjar]
-
-- Changed the no TVMazeid message. [tidusjar]
-
-- Added an option to disable/enable the Plex episode cacher. [tidusjar]
-
-- Updated the episode cacher to have a minimum of 11 hours before it runs again. [tidusjar]
-
-- Added some useful analytical infomation around the wizard. [tidusjar]
-
-- Updated the German translations #402. [tidusjar]
-
-- Added some code to shrink the DB. reworked the search to speed it up. [tidusjar]
-
-- Change to use the GrandparentTitle rather than the thumbnail.... facepalm. [tidusjar]
-
-- Change the interval to hours! [tidusjar]
-
-- Added the transaction back into the DB. Do not run the episode cacher if it's been run in the last hour. [tidusjar]
-
-- Added logging. [tidusjar]
-
-- Changed the query slightly. [tidusjar]
-
-- Updated Newtonsoft.Json, Autofixture, Nlog and Dapper packages. [tidusjar]
-
-- Added the Sonarr check for episodes #254. [tidusjar]
-
-- Added unit tests. [tidusjar]
-
-- Added #436. [tidusjar]
-
-- Update build no. [tidusjar]
-
-- Updated translations for #402. [tidusjar]
-
-- Added a beta module. [tidusjar]
-
-- Added a custom debug root path provider, this means we do not have to recompile the views every time we make a view change. [tidusjar]
-
-- Update .gitignore. [Jamie]
-
-- Update appveyor.yml. [Jamie]
-
-- Added tests for the string hash. [tidusjar]
-
-- Added code to request the api key for CouchPotato. [tidusjar]
-
-- Added the file version to the layout. [tidusjar]
-
-- Update appveyor.yml. [Jamie]
-
-- Update appveyor.yml. [Jamie]
-
-- Added automation tests. [tidusjar]
-
-- Update appveyor.yml. [Jamie]
-
-- Updated packages. [tidusjar]
-
-- Updated Polly. [tidusjar]
-
-- Updated Fr, IT and NL translations #402. [tidusjar]
+- New translations en.json (Swedish) [Jamie]
-- Changed the way the donate button works for #414. [tidusjar]
+- New translations en.json (Spanish) [Jamie]
-- Added MediatR. [tidusjar]
+- New translations en.json (Portuguese, Brazilian) [Jamie]
-### **Fixes**
+- New translations en.json (Polish) [Jamie]
-- User management stuff. [tidusjar]
+- New translations en.json (Norwegian) [Jamie]
-- Fixed! [tidusjar]
+- New translations en.json (Italian) [Jamie]
-- Small amount of work on the user management. [tidusjar]
+- New translations en.json (German) [Jamie]
-- Fixed #466. [tidusjar]
+- New translations en.json (French) [Jamie]
-- Fixes. [tidusjar]
+- New translations en.json (Dutch) [Jamie]
-- Made the episode request better. [tidusjar]
+- New translations en.json (Danish) [Jamie]
-- Removed commented out tests. [tidusjar]
+- New translations en.json (Swedish) [Jamie]
-- Fixed the bad test after the merge. [tidusjar]
+- New translations en.json (Spanish) [Jamie]
-- Reworked #466. [tidusjar]
+- New translations en.json (Portuguese, Brazilian) [Jamie]
-- More unit tests around the login and also the core Plex Checker. [tidusjar]
+- New translations en.json (Polish) [Jamie]
-- Potentially fixed the issue where we were requesting everything that was also available now. [tidusjar]
+- New translations en.json (Norwegian) [Jamie]
-- This should fix #466. [tidusjar]
+- New translations en.json (Italian) [Jamie]
-- Attempt at fixing a potential bug found from #466. [tidusjar]
+- New translations en.json (German) [Jamie]
-- #464 fixed. [tidusjar]
+- New translations en.json (French) [Jamie]
-- Fixed the build. [tidusjar]
+- New translations en.json (Dutch) [Jamie]
-- Small improvements to the wizard. [tidusjar]
+- New translations en.json (Danish) [Jamie]
-- Always set the wizard to be true when editing the Plex Requests settings (Since the flag is not in the UI, a bool defaults to false). [tidusjar]
+- New translations en.json (Swedish) [Jamie]
-- Tiny bit of more info. [tidusjar]
+- New translations en.json (Spanish) [Jamie]
-- Finished #459. [tidusjar]
+- New translations en.json (Portuguese, Brazilian) [Jamie]
-- #459 is almost done. [tidusjar]
+- New translations en.json (Polish) [Jamie]
-- Modified the episode modal so that we are now resetting the button after a request. [tidusjar]
+- New translations en.json (Norwegian) [Jamie]
-- Commented out the transaction for now to debug it. [tidusjar]
+- New translations en.json (Italian) [Jamie]
-- Since we are multithreading, we should use a threadsafe type to store the episodes to prevent any threading or race conditions. [tidusjar]
+- New translations en.json (German) [Jamie]
-- Wrapped the bulk insert inside a transaction. [tidusjar]
+- New translations en.json (French) [Jamie]
-- Made the episode check parallel. [tidusjar]
+- New translations en.json (Dutch) [Jamie]
-- Log out the GUID causing the issue. [tidusjar]
+- New translations en.json (Danish) [Jamie]
-- Fixed another test. [tidusjar]
+- New translations en.json (Swedish) [Jamie]
-- Fixed tests. [tidusjar]
+- New translations en.json (German) [Jamie]
-- Got mostly everything working for #254 Ready for testing. [tidusjar]
+- New translations en.json (German) [Jamie]
-- Fixed issue with saving to db. [tidusjar]
+- New translations en.json (Swedish) [Jamie]
-- Need to work out why the cacher is not working and where the datatype mismatch is. [tidusjar]
+- New translations en.json (Spanish) [Jamie]
-- Don't delete first. [tidusjar]
+- New translations en.json (Portuguese, Brazilian) [Jamie]
-- Fix the log path issue #451. [tidusjar]
+- New translations en.json (Polish) [Jamie]
-- Dump an item. [tidusjar]
+- New translations en.json (Norwegian) [Jamie]
-- Small change with the return value in the batch insert. [tidusjar]
+- New translations en.json (Italian) [Jamie]
-- #254 Removed the cache, we are now storing the plex information into the database. [tidusjar]
+- New translations en.json (German) [Jamie]
-- Small change in the episode saver. [tidusjar]
+- New translations en.json (French) [Jamie]
-- Some small tweaks to improve the memory alloc. [tidusjar]
+- New translations en.json (Dutch) [Jamie]
-- Short circuit when Plex hasn't been setup. Added Miniprofiler. [tidusjar]
+- New translations en.json (Danish) [Jamie]
-- Consolidate newtonsoft.json packages. [tidusjar]
+- New translations en.json (Portuguese, Brazilian) [Jamie]
-- Some performance improvements around the new TV stuff. [tidusjar]
+- Fix #2529 - Change data type to long. [Anojh]
-- Reworked the cacher, fixed the memory leak. No more logging within tight loops. [tidusjar]
+- Fix #2527 - Music request not triggering search and failing. [Anojh]
-- Another null check. [tidusjar]
-- Some more changes. [tidusjar]
+## v3.0.3776 (2018-09-21)
-- Some error handling. [tidusjar]
+### **New Features**
-- Check if the sonarr ep is monitored. [tidusjar]
+- Update settingsmenu.component.html. [Jamie]
-- Some logging. [tidusjar]
+- Added the request limits in the ui for music. [Jamie]
-- Small changes, we will actually see the episode cacher on the scheduled jobs page now. [tidusjar]
+- Added the root folders and qualities per user! [Jamie]
-- Work on the UI to show what episodes have been requested #254. [tidusjar]
+- Updated all the MS packages. [TidusJar]
-- Small fix. [tidusjar]
+- Update the .net core packages to fix "CVE-2018-8409: ASP.NET Core Denial Of Service Vulnerability" [TidusJar]
-- Fix the api change in #450. [tidusjar]
+- Change way remainingrequests component is notified. [Kenton Royal]
-- #254. [tidusjar]
+- Added the music request limits. [TidusJar]
-- Workaround for #440. [tidusjar]
+- Added the Notification Preferences to the user. [TidusJar]
-- Async async async improvements. [tidusjar]
+- Added the API to add user notification preferences. [TidusJar]
-- Finished #266 Added a new cacher job to cache all episodes in Plex. [tidusjar]
+- Added more logging into the updater. [Jamie]
-- Fixed #442. [tidusjar]
+- Update CHANGELOG.md. [Jamie]
-- #254. [tidusjar]
+### **Fixes**
-- Work around the sonarr bug #254. [tidusjar]
+- Fixed #2518. [TidusJar]
-- #254 having an issue with Sonarr. [tidusjar]
+- Fixed #2522. [TidusJar]
-- Small bit of work on #266. [tidusjar]
+- Fixed #2485. [TidusJar]
-- #254. [tidusjar]
+- Fixed #2516. [TidusJar]
-- Precheck and disable the episode boxes if we already have requested it. TODO check sonarr to see if it's already there. #254. [tidusjar]
+- Fix bug in which requested TV wasn't logging for some users. [Kenton Royal]
-- Fixed broken build. [tidusjar]
+- Add to translations. [Kenton Royal]
-- More work for #254. [tidusjar]
+- Add html for displaying remaining requests on users page. [Kenton Royal]
-- More work on #254. [tidusjar]
+- Add quota fields to user view model. [Kenton Royal]
-- Fixed the bug in #438 and added unit tests to make so we dont break it in the future. [tidusjar]
+- Users can now see the music search tab #2493. [TidusJar]
-- Some reason we had dupe translations. [tidusjar]
+- Add href to a tags so that a pointer cursor shows on requests page. [Stephen Panzer]
-- Rename SubDir to Base Url. [tidusjar]
+- Allow Lidarr to specify if we should search for the album. [TidusJar]
-- Fix the exception in #440. [tidusjar]
+- Fixed the issue if in Radarr we only want to add and monitor, if the movie already exists we search for it. [TidusJar]
-- Reworking the login page for #426. [tidusjar]
+- Fix bug causing wrong time to be displayed for next request. [Kenton Royal]
-- Fixed #438. [tidusjar]
+- Bodge fix test to prevent compile error. [Kenton Royal]
-- Finished the auth stuff. [tidusjar]
+- Fix displaying year in issue dialog. [Stephen Panzer]
-- Finished up the SMTP side of #429. [tidusjar]
+- Add clearfix class. Closes #2486. [Stephen Panzer]
-- #428 Added a message when the we cannot get a TVMaze ID. [tidusjar]
+- Correct path of lidarr component import for unix systems. [Kenton Royal]
-- #254 MOSTLY DONE! At last, this took a while. [tidusjar]
+- Refactor code. [Kenton Royal]
-- Removed the other rootpath provider. [TidusJar]
+- Fix formatting error. [Kenton Royal]
-- Removed the other rootpath provider. [TidusJar]
+- Revert "Revert request.service.ts to version on upstream/develop" [Kenton Royal]
-- Removed the other rootpath provider. [TidusJar]
+- Revert request.service.ts to version on upstream/develop. [Kenton Royal]
-- Should fix #429. [TidusJar]
+- Fix lint errors. [Kenton Royal]
-- Done #135 We are including the application version number in the directory. [tidusjar]
+- Move logic for notifying when reuqest is complete. [Kenton Royal]
-- #387 trim the spaces from the api key. Tidied up the setting models a bit. [tidusjar]
+- Remove import. [Kenton Royal]
-- Wrapped the repo to catch Sqlite corrupt messages. [tidusjar]
+- Remove unused module. [Kenton Royal]
-- Frontend and tv episodes api work for #254. [tidusjar]
+- Refactor code. [Kenton Royal]
-- #424. [tidusjar]
+- Add text to translation file. [Kenton Royal]
-- #359. [tidusjar]
+- Fix query for fetching requested tv shows. [Kenton Royal]
-- Moved the plex auth token to the plex settings where it should belong. [tidusjar]
+- Add vscode to gitignore. [Kenton Royal]
-- Small changes around the user management. [tidusjar]
+- Fix lint errors. [Kenton Royal]
-- Missed brace. [tidusjar]
+- Remove unused methods from SearchController. [Kenton Royal]
-- Removed. [tidusjar]
+- Remove local vscode files. [Kenton Royal]
-- Fixed issues from the merge. [tidusjar]
+- Fix bug when submitting requests for multiple episodes accross multiple seasons. [Kenton Royal]
-- Stupid &$(*£ merge. [tidusjar]
+- Fix bug with TV requests in which requesting a seasion would treat request as single episode. [Kenton Royal]
-- Angular. [tidusjar]
+- Fix issues with remaining count updating. [Kenton Royal]
-- Reworked the custom notifications... again. Need to figure out how to find the view to the model. [tidusjar]
+- Trigger update of request limit on new request. [Kenton Royal]
-- Fixed #417. [tidusjar]
+- Add logic for movie request count. [Kenton Royal]
-- Removed NinjectConventions, we hadn't started to use it anyway. [tidusjar]
+- Add logic for retriving request information. [Kenton Royal]
-- Fixed the way we will be using custom messages. [tidusjar]
+- Move to seperate component and display for both TV and movies. [Kenton Royal]
-- Test checkin. [tidusjar]
+- Add dummy for request counter. [Kenton Royal]
-- Better handling for #388. [tidusjar]
+- Fix scss import for unix systems. [Kenton Royal]
-- Fixed #412. [tidusjar]
+- Add methods to interface and add model class. [Kenton Royal]
-- Fixed #413. [tidusjar]
+- !fixed lint. [TidusJar]
-- Fixed #409. [tidusjar]
+- Fixed #2481. [TidusJar]
-- Trycatch around the availbility checker. [tidusjar]
+- New translations en.json (Swedish) [Jamie]
-- WIP on notification resolver. [tidusjar]
+- New translations en.json (Spanish) [Jamie]
-- Tidy. [tidusjar]
+- New translations en.json (Portuguese, Brazilian) [Jamie]
-- Plugged in MediatR. [tidusjar]
+- New translations en.json (Polish) [Jamie]
-- Moved over to using Ninject. [tidusjar]
+- New translations en.json (Norwegian) [Jamie]
+- New translations en.json (Italian) [Jamie]
-## v1.8.4 (2016-06-30)
+- New translations en.json (German) [Jamie]
-### **Fixes**
+- New translations en.json (French) [Jamie]
-- Fixed the bug where we were auto approving everything. Added French language into the navigation bar. [tidusjar]
+- New translations en.json (Dutch) [Jamie]
+- New translations en.json (Danish) [Jamie]
-## v1.8.3 (2016-06-29)
+- Fixed #2475. [Jamie]
-### **New Features**
+- Stript out certain characters when sending a pushover message #2385. [TidusJar]
-- Update README.md. [Jamie]
+- Add default values for Priority and Sound. [David Pooley]
-- Update appveyor.yml. [Jamie]
+- Allow for the ability to set Pushover notification sound and priority from within Ombi. [David Pooley]
-- Added some of the backend bits for #182. [tidusjar]
+- It works now when we request an album when we do not have the artist in Lidarr. Waiting on https://github.com/lidarr/Lidarr/issues/459 to do when we have the artist. [Jamie]
-- Updates for #243. [tidusjar]
+- Fix non-Windows builds. Fixes #2453. [Joe Groocock]
-- Added Dutch language #243. [tidusjar]
-- Added languages #243. [tidusjar]
+## v3.0.3587 (2018-08-19)
-- Added logging #350. [tidusjar]
+### **New Features**
-### **Fixes**
+- Added the ability to invite Plex Friends from the user management screen. [Jamie]
-- Small changes. [tidusjar]
+- Added rich notifications for mobile. [Jamie]
-- Allow html in the notice message. [tidusjar]
+- Updater fixes. [Jamie]
-- Some more unit tests around the NotificationMessageResolver. [tidusjar]
+- Added updater test mode. [Jamie Rees]
-- Fixed a timing bug found the in build. Note, when working with time differences use TotalDays. [tidusjar]
+- Added a new API method to delete issue comments. [TidusJar]
-- More translations on the search page (Mainly the notification messages) #243. [tidusjar]
+- Updated @ngu/carousel to beta version to remove rxjs-compat dependency. [Matt Jeanes]
-- Fixed some warnings. [tidusjar]
+- Update to Angular 6/Webpack 4. [Matt Jeanes]
-- CodeCleanup. [tidusjar]
+- Update CHANGELOG.md. [Jamie]
-- Fixed a bit of a stupid bug in the resetter and added unit tests around it to make sure this never happens again. [tidusjar]
+- Updated the way we create the wizard user, errors show now be fed back to the user. [Jamie]
-- Fixed an issue where we didn't provide the correct response when clearing the logs. [tidusjar]
+- Added Brazillian Portuguese as a language and also Polish. [Jamie]
-- Made it so users that are in the whitelist do not have a request limit. [tidusjar]
+- Updated swagger. [Jamie]
-- Made it so the request limit doesn't apply to admin users. [tidusjar]
+- Updated to 2.1.1. [Jamie]
-- Fixed where a user could see the delete button on the issues page. [tidusjar]
+### **Fixes**
-- Fixed some small issues and improved the navbar. [tidusjar]
+- Now include the release year in the issue title #2381. [TidusJar]
-- Translated the Requested page #243. [tidusjar]
+- Made the OAuth a Popout to work with Org. [Jamie]
-- Finished #337. [tidusjar]
+- Fixed #2418. [TidusJar]
-- Some analytics. [tidusjar]
+- #2408 Added the feature to delete comments on issues. [Jamie]
-- More translations for #243 and welcome text for #293. [tidusjar]
+- New translations en.json (Swedish) [Jamie]
-- Small bit of work for #359. [tidusjar]
+- New translations en.json (French) [Jamie]
-- Finished #6. [tidusjar]
+- Fixed #2440. [TidusJar]
-- Analytics and fixes. [tidusjar]
+- Delete cake.config. [Chris Pritchard]
-- Translated the search page #243. [tidusjar]
+- Initial attempt at getting anime seriestype working. [Chris Pritchard]
-- Implemented the different languages and added the ability to change cultures. #243. [tidusjar]
+- Add cake.config. [Chris Pritchard]
-- Started #243. [tidusjar]
+- Fixed the issue where we wouldn't correctly mark some shows as available when there was no provider id #2429. [Jamie]
-- Fixed #364. [tidusjar]
+- Fixed the 'loop' in the cacher #2429. [Jamie]
-- Some more useful analytical information. [tidusjar]
+- Fixed #2427. [Jamie]
-- Generic try catch to fix #350. [tidusjar]
+- Fixed #2424. [Jamie]
-- Slight changes, moved the donate button. [tidusjar]
+- Fixed #2409. [Jamie]
-- Potential fix for #350. [tidusjar]
+- More updater. [Jamie]
-- Better way of obtaining clean enum string. [Drewster727]
+- Humanize the request type enum in notifications e.g. TvShow will now appear as "Tv Show" #2416. [TidusJar]
-- Fixed #362. [tidusjar]
+- Made the quality override and root folder override load when we load the show (It will now appear) [Jamie]
+- Fixed #2415 where power users could not set the Sonarr Quality Override or Root Folder Override. [Jamie]
-## v1.8.2 (2016-06-22)
+- #2371 Fixed the issue where certain actions would not setup the series correctly in Sonarr. [Jamie]
-### **New Features**
+- Tightened up the security from an API perspecitve. [TidusJar]
-- Update readme. [tidusjar]
+- Stop the root folder and profile calls from erroring. [TidusJar]
-- Update appveyor.yml. [Jamie]
+- New translations en.json (Polish) [Jamie]
-### **Fixes**
+- New translations en.json (Polish) [Jamie]
-- Fixed a circular reference issue. [tidusjar]
+- New translations en.json (Polish) [Jamie]
-- Small changes around how we work with custom events in the analytics. [tidusjar]
+- New translations en.json (Portuguese, Brazilian) [Jamie]
-- Fixed #353 #354 #355. [tidusjar]
+- New translations en.json (Portuguese, Brazilian) [Jamie]
-- Null provider check for movies. [Drewster727]
+- New translations en.json (Portuguese, Brazilian) [Jamie]
-- Show request type in notifications #346 and fix an issue from previous commit for #345. [Drewster727]
+- New translations en.json (Portuguese, Brazilian) [Jamie]
-- Add an option to stop sending notifications for requests that don't require approval #345. [Drewster727]
+- New translations en.json (Portuguese, Brazilian) [Jamie]
+- Fixed all linting. [TidusJar]
-## v1.8.1 (2016-06-21)
+- Comment out envparam stuff. [Matt Jeanes]
-### **New Features**
+- Fixed prod build issue. [Matt Jeanes]
-- Update appveyor.yml. [Jamie]
+- Missed a tiny bit. [Matt Jeanes]
-### **Fixes**
+- Fix test. [Matt Jeanes]
-- Fix obj ref error when scheduler runs (ProviderId is null?) [Drewster727]
+- Fix test build. [Matt Jeanes]
-- Fix logic for obtaining a sonarr quality profile #340. [Drewster727]
+- Linting + remove debug. [Matt Jeanes]
+- Switch to Yarn and disable auto publish in release mode. [Matt Jeanes]
-## v1.8.0 (2016-06-21)
+- Fix for #2409. [TidusJar]
-### **New Features**
+- New translations en.json (Swedish) [Jamie]
-- Update README.md. [Jamie]
+- New translations en.json (Spanish) [Jamie]
-- Update README.md. [Jamie]
+- New translations en.json (Portuguese, Brazilian) [Jamie]
-- Update README.md. [Jamie]
+- New translations en.json (Polish) [Jamie]
-- Added the new advanced search into the search page too. [tidusjar]
+- New translations en.json (Norwegian) [Jamie]
-- Change the way we configure the IoC container in the bootstrapper, we are registering all the concrete instances on application start rather than on each web request. This should increase the performance per HTTP request. [tidusjar]
+- New translations en.json (Italian) [Jamie]
-- Updated nlog and fixed #295. [tidusjar]
+- New translations en.json (German) [Jamie]
-### **Fixes**
+- New translations en.json (French) [Jamie]
-- Workaround for #334. [Drewster727]
+- New translations en.json (Dutch) [Jamie]
-- Create .gitattributes. [Jamie]
+- New translations en.json (Danish) [Jamie]
-- Fixes to the issues. [tidusjar]
+- Possible fix for #2298. [D34DC3N73R]
-- Set the defaults for the landing page. [tidusjar]
+- Fixed the text for #2370. [Jamie]
-- Revert branch to 664dae2. [tidusjar]
+- Fixed where you couldn't bulk edit the limits to 0 #2318. [Jamie]
-- Some unit tests for the issues. [tidusjar]
+- Upgraded to .net 2.1.2 (Includes security fixes) [Jamie]
-- Tidied up the bootstrapper. [tidusjar]
-- Fix up landing page UI. [Drewster727]
+## v3.0.3477 (2018-07-18)
-- Fixed CSS issue with the top arrow in the Plex theme. [tidusjar]
+### **New Features**
-- Small changes. [tidusjar]
+- Updated the Emby availability checker to bring it more in line with what we do with Plex. [TidusJar]
-- Done #318. [tidusjar]
+- Added the ability to impersonate a user when using the API Key. This allows people to use the API and request as a certain user. #2363. [Jamie Rees]
-- Fixed tests. [tidusjar]
+- Added more background images and it will loop through the available ones. [Jamie Rees]
-- #298 added some tests for the landing page. [tidusjar]
+- Added chunk hashing to resolve #2330. [Jamie Rees]
-- We are now only keeping the latest 1000 log records in the database. Delete everything else. [tidusjar]
+- Added API at /api/v1/status/info to get branch and version information #2331. [Jamie Rees]
-- Some analytic stuff. [tidusjar]
+- Update to .net 2.1.1. [Jamie]
-- Capture the TVDBID when requesting. [tidusjar]
+### **Fixes**
-- Attempting to improve #219. [tidusjar]
+- Fix #2322 caused by continue statement inside try catch block. [Anojh]
-- Just some more async changes. [tidusjar]
+- Fixed #2367. [TidusJar]
-- Small changes. [tidusjar]
+- Fixed the issue where you could not delete a user #2365. [TidusJar]
-- More work on #298. Everything wired up. [tidusjar]
+- Another attempt to fix #2366. [Jamie Rees]
-- Fixed the issue on the landing page #298. [tidusjar]
+- Fixed the Plex OAuth warning. [Jamie]
-- #298 moved the content to the left a bit. [tidusjar]
+- Revert "Fixed Plex OAuth, should no longer show Insecure warning" [Jamie Rees]
-- Styling for #298 done, just need to wire up the model and do the actual status check. [tidusjar]
+- Fixed Plex OAuth, should no longer show Insecure warning. [Jamie Rees]
-- Bumped up the version number. [tidusjar]
+- Fixed the View On Emby URL since the Link changed #2368. [Jamie Rees]
-- Removed some DumpJson() from the trace logs. [tidusjar]
+- Fixed the issue where episodes were not being marked as available in the search #2367. [Jamie Rees]
-- Small ui fix (100% width user/password fields to improve mobile experience) [Drewster727]
+- Fixed #2371. [Jamie Rees]
-- Landing page stuff #298. [tidusjar]
+- Fixed collection issues in Emby #2366. [Jamie Rees]
-- Datepicker UI fixes + small landing page UI fix. [Drewster727]
+- Do not delete the Emby Information every time we run, let's keep the content now. [Jamie Rees]
-- Removed a change that shoudn't have been commited. [tidusjar]
+- Emby Improvements: Batch up the amount we get from the server. [Jamie Rees]
-- Fixed tests. [tidusjar]
+- Log errors when they are uncaught. [Jamie Rees]
-- More work for #298. [tidusjar]
+- Fix unclosed table tags causing overflow #2322. [Anojh]
-- #273 added for only available content on the search. [tidusjar]
+- This should now fix #2350. [Jamie]
-- Fixed #303 Looks like there was some incorrect business logic. [tidusjar]
+- Improve the validation around the Application URL. [Jamie Rees]
-- Most of #273 done. [tidusjar]
+- Fixed #2341. [Jamie Rees]
-- Settings done for #298. [tidusjar]
+- Stop spamming errors when FanArt doesn't have the image. [Jamie Rees]
-- Started #298. [tidusjar]
+- Fixed #2338. [Jamie Rees]
-- A crap tonne of work on #273. [tidusjar]
+- Removed some logging statements. [Jamie Rees]
-- More work on #273. [tidusjar]
+- Fixed the api key being case sensative #2350. [Jamie Rees]
-- Reduced kept logs for 2 days. [tidusjar]
+- Improved the Emby API #2230 Thanks Luke! [Jamie Rees]
-- Fixed #300. [tidusjar]
+- Revert. [Jamie Rees]
-- #273. [tidusjar]
+- Fixed a small error in the Mobile Notification Provider. [Jamie Rees]
-- Fixed a bug with some users with the CP profiles. [tidusjar]
+- Minor style tweaks. [Randall Bruder]
-- #273. [tidusjar]
+- Downgrade to .net core 2.0. [Jamie Rees]
-- Done the same for TV. [tidusjar]
+- Downgrade Microsoft.AspNetCore.All package back to 2.0.8. [Jamie Rees]
-- Fixes #296. [tidusjar]
+- Removed old code. [Jamie Rees]
-- More for #273. [tidusjar]
+- Swap out the old way of validating the API key with a real middlewear this time. [Jamie Rees]
-- Small changes. [tidusjar]
-- Revert "Small changes" [tidusjar]
+## v3.0.3421 (2018-06-23)
-- Small changes. [tidusjar]
+### **New Features**
-- Finished #221 and added more async #278. [tidusjar]
+- Added TVRequestsLite. [Jamie]
-- Spelling mistake in the html! this fixes #264. [tidusjar]
+- Added a smaller and simplier way of getting TV Request info. [Jamie Rees]
-- More work on #273. [tidusjar]
+### **Fixes**
-- Fixed #210. [tidusjar]
+- Show the popular movies and tv shows by default. [Jamie]
-- Started #273. [tidusjar]
+- Fixed #2348. [Jamie]
-## v1.7.5 (2016-05-29)
+## v3.0.3407 (2018-06-18)
### **New Features**
-- Update preview. [Jamie]
-
-- Updated dapper.contrib. Looks like there was a bug in the async methods. [tidusjar]
+- Update appveyor.yml. [Jamie]
-- Updater wouldn't work when running a reverse proxy #236. [tidusjar]
+- Update build.cake. [Jamie]
### **Fixes**
-- Bump build ver. [tidusjar]
-
-- Use HTTPS for the poster images, so there aren't any mixed content warnings when serving the application via an HTTPS reverse proxy. [Sean Callinan]
+- Fixed the issue where when we find an episode for the recently added sync, we don't check if we should run the availbility checker. [Jamie]
-- Removed static declarations. [tidusjar]
+- Fixed the API not working due to a bug in .Net Core 2.1. [Jamie]
-- Fixed styling on modal. [tidusjar]
+- Fixed #2321. [Jamie]
-- Made the search page all async goodness #278. [tidusjar]
+- Maybe this will fix #2298. [Jamie]
-- Made the request module async #278. [tidusjar]
+- Fixed #2312. [Jamie]
-- Started some dynamic scrolling. [tidusjar]
+- Fixed the SickRage/Medusa Issue where it was always being set as Skipped/Ignore #2084. [Jamie]
-- Stop dumping out the settings to the log. [tidusjar]
+- Fixed the sorting and filtering on the Movie Requests page, it all functions correctly now. [Jamie]
-- Made more async goodness. [tidusjar]
+- Fixed #2288. [Jamie]
-- Made some of the searching async #278. [tidusjar]
+- Upgrade packages. [Jamie]
-- Fixed #277. [tidusjar]
+- Inital Migration. [Jamie]
-- Reworked some tests. [tidusjar]
+- Fixed #2317. [Jamie]
-- #26q make the auth users list taller. [Drewster727]
-- Fix 404 error. [Drewster727]
+## v3.0.3383 (2018-06-07)
-- #262 make the auth users list taller. [Drewster727]
-
-- #221 delete requests per category. [Drewster727]
+### **New Features**
-- #256 #237 UI Improvements and consolidation. [Drewster727]
+- Update CHANGELOG.md. [Jamie]
-- Fixed a bug in the user notification where if an admin wants to be notified they wouldn't be. [tidusjar]
+### **Fixes**
-- Set the admin to have all claims. [tidusjar]
+- Minor improvements. [Jamie]
-- Fix null exception possibility in cp/sickrage cacher classes. [Drewster727]
+- Run the availability checker on finish of the recentlty added sync. [Jamie]
-- Fixed #244. [tidusjar]
+- Fixed the issue with the Recently Added Sync sometimes not working as expected. [Jamie]
-- Fixed #240. [tidusjar]
+- The UI looks at the local time to see if the JWT token has expired. Use local time to generate the token. [Jamie Rees]
-- Fixed #270. [tidusjar]
-- Fixed an issue where if you have only 1 plex friend it would not show in the list. [tidusjar]
+## v3.0.3368 (2018-06-03)
+### **New Features**
-## v1.7.4 (2016-05-25)
+- Added the subscribe on the sarch page. [Jamie Rees]
-### **New Features**
+- Added the subscribe button to the search page if we have an existing request. [Jamie Rees]
-- Update README.md. [Jamie]
+- Update CHANGELOG.md. [Jamie]
### **Fixes**
-- Fixed #252. [tidusjar]
+- Use selected episodes in submitRequest. [Calvin]
-- Fixed #428. [tidusjar]
+- Fixed where the test button wouldn't work on the mobile notifications page. [Jamie]
-- Version bump. [tidusjar]
+- Fixed the sorting and filtering on the Movie Requests page, it all functions correctly now. [Jamie]
-- Fixed tests. [tidusjar]
+- Fixed #2288. [Jamie]
-- Fully fixed #239. [tidusjar]
+- Fixed the SickRage/Medusa Issue where it was always being set as Skipped/Ignore #2084. [Jamie]
-- We wan't updating the DB schema. [tidusjar]
+- Fixed UI typo refrencing discord in mattermost notifications #2175. [Anojh]
+- Fix #2175. [Anojh]
-## v1.7.3 (2016-05-25)
+- Fixed #2013. [Jamie Rees]
-### **Fixes**
-
-- Fixed the release build issue where we could not access the settings #239. [tidusjar]
+- Fixed #2147. [Jamie Rees]
-## v1.7.2 (2016-05-25)
+## v3.0.3346 (2018-05-26)
-### **Fixes**
+### **New Features**
-- Fixed a small bug where an exception would get thrown. [tidusjar]
+- Added a default set of root folders and qualities for Anime in Sonarr. [Jamie Rees]
-- Build version bump. [tidusjar]
+### **Fixes**
-- Cleanup. [tidusjar]
+- Made the Open on Mobile link less hidden. [Jamie Rees]
-- Typo. [tidusjar]
+- Fixed #2263. [Jamie Rees]
-- Fixed #241. [tidusjar]
+- !changelog. [Jamie Rees]
-- Fixed #239. [tidusjar]
+- Fixed #2243 The refresh metadata was being run everytime we launched Ombi... [Jamie]
-- Fixed #238. [tidusjar]
+- Fixed a issue where the Plex Content Sync wouldn't pick up new shows #2276 #2244 #2261. [Jamie]
-- Small UI tweaks/improvements. [Drewster727]
+- Sort TvRequests by latest request. [Joe Harvey]
+- Fixed build. [Jamie Rees]
-## v1.7.1 (2016-05-24)
+- Fix newsletter card background overflow when only one item is available. [Anojh]
-### **New Features**
+- Fix #1745. [Anojh]
-- Update version. [tidusjar]
-### **Fixes**
+## v3.0.3330 (2018-05-17)
-- Fixed an issue with the auth page when running with a reverse proxy. [tidusjar]
+### **New Features**
+- Added the test button for mobile notifications. [Jamie Rees]
-## v1.7 (2016-05-24)
+- Added classes to donation html elements. [Anojh]
-### **New Features**
+### **Fixes**
-- Update appveyor.yml. [Jamie]
+- !changelog. [Jamie Rees]
-- Update README.md. [Jamie]
+- Fixed #2257. [Jamie Rees]
-- Update README.md. [Jamie]
+- Improved the way we sync the plex content and then get the metadata. #2243. [Jamie Rees]
-- Added the ability to get the apikey from the api if you provide a correct username and password. Added more unit tests Added the ability to change a users password using the api refactored the Usermapper and made it unit testsable. [tidusjar]
+- Fixed the issue when enabling the Hide Request Users included system users e.g. API key user #2232. [Jamie Rees]
-- Update. [tidusjar]
+- Removed the test button from the mobile screen since it did nada. [Jamie Rees]
-- Added in an audit table. Since we are now allowing multiple users to change and modify things we need to audit this. [TidusJar]
+- Finished adding subscriptions for TV Shows. [Jamie Rees]
-- Added the updater to the soloution and did a bit of starting code. [TidusJar]
+- Fix #2167. [Anojh]
-- Updated the claims so we can support more users. Added a user management section (not yet complete) Added the api to the solution and a api key in the settings (currently only gets the requests). [TidusJar]
+- Fix #2228. [Anojh]
-- Updated packages. [TidusJar]
+- Enhanced newsletter styling to support more mail clients. [Anojh]
-- Added a retry handler into the solution. We can now retry failed api requests. [TidusJar]
+- Fix #2246. [Anojh]
-- Update README.md. [Jamie]
+- Fix #2234. [Anojh]
-- Added Released propety to RequestViewModel. Added Released filter to the Requests page. [Chris Lees]
+- Fixed that sometimes there would be a hidden error on the login page. [Jamie Rees]
-- Added #27 to albums. [tidusjar]
-- Added the actual notification part of #27. [tidusjar]
+## v3.0.3304 (2018-05-09)
-- Added the missing baseurl bit on the login page for #72. [tidusjar]
+### **New Features**
-- Added the 'enable user notifications' to the email settings view and model. [tidusjar]
+- Updated to prevent security vulnerability as noted here: https://github.com/aspnet/Announcements/issues/300. [Jamie Rees]
- Update README.md. [Jamie]
### **Fixes**
-- Remove pointless test, change the default theme and fix a small bug. [tidusjar]
-
-- Fixed api. [tidusjar]
+- [LC] - Added classes to root/quality override divs. [Anojh]
-- Finished #26. [tidusjar]
+- Fixed an issue where sometimes the OAuth wouldn't work when loading the login page. [Jamie Rees]
-- Plex theme. [tidusjar]
+- Alwats enable mobile link. [Jamie]
-- Implimented a theme changer, waiting for the Plex theme. [tidusjar]
-- Finished #222 #205. [tidusjar]
+## v3.0.3293 (2018-05-05)
-- Started working on #26. [tidusjar]
-
-- Undid some small changes that was checked in by accident. [tidusjar]
+### **New Features**
-- #164 has been resolved. [tidusjar]
+- Added a check for long movie descriptions and dealt with accordingly. [Anojh]
-- Resolved #224 , Removed the 'SSL' option from the email notification settings. We will now use the correct secure socket options (SSL/TLS) for your email host. [tidusjar]
+- Update jobs.component.html. [D34DC3N73R]
-- Small changes. [tidusjar]
+- Added id to emby button to distinguish for UI purposes. [Anojh]
-- #27 fully finished. [tidusjar]
+- Changed theme content textarea to use monospace font. [Anojh]
-- Fixed #215. [tidusjar]
+- Added classes and ids to issue status. [Anojh]
-- Using Mailkit to fix #204. [tidusjar]
+- Changed overlay picture to poster pic so we have fallback styling on older clients. [Anojh]
-- Color. [tidusjar]
+### **Fixes**
-- Fully finished #27 just need to test it! [tidusjar]
+- Fixed #2224. [Jamie]
-- Fixed test. [tidusjar]
+- More robust check for release date. [Anojh]
-- Styling for #27. [tidusjar]
+- Fixed duplicate titles in Plex Newsletter. [Anojh]
-- I think the auto updater is finished! #29. [tidusjar]
+- Fixed the filter on the Requests page #2219 and added the default sort to be most recent requests. [Jamie Rees]
-- I think we have finished the main bulk of the auto updater #29. [tidusjar]
+- Enable the mobile ntoifications inside Ombi. [Jamie Rees]
-- #222 #205 more ! Started getting the settings out. [tidusjar]
+- Made the episode list in the newsletter easier to read. Rather than 1,2,3,4,5,10 we will now show 1-5, 10. [Jamie Rees]
-- Removed the service locator from the base classes and added in some Api tests added all the tests back in! [tidusjar]
+- Moved the RecentlyAddedSync into it's own job, it still is calls the regular sync but this should make it easier to start the job from the UI (When I add that) [Jamie Rees]
-- More work on the api and documentation #222 #205. [tidusjar]
+- Made a massive improvement on the Smaller more frequent Plex Job. This should pick up content a lot quicker now and also get their metadata a lot quicker. [Jamie Rees]
-- Started documenting the API we now have swagger under ~/apidocs #222 #205. [tidusjar]
+- Trigger a metadata refresh when we finish scanning the libraries. [Jamie Rees]
-- Api work for #205 Refactored how we check if the user has a valid api key Added POST request, PUT and DELTE. [tidusjar]
+- Fixed a potential issue in the newsletter where it wouldn't send content due to missing metadata, but would mark it as if it was sent. [Jamie Rees]
-- First pass of the updater working. #29. [tidusjar]
+- Fixed settings retaining active class when elsewhere in UI. [Anojh]
-- Removed SIGHUP from the termination list #220. [tidusjar]
+- Separated user and subject details into spans and fixed styling. [Anojh]
-- Fixed. [tidusjar]
+- Fixed linting errors. [Anojh]
-- Missing. [tidusjar]
+- Fixed settings nav item not retaining active class when in other tabs in the settings page. [Anojh]
-- Missed out a file. [TidusJar]
+- Separated reported by and subject and added classes. [Anojh]
-- And some more... [TidusJar]
+- Fix for issue #2152. [Anojh]
-- Missed some files. [TidusJar]
+- Fix genres being ambigious error. [Anojh]
-- A bit more work on switching to using user claims so we can support multiple users. [TidusJar]
+- Made text style justified. [Anojh]
-- Made the store backup clean up some of the older backups (> 7 days). [TidusJar]
+- V1.0, needs TV background and needs styles for outlook. [Anojh]
-- More work on the user management. [TidusJar]
+- CSS done for the template. [Anojh]
-- - Notifications will no longer be send to the admins if they request something. - Looks like we missed out adding the notifications to Music requests, so I added that in. [TidusJar]
+- Fixing some format issues. [Anojh]
-- - Improved the RetryHandler. - Made the tester buttons on the settings pages a bit more robust and added an indication when it's testing (spinner) [TidusJar]
+- Newsletter template structure done. [Anojh]
-- Packages. [TidusJar]
-- Nm, [TidusJar]
+## v3.0.3268 (2018-04-28)
-- Downgraded packages. [TidusJar]
+### **Fixes**
-- Better handling for #202. [TidusJar]
+- Potential fix for #2119. [Jamie Rees]
-- Finished #208 and #202. [TidusJar]
+- Use the Application URL if we have it to fix #2201. [Jamie]
-- This should help #202. [TidusJar]
-- Resolved #209. [TidusJar]
+## v3.0.3239 (2018-04-26)
-- Finished #209. [TidusJar]
+### **New Features**
-- Slight adjustments to #189. [tidusjar]
+- Update appveyor.yml. [Jamie]
-- - Added a visual indication on the UI to tell the admin there is a update available. - We are now also recording the last scheduled run in the database. [tidusjar]
+- Added paging to the TV Requests page. [Jamie Rees]
-- Did the login bit on #185. [tidusjar]
+- Added Paging to the Movie Requests Page. [Jamie Rees]
-- Finished #186. [tidusjar]
+- Updated Mailkit dependancy. [Jamie Rees]
-- Fixed #185. [tidusjar]
+- Update Hangfire, Newtonsoft and Swagger. [Jamie Rees]
-- Fixed issue in #27 with albums. [tidusjar]
+- Added View on Emby Button (#2173) [Anojh Thayaparan]
-- #27 added TV Search to the notification. [tidusjar]
+- Added background property to tvrequests API (#2172) [Anojh Thayaparan]
-- Fixed bug. [tidusjar]
+### **Fixes**
-- More work on #27 Added a new notify button to the search UI (Needs styling). Also fixed a bug where if the user could only see their own requests, if they search for something that has been requested, it will show as requested. [tidusjar]
+- Clean up the error code when the OAuth user is not authorized. [Jamie]
-- Improved the startup of the application. We now properaly parse any args passed into the console. [tidusjar]
+- More improvements to the Plex OAuth, Added the ability to turn it off if needed. [Jamie]
-- Additional cacher error handling + don't bother checking the requests when we don't get data back from plex. [Drewster727]
+- Fixed bug #2188 #2134. [Jamie]
-- Remove old migration code and added new migration code. [tidusjar]
+- Fixed the bug where only showing API User #2187. [Jamie]
-- Stop the Cachers from bombing out when the response from the 3rd party api returns an exception or invalid response. #171. [tidusjar]
+- Detect if baseurl is already set, and reset the link. [Anojh]
-- Increase the scheduler cache timeframe to avoid losing cache when the remote api endpoints go offline (due to a reboot or some other reason) -- if they're online, the cache will get refreshed every 10 minutes like normal. [Drewster727]
+- Fixed #2164. [Jamie Rees]
-- Fix the cacher by adding locking + extra logging in the plex checker + use a const key for scheduler caching time. [Drewster727]
+- Fixed #2151. [Jamie Rees]
-- Small changes. [tidusjar]
+- Fixed #2170. [Jamie Rees]
-- Switched out the schedulers, this seems to be a better implimentation to the previous and is easier to add new "jobs" in. [tidusjar]
+- Fixed the newsletter not sending #2134. [Jamie Rees]
-- Fixed #168. [tidusjar]
+- Fix baseurl breaking themes. [Anojh]
-- Fixed #162. [tidusjar]
+- Inject base url if set before theme file url, see issue #1795. [Anojh]
-- Fix saving the log level. [Drewster727]
+- Sign In rather than Login/Continue. [Avi]
-- Set the max json length (fixes large json response errors) [Drewster727]
+- Fixed #2179. [Jamie Rees]
+- Fixed #2169. [Jamie Rees]
-## v1.6.1 (2016-04-16)
+- Knocking out LC requirements in issue #2124 (#2125) [Anojh Thayaparan]
-### **New Features**
+- Inject base url if set before theme file url, see issue #1795 (#2148) [Anojh Thayaparan]
-- Update README.md. [Jamie]
-- Added a url base. [tidusjar]
+## v3.0.3185 (2018-04-16)
-- Change default logging. [tidusjar]
+### **New Features**
-- Added logging around SickRage. [tidusjar]
+- Added a new Job. Plex Recently Added, this is a slimmed down version of the Plex Sync job, this will just scan the recently added list and not the whole library. I'd reccomend running this very regulary and the full scan not as regular. [Jamie]
### **Fixes**
-- Bump up the version number ready for the release. [tidusjar]
+- Add web-app-capable for IOS and Android. [Thomas]
-- BaseUrl is finally finished! #72. [tidusjar]
+- Fixed the bug where the newsletter CRON was not appearing on the job settings page. [Jamie]
-- #72 Login page done. [tidusjar]
+- Add base url as a startup argument #2153. [Jamie Rees]
-- More changes for the urlbase #72. [tidusjar]
+- Fixed a bug with the RefreshMetadata where we would never get TheMovieDBId's if it was missing it. [Jamie]
-- Done the auth, cp, logs and sidebar for #72. [tidusjar]
-- Add an extra check when determining if a tv show is already available (also check if it starts with the show name returned from the tv db) [Drewster727]
+## v3.0.3173 (2018-04-12)
-- Cache plex library data regardless of whether we have requests in the database or not. [Drewster727]
+### **Fixes**
-- By default don't use a url base. [tidusjar]
+- Removed some early disposition that seemed to be causing errors in the API. [Jamie]
-- Return empty array when obtaining queued IDs in sickrage cacher. [Drewster727]
-- Fixed a small bug in the SR cacher. [tidusjar]
+## v3.0.3164 (2018-04-10)
-- Fixed when we do not have a base. [tidusjar]
+### **New Features**
-- More changes for #72. [tidusjar]
+- Added the ability to send newsletter out to users that are not in Ombi. [Jamie]
-- Fixed exception and all areas will now use the base url #72. [tidusjar]
+- Added the ability to turn off TV or Movies from the newsletter. [Jamie]
-- Removed the test code from #72. [tidusjar]
+- Update about.component.html. [Jamie]
-- Commented out the unit tests as they need to be reworked now. [tidusjar]
+- Update about.component.html. [Jamie]
-- Finally fixed #72. [tidusjar]
+- Added random versioning prefix to the translations so the users don't have to clear the cache. [Jamie]
-- Remove test code from plex api GetLibrary method. [Drewster727]
+- Added more information to the about page. [Jamie]
-- Finished up the caching TODO's. [tidusjar]
+- Changed let to const to adhere to linting. [Anojh]
-- Kick off the schedulers once the web app has started (fixes api errors on start) [Drewster727]
+- Update _Layout.cshtml. [goldenpipes]
-- Converted the UI back down to .NET 4.5.2. [tidusjar]
+- Update _Layout.cshtml. [goldenpipes]
-- Fixed #154. [tidusjar]
+- Changed the TV Request API. We now only require the TvDbId and the seasons and episodes that you want to request. This should make integration regarding TV a lot easier. [Jamie]
-- Revert everything (except PlexRequests.UI) back to .NET 4.5.2 -- fixes incompatibilities with the latest version of mono (4.2.3.4) -- fixes notifications not working #152 #147 #141. [Drewster727]
+### **Fixes**
-- #150 start caching plex media as well. refactored the availability checker. NEEDS TESTING. also, we need to make the Requests hit the plex api directly rather than hitting the cache as it does now. [Drewster727]
+- Emby improvments on the way we sync/cache the data. [Jamie]
-- #150 split out the cache subscriptions to make sure they subscribe properly. [Drewster727]
+- Memory improvements. [Jamie]
-- #150 sonarr/sickrage cache checking. sickrage has a couple small items left. [Drewster727]
+- Made some improvements to the Sonarr Sync job #2127. [Jamie]
-- Fixed args. [tidusjar]
+- Turn off Server GC to hopefully help with #2127. [Jamie Rees]
-- Fixed. [tidusjar]
+- Fixed #2109. [Jamie]
-- Made the base better. [tidusjar]
+- Fixed #2101. [Jamie]
-- Remove couchpotato api test code. [Drewster727]
+- Fixed #2105. [Jamie]
-- Start the initial couchpotato cache call on a separate thread to keep the startup process quick. [Drewster727]
+- Fixed some styling on the issues detail page. [Jamie]
-- Add csproj with file changes from previous commit. [Drewster727]
+- Fixed #2116. [Jamie]
-- Cache the couchpotato wanted list, update it on an interval, and use it to determine if a movie has been queued already. [Drewster727]
+- Limit the amount of FileSystemWatchers being spawned. [Jamie]
-- I think i've fixed an issue where SickRage reports Show not found. [tidusjar]
+- Fixed the issue where Emby connect users could not log in #2115. [Jamie]
-- Set the default log level to info. #141. [tidusjar]
+- Had to update some base styles since currently some styling does not look right... [Anojh]
-- #125 refactor async task logic to work with mono. [Drewster727]
+- Adding wrappers and classes for LC and toggling active style for UI elements. [Anojh]
-- Fix search spinner sticking around after clearing search text + make the "Requested" and "Available" indicators in the search page different colors. [Drewster727]
+- Fixed a little bug in the newsletter. [Jamie]
-- #125 start indicating in the results if an item is already requested or available. [Drewster727]
+- Fixed the issue where movies were not appearing in the newsletter for users with Emby #2111. [Jamie]
-- #145 firefox css dsplay issue. [Drewster727]
+- The fact that this button has another style really bothers me. [Louis Laureys]
-- Fixes for sonarr, we now display the error messages back to the user. [tidusjar]
+- Fix discord current user count. [Avi]
-- Fixed #144. [tidusjar]
+- Fix broken images and new discord invite. [Avi]
-## v1.6.0 (2016-04-06)
+## v3.0.3111 (2018-03-27)
### **New Features**
-- Changed the build number. [tidusjar]
-
-- Update README.md. [Drew]
-
-- Update README.md. [Drew]
+- Added the Recently Added Newsletter! You are welcome. [tidusjar]
-- Update README.md. [Drew]
+- Added a new scrollbar to Ombi. [tidusjar]
-- Update README.md. [Drew]
+- Added the ability to automatically generate the API Key on startup if it does not exist #2070. [tidusjar]
-- Changed the title to a contains but the artist still must match, [tidusjar]
+- Updated npm dependancies. [Jamie]
-- Added unit tests to cover the new changes to the availability checker. [tidusjar]
+- Update README.md. [Jamie]
-- Added the music check in the Plex Checker. [tidusjar]
+- Update README.md. [Jamie]
-- Changed around the startup so we cache the profiles after the DB has been created. [tidusjar]
+- Update ISSUE_TEMPLATE.md. [Jamie]
-- Updated where we update the request blobs schema change. [tidusjar]
+- Update appveyor.yml. [Jamie]
-- Update SearchModule.cs. [Jamie]
+- Added recently added stuff. [Jamie]
-- Update README.md. [Jamie]
+- Added the recently added engine with some basic methods. [Jamie]
-- Update README.md. [Jamie]
+- Added the ability to refresh out backend metadata (#2078) [Jamie]
-- Change the new columns type. [tidusjar]
+- Update README.md. [zobe123]
-- Added a DBSchema so we have an easier way to update the DB. [tidusjar]
+### **Fixes**
-- Added an issue template. [tidusjar]
+- Specific favicons for different platforms. [louis-lau]
-- Update README.md. [Jamie]
+- MovieDbId was switched to string fron number so accomodated for change. [Anojh]
-- Added back the username into the Session when the admin logs in. This means they do not have to log in twice. [tidusjar]
+- Removing duplicate functions. [Anojh Thayaparan]
-- Added happy path tests for the Checker. [tidusjar]
+- Conflict resolving and adopting Jamie's new method. [Anojh]
-- Added music to the search and requests page. [tidusjar]
+- Wrote new calls to just get poster and bg. [Anojh]
-- Added a scroll to the top thingy and a bit more work on headphones. [tidusjar]
+- Fix for issue #1907, which is to add content poster and bg to issue details page. [Anojh]
-- Added some tests and fixed the issue where the DB would get created in the wrong place depending on how you launched the application. [tidusjar]
+- Dynamic Background Animation. [Anojh]
-- Added the settings page for #32. [tidusjar]
+- Improved the message for #2037. [tidusjar]
-- Update README.md. [Drewster727]
+- Improved the way we use the notification variables, we have now split out the Username and Alias (Requested User is depricated but not removed) [tidusjar]
-- Update README.md. [Drewster727]
+- Removed redundant timers. [Anojh]
-- Update README.md. [Drewster727]
+- More optimizations by reducing requests. [Anojh]
-- Update README.md. [Drewster727]
+- Improved version. [Anojh]
-- Update README.md. [Drewster727]
+- Dynamic Background Animation. [Anojh]
-- Update appveyor.yml. [Jamie]
+- Fixed #2055 and #1903. [Jamie]
-### **Fixes**
+- Small changes to the auto updater, let's see how this works. [Jamie]
-- Some final tweaks for #32. [tidusjar]
+- Fixed build. [Jamie]
-- Fixed a bug where if we are the admin we didn't add the request to the db. [tidusjar]
+- Fixed the update check for the master build. [Jamie]
-- Fixed an issue where we would add the Sickrage series but it would fail on adding the seasons. [tidusjar]
+- Fixed build. [Jamie]
-- Properly account for future/past dates when humanizing with moment. [Drewster727]
+- Fixed #2074 and #2079. [Jamie]
-- Properly display release date on requests page. [Drewster727]
-- Add missing reference for release mode. [Drewster727]
+## v3.0.3030 (2018-03-14)
-- #139 remove dependency and usage of humanize() - should help with cross-platform issues. start using moment.js. [Drewster727]
+### **New Features**
-- Fix selectors for music list on request page to get sorting working. [Drewster727]
+- Updated the .Net core dependancies #2072. [Jamie]
-- Fixed the error #32. [tidusjar]
+### **Fixes**
-- Fixed the logs page. [tidusjar]
+- Delete Ombi.testdb. [Jamie]
-- Another attempt at filtering #32. [tidusjar]
-- A bit more error handling #32. [tidusjar]
+## v3.0.3020 (2018-03-13)
-- Improved the availabilty check to include music results #32. [tidusjar]
+### **Fixes**
-- Small changes for #32. [tidusjar]
+- Small memory improvements in the Plex Sync. [Jamie]
-- A bit more logging for #32. [tidusjar]
+- Fixed the sort issue on the user Management page. Also added sorting to the Movie Requests page. [tidusjar]
-- More headphones #32 I am starting to hate headphones... Sometimes the artists and albums just randomly fail. [tidusjar]
+- Downgraded the angular2-jwt library since it has a bug in it. #2064. [tidusjar]
-- #134 temporary workaround for this. [Drewster727]
+- Fixed an issue when Plex decideds to reuse the Plex Key for a different media item... #2038. [tidusjar]
-- Task.run for startup caching + fix admin module unit test failures. [Drewster727]
+- Fixed an issue where we might show the Imdb link when we do not have a imdbid #1797. [tidusjar]
-- Cache injection, error handling and logging on startup, etc. [Drewster727]
+- Fixed the issue where we can no longer select Pending Approval in the filters #2057. [tidusjar]
-- Tweaks for #32. [tidusjar]
+- Fixed the API key not working when attempting to get requests #2058. [tidusjar]
-- #132 auto-approve for admins. [Drewster727]
+- Fixed #2056. [tidusjar]
-- Finished the bulk work for Headphones. Needs testing #32. [tidusjar]
+- Experimental, set the Webpack base root to the ombi base path if we have it. This should hopefully fix the reverse proxy issues. [Jamie]
-- Made the album search 10x faster. We are now loading the images in a seperate call. #32. [tidusjar]
+- Fixed #2056. [tidusjar]
-- Add a reference to API Interfaces to fix the build. [tidusjar]
-- #114 start caching quality profiles. Set the cache on startup and when obtaining quality profiles in settings. [Drewster727]
+## v3.0.3000 (2018-03-09)
-- Work for #32. [tidusjar]
+### **New Features**
-- #114 first pass at choosing quality profile when approving + focus search input by default and when switching tabs. [Drewster727]
+- Added the ability to override root and quality options in Sonarr (#2049) [Jamie]
-- #131 fix for default selected tab. [Drewster727]
+- Added Pending Approval into the filters list. [tidusjar]
-- Remove references to obsolete RequestedBy property + start setting the db schema to the app version, and check that in the future for migrations. [Drewster727]
+- Added the ability to hide requests that have not been made by that user (#2052) [Jamie]
-- Fixed async issue. [Shannon Barrett]
+- Update README.md. [Jamie]
-- Updating SickRage api to verify Season List is up to date. [Shannon Barrett]
+- Update README.md. [Louis Laureys]
-- Work on showing the requests for #32. [tidusjar]
+### **Fixes**
-- Got the search finished up for #32. [tidusjar]
+- Fixed #2042. [Jamie]
-- Remove test/temp code in UserLoginModule. [Drewster727]
-- A bit more work on #32 started working on requesting it. The DB is a bit of an issue... [tidusjar]
+## v3.0.0 (2018-03-04)
-- Most of the UI work done for #32. [tidusjar]
+### **New Features**
-- Basic search working for #32. [tidusjar]
+- Update build.cake. [Jamie]
-- Mono datetime offset workaround. [Drewster727]
+- Update README.md. [Jamie]
-- #122 store utc time in the databse + obtain timezone offset of the client upon login + offset times returned to client based on session offset. [Drewster727]
+- Update README.md. [Jamie]
-- Method reference bug fix. [Drewster727]
+- Added a similar button to the movie searches. Makes movie discoverablility easier. [tidusjar]
-- Fix search focus z-index issue (hid suggestions options) [Drewster727]
+- Update README.md. [Jamie]
-- Minor search UI adjustments. [Drewster727]
+- Update README.md. [Jamie]
-- #55 first attempt at "suggestions" starting with "Comming Soon" and "In Theaters" [Drewster727]
+- Update ISSUE_TEMPLATE.md. [Jamie]
-- #106 rename sorting options and polish the dropdown UI a bit. [Drewster727]
+- Update appveyor.yml. [Jamie]
-- Started adding the api part for headphones #32. [tidusjar]
+- Update ISSUE_TEMPLATE.md. [PotatoQuality]
-- Upped the time of #123. [tidusjar]
+- Update ISSUE_TEMPLATE.md. [PotatoQuality]
-- First attempt at #123. [tidusjar]
+- Update README.md. [Jamie]
-- We now do not show the text Requested By to the user, we also show a 'success' message instead of a warning when something has already been requested. [tidusjar]
+- Update README.md. [Jamie]
-- Show a "no requests yet" message on the requests page (for each cateogory) [Drewster727]
+- Update README.md. [Jamie]
-- Ignore items that are already available when approving in bulk, and simplify the checking + compile css. [Drewster727]
+- Update README.md. [PotatoQuality]
-- Add a better way to merge RequestedBy and RequestedUsers to avoid code duplication and simplify checks. [Drewster727]
+- Change the default templates to use {IssueUser} [Jamie]
-- Don't query the session as much in the modules, rely on a variable from the base class and store the username as needed. [Drewster727]
+- Changed the base url validation. [tidusjar]
-- Show the requested by user from legacy request models. [Drewster727]
+- Added bulk editing (#1941) [Jamie]
-- Only show requested by users to admins + start maintaining a list of users with each request. [Drewster727]
+- Change the poster size to w300 #1932. [Jamie]
-- #96 fix up notification test feature. [Drewster727]
+- Added a default user agent on all API calls. [tidusjar]
-- Fix the request page sort/approve button alignment. [Drewster727]
+- Update request.service.ts. [Jamie]
-- When pulling requests, set each to approved that is already available (so the UI avoids showing the approve option for already available content) [Drewster727]
+- Added a filter onto the movies requests page for some inital feedback. [Jamie]
-- Mono doesn't seem to have Tls1.2. Let's try TLS 1 #119. [tidusjar]
+- Added ordering to the User Management screen. [Jamie]
-- Specify a protocol type of TLS12. Looks like CP doesn't seem to like SSL3 (it is quite old now so understandable) #119. [tidusjar]
+- Update README.md. [Jamie]
-- Made #85 better. [tidusjar]
+- Added custom donation url (#1902) [m4tta]
-- Fixed the tests. [tidusjar]
+- Changed the url scheme to make it easier to parse. [Jamie]
-- Made the feedback from Sonarr better when Sonarr already has the series #85. [tidusjar]
+- Added Norwegian to the translation code, forgot to check this in. [Jamie]
-- An attempt to fix #108. [tidusjar]
+- Added Norwegian to the language dropdown. [Jamie]
-- Add some "no results" feedback to the searching + minor UI improvements. [Drewster727]
+- Added the stuff needed for omBlur. [tidusjar]
-- Fix notification tests. [Drewster727]
+- Update README.md (#1872) [xnaas]
-- UI - increase icon size of nav menu (they were too small before) [Drewster727]
+- Update README.md. [Jamie]
-- #96 Finished adding test functionality to notifications. [Drewster727]
+- Update plex.component.html. [Jamie]
-- #96 add the necessary back-end code to produce a test message for all notification types (still have to add the test buttons for pushbullet/pushover) [Drewster727]
+- Change plus to list in menu (#1855) [Louis Laureys]
-- #96 modify notifications interface/service to accept a non-type specific settings object. [Drewster727]
+- Update README.md. [Jamie]
-- #96 Email notification test button (others to come) [Drewster727]
+- Update README.md. [Jamie]
-- Minor UI adjustments. [Drewster727]
+- Added user request limits, We can now set the limit for a user. [tidusjar]
-- #84 provide an option in settings to resttrict users from viewing requests other than their own. [Drewster727]
+- Updated the UI JWT framework. [Jamie]
-- #54 comma separated list of users who don't require approval + fix a couple request messages (include show title) [Drewster727]
+- Added missing migrations #1744. [Jamie]
-- Clean up the sorting option names. add a way to see which filter/sort is currently applied. [Drewster727]
+- Added the SickRage API integration. [Jamie]
-- Fix up the animations. seems to be related to the data-bound attribute causing the animtions not to fire on each .mix object. [Drewster727]
+- Update the Emby Connect Username in the user importer. To update the emby connect email address we do it when the user logs in, since the only way to get that information is to use the users Username and Password, since we do not keep this information we cannot do it in the User Importer, but if they have successfully logged in via Emby Connect then we check if we need to update the email address on login. [Jamie]
-- Move approve buttons to the tab content. [Drewster727]
+- Update the connectuserid for emby users. [tidusjar]
-- Allow approving all requests by category. [Drewster727]
+- Added the ability to customize job scheudles. [Jamie]
-- Fix up sorting on the request page. [Drewster727]
+- Update README.md. [Jamie]
-- Add ubuntu/debian instructions. [Drewster727]
+- Added the option to import the plex admin. [tidusjar]
-- #86 - display movie/show title + year in request notifications. [Drewster727]
+- Added the route name as an Id on the container div #1698. [Jamie]
-- Show the movie/show title when requesting. [Drewster727]
+- Updated packages including uglify-es and the package-lock #1683. [Jamie]
+- Updated to Angular5 with best practises. [Jamie]
-## v1.5.2 (2016-03-26)
+- Update README.md. [Jamie]
-### **Fixes**
+- Added the new backgrounds for the requests pages. [tidusjar]
-- Stoped users from spamming the request button. [tidusjar]
+- Added caching to the settings. [tidusjar]
-- Fixed the logger no longer writing to the file. [tidusjar]
+- Added some better handling when adding existing seasons to a tv show in the Plex cacher. [tidusjar]
-- Fixed #97. [tidusjar]
+- Added Telegram Notification support, Not tested. [Jamie]
+- Added the new banner background for tv shows. [tidusjar]
-## v1.5.1 (2016-03-26)
+- Added a new customization option to provide a css link. [Jamie]
-### **New Features**
+- Update README.md. [Jamie]
-- Update appveyor.yml. [Jamie]
+- Update README.md. [Jamie]
-- Added logs to the sidebar. I'm an idiot. [tidusjar]
+- Changed to discord link. [tidusjar]
-### **Fixes**
+- Added more translations. [Jamie]
-- Approve tv shows or movies. [Drewster727]
+- Added more logging for #1643. [tidusjar]
-- Fixed a bug where if you had auto approve it wouldn't notify you. [tidusjar]
+- Update README.md. [Jamie]
+- Update Crowdin configuration file. [Jamie]
-## v1.5.0 (2016-03-25)
+- Added more translations. [Jamie]
-### **New Features**
+- Update da.json (#1634) [Lixumos]
-- Updated version number for release. [tidusjar]
+- Added 32bit version of Ombi. [Jamie]
-- Updated the logic for handling specific seasons in Sonarr and Sickrage. [Shannon Barrett]
+- Added more translations. [Jamie]
-- Updated the readme and added some icons to the navbar. [tidusjar]
+- Added translations. [Jamie]
-- Added the ability to sepcify a username in the email notification settings for external MTA's. We have had to add a new option called Email Sender because of this. #78. [tidusjar]
+- Updated the npm packages. [Jamie.Rees]
-- Update README.md. [Jamie]
+- Added four new endpoints to change the availability for TV shows and Movies #1601. [Jamie.Rees]
-- Update README.md. [Jamie]
+- Added the ability to run a user defined update script #1460. [Jamie.Rees]
-- Added a notification model to the notifiers. Added the backend work for sending a notification for an issue report #75. [tidusjar]
+- Added logging around creating the wizard user #1604. [tidusjar]
-- Added a subdir to CP, SickRage, Sonarr and Plex #43. [tidusjar]
+- Added the option to run the content cacher from the settings page, it will no longer get triggered when we press save. [tidusjar]
-### **Fixes**
+- Added the ability to specify how many episodes we should cache at a time. #1598. [tidusjar]
-- And again. [tidusjar]
+- Added usersname and password option for the updater #1460. [Jamie.Rees]
-- Made the check actually work. [tidusjar]
+- Changed the way we download the .zip files in the auto updater #1460 This might make a difference to the permissions issue. but not 100% sure. [Jamie.Rees]
-- Finished up #68 and #62. [tidusjar]
+- Changed cake. [Jamie.Rees]
-- Finished styling on the logger for now. #59. [tidusjar]
+- Added feedback when we send a welcome email #1578. [Jamie.Rees]
-- Fixed #69. [tidusjar]
+- Update README.md. [Jamie]
-- Working on getting the Sonarr component to work correctly. [Shannon Barrett]
+- Added some logging into the PlexCachers and set the log level to informational. [tidusjar]
-- Fixes issue #62. [Shannon Barrett]
+- Added Couchpotato support and fixed #1548. [tidusjar]
-- Refactored the Notification service to how it should have really been done in the first place. [tidusjar]
+- Update ISSUE_TEMPLATE.md. [PotatoQuality]
-- Fixed the build. [tidusjar]
+- Update ISSUE_TEMPLATE.md. [PotatoQuality]
-- Finished #49. [tidusjar]
+- Update README.md. [Jamie]
-- Finished #57. [tidusjar]
+- Added the ability to use a cookie to login. Mainly for Org. [tidusjar]
-- Small changes around the filtering. [tidusjar]
+- Added support for a new TV and Movie provider. DogNZB. [tidusjar]
-- Finished adding pushover support. #44. [tidusjar]
+- Added a PartlyAvailable flag for tv shows. [Jamie.Rees]
-- Resolved #75. [tidusjar]
+- Added some feedback on the request buttons for movies #1536. [Jamie.Rees]
-- Include DB changes. [tidusjar]
+- Added a fix for the poster path issue #1533. [Jamie.Rees]
-- Done most on #59. [tidusjar]
+- Added back the log path writing #865. [Jamie.Rees]
-- Lowercase logs folder, because you know, linux. #59. [tidusjar]
+- Update README.md. [Jamie]
-- Adding the imdb when requesting. [tidusjar]
+- Added support for email login #1513. [tidusjar]
-- Fixed an issue where the table didn't match the model. [tidusjar]
+- Added some more logging around the plex user importer fixed the discord notification issue #1513. [tidusjar]
-- Improved the status page with the suggestion from #29. [tidusjar]
+- Update README.md. [PotatoQuality]
-- Hooked up most of #49 Just the validation messages need to be done. [tidusjar]
+- Update README.md. [PotatoQuality]
-- Fixed #74 and #64. [tidusjar]
+- Update README.md. [PotatoQuality]
-- Resolved #70. [tidusjar]
+- Update README.md. [PotatoQuality]
-- Finished #71. [tidusjar]
+- Update README.md. [PotatoQuality]
-- Got the filter working on both movie and tv #57. [tidusjar]
+- Update Readme for V3. [PotatoQuality]
-- Started #57, currently there is a bug where the TV list won't filter. [tidusjar]
+- Added some wiki pages and also made it so we cannot edit Plex Users email address (since they will get overwrote via the Importer) #865. [Jamie.Rees]
+- Added transparency to icon files (#1520) [Auwen]
-## v1.4.1 (2016-03-20)
+- Added an application URL in the customization settings #1513. [Jamie.Rees]
-### **New Features**
+- Update ISSUE_TEMPLATE.md. [Jamie]
-- Update appveyor.yml. [Jamie]
+- Added the ability to enable Plex User importing. We also allow you to exclude users #1456. [tidusjar]
-- Update AvailabilityUpdateService.cs. [Jamie]
+- Update Startup.cs. [Jamie]
+- Added an about page #865. [Jamie.Rees]
-## v1.4.0 (2016-03-19)
+- Changelog. [Jamie.Rees]
-### **New Features**
+- Changed the way we download the updates #865. [Jamie.Rees]
-- Update README.md. [Jamie]
+- Updated packages and more logging. [Jamie.Rees]
-- Update README.md. [Jamie]
+- Update versioning. [Jamie.Rees]
-- Update README.md. [Jamie]
+- Update nuget packages and added logging to the Updater #865. [tidusjar]
-- Update README.md. [Jamie]
+- Added the ForwardedHeaders middlewear for Reverse Proxy scenarios #865. [tidusjar]
-- Updated the build version ready for the next release. [tidusjar]
+- Update build.cake. [Jamie]
-- Added the api and settings page for Sickrage. Just need to do the tester and hook it up #40. [tidusjar]
+- Update DiscordApi.cs. [Jamie]
-- Added the option to set a CP quality #38. [tidusjar]
+- Update README.md. [PotatoQuality]
-- Added the code to lookup the old requests and refresh them with new information from TVMaze. [tidusjar]
+- Added a authorization filter so we can see hangfire outisde of the local requests. [TidusJar]
-- Update StatusCheckerTests.cs. [Jamie]
+- Added more logging for the updater. [Jamie.Rees]
-- Update README.md. [Jamie]
+- Added the emby episode cacher and the job to check if items are available on emby #1464 #865. [tidusjar]
-- Added TVMaze to the search. #21. [tidusjar]
+- Added the Emby Cacher, we now cache the Emby data! [tidusjar]
-- Added migration code and cleaned up the DB. [tidusjar]
+- Updated CHangelog. [Jamie.Rees]
-- Updated the way we add requests. [tidusjar]
+- Updated changelog. [Jamie.Rees]
-- Updated the Dapper.Contrib package, it had a bug where it wasn't returning the correct Id from inserts. [tidusjar]
+- Updated assembly versions. [Jamie.Rees]
-### **Fixes**
+- Added the logo in the email notifications to use the application image #1459. [Jamie.Rees]
-- This fixes #36. [tidusjar]
+- Change Os to VS2015. [Jamie.Rees]
-- Should fix issue #36. [Shannon Barrett]
+- Added multiple emby server support and enabled it for Plex #865. [tidusjar]
-- When we do a batch update we need to reset the cache. [tidusjar]
+- Update ISSUE_TEMPLATE.md. [Jamie]
-- Fixed an issue where the default quality on Sickrage wouldn't work. [tidusjar]
+- Update README.md. [Jamie]
-- Wow, that was a lot of work. - So, I have now finished #40. - Fixed a bug where we was not choosing the correct tv series (Because of TVMaze) - Fixed a bug when checking for plex titles - Fixed a bug where the wrong issue would clean on the UI (DB was correct) - Refactored how we send tv shows - And too many small changes to count. [tidusjar]
+- Added slack #1459 #865. [Jamie.Rees]
-- Fixed the new dependancy with the admin class tests. [tidusjar]
+- Added a checkbox to the usermanagement screen.. Does nothing yet #865 #1456. [Jamie.Rees]
-- Back to what it was :( [tidusjar]
+- Update build.cake. [Jamie]
-- Another test for #37. [tidusjar]
+- Added swagger into the .zips. [Jamie.Rees]
-- This should fix #37. [Jamie Rees]
+- Added Cake build #865. [Jamie.Rees]
-- Catch the missing table exception when they have a new DB. [Jamie Rees]
+- Added Pushbullet notifications #1459 #865. [Jamie.Rees]
-- Exploratory test for #37. [Jamie Rees]
+- Update README.md. [Jamie]
-- Fixed #33 we now have SSL options for Sonarr and CP. [Jamie Rees]
+- Update README.md. [Jamie]
-- Removed all the html from the new TVMaze api (for overview). Added tests to cover the html removal. updated Readme to remove TheTVDB. [Jamie Rees]
+- Update README.md. [Jamie]
-- Fixed tests. [Jamie Rees]
+- Added the logging endpoint at /api/v1/Logging for the UI logs #1465. [tidusjar]
-- Almost fully integrated TVMaze #21 and also improved the fix for #31. [Jamie Rees]
+- Change the RID. [Jamie.Rees]
-- Should fix #28. [Shannon Barrett]
+- Update README.md. [Jamie]
-- Fixed #16 and #30. [tidusjar]
+- Update README.md. [Jamie]
-- Modified the adding of request to update the model with the added ID. [tidusjar]
+- Updated Changelog. [Jamie.Rees]
-- Switched over to the new service. [tidusjar]
+- Added changelog. [Jamie.Rees]
-- Fixed #25. [Jamie Rees]
+- Update README.md. [Jamie]
+- Updated stuff. [Jamie.Rees]
-## v1.3.0 (2016-03-17)
+- Update ISSUE_TEMPLATE.md. [PotatoQuality]
-### **New Features**
+- Update ISSUE_TEMPLATE.md. [PotatoQuality]
-- Added pushbullet to the sidebar. [Jamie Rees]
+- Added the Ombi or customized logo onto the login page #865. [TidusJar]
-- Updated build version for the next release. [Jamie Rees]
+- Added new login page #865. [Jamie]
-- Updated readme link. [tidusjar]
+- Added Migrations rather than a manual DB Script #865. [Jamie.Rees]
-- Added ignore to static tests. [tidusjar]
+- Updated all the packages. [tidusjar]
-- Added Pushbullet notifications #8. [tidusjar]
+- Added a skip options #865. [tidusjar]
-- Added first implimentation of the Notification Service #8 Added tests to cover the notification service. [tidusjar]
+- Added the minimumAvailability #865. [tidusjar]
-- Added validation to the Email settings, also increased the availability checker from 2 minutes to 5. [tidusjar]
+- Updater build script. [Jamie.Rees]
-### **Fixes**
+- Added the testing notifications and discord notification #865. [Jamie.Rees]
-- Fixed #22. [Jamie Rees]
+- Added tests into the build. [Jamie.Rees]
-- Started on #16, nothing is hooked up yet. [tidusjar]
+- Added Swagger. [Jamie.Rees]
-- Fixed tests. [tidusjar]
+- Added Discord notification #865. [Jamie.Rees]
+- Added the Movie Sender, Movies will be sent to Radarr now #865. [Jamie.Rees]
-## v1.2.1 (2016-03-16)
+- Added SQLite storage for Hangfire. [Jamie.Rees]
-### **New Features**
+- Added the Radarr cacher #865. [tidusjar]
-- Update Program.cs. [Jamie]
+- Added Radarr and Sonarr settings pages #865. [Jamie.Rees]
-- Update Program.cs. [Jamie]
+- Update appveyor.yml. [Jamie]
-- Added back the reference. [tidusjar]
+- Update appveyor.yml. [Jamie]
-### **Fixes**
+- Update appveyor.yml. [Jamie]
-- Removed the email notification settings from the settings (for release 1.2.1) [Jamie Rees]
+- Update appveyor.yml. [Jamie]
-- Fixed. [Jamie Rees]
+- Updated build script. [tidusjar]
-- Resolved #10. [tidusjar]
+- Added the Rules Engine Pattern and the Auto approve and request rules #865. [tidusjar]
+- Update .gitattributes. [Jamie]
-## v1.2.0 (2016-03-15)
+- Added the TraktApi back. [tidusjar]
-### **New Features**
+- Changes. [Jamie.Rees]
-- Updated. [Jamie Rees]
+- Added some sonarr stuff. [Jamie.Rees]
-- Updated appveyor. [Jamie Rees]
+- Added Hangfire #865. [tidusjar]
-- Update appveyor.yml. [Jamie]
+- Update node again... [Jamie.Rees]
-- Added latest version code and view. Need to finish the view #11. [tidusjar]
+- Update node. [Jamie.Rees]
-- Added test button to Plex. That's fixed #9. [tidusjar]
+- Changes. [Jamie.Rees]
-- Added test sonarr button #9. [tidusjar]
+- Update StringCipher.cs. [Jamie]
-- Added more tests. [tidusjar]
+### **Fixes**
-- Added a bunch of logging. [tidusjar]
+- New translations en.json (Norwegian) (#2020) [Jamie]
-- Added the application tester for CP #9. [tidusjar]
+- Publish 32bit build of windows. [tidusjar]
-- Added settings page for #8. [tidusjar]
+- Fixing incorrect filter translation targets (#1987) [Jono Cairns]
-- Added pace.js. [tidusjar]
+- New Crowdin translations (#2017) [Jamie]
-### **Fixes**
+- Fixed #1997. [tidusjar]
-- Finished the notes! Resolved #7. [Jamie Rees]
+- We now show the digital release date in the search if available #1962. [tidusjar]
-- #12. [Jamie Rees]
+- Css fixes (#2014) [Louis Laureys]
-- #12. [Jamie Rees]
+- API improvements. [Jamie]
-- Finished the status page #11 and some more work to #12. [Jamie Rees]
+- Fix #1599 (#2008) [Louis Laureys]
-- Resolved #7. [tidusjar]
+- Issue button fix (#2006) [Louis Laureys]
-- Small changes. [tidusjar]
+- Fixed #1886 #1865. [Jamie]
-- Yeah... [tidusjar]
+- Fixed the outstanding issue on #1995. [Jamie]
-- Fixed #5 and also added some tests to the availability checker. [tidusjar]
+- Fixed an issue for #1951. [tidusjar]
-- Started added tests. [Jamie Rees]
+- Try and fuzzy match the title and release if we cannot get the tvdb id or imdbid (depends on the media agents in Plex) #1951. [tidusjar]
-- Fixed an issue where the issues text appears larger. [Jamie Rees]
+- Fixed #1989 #1719. [Jamie]
+- Small changes that might fix #1985 but doubt it. [Jamie]
-## v1.1 (2016-03-13)
+- Should fix #1975. [tidusjar]
-### **New Features**
+- Fixed #1789. [tidusjar]
-- Update appveyor.yml. [Jamie]
+- Fixed #1968. [tidusjar]
-- Updated readme. [Jamie Rees]
+- Fixed #1978. [tidusjar]
-- Added the support for TV Series integrating with Sonarr. [Jamie Rees]
+- Fixed #1954. [tidusjar]
-- Added the functionality to pass a port through an argument. [tidusjar]
+- Small changes to the auto updater, let's see how this works. [Jamie]
-- Added the code to get the quality profiles from Sonarr Started plugging that into the UI. [Jamie Rees]
+- Fixed build. [Jamie]
-- Added the spinners #3. [tidusjar]
+- Fixed the update check for the master build. [Jamie]
-- Added the functionality for the admin to clear the issues. [tidusjar]
+- Removed accidently merged files. [Jamie]
-- Added the issues to the requests page. [tidusjar]
+- Create CODE_OF_CONDUCT.md. [Jamie]
-- Added user logout method and unit tests to cover it. [tidusjar]
+- Windows installation guide link update. [PotatoQuality]
-- Added DeniedUsers to the view. [tidusjar]
+- Fixed the issue comment issue #1914 also added another variable for issues {IssueUser} which is the user that reported the issue. [Jamie]
-- Added the denied user check to the UserLoginModule. added a test case to cover it. [tidusjar]
+- Fix #1914. [tidusjar]
-- Added a missing reference. [tidusjar]
+- Fixed #1914. [tidusjar]
-- Added first real test. [tidusjar]
+- Fixed build and added logging. [TidusJar]
-- Update README.md. [Jamie]
+- New Crowdin translations (#1934) [Jamie]
-- Added the latest version of nuget. [tidusjar]
+- Potential fix for #1942. [Jamie]
-- Added travisyml. [tidusjar]
+- Quick change to the Emby Availability rule to make it in line slightly with the Plex one. #1950. [Jamie]
-- Added logging. [tidusjar]
+- Turn off mobile notifications. [tidusjar]
-- Added missing files. [tidusjar]
+- FIXED PLEX!!!!! [tidusjar]
-- Update README.md. [Jamie]
+- Batch the PlexContentSync and increase the plex episode batch size. [tidusjar]
-- Added logging (Still WIP) [tidusjar]
+- Fixed the migration issue, it's too difficult to migrate the tables. [tidusjar]
-- Added favicon and also structured the HTML correctly. [tidusjar]
+- Fixed #1942. [tidusjar]
-- Updated the packages so everything is now with the correct framework (4.5.2) [tidusjar]
+- Fixed checkboxes style. [Jamie]
-- Added in deletion of requests. [tidusjar]
+- These are not the droids you are looking for. [Jamie]
-- Added test code. [tidusjar]
+- Fixed the wrong translation and see if we can VACUUM the db. [tidusjar]
-- Added dashboard. [tidusjar]
+- More translations and added a check on the baseurl to ensure it starts with a '/' [Jamie]
-- Added couchpotato page. [Jamie Rees]
+- More translations. [Jamie]
-- Added readme to the project and updated it. [Jamie Rees]
+- Fixed #1878 and added a Request all button when selecting episodes. [Jamie]
-- Added helpers. [tidusjar]
+- New translations en.json (Dutch) [Jamie]
-### **Fixes**
+- New translations en.json (German) [Jamie]
-- Bug fix, Couchpotato settings wouldn't show in release due to a Nancy bug. [Jamie Rees]
+- New translations en.json (German) [Jamie]
-- Small changes. [Jamie Rees]
+- New translations en.json (Danish) [Jamie]
-- First release, build 1.0.0. [Jamie Rees]
+- New translations en.json (Norwegian) [Jamie]
-- Removed the request limit since it's not currently being used. [Jamie Rees]
+- New translations en.json (Norwegian) [Jamie]
-- REmoved Sickbeared for the first release. [Jamie Rees]
+- New translations en.json (Norwegian) [Jamie]
-- Fixed #4 We now can manually set the status of a request. [tidusjar]
+- New translations en.json (Italian) [Jamie]
-- Made the pass in the port a bit more robust. [tidusjar]
+- New translations en.json (German) [Jamie]
-- Styling, Added the functionality for the Sonarr Profiles on the Admin page #2 resolved. [tidusjar]
+- New translations en.json (Dutch) [Jamie]
-- Fixed a bug in the Login and added a unit test to cover that. Added a button to approve an individual request. Fixed some minor bugs in the request screen. [Jamie Rees]
+- New translations en.json (Swedish) [Jamie]
-- Fixed the 'responsive' issue for the search and requests pages #3. [tidusjar]
+- New translations en.json (Spanish) [Jamie]
-- Styling! #3. [tidusjar]
+- New translations en.json (French) [Jamie]
-- Navbar category now will follow you to various screens #3. [tidusjar]
+- New translations en.json (Danish) [Jamie]
-- Fixed bugs with the 'other' reporting issue and also the clear issues. [tidusjar]
+- New translations en.json (Norwegian) [Jamie]
-- We now are appending the users name to who wrote the comment. Rather than it being unknown. [tidusjar]
+- New translations en.json (Italian) [Jamie]
-- More work on submitting issues. [tidusjar]
+- New translations en.json (German) [Jamie]
-- More test changes. [tidusjar]
+- New translations en.json (Dutch) [Jamie]
-- More tests to cover the login. [tidusjar]
+- New translations en.json (Swedish) [Jamie]
-- Refactoring. [tidusjar]
+- New translations en.json (Spanish) [Jamie]
-- Implimented the password part and authentication with Plex. [tidusjar]
+- New translations en.json (French) [Jamie]
-- Initial Use authentication is working. Need to do the password bit. [tidusjar]
+- New translations en.json (Danish) [Jamie]
-- Some error handling and ensure we are an admin to delete requests. [tidusjar]
+- New translations en.json (Danish) [Jamie]
-- Fixed the issue where the Release build would not show the admin screens! [tidusjar]
+- New translations en.json (Norwegian) [Jamie]
-- Fixes. [tidusjar]
+- New translations en.json (Italian) [Jamie]
-- Removed the DI part of the service. TinyIOC doesn't want to work with FluentScheduler. [tidusjar]
+- New translations en.json (German) [Jamie]
-- First pass at the plex update service. [tidusjar]
+- New translations en.json (Dutch) [Jamie]
-- Small changes. [Jamie Rees]
+- New translations en.json (Swedish) [Jamie]
-- Started to impliment the Plex checker. This will check plex every x minutes to see if there is any new content and then update the avalibility of the requests. [Jamie Rees]
+- New translations en.json (Spanish) [Jamie]
-- Mre work. [Jamie Rees]
+- New translations en.json (French) [Jamie]
-- Few small changes, added plex settings. [Jamie Rees]
+- New translations en.json (Danish) [Jamie]
-- Making the configuration actually do something. Setting a default configuration if there is no DB. [Jamie Rees]
+- New translations en.json (Swedish) [Jamie]
-- Remove post build. [Jamie Rees]
+- New translations en.json (Norwegian) [Jamie]
-- Small changes. [Jamie Rees]
+- Working on the movie matching. Stop dupes #1869. [tidusjar]
-- MOre work. [Jamie Rees]
+- Delete plex episodes on every run due to a bug, need to spend quite a bit of time on this. [tidusjar]
-- Fixed the issue when sending movies to CouchPotato. [Jamie Rees]
+- Fixed the issue where we were always adding emby episodes. Also fixed #1933. [tidusjar]
-- Add appveyor. [tidusjar]
+- New Crowdin translations (#1906) [Jamie]
-- Build it on 4.5. [tidusjar]
+- Add plain password for emby login (#1925) [dorian ALKOUM]
-- Upgraded .net to 4.6. [tidusjar]
+- Fixed #1924. [Jamie]
-- Typo2. [tidusjar]
+- Fixed the issue where I knocked out the ordering of notifications, oops. [tidusjar]
-- Typo. [tidusjar]
+- #1914 for the issue resolved notification. [Jamie]
-- Another update. [tidusjar]
+- #1916. [Jamie]
-- Fixed. [tidusjar]
+- Remove the placeholder. [Jamie]
-- More logging to figure out why the we cannot access the admin module in a release build. [tidusjar]
+- Feature arm (#1909) [Jamie]
-- Firstpass integrating with CouchPotato. [tidusjar]
+- New Crowdin translations (#1897) [Jamie]
-- Some styling. [tidusjar]
+- Fix logo cut off on login screen (#1896) [Louis Laureys]
-- Fixed the plex friends. Added some unit tests, moved the plex auth into it's own page. [tidusjar]
+- E-Mails: Only add poster table row if img is set (#1899) [Louis Laureys]
-- Fully switched the TV shows over to use the other provider. [Jamie Rees]
+- New Crowdin translations (#1884) [Jamie]
-- Renamed folders. [tidusjar]
+- Fix mobile layout (#1888) [Louis Laureys]
-- Assembly updates. [tidusjar]
+- Smal changes to the api. [tidusjar]
-- Moved the rest of the projects. [tidusjar]
+- OmBlur. [tidusjar]
-- Moved UI. [tidusjar]
+- Hide the password field if it's not needed #1815. [Jamie]
-- Mass rename. [tidusjar]
+- Should fix #1885. [Jamie]
-- Quick changes. [tidusjar]
+- Make user management table responsive (#1882) [Louis Laureys]
-- Started switching the TV over to the new provider (TheTVDB). Currently TV search is partially broken. It will search but we are not mapping all of the details. [tidusjar]
+- Fixed some stuff for omBlur. [Jamie]
-- Implimented the new TV show Provider (needed for Sonarr TheTvDB) [tidusjar]
+- Some work... No one take a look at this, it's a suprise. [Jamie]
-- Started the user auth. [tidusjar]
+- New Crowdin translations (#1858) [Jamie]
-- Some work on the requests page. [tidusjar]
+- When requesting Anime, we now mark it correctly as Anime in Sonarr. [tidusjar]
-- Made the 'requested' better and made the remove look nicer. [tidusjar]
+- Fixed #1879 and added the spans. [tidusjar]
-- Cleaned up the program a tiny bit. [tidusjar]
+- Some work on the auto updater #1460. [tidusjar]
-- Removed additional namespace. [tidusjar]
+- Removed the potential locking. [tidusjar]
-- Fixed some db issues and added a preview. [Jamie Rees]
+- Fixed #1863. [tidusjar]
-- More work on the settings. [Jamie Rees]
+- Moved the update check code from the External azure service into Ombi at /api/v1/update/BRANCH. [Jamie]
-- Upgraded Json.Net and Nancy packages. [Jamie Rees]
+- Fixed the UI erroring out, also dont show tv with no externals. [tidusjar]
-- Plex friends api. [Jamie Rees]
+- More memory management and improvements. [tidusjar]
-- Enabled trace logs. [tidusjar]
+- These are not needed, added accidentally (#1860) [Louis Laureys]
-- Sql syntax issue fixed. [tidusjar]
+- Some memory management improvements. [tidusjar]
-- Fixed release build. [tidusjar]
+- Fixed #1857. [tidusjar]
-- Small updates including assembly version. [tidusjar]
+- Delete old v2 ombi from v3 branch. [tidusjar]
-- Work on the requests page mostly done. [tidusjar]
+- New Crowdin translations (#1840) [Jamie]
-- Work on the TV request. the `latest` parameter is not being passed into the requestTvshow. [tidusjar]
+- Better login backgrounds! (#1852) [Louis Laureys]
-- Missing file. [tidusjar]
+- Fixed #1851. [tidusjar]
-- Using the IoC container now. [tidusjar]
+- Fixed #1826. [tidusjar]
-- Some plex work. [Jamie Rees]
+- Redo change #1848. [tidusjar]
-- More work. [Jamie Rees]
+- Fix the issue for welcome emails not sending. [tidusjar]
-- Removed the setup code out of the startup, since we attemtp to connect to the DB before that. [Jamie Rees]
+- Fix typo (#1845) [Kyle Lucy]
-- Some more work. Need to stop the form submitting on a request. [tidusjar]
+- Fix user mentions in Slack notifications (#1846) [Aljosa Asanovic]
-- Moved everything up a directory. [tidusjar]
+- If Radarr/Sonarr has noticed that the media is available, then mark it as available in the UI. [Jamie]
-- Lots of work! [tidusjar]
+- Fixed #1835. [Jamie]
-- Done most of the movie search work. [Jamie Rees]
+- Enable Multi MIME and add alt tags to images (#1838) [Louis Laureys]
-- First pass with RequestPlex. [tidusjar]
+- New Crowdin translations (#1816) [Jamie]
-- Initial commit. [Jamie]
+- Fixed #1832. [tidusjar]
+- Switch to use a single HTTPClient rather than a new one every request !dev. [tidusjar]
diff --git a/README.md b/README.md
index 9b0e212e1..cfc0ad23c 100644
--- a/README.md
+++ b/README.md
@@ -1,13 +1,19 @@
![](http://i.imgur.com/qQsN78U.png)
____
-[![Discord](https://img.shields.io/discord/102860784329052160.svg)](https://discord.gg/KxYZ64w)
+[![Discord](https://img.shields.io/discord/270828201473736705.svg)](https://discord.gg/Sa7wNWb)
[![Docker Pulls](https://img.shields.io/docker/pulls/linuxserver/ombi.svg)](https://hub.docker.com/r/linuxserver/ombi/)
[![Github All Releases](https://img.shields.io/github/downloads/tidusjar/Ombi/total.svg)](https://github.com/tidusjar/Ombi)
-[![firsttimersonly](http://img.shields.io/badge/first--timers--only-friendly-blue.svg?style=flat-square)](http://www.firsttimersonly.com/)
+[![firsttimersonly](http://img.shields.io/badge/first--timers--only-friendly-blue.svg)](http://www.firsttimersonly.com/)
[![Crowdin](https://d322cqt584bo4o.cloudfront.net/ombi/localized.svg)](https://crowdin.com/project/ombi)
-[![Patreon](https://www.ombi.io/img/patreondonate.svg)](https://patreon.com/tidusjar/Ombi)
-[![Paypal](https://www.ombi.io/img/paypaldonate.svg)](https://paypal.me/PlexRequestsNet)
+[![Patreon](https://img.shields.io/badge/patreon-donate-yellow.svg)](https://patreon.com/tidusjar/Ombi)
+[![Paypal](https://img.shields.io/badge/paypal-donate-yellow.svg)](https://paypal.me/PlexRequestsNet)
+
+___
+
+
+
+
___
diff --git a/appveyor.yml b/appveyor.yml
index c513c650e..862993a21 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -2,7 +2,7 @@ version: 3.0.{build}
configuration: Release
os: Visual Studio 2017
environment:
- nodejs_version: "7.8.0"
+ nodejs_version: "9.8.0"
install:
# Get the latest stable version of Node.js or io.js
@@ -15,19 +15,19 @@ test: off
after_build:
- cmd: >-
- appveyor PushArtifact "%APPVEYOR_BUILD_FOLDER%\src\Ombi\bin\Release\netcoreapp2.0\windows.zip"
+ appveyor PushArtifact "%APPVEYOR_BUILD_FOLDER%\src\Ombi\bin\Release\netcoreapp2.1\windows.zip"
- appveyor PushArtifact "%APPVEYOR_BUILD_FOLDER%\src\Ombi\bin\Release\netcoreapp2.0\osx.tar.gz"
+ appveyor PushArtifact "%APPVEYOR_BUILD_FOLDER%\src\Ombi\bin\Release\netcoreapp2.1\osx.tar.gz"
- appveyor PushArtifact "%APPVEYOR_BUILD_FOLDER%\src\Ombi\bin\Release\netcoreapp2.0\linux.tar.gz"
+ appveyor PushArtifact "%APPVEYOR_BUILD_FOLDER%\src\Ombi\bin\Release\netcoreapp2.1\linux.tar.gz"
- appveyor PushArtifact "%APPVEYOR_BUILD_FOLDER%\src\Ombi\bin\Release\netcoreapp2.0\linux-arm.tar.gz"
+ appveyor PushArtifact "%APPVEYOR_BUILD_FOLDER%\src\Ombi\bin\Release\netcoreapp2.1\linux-arm.tar.gz"
- appveyor PushArtifact "%APPVEYOR_BUILD_FOLDER%\src\Ombi\bin\Release\netcoreapp2.0\windows-32bit.zip"
+ appveyor PushArtifact "%APPVEYOR_BUILD_FOLDER%\src\Ombi\bin\Release\netcoreapp2.1\windows-32bit.zip"
# appveyor PushArtifact "%APPVEYOR_BUILD_FOLDER%\src\Ombi\bin\Release\netcoreapp2.0\linux-arm64.tar.gz"
diff --git a/build.cake b/build.cake
index 58eadd651..d706e7b6b 100644
--- a/build.cake
+++ b/build.cake
@@ -1,10 +1,10 @@
#tool "nuget:?package=GitVersion.CommandLine"
#addin "Cake.Gulp"
-#addin "Cake.Npm"
#addin "SharpZipLib"
#addin nuget:?package=Cake.Compression&version=0.1.4
#addin "Cake.Incubator"
+#addin "Cake.Yarn"
//////////////////////////////////////////////////////////////////////
// ARGUMENTS
@@ -26,7 +26,7 @@ var csProj = "./src/Ombi/Ombi.csproj"; // Path to the project.csproj
var solutionFile = "Ombi.sln"; // Solution file if needed
GitVersion versionInfo = null;
-var frameworkVer = "netcoreapp2.0";
+var frameworkVer = "netcoreapp2.1";
var buildSettings = new DotNetCoreBuildSettings
{
@@ -122,36 +122,19 @@ Task("SetVersionInfo")
Task("NPM")
.Does(() => {
- var settings = new NpmInstallSettings {
- LogLevel = NpmLogLevel.Silent,
- WorkingDirectory = webProjDir,
- Production = true
- };
-
- NpmInstall(settings);
+ Yarn.FromPath(webProjDir).Install();
});
Task("Gulp Publish")
.IsDependentOn("NPM")
- .Does(() => {
-
- var runScriptSettings = new NpmRunScriptSettings {
- ScriptName="publish",
- WorkingDirectory = webProjDir,
- };
-
- NpmRunScript(runScriptSettings);
+ .Does(() => {
+ Yarn.FromPath(webProjDir).RunScript("publish");
});
Task("TSLint")
.Does(() =>
{
- var settings = new NpmRunScriptSettings {
- WorkingDirectory = webProjDir,
- ScriptName = "lint"
- };
-
- NpmRunScript(settings);
+ Yarn.FromPath(webProjDir).RunScript("lint");
});
Task("PrePublish")
@@ -178,7 +161,7 @@ Task("Publish")
.IsDependentOn("Publish-OSX")
.IsDependentOn("Publish-Linux")
.IsDependentOn("Publish-Linux-ARM")
- //.IsDependentOn("Publish-Linux-ARM-64Bit")
+ .IsDependentOn("Publish-Linux-ARM-64Bit")
.IsDependentOn("Package");
Task("Publish-Windows")
@@ -189,6 +172,8 @@ Task("Publish-Windows")
DotNetCorePublish("./src/Ombi/Ombi.csproj", publishSettings);
CopyFile(buildDir + "/"+frameworkVer+"/win10-x64/Swagger.xml", buildDir + "/"+frameworkVer+"/win10-x64/published/Swagger.xml");
+
+ publishSettings.OutputDirectory = Directory(buildDir) + Directory(frameworkVer +"/win10-x64/published/updater");
DotNetCorePublish("./src/Ombi.Updater/Ombi.Updater.csproj", publishSettings);
});
@@ -200,6 +185,9 @@ Task("Publish-Windows-32bit")
DotNetCorePublish("./src/Ombi/Ombi.csproj", publishSettings);
CopyFile(buildDir + "/"+frameworkVer+"/win10-x86/Swagger.xml", buildDir + "/"+frameworkVer+"/win10-x86/published/Swagger.xml");
+
+
+ publishSettings.OutputDirectory = Directory(buildDir) + Directory(frameworkVer +"/win10-x86/published/updater");
DotNetCorePublish("./src/Ombi.Updater/Ombi.Updater.csproj", publishSettings);
});
@@ -211,6 +199,8 @@ Task("Publish-OSX")
DotNetCorePublish("./src/Ombi/Ombi.csproj", publishSettings);
CopyFile(buildDir + "/"+frameworkVer+"/osx-x64/Swagger.xml", buildDir + "/"+frameworkVer+"/osx-x64/published/Swagger.xml");
+
+ publishSettings.OutputDirectory = Directory(buildDir) + Directory(frameworkVer +"/osx-x64/published/updater");
DotNetCorePublish("./src/Ombi.Updater/Ombi.Updater.csproj", publishSettings);
});
@@ -222,6 +212,8 @@ Task("Publish-Linux")
DotNetCorePublish("./src/Ombi/Ombi.csproj", publishSettings);
CopyFile(buildDir + "/"+frameworkVer+"/linux-x64/Swagger.xml", buildDir + "/"+frameworkVer+"/linux-x64/published/Swagger.xml");
+
+ publishSettings.OutputDirectory = Directory(buildDir) + Directory(frameworkVer +"/linux-x64/published/updater");
DotNetCorePublish("./src/Ombi.Updater/Ombi.Updater.csproj", publishSettings);
});
@@ -235,6 +227,8 @@ Task("Publish-Linux-ARM")
CopyFile(
buildDir + "/"+frameworkVer+"/linux-arm/Swagger.xml",
buildDir + "/"+frameworkVer+"/linux-arm/published/Swagger.xml");
+
+ publishSettings.OutputDirectory = Directory(buildDir) + Directory(frameworkVer +"/linux-arm/published/updater");
DotNetCorePublish("./src/Ombi.Updater/Ombi.Updater.csproj", publishSettings);
});
@@ -248,6 +242,8 @@ Task("Publish-Linux-ARM-64Bit")
CopyFile(
buildDir + "/"+frameworkVer+"/linux-arm64/Swagger.xml",
buildDir + "/"+frameworkVer+"/linux-arm64/published/Swagger.xml");
+
+ publishSettings.OutputDirectory = Directory(buildDir) + Directory(frameworkVer +"/linux-arm64/published/updater");
DotNetCorePublish("./src/Ombi.Updater/Ombi.Updater.csproj", publishSettings);
});
diff --git a/music-placeholder.psd b/music-placeholder.psd
new file mode 100644
index 000000000..5715f850a
Binary files /dev/null and b/music-placeholder.psd differ
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 000000000..10c7546e4
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,291 @@
+{
+ "requires": true,
+ "lockfileVersion": 1,
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "requires": {
+ "sprintf-js": "1.0.3"
+ }
+ },
+ "babel-code-frame": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "requires": {
+ "chalk": "1.1.3",
+ "esutils": "2.0.2",
+ "js-tokens": "3.0.2"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ }
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "builtin-modules": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
+ "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8="
+ },
+ "chalk": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
+ "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
+ "requires": {
+ "ansi-styles": "3.2.1",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "5.4.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "requires": {
+ "color-convert": "1.9.1"
+ }
+ },
+ "supports-color": {
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
+ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
+ "requires": {
+ "has-flag": "3.0.0"
+ }
+ }
+ }
+ },
+ "color-convert": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz",
+ "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==",
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
+ },
+ "commander": {
+ "version": "2.15.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz",
+ "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag=="
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
+ },
+ "diff": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
+ "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA=="
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
+ },
+ "esprima": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz",
+ "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw=="
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs="
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls="
+ },
+ "js-yaml": {
+ "version": "3.12.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz",
+ "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==",
+ "requires": {
+ "argparse": "1.0.10",
+ "esprima": "4.0.0"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "requires": {
+ "brace-expansion": "1.1.11"
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
+ },
+ "path-parse": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz",
+ "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME="
+ },
+ "resolve": {
+ "version": "1.7.1",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz",
+ "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==",
+ "requires": {
+ "path-parse": "1.0.5"
+ }
+ },
+ "semver": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
+ "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA=="
+ },
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ },
+ "tslib": {
+ "version": "1.9.2",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.2.tgz",
+ "integrity": "sha512-AVP5Xol3WivEr7hnssHDsaM+lVrVXWUvd1cfXTRkTj80b//6g2wIFEH6hZG0muGZRnHGrfttpdzRk3YlBkWjKw=="
+ },
+ "tslint": {
+ "version": "5.10.0",
+ "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.10.0.tgz",
+ "integrity": "sha1-EeJrzLiK+gLdDZlWyuPUVAtfVMM=",
+ "requires": {
+ "babel-code-frame": "6.26.0",
+ "builtin-modules": "1.1.1",
+ "chalk": "2.4.1",
+ "commander": "2.15.1",
+ "diff": "3.5.0",
+ "glob": "7.1.2",
+ "js-yaml": "3.12.0",
+ "minimatch": "3.0.4",
+ "resolve": "1.7.1",
+ "semver": "5.5.0",
+ "tslib": "1.9.2",
+ "tsutils": "2.27.1"
+ }
+ },
+ "tsutils": {
+ "version": "2.27.1",
+ "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.27.1.tgz",
+ "integrity": "sha512-AE/7uzp32MmaHvNNFES85hhUDHFdFZp6OAiZcd6y4ZKKIg6orJTm8keYWBhIhrJQH3a4LzNKat7ZPXZt5aTf6w==",
+ "requires": {
+ "tslib": "1.9.2"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
+ }
+ }
+}
diff --git a/src/Ombi.Api.Emby/EmbyApi.cs b/src/Ombi.Api.Emby/EmbyApi.cs
index 3af6d0dd5..fcb989094 100644
--- a/src/Ombi.Api.Emby/EmbyApi.cs
+++ b/src/Ombi.Api.Emby/EmbyApi.cs
@@ -1,6 +1,7 @@
using System.Collections.Generic;
using System.Net.Http;
using System.Threading.Tasks;
+using Microsoft.EntityFrameworkCore.Internal;
using Newtonsoft.Json;
using Ombi.Api.Emby.Models;
using Ombi.Api.Emby.Models.Media.Tv;
@@ -90,27 +91,31 @@ namespace Ombi.Api.Emby
request.AddContentHeader("Content-Type", "application/json");
}
- public async Task> GetCollection(string mediaId, string apiKey, string userId, string baseUrl)
+ public async Task> GetCollection(string mediaId, string apiKey, string userId, string baseUrl)
{
var request = new Request($"emby/users/{userId}/items?parentId={mediaId}", baseUrl, HttpMethod.Get);
AddHeaders(request, apiKey);
- return await Api.Request>(request);
+ request.AddQueryString("Fields", "ProviderIds,Overview");
+
+ request.AddQueryString("VirtualItem", "False");
+
+ return await Api.Request>(request);
}
- public async Task> GetAllMovies(string apiKey, string userId, string baseUri)
+ public async Task> GetAllMovies(string apiKey, int startIndex, int count, string userId, string baseUri)
{
- return await GetAll("Movie", apiKey, userId, baseUri);
+ return await GetAll("Movie", apiKey, userId, baseUri, true, startIndex, count);
}
- public async Task> GetAllEpisodes(string apiKey, string userId, string baseUri)
+ public async Task> GetAllEpisodes(string apiKey, int startIndex, int count, string userId, string baseUri)
{
- return await GetAll("Episode", apiKey, userId, baseUri);
+ return await GetAll("Episode", apiKey, userId, baseUri, false, startIndex, count);
}
- public async Task> GetAllShows(string apiKey, string userId, string baseUri)
+ public async Task> GetAllShows(string apiKey, int startIndex, int count, string userId, string baseUri)
{
- return await GetAll("Series", apiKey, userId, baseUri);
+ return await GetAll("Series", apiKey, userId, baseUri, false, startIndex, count);
}
public async Task GetSeriesInformation(string mediaId, string apiKey, string userId, string baseUrl)
@@ -129,20 +134,40 @@ namespace Ombi.Api.Emby
private async Task GetInformation(string mediaId, string apiKey, string userId, string baseUrl)
{
var request = new Request($"emby/users/{userId}/items/{mediaId}", baseUrl, HttpMethod.Get);
+
AddHeaders(request, apiKey);
var response = await Api.RequestContent(request);
return JsonConvert.DeserializeObject(response);
}
+ private async Task> GetAll(string type, string apiKey, string userId, string baseUri, bool includeOverview = false)
+ {
+ var request = new Request($"emby/users/{userId}/items", baseUri, HttpMethod.Get);
+
+ request.AddQueryString("Recursive", true.ToString());
+ request.AddQueryString("IncludeItemTypes", type);
+ request.AddQueryString("Fields", includeOverview ? "ProviderIds,Overview" : "ProviderIds");
+ request.AddQueryString("VirtualItem", "False");
- private async Task> GetAll(string type, string apiKey, string userId, string baseUri)
+ AddHeaders(request, apiKey);
+
+
+ var obj = await Api.Request>(request);
+ return obj;
+ }
+ private async Task> GetAll(string type, string apiKey, string userId, string baseUri, bool includeOverview, int startIndex, int count)
{
var request = new Request($"emby/users/{userId}/items", baseUri, HttpMethod.Get);
request.AddQueryString("Recursive", true.ToString());
request.AddQueryString("IncludeItemTypes", type);
+ request.AddQueryString("Fields", includeOverview ? "ProviderIds,Overview" : "ProviderIds");
+ request.AddQueryString("startIndex", startIndex.ToString());
+ request.AddQueryString("limit", count.ToString());
+
+ request.AddQueryString("VirtualItem", "False");
AddHeaders(request, apiKey);
diff --git a/src/Ombi.Api.Emby/IEmbyApi.cs b/src/Ombi.Api.Emby/IEmbyApi.cs
index 625ae3c13..b4641ea5f 100644
--- a/src/Ombi.Api.Emby/IEmbyApi.cs
+++ b/src/Ombi.Api.Emby/IEmbyApi.cs
@@ -14,12 +14,17 @@ namespace Ombi.Api.Emby
Task LogIn(string username, string password, string apiKey, string baseUri);
Task LoginConnectUser(string username, string password);
- Task> GetAllMovies(string apiKey, string userId, string baseUri);
- Task> GetAllEpisodes(string apiKey, string userId, string baseUri);
- Task> GetAllShows(string apiKey, string userId, string baseUri);
+ Task> GetAllMovies(string apiKey, int startIndex, int count, string userId,
+ string baseUri);
- Task> GetCollection(string mediaId, string apiKey, string userId,
- string baseUrl);
+ Task> GetAllEpisodes(string apiKey, int startIndex, int count, string userId,
+ string baseUri);
+
+ Task> GetAllShows(string apiKey, int startIndex, int count, string userId,
+ string baseUri);
+
+ Task> GetCollection(string mediaId,
+ string apiKey, string userId, string baseUrl);
Task GetSeriesInformation(string mediaId, string apiKey, string userId, string baseUrl);
Task GetMovieInformation(string mediaId, string apiKey, string userId, string baseUrl);
diff --git a/src/Ombi.Api.Emby/Models/Media/Movie/EmbyMovie.cs b/src/Ombi.Api.Emby/Models/Media/Movie/EmbyMovie.cs
index 34038edd8..a10ddaae6 100644
--- a/src/Ombi.Api.Emby/Models/Media/Movie/EmbyMovie.cs
+++ b/src/Ombi.Api.Emby/Models/Media/Movie/EmbyMovie.cs
@@ -28,5 +28,7 @@ namespace Ombi.Api.Emby.Models.Movie
public string MediaType { get; set; }
public bool HasSubtitles { get; set; }
public int CriticRating { get; set; }
+ public string Overview { get; set; }
+ public EmbyProviderids ProviderIds { get; set; }
}
}
\ No newline at end of file
diff --git a/src/Ombi.Api.Emby/Models/Media/Tv/EmbyEpisodes.cs b/src/Ombi.Api.Emby/Models/Media/Tv/EmbyEpisodes.cs
index d02c99e41..d76915923 100644
--- a/src/Ombi.Api.Emby/Models/Media/Tv/EmbyEpisodes.cs
+++ b/src/Ombi.Api.Emby/Models/Media/Tv/EmbyEpisodes.cs
@@ -39,5 +39,6 @@ namespace Ombi.Api.Emby.Models.Media.Tv
public string LocationType { get; set; }
public string MediaType { get; set; }
public bool HasSubtitles { get; set; }
+ public EmbyProviderids ProviderIds { get; set; }
}
}
\ No newline at end of file
diff --git a/src/Ombi.Api.Emby/Models/Media/Tv/EmbySeries.cs b/src/Ombi.Api.Emby/Models/Media/Tv/EmbySeries.cs
index 853c64d10..2aaf8d492 100644
--- a/src/Ombi.Api.Emby/Models/Media/Tv/EmbySeries.cs
+++ b/src/Ombi.Api.Emby/Models/Media/Tv/EmbySeries.cs
@@ -26,5 +26,7 @@ namespace Ombi.Api.Emby.Models.Media.Tv
public string[] BackdropImageTags { get; set; }
public string LocationType { get; set; }
public DateTime EndDate { get; set; }
+
+ public EmbyProviderids ProviderIds { get; set; }
}
}
\ No newline at end of file
diff --git a/src/Ombi.Api.FanartTv/FanartTvApi.cs b/src/Ombi.Api.FanartTv/FanartTvApi.cs
index bc819311c..55caef72c 100644
--- a/src/Ombi.Api.FanartTv/FanartTvApi.cs
+++ b/src/Ombi.Api.FanartTv/FanartTvApi.cs
@@ -21,6 +21,7 @@ namespace Ombi.Api.FanartTv
{
var request = new Request($"tv/{tvdbId}", Endpoint, HttpMethod.Get);
request.AddHeader("api-key", token);
+ request.IgnoreErrors = true;
try
{
return await Api.Request(request);
@@ -36,6 +37,7 @@ namespace Ombi.Api.FanartTv
{
var request = new Request($"movies/{movieOrImdbId}", Endpoint, HttpMethod.Get);
request.AddHeader("api-key", token);
+ request.IgnoreErrors = true;
return await Api.Request(request);
}
diff --git a/src/Ombi.Api.Lidarr/ILidarrApi.cs b/src/Ombi.Api.Lidarr/ILidarrApi.cs
new file mode 100644
index 000000000..4a23c6200
--- /dev/null
+++ b/src/Ombi.Api.Lidarr/ILidarrApi.cs
@@ -0,0 +1,27 @@
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using Ombi.Api.Lidarr.Models;
+
+namespace Ombi.Api.Lidarr
+{
+ public interface ILidarrApi
+ {
+ Task> AlbumLookup(string searchTerm, string apiKey, string baseUrl);
+ Task> ArtistLookup(string searchTerm, string apiKey, string baseUrl);
+ Task> GetProfiles(string apiKey, string baseUrl);
+ Task> GetRootFolders(string apiKey, string baseUrl);
+ Task GetArtist(int artistId, string apiKey, string baseUrl);
+ Task GetArtistByForeignId(string foreignArtistId, string apiKey, string baseUrl);
+ Task GetAlbumsByArtist(string foreignArtistId);
+ Task GetAlbumByForeignId(string foreignArtistId, string apiKey, string baseUrl);
+ Task> GetArtists(string apiKey, string baseUrl);
+ Task> GetAllAlbums(string apiKey, string baseUrl);
+ Task AddArtist(ArtistAdd artist, string apiKey, string baseUrl);
+ Task MontiorAlbum(int albumId, string apiKey, string baseUrl);
+ Task> GetAllAlbumsByArtistId(int artistId, string apiKey, string baseUrl);
+ Task> GetMetadataProfile(string apiKey, string baseUrl);
+ Task> GetLanguageProfile(string apiKey, string baseUrl);
+ Task Status(string apiKey, string baseUrl);
+ Task AlbumSearch(int[] albumIds, string apiKey, string baseUrl);
+ }
+}
\ No newline at end of file
diff --git a/src/Ombi.Api.Lidarr/LidarrApi.cs b/src/Ombi.Api.Lidarr/LidarrApi.cs
new file mode 100644
index 000000000..a6a283703
--- /dev/null
+++ b/src/Ombi.Api.Lidarr/LidarrApi.cs
@@ -0,0 +1,170 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Net.Http;
+using System.Threading.Tasks;
+using Microsoft.Extensions.Logging;
+using Ombi.Api.Lidarr.Models;
+
+namespace Ombi.Api.Lidarr
+{
+ public class LidarrApi : ILidarrApi
+ {
+ public LidarrApi(ILogger logger, IApi api)
+ {
+ Api = api;
+ Logger = logger;
+ }
+
+ private IApi Api { get; }
+ private ILogger Logger { get; }
+
+ private const string ApiVersion = "/api/v1";
+
+ public Task> GetProfiles(string apiKey, string baseUrl)
+ {
+ var request = new Request($"{ApiVersion}/qualityprofile", baseUrl, HttpMethod.Get);
+
+ AddHeaders(request, apiKey);
+ return Api.Request>(request);
+ }
+
+ public Task> GetRootFolders(string apiKey, string baseUrl)
+ {
+ var request = new Request($"{ApiVersion}/rootfolder", baseUrl, HttpMethod.Get);
+
+ AddHeaders(request, apiKey);
+ return Api.Request>(request);
+ }
+
+ public async Task> ArtistLookup(string searchTerm, string apiKey, string baseUrl)
+ {
+ var request = new Request($"{ApiVersion}/Artist/lookup", baseUrl, HttpMethod.Get);
+ request.AddQueryString("term", searchTerm);
+
+ AddHeaders(request, apiKey);
+ return await Api.Request>(request);
+ }
+
+ public Task> AlbumLookup(string searchTerm, string apiKey, string baseUrl)
+ {
+ var request = new Request($"{ApiVersion}/Album/lookup", baseUrl, HttpMethod.Get);
+ request.AddQueryString("term", searchTerm);
+
+ AddHeaders(request, apiKey);
+ return Api.Request>(request);
+ }
+
+ public Task GetArtist(int artistId, string apiKey, string baseUrl)
+ {
+ var request = new Request($"{ApiVersion}/artist/{artistId}", baseUrl, HttpMethod.Get);
+
+ AddHeaders(request, apiKey);
+ return Api.Request(request);
+ }
+
+ public async Task GetArtistByForeignId(string foreignArtistId, string apiKey, string baseUrl)
+ {
+ var request = new Request($"{ApiVersion}/artist/lookup", baseUrl, HttpMethod.Get);
+
+ request.AddQueryString("term", $"lidarr:{foreignArtistId}");
+ AddHeaders(request, apiKey);
+ return (await Api.Request>(request)).FirstOrDefault();
+ }
+
+ public async Task GetAlbumByForeignId(string foreignArtistId, string apiKey, string baseUrl)
+ {
+ var request = new Request($"{ApiVersion}/album/lookup", baseUrl, HttpMethod.Get);
+
+ request.AddQueryString("term", $"lidarr:{foreignArtistId}");
+ AddHeaders(request, apiKey);
+ var albums = await Api.Request>(request);
+ return albums.FirstOrDefault();
+ }
+
+ public Task GetAlbumsByArtist(string foreignArtistId)
+ {
+ var request = new Request(string.Empty, $"https://api.lidarr.audio/api/v0.3/artist/{foreignArtistId}",
+ HttpMethod.Get) {IgnoreBaseUrlAppend = true};
+ return Api.Request(request);
+ }
+
+ public Task> GetArtists(string apiKey, string baseUrl)
+ {
+ var request = new Request($"{ApiVersion}/artist", baseUrl, HttpMethod.Get);
+
+ AddHeaders(request, apiKey);
+ return Api.Request>(request);
+ }
+
+ public Task> GetAllAlbums(string apiKey, string baseUrl)
+ {
+ var request = new Request($"{ApiVersion}/album", baseUrl, HttpMethod.Get);
+
+ AddHeaders(request, apiKey);
+ return Api.Request>(request);
+ }
+
+ public Task AddArtist(ArtistAdd artist, string apiKey, string baseUrl)
+ {
+ var request = new Request($"{ApiVersion}/artist", baseUrl, HttpMethod.Post);
+ request.AddJsonBody(artist);
+ AddHeaders(request, apiKey);
+ return Api.Request(request);
+ }
+
+ public async Task MontiorAlbum(int albumId, string apiKey, string baseUrl)
+ {
+ var request = new Request($"{ApiVersion}/album/monitor", baseUrl, HttpMethod.Put);
+ request.AddJsonBody(new
+ {
+ albumIds = new[] { albumId },
+ monitored = true
+ });
+ AddHeaders(request, apiKey);
+ return (await Api.Request>(request)).FirstOrDefault();
+ }
+
+ public Task> GetAllAlbumsByArtistId(int artistId, string apiKey, string baseUrl)
+ {
+ var request = new Request($"{ApiVersion}/album", baseUrl, HttpMethod.Get);
+ request.AddQueryString("artistId", artistId.ToString());
+ AddHeaders(request, apiKey);
+ return Api.Request>(request);
+ }
+
+ public Task> GetLanguageProfile(string apiKey, string baseUrl)
+ {
+ var request = new Request($"{ApiVersion}/languageprofile", baseUrl, HttpMethod.Get);
+ AddHeaders(request, apiKey);
+ return Api.Request>(request);
+ }
+
+ public Task> GetMetadataProfile(string apiKey, string baseUrl)
+ {
+ var request = new Request($"{ApiVersion}/metadataprofile", baseUrl, HttpMethod.Get);
+ AddHeaders(request, apiKey);
+ return Api.Request>(request);
+ }
+
+ public Task Status(string apiKey, string baseUrl)
+ {
+ var request = new Request($"{ApiVersion}/system/status", baseUrl, HttpMethod.Get);
+ AddHeaders(request, apiKey);
+ return Api.Request(request);
+ }
+
+ public Task AlbumSearch(int[] albumIds, string apiKey, string baseUrl)
+ {
+ var request = new Request($"{ApiVersion}/command/", baseUrl, HttpMethod.Post);
+ request.AddJsonBody(new { name = "AlbumSearch", albumIds });
+ AddHeaders(request, apiKey);
+ return Api.Request(request);
+ }
+
+ private void AddHeaders(Request request, string key)
+ {
+ request.AddHeader("X-Api-Key", key);
+ }
+ }
+}
diff --git a/src/Ombi.Api.Lidarr/Models/AlbumByArtistResponse.cs b/src/Ombi.Api.Lidarr/Models/AlbumByArtistResponse.cs
new file mode 100644
index 000000000..62f19651f
--- /dev/null
+++ b/src/Ombi.Api.Lidarr/Models/AlbumByArtistResponse.cs
@@ -0,0 +1,34 @@
+namespace Ombi.Api.Lidarr.Models
+{
+ public class AlbumByArtistResponse
+ {
+ public Album[] Albums { get; set; }
+ public string ArtistName { get; set; }
+ public string Disambiguation { get; set; }
+ public string Id { get; set; }
+ public Image[] Images { get; set; }
+ public Link[] Links { get; set; }
+ public string Overview { get; set; }
+ public Rating Rating { get; set; }
+ public string SortName { get; set; }
+ public string Status { get; set; }
+ public string Type { get; set; }
+ }
+
+ public class Rating
+ {
+ public int Count { get; set; }
+ public decimal Value { get; set; }
+ }
+
+ public class Album
+ {
+ public string Disambiguation { get; set; }
+ public string Id { get; set; }
+ public string ReleaseDate { get; set; }
+ public string[] ReleaseStatuses { get; set; }
+ public string[] SecondaryTypes { get; set; }
+ public string Title { get; set; }
+ public string Type { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/src/Ombi.Api.Lidarr/Models/AlbumLookup.cs b/src/Ombi.Api.Lidarr/Models/AlbumLookup.cs
new file mode 100644
index 000000000..b2394eb5f
--- /dev/null
+++ b/src/Ombi.Api.Lidarr/Models/AlbumLookup.cs
@@ -0,0 +1,25 @@
+using System;
+
+namespace Ombi.Api.Lidarr.Models
+{
+ public class AlbumLookup
+ {
+ public string title { get; set; }
+ public int artistId { get; set; }
+ public string foreignAlbumId { get; set; }
+ public bool monitored { get; set; }
+ public int profileId { get; set; }
+ public int duration { get; set; }
+ public string albumType { get; set; }
+ public string[] secondaryTypes { get; set; }
+ public int mediumCount { get; set; }
+ public Ratings ratings { get; set; }
+ public DateTime releaseDate { get; set; }
+ //public object[] releases { get; set; }
+ public object[] genres { get; set; }
+ //public object[] media { get; set; }
+ public Artist artist { get; set; }
+ public Image[] images { get; set; }
+ public string remoteCover { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/src/Ombi.Api.Lidarr/Models/AlbumResponse.cs b/src/Ombi.Api.Lidarr/Models/AlbumResponse.cs
new file mode 100644
index 000000000..f9d35c43b
--- /dev/null
+++ b/src/Ombi.Api.Lidarr/Models/AlbumResponse.cs
@@ -0,0 +1,27 @@
+using System;
+
+namespace Ombi.Api.Lidarr.Models
+{
+ public class AlbumResponse
+ {
+ public string title { get; set; }
+ public string disambiguation { get; set; }
+ public int artistId { get; set; }
+ public string foreignAlbumId { get; set; }
+ public bool monitored { get; set; }
+ public int profileId { get; set; }
+ public int duration { get; set; }
+ public string albumType { get; set; }
+ public object[] secondaryTypes { get; set; }
+ public int mediumCount { get; set; }
+ public Ratings ratings { get; set; }
+ public DateTime releaseDate { get; set; }
+ public Currentrelease currentRelease { get; set; }
+ public Release[] releases { get; set; }
+ public object[] genres { get; set; }
+ public Medium[] media { get; set; }
+ public Image[] images { get; set; }
+ public Statistics statistics { get; set; }
+ public int id { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/src/Ombi.Api.Lidarr/Models/Artist.cs b/src/Ombi.Api.Lidarr/Models/Artist.cs
new file mode 100644
index 000000000..bc6afc20e
--- /dev/null
+++ b/src/Ombi.Api.Lidarr/Models/Artist.cs
@@ -0,0 +1,25 @@
+using System;
+
+namespace Ombi.Api.Lidarr.Models
+{
+ public class Artist
+ {
+ public string status { get; set; }
+ public bool ended { get; set; }
+ public string artistName { get; set; }
+ public string foreignArtistId { get; set; }
+ public int tadbId { get; set; }
+ public int discogsId { get; set; }
+ public object[] links { get; set; }
+ public object[] images { get; set; }
+ public int qualityProfileId { get; set; }
+ public int languageProfileId { get; set; }
+ public int metadataProfileId { get; set; }
+ public bool albumFolder { get; set; }
+ public bool monitored { get; set; }
+ public object[] genres { get; set; }
+ public object[] tags { get; set; }
+ public DateTime added { get; set; }
+ public Statistics statistics { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/src/Ombi.Api.Lidarr/Models/ArtistAdd.cs b/src/Ombi.Api.Lidarr/Models/ArtistAdd.cs
new file mode 100644
index 000000000..65aec3ac8
--- /dev/null
+++ b/src/Ombi.Api.Lidarr/Models/ArtistAdd.cs
@@ -0,0 +1,49 @@
+using System;
+using System.Net.Mime;
+
+namespace Ombi.Api.Lidarr.Models
+{
+ public class ArtistAdd
+ {
+ public string status { get; set; }
+ public bool ended { get; set; }
+ public string artistName { get; set; }
+ public string foreignArtistId { get; set; }
+ public int tadbId { get; set; }
+ public int discogsId { get; set; }
+ public string overview { get; set; }
+ public string disambiguation { get; set; }
+ public Link[] links { get; set; }
+ public Image[] images { get; set; }
+ public string remotePoster { get; set; }
+ public int qualityProfileId { get; set; }
+ public int languageProfileId { get; set; }
+ public int metadataProfileId { get; set; }
+ public bool albumFolder { get; set; }
+ public bool monitored { get; set; }
+ public string cleanName { get; set; }
+ public string sortName { get; set; }
+ public object[] tags { get; set; }
+ public DateTime added { get; set; }
+ public Ratings ratings { get; set; }
+ public Statistics statistics { get; set; }
+ public Addoptions addOptions { get; set; }
+ public string rootFolderPath { get; set; }
+ }
+
+ public class Addoptions
+ {
+ ///
+ /// Future = 1
+ /// Missing = 2
+ /// Existing = 3
+ /// First = 5
+ /// Latest = 4
+ /// None = 6
+ ///
+ public int selectedOption { get; set; }
+ public bool monitored { get; set; }
+ public bool searchForMissingAlbums { get; set; }
+ public string[] AlbumsToMonitor { get; set; } // Uses the MusicBrainzAlbumId!
+ }
+}
\ No newline at end of file
diff --git a/src/Ombi.Api.Lidarr/Models/ArtistLookup.cs b/src/Ombi.Api.Lidarr/Models/ArtistLookup.cs
new file mode 100644
index 000000000..aa454c0a0
--- /dev/null
+++ b/src/Ombi.Api.Lidarr/Models/ArtistLookup.cs
@@ -0,0 +1,32 @@
+using System;
+using System.Net.Mime;
+
+namespace Ombi.Api.Lidarr.Models
+{
+ public class ArtistLookup
+ {
+ public string status { get; set; }
+ public bool ended { get; set; }
+ public string artistName { get; set; }
+ public string foreignArtistId { get; set; }
+ public int tadbId { get; set; }
+ public int discogsId { get; set; }
+ public string overview { get; set; }
+ public string artistType { get; set; }
+ public string disambiguation { get; set; }
+ public Link[] links { get; set; }
+ public Image[] images { get; set; }
+ public string remotePoster { get; set; }
+ public int qualityProfileId { get; set; }
+ public int languageProfileId { get; set; }
+ public int metadataProfileId { get; set; }
+ public bool albumFolder { get; set; }
+ public bool monitored { get; set; }
+ public string cleanName { get; set; }
+ public string sortName { get; set; }
+ public object[] tags { get; set; }
+ public DateTime added { get; set; }
+ public Ratings ratings { get; set; }
+ public Statistics statistics { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/src/Ombi.Api.Lidarr/Models/ArtistResult.cs b/src/Ombi.Api.Lidarr/Models/ArtistResult.cs
new file mode 100644
index 000000000..32b3aaab5
--- /dev/null
+++ b/src/Ombi.Api.Lidarr/Models/ArtistResult.cs
@@ -0,0 +1,93 @@
+using System;
+
+namespace Ombi.Api.Lidarr.Models
+{
+
+ public class ArtistResult
+ {
+ public string status { get; set; }
+ public bool ended { get; set; }
+ public DateTime lastInfoSync { get; set; }
+ public string artistName { get; set; }
+ public string foreignArtistId { get; set; }
+ public int tadbId { get; set; }
+ public int discogsId { get; set; }
+ public string overview { get; set; }
+ public string artistType { get; set; }
+ public string disambiguation { get; set; }
+ public Link[] links { get; set; }
+ public Nextalbum nextAlbum { get; set; }
+ public Image[] images { get; set; }
+ public string path { get; set; }
+ public int qualityProfileId { get; set; }
+ public int languageProfileId { get; set; }
+ public int metadataProfileId { get; set; }
+ public bool albumFolder { get; set; }
+ public bool monitored { get; set; }
+ public object[] genres { get; set; }
+ public string cleanName { get; set; }
+ public string sortName { get; set; }
+ public object[] tags { get; set; }
+ public DateTime added { get; set; }
+ public Ratings ratings { get; set; }
+ public Statistics statistics { get; set; }
+ public int id { get; set; }
+ }
+
+ public class Nextalbum
+ {
+ public string foreignAlbumId { get; set; }
+ public int artistId { get; set; }
+ public string title { get; set; }
+ public string disambiguation { get; set; }
+ public string cleanTitle { get; set; }
+ public DateTime releaseDate { get; set; }
+ public int profileId { get; set; }
+ public int duration { get; set; }
+ public bool monitored { get; set; }
+ public object[] images { get; set; }
+ public object[] genres { get; set; }
+ public Medium[] media { get; set; }
+ public DateTime lastInfoSync { get; set; }
+ public DateTime added { get; set; }
+ public string albumType { get; set; }
+ public object[] secondaryTypes { get; set; }
+ public Ratings ratings { get; set; }
+ public Release[] releases { get; set; }
+ public Currentrelease currentRelease { get; set; }
+ public int id { get; set; }
+ }
+
+ public class Currentrelease
+ {
+ public string id { get; set; }
+ public string title { get; set; }
+ public DateTime releaseDate { get; set; }
+ public int trackCount { get; set; }
+ public int mediaCount { get; set; }
+ public string disambiguation { get; set; }
+ public string[] country { get; set; }
+ public string format { get; set; }
+ public string[] label { get; set; }
+ }
+
+ public class Medium
+ {
+ public int number { get; set; }
+ public string name { get; set; }
+ public string format { get; set; }
+ }
+
+ public class Release
+ {
+ public string id { get; set; }
+ public string title { get; set; }
+ public DateTime releaseDate { get; set; }
+ public int trackCount { get; set; }
+ public int mediaCount { get; set; }
+ public string disambiguation { get; set; }
+ public string[] country { get; set; }
+ public string format { get; set; }
+ public string[] label { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/src/Ombi.Api.Lidarr/Models/CommandResult.cs b/src/Ombi.Api.Lidarr/Models/CommandResult.cs
new file mode 100644
index 000000000..5271de91f
--- /dev/null
+++ b/src/Ombi.Api.Lidarr/Models/CommandResult.cs
@@ -0,0 +1,15 @@
+using System;
+
+namespace Ombi.Api.Lidarr.Models
+{
+
+ public class CommandResult
+ {
+ public string name { get; set; }
+ public DateTime queued { get; set; }
+ public DateTime stateChangeTime { get; set; }
+ public bool sendUpdatesToClient { get; set; }
+ public string status { get; set; }
+ public int id { get; set; }
+ }
+}
diff --git a/src/Ombi.Api.Lidarr/Models/Image.cs b/src/Ombi.Api.Lidarr/Models/Image.cs
new file mode 100644
index 000000000..172a13fe9
--- /dev/null
+++ b/src/Ombi.Api.Lidarr/Models/Image.cs
@@ -0,0 +1,8 @@
+namespace Ombi.Api.Lidarr.Models
+{
+ public class Image
+ {
+ public string coverType { get; set; }
+ public string url { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/src/Ombi.Api.Lidarr/Models/LanguageProfiles.cs b/src/Ombi.Api.Lidarr/Models/LanguageProfiles.cs
new file mode 100644
index 000000000..f503fe33f
--- /dev/null
+++ b/src/Ombi.Api.Lidarr/Models/LanguageProfiles.cs
@@ -0,0 +1,8 @@
+namespace Ombi.Api.Lidarr.Models
+{
+ public class LanguageProfiles
+ {
+ public string name { get; set; }
+ public int id { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/src/Ombi.Api.Lidarr/Models/LidarrProfile.cs b/src/Ombi.Api.Lidarr/Models/LidarrProfile.cs
new file mode 100644
index 000000000..19ebda5a6
--- /dev/null
+++ b/src/Ombi.Api.Lidarr/Models/LidarrProfile.cs
@@ -0,0 +1,23 @@
+using System.Collections.Generic;
+
+namespace Ombi.Api.Lidarr.Models
+{
+ public class Quality
+ {
+ public int id { get; set; }
+ public string name { get; set; }
+ }
+
+ public class Item
+ {
+ public Quality quality { get; set; }
+ public bool allowed { get; set; }
+ }
+
+ public class LidarrProfile
+{
+ public string name { get; set; }
+ public List- items { get; set; }
+ public int id { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/src/Ombi.Api.Lidarr/Models/LidarrRootFolder.cs b/src/Ombi.Api.Lidarr/Models/LidarrRootFolder.cs
new file mode 100644
index 000000000..a3a252f04
--- /dev/null
+++ b/src/Ombi.Api.Lidarr/Models/LidarrRootFolder.cs
@@ -0,0 +1,11 @@
+namespace Ombi.Api.Lidarr.Models
+{
+ public class LidarrRootFolder
+ {
+ public string path { get; set; }
+ public long freeSpace { get; set; }
+ public object[] unmappedFolders { get; set; }
+ public int id { get; set; }
+ }
+
+}
\ No newline at end of file
diff --git a/src/Ombi.Api.Lidarr/Models/LidarrStatus.cs b/src/Ombi.Api.Lidarr/Models/LidarrStatus.cs
new file mode 100644
index 000000000..27f6c1820
--- /dev/null
+++ b/src/Ombi.Api.Lidarr/Models/LidarrStatus.cs
@@ -0,0 +1,31 @@
+using System;
+
+namespace Ombi.Api.Lidarr.Models
+{
+ public class LidarrStatus
+ {
+ public string version { get; set; }
+ public DateTime buildTime { get; set; }
+ public bool isDebug { get; set; }
+ public bool isProduction { get; set; }
+ public bool isAdmin { get; set; }
+ public bool isUserInteractive { get; set; }
+ public string startupPath { get; set; }
+ public string appData { get; set; }
+ public string osName { get; set; }
+ public string osVersion { get; set; }
+ public bool isMonoRuntime { get; set; }
+ public bool isMono { get; set; }
+ public bool isLinux { get; set; }
+ public bool isOsx { get; set; }
+ public bool isWindows { get; set; }
+ public string mode { get; set; }
+ public string branch { get; set; }
+ public string authentication { get; set; }
+ public string sqliteVersion { get; set; }
+ public int migrationVersion { get; set; }
+ public string urlBase { get; set; }
+ public string runtimeVersion { get; set; }
+ public string runtimeName { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/src/Ombi.Api.Lidarr/Models/Link.cs b/src/Ombi.Api.Lidarr/Models/Link.cs
new file mode 100644
index 000000000..492ac0426
--- /dev/null
+++ b/src/Ombi.Api.Lidarr/Models/Link.cs
@@ -0,0 +1,8 @@
+namespace Ombi.Api.Lidarr.Models
+{
+ public class Link
+ {
+ public string url { get; set; }
+ public string name { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/src/Ombi.Api.Lidarr/Models/MetadataProfile.cs b/src/Ombi.Api.Lidarr/Models/MetadataProfile.cs
new file mode 100644
index 000000000..bda3333f1
--- /dev/null
+++ b/src/Ombi.Api.Lidarr/Models/MetadataProfile.cs
@@ -0,0 +1,8 @@
+namespace Ombi.Api.Lidarr.Models
+{
+ public class MetadataProfile
+ {
+ public string name { get; set; }
+ public int id { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/src/Ombi.Api.Lidarr/Models/Ratings.cs b/src/Ombi.Api.Lidarr/Models/Ratings.cs
new file mode 100644
index 000000000..f2aac4203
--- /dev/null
+++ b/src/Ombi.Api.Lidarr/Models/Ratings.cs
@@ -0,0 +1,8 @@
+namespace Ombi.Api.Lidarr.Models
+{
+ public class Ratings
+ {
+ public int votes { get; set; }
+ public decimal value { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/src/Ombi.Api.Lidarr/Models/Statistics.cs b/src/Ombi.Api.Lidarr/Models/Statistics.cs
new file mode 100644
index 000000000..77c6b5217
--- /dev/null
+++ b/src/Ombi.Api.Lidarr/Models/Statistics.cs
@@ -0,0 +1,12 @@
+namespace Ombi.Api.Lidarr.Models
+{
+ public class Statistics
+ {
+ public int albumCount { get; set; }
+ public int trackFileCount { get; set; }
+ public int trackCount { get; set; }
+ public int totalTrackCount { get; set; }
+ public long sizeOnDisk { get; set; }
+ public decimal percentOfEpisodes { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/src/Ombi.Api.Lidarr/Ombi.Api.Lidarr.csproj b/src/Ombi.Api.Lidarr/Ombi.Api.Lidarr.csproj
new file mode 100644
index 000000000..a3651df3c
--- /dev/null
+++ b/src/Ombi.Api.Lidarr/Ombi.Api.Lidarr.csproj
@@ -0,0 +1,11 @@
+
+
+
+ netstandard2.0
+
+
+
+
+
+
+
diff --git a/src/Ombi.Api.Mattermost/Models/MattermostClient.cs b/src/Ombi.Api.Mattermost/Models/MattermostClient.cs
index 96d3e33f4..ad04947b1 100644
--- a/src/Ombi.Api.Mattermost/Models/MattermostClient.cs
+++ b/src/Ombi.Api.Mattermost/Models/MattermostClient.cs
@@ -120,8 +120,10 @@ namespace Ombi.Api.Mattermost.Models
var attIndex = outMessages[msgCount].Attachments.Count - 1;
//Get the text lines
- lines = att.Text.Split(new[] { "\r\n", "\r", "\n" }, StringSplitOptions.None);
-
+ if (!String.IsNullOrEmpty(att.Text))
+ {
+ lines = att.Text.Split(new[] { "\r\n", "\r", "\n" }, StringSplitOptions.None);
+ }
foreach (var line in lines)
{
//Get the total length of all attachments on the current outgoing message
@@ -153,8 +155,9 @@ namespace Ombi.Api.Mattermost.Models
foreach (var msg in outMessages)
{
- var request = new Request("", _webhookUrl.ToString(), HttpMethod.Post);
+ var request = new Request(_webhookUrl.ToString(), "", HttpMethod.Post);
request.AddJsonBody(msg);
+ request.AddHeader("Host", _webhookUrl.Host);
await api.Request(request);
}
}
diff --git a/src/Ombi.Api.Mattermost/Models/MattermostMessage.cs b/src/Ombi.Api.Mattermost/Models/MattermostMessage.cs
index d8fe52b09..83171627a 100644
--- a/src/Ombi.Api.Mattermost/Models/MattermostMessage.cs
+++ b/src/Ombi.Api.Mattermost/Models/MattermostMessage.cs
@@ -33,7 +33,7 @@ namespace Ombi.Api.Mattermost.Models
/// Bot/User Icon
///
[JsonProperty(PropertyName = "icon_url")]
- public Uri IconUrl { get; set; }
+ public string IconUrl { get; set; }
///
/// Message body. Supports Markdown
@@ -142,7 +142,7 @@ namespace Ombi.Api.Mattermost.Models
/// Large images are resized to a maximum width of 400px or a maximum height of 300px, while still maintaining the original aspect ratio.
///
[JsonProperty(PropertyName = "image_url")]
- public Uri ImageUrl { get; set; }
+ public string ImageUrl { get; set; }
///
/// An optional URL to an image file(GIF, JPEG, PNG, or BMP) that is displayed as a 75x75 pixel thumbnail on the right side of an attachment.
diff --git a/src/Ombi.Api.Mattermost/Ombi.Api.Mattermost.csproj b/src/Ombi.Api.Mattermost/Ombi.Api.Mattermost.csproj
index ca15bae05..83318be7b 100644
--- a/src/Ombi.Api.Mattermost/Ombi.Api.Mattermost.csproj
+++ b/src/Ombi.Api.Mattermost/Ombi.Api.Mattermost.csproj
@@ -9,7 +9,7 @@
-
+
diff --git a/src/Ombi.Api.Notifications/IOneSignalApi.cs b/src/Ombi.Api.Notifications/IOneSignalApi.cs
index 2e3ef106e..6de64d11e 100644
--- a/src/Ombi.Api.Notifications/IOneSignalApi.cs
+++ b/src/Ombi.Api.Notifications/IOneSignalApi.cs
@@ -6,6 +6,6 @@ namespace Ombi.Api.Notifications
{
public interface IOneSignalApi
{
- Task PushNotification(List playerIds, string message);
+ Task PushNotification(List playerIds, string message, bool isAdminNotification, int requestId, int requestType);
}
}
\ No newline at end of file
diff --git a/src/Ombi.Api.Notifications/Models/OneSignalNotificationBody.cs b/src/Ombi.Api.Notifications/Models/OneSignalNotificationBody.cs
index 6c024fa67..e65222bd5 100644
--- a/src/Ombi.Api.Notifications/Models/OneSignalNotificationBody.cs
+++ b/src/Ombi.Api.Notifications/Models/OneSignalNotificationBody.cs
@@ -4,18 +4,22 @@
{
public string app_id { get; set; }
public string[] include_player_ids { get; set; }
- public Data data { get; set; }
+ public object data { get; set; }
+ public Button[] buttons { get; set; }
public Contents contents { get; set; }
}
- public class Data
- {
- public string foo { get; set; }
- }
public class Contents
{
public string en { get; set; }
}
+ public class Button
+ {
+ public string id { get; set; }
+ public string text { get; set; }
+ //public string icon { get; set; }
+ }
+
}
\ No newline at end of file
diff --git a/src/Ombi.Api.Notifications/Ombi.Api.Notifications.csproj b/src/Ombi.Api.Notifications/Ombi.Api.Notifications.csproj
index a3651df3c..7b890e2dd 100644
--- a/src/Ombi.Api.Notifications/Ombi.Api.Notifications.csproj
+++ b/src/Ombi.Api.Notifications/Ombi.Api.Notifications.csproj
@@ -4,6 +4,10 @@
netstandard2.0
+
+
+
+
diff --git a/src/Ombi.Api.Notifications/OneSignalApi.cs b/src/Ombi.Api.Notifications/OneSignalApi.cs
index d4760bb09..8d5fc04a9 100644
--- a/src/Ombi.Api.Notifications/OneSignalApi.cs
+++ b/src/Ombi.Api.Notifications/OneSignalApi.cs
@@ -20,7 +20,7 @@ namespace Ombi.Api.Notifications
private readonly IApplicationConfigRepository _appConfig;
private const string ApiUrl = "https://onesignal.com/api/v1/notifications";
- public async Task PushNotification(List playerIds, string message)
+ public async Task PushNotification(List playerIds, string message, bool isAdminNotification, int requestId, int requestType)
{
if (!playerIds.Any())
{
@@ -39,6 +39,17 @@ namespace Ombi.Api.Notifications
include_player_ids = playerIds.ToArray()
};
+ if (isAdminNotification)
+ {
+ // Add the action buttons
+ body.data = new { requestid = requestId, requestType = requestType};
+ body.buttons = new[]
+ {
+ new Button {id = "approve", text = "Approve Request"},
+ new Button {id = "deny", text = "Deny Request"},
+ };
+ }
+
request.AddJsonBody(body);
var result = await _api.Request(request);
diff --git a/src/Ombi.Api.Plex/IPlexApi.cs b/src/Ombi.Api.Plex/IPlexApi.cs
index e11d6d914..343eaa2d7 100644
--- a/src/Ombi.Api.Plex/IPlexApi.cs
+++ b/src/Ombi.Api.Plex/IPlexApi.cs
@@ -1,6 +1,8 @@
-using System.Threading.Tasks;
+using System;
+using System.Threading.Tasks;
using Ombi.Api.Plex.Models;
using Ombi.Api.Plex.Models.Friends;
+using Ombi.Api.Plex.Models.OAuth;
using Ombi.Api.Plex.Models.Server;
using Ombi.Api.Plex.Models.Status;
@@ -9,6 +11,7 @@ namespace Ombi.Api.Plex
public interface IPlexApi
{
Task GetStatus(string authToken, string uri);
+ Task GetLibrariesForMachineId(string authToken, string machineId);
Task SignIn(UserRequest user);
Task GetServer(string authToken);
Task GetLibrarySections(string authToken, string plexFullHost);
@@ -19,5 +22,9 @@ namespace Ombi.Api.Plex
Task GetAllEpisodes(string authToken, string host, string section, int start, int retCount);
Task GetUsers(string authToken);
Task GetAccount(string authToken);
+ Task GetRecentlyAdded(string authToken, string uri, string sectionId);
+ Task GetPin(int pinId);
+ Task GetOAuthUrl(int pinId, string code, string applicationUrl);
+ Task AddUser(string emailAddress, string serverId, string authToken, int[] libs);
}
}
\ No newline at end of file
diff --git a/src/Ombi.Api.Plex/Models/Metadata.cs b/src/Ombi.Api.Plex/Models/Metadata.cs
index 28bdf002d..cda6ce68b 100644
--- a/src/Ombi.Api.Plex/Models/Metadata.cs
+++ b/src/Ombi.Api.Plex/Models/Metadata.cs
@@ -11,20 +11,20 @@ namespace Ombi.Api.Plex.Models
public string summary { get; set; }
public int index { get; set; }
public float rating { get; set; }
- public int viewCount { get; set; }
- public int lastViewedAt { get; set; }
+ //public int viewCount { get; set; }
+ //public int lastViewedAt { get; set; }
public int year { get; set; }
public string thumb { get; set; }
public string art { get; set; }
public string banner { get; set; }
public string theme { get; set; }
- public string duration { get; set; }
- public string originallyAvailableAt { get; set; }
+ //public string duration { get; set; }
+ //public string originallyAvailableAt { get; set; }
public int leafCount { get; set; }
public int viewedLeafCount { get; set; }
public int childCount { get; set; }
- public long addedAt { get; set; }
- public int updatedAt { get; set; }
+ //public long addedAt { get; set; }
+ //public int updatedAt { get; set; }
public Genre[] Genre { get; set; }
//public Role[] Role { get; set; }
public string primaryExtraKey { get; set; }
diff --git a/src/Ombi.Api.Plex/Models/OAuth/OAuthPin.cs b/src/Ombi.Api.Plex/Models/OAuth/OAuthPin.cs
new file mode 100644
index 000000000..e65cd91d4
--- /dev/null
+++ b/src/Ombi.Api.Plex/Models/OAuth/OAuthPin.cs
@@ -0,0 +1,27 @@
+using System;
+
+namespace Ombi.Api.Plex.Models.OAuth
+{
+ public class OAuthPin
+ {
+ public int id { get; set; }
+ public string code { get; set; }
+ public bool trusted { get; set; }
+ public string clientIdentifier { get; set; }
+ public Location location { get; set; }
+ public int expiresIn { get; set; }
+ public DateTime createdAt { get; set; }
+ public DateTime expiresAt { get; set; }
+ public string authToken { get; set; }
+ }
+
+ public class Location
+ {
+ public string code { get; set; }
+ public string country { get; set; }
+ public string city { get; set; }
+ public string subdivisions { get; set; }
+ public string coordinates { get; set; }
+ }
+
+}
\ No newline at end of file
diff --git a/src/Ombi.Api.Plex/Models/PlexAdd.cs b/src/Ombi.Api.Plex/Models/PlexAdd.cs
new file mode 100644
index 000000000..fb0a550d0
--- /dev/null
+++ b/src/Ombi.Api.Plex/Models/PlexAdd.cs
@@ -0,0 +1,84 @@
+using System.Collections.Generic;
+using System.Xml.Serialization;
+
+namespace Ombi.Api.Plex.Models
+{
+ [XmlRoot(ElementName = "Section")]
+ public class Section
+ {
+ [XmlAttribute(AttributeName = "id")]
+ public string Id { get; set; }
+ [XmlAttribute(AttributeName = "key")]
+ public string Key { get; set; }
+ [XmlAttribute(AttributeName = "title")]
+ public string Title { get; set; }
+ [XmlAttribute(AttributeName = "type")]
+ public string Type { get; set; }
+ [XmlAttribute(AttributeName = "shared")]
+ public string Shared { get; set; }
+ }
+
+ [XmlRoot(ElementName = "SharedServer")]
+ public class SharedServer
+ {
+ [XmlElement(ElementName = "Section")]
+ public List Section { get; set; }
+ [XmlAttribute(AttributeName = "id")]
+ public string Id { get; set; }
+ [XmlAttribute(AttributeName = "username")]
+ public string Username { get; set; }
+ [XmlAttribute(AttributeName = "email")]
+ public string Email { get; set; }
+ [XmlAttribute(AttributeName = "userID")]
+ public string UserID { get; set; }
+ [XmlAttribute(AttributeName = "accessToken")]
+ public string AccessToken { get; set; }
+ [XmlAttribute(AttributeName = "name")]
+ public string Name { get; set; }
+ [XmlAttribute(AttributeName = "acceptedAt")]
+ public string AcceptedAt { get; set; }
+ [XmlAttribute(AttributeName = "invitedAt")]
+ public string InvitedAt { get; set; }
+ [XmlAttribute(AttributeName = "allowSync")]
+ public string AllowSync { get; set; }
+ [XmlAttribute(AttributeName = "allowCameraUpload")]
+ public string AllowCameraUpload { get; set; }
+ [XmlAttribute(AttributeName = "allowChannels")]
+ public string AllowChannels { get; set; }
+ [XmlAttribute(AttributeName = "allowTuners")]
+ public string AllowTuners { get; set; }
+ [XmlAttribute(AttributeName = "owned")]
+ public string Owned { get; set; }
+ }
+
+ [XmlRoot(ElementName = "MediaContainer")]
+ public class PlexAdd
+ {
+ [XmlElement(ElementName = "SharedServer")]
+ public SharedServer SharedServer { get; set; }
+ [XmlAttribute(AttributeName = "friendlyName")]
+ public string FriendlyName { get; set; }
+ [XmlAttribute(AttributeName = "identifier")]
+ public string Identifier { get; set; }
+ [XmlAttribute(AttributeName = "machineIdentifier")]
+ public string MachineIdentifier { get; set; }
+ [XmlAttribute(AttributeName = "size")]
+ public string Size { get; set; }
+ }
+
+ [XmlRoot(ElementName = "Response")]
+ public class AddUserError
+ {
+ [XmlAttribute(AttributeName = "code")]
+ public string Code { get; set; }
+ [XmlAttribute(AttributeName = "status")]
+ public string Status { get; set; }
+ }
+
+ public class PlexAddWrapper
+ {
+ public PlexAdd Add { get; set; }
+ public AddUserError Error { get; set; }
+ public bool HasError => Error != null;
+ }
+}
\ No newline at end of file
diff --git a/src/Ombi.Api.Plex/Models/PlexLibrariesForMachineId.cs b/src/Ombi.Api.Plex/Models/PlexLibrariesForMachineId.cs
new file mode 100644
index 000000000..17ac59b81
--- /dev/null
+++ b/src/Ombi.Api.Plex/Models/PlexLibrariesForMachineId.cs
@@ -0,0 +1,66 @@
+namespace Ombi.Api.Plex.Models
+{
+
+ using System;
+ using System.Xml.Serialization;
+ using System.Collections.Generic;
+
+ [XmlRoot(ElementName = "Section")]
+ public class SectionLite
+ {
+ [XmlAttribute(AttributeName = "id")]
+ public string Id { get; set; }
+ [XmlAttribute(AttributeName = "key")]
+ public string Key { get; set; }
+ [XmlAttribute(AttributeName = "type")]
+ public string Type { get; set; }
+ [XmlAttribute(AttributeName = "title")]
+ public string Title { get; set; }
+ }
+
+ [XmlRoot(ElementName = "Server")]
+ public class ServerLib
+ {
+ [XmlElement(ElementName = "Section")]
+ public List Section { get; set; }
+ [XmlAttribute(AttributeName = "name")]
+ public string Name { get; set; }
+ [XmlAttribute(AttributeName = "address")]
+ public string Address { get; set; }
+ [XmlAttribute(AttributeName = "port")]
+ public string Port { get; set; }
+ [XmlAttribute(AttributeName = "version")]
+ public string Version { get; set; }
+ [XmlAttribute(AttributeName = "scheme")]
+ public string Scheme { get; set; }
+ [XmlAttribute(AttributeName = "host")]
+ public string Host { get; set; }
+ [XmlAttribute(AttributeName = "localAddresses")]
+ public string LocalAddresses { get; set; }
+ [XmlAttribute(AttributeName = "machineIdentifier")]
+ public string MachineIdentifier { get; set; }
+ [XmlAttribute(AttributeName = "createdAt")]
+ public string CreatedAt { get; set; }
+ [XmlAttribute(AttributeName = "updatedAt")]
+ public string UpdatedAt { get; set; }
+ [XmlAttribute(AttributeName = "owned")]
+ public string Owned { get; set; }
+ [XmlAttribute(AttributeName = "synced")]
+ public string Synced { get; set; }
+ }
+
+ [XmlRoot(ElementName = "MediaContainer")]
+ public class PlexLibrariesForMachineId
+ {
+ [XmlElement(ElementName = "Server")]
+ public ServerLib Server { get; set; }
+ [XmlAttribute(AttributeName = "friendlyName")]
+ public string FriendlyName { get; set; }
+ [XmlAttribute(AttributeName = "identifier")]
+ public string Identifier { get; set; }
+ [XmlAttribute(AttributeName = "machineIdentifier")]
+ public string MachineIdentifier { get; set; }
+ [XmlAttribute(AttributeName = "size")]
+ public string Size { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/src/Ombi.Api.Plex/PlexApi.cs b/src/Ombi.Api.Plex/PlexApi.cs
index b5c6b958d..f0808622f 100644
--- a/src/Ombi.Api.Plex/PlexApi.cs
+++ b/src/Ombi.Api.Plex/PlexApi.cs
@@ -1,20 +1,66 @@
-using System.Net.Http;
+using System;
+using System.Net.Http;
+using System.Reflection;
using System.Threading.Tasks;
using Ombi.Api.Plex.Models;
using Ombi.Api.Plex.Models.Friends;
+using Ombi.Api.Plex.Models.OAuth;
using Ombi.Api.Plex.Models.Server;
using Ombi.Api.Plex.Models.Status;
+using Ombi.Core.Settings;
+using Ombi.Core.Settings.Models.External;
+using Ombi.Helpers;
+using Ombi.Settings.Settings.Models;
namespace Ombi.Api.Plex
{
public class PlexApi : IPlexApi
{
- public PlexApi(IApi api)
+ public PlexApi(IApi api, ISettingsService settings, ISettingsService p)
{
Api = api;
+ _custom = settings;
+ _plexSettings = p;
}
private IApi Api { get; }
+ private readonly ISettingsService _custom;
+ private readonly ISettingsService _plexSettings;
+
+ private string _app;
+ private string ApplicationName
+ {
+ get
+ {
+ if (string.IsNullOrEmpty(_app))
+ {
+ var settings = _custom.GetSettings();
+ if (settings.ApplicationName.IsNullOrEmpty())
+ {
+ _app = "Ombi";
+ }
+ else
+ {
+ // Check for non-ascii characters (New .Net Core HTTPLib does not allow this)
+ var chars = settings.ApplicationName.ToCharArray();
+ var hasNonAscii = false;
+ foreach (var c in chars)
+ {
+ if (c > 128)
+ {
+ hasNonAscii = true;
+ }
+ }
+
+ _app = hasNonAscii ? "Ombi" : settings.ApplicationName;
+ }
+
+ return _app;
+ }
+
+ return _app;
+ }
+ }
private const string SignInUri = "https://plex.tv/users/sign_in.json";
private const string FriendsUri = "https://plex.tv/pms/friends/all";
@@ -36,7 +82,7 @@ namespace Ombi.Api.Plex
};
var request = new Request(SignInUri, string.Empty, HttpMethod.Post);
- AddHeaders(request);
+ await AddHeaders(request);
request.AddJsonBody(userModel);
var obj = await Api.Request(request);
@@ -47,14 +93,14 @@ namespace Ombi.Api.Plex
public async Task GetStatus(string authToken, string uri)
{
var request = new Request(uri, string.Empty, HttpMethod.Get);
- AddHeaders(request, authToken);
+ await AddHeaders(request, authToken);
return await Api.Request(request);
}
public async Task GetAccount(string authToken)
{
var request = new Request(GetAccountUri, string.Empty, HttpMethod.Get);
- AddHeaders(request, authToken);
+ await AddHeaders(request, authToken);
return await Api.Request(request);
}
@@ -62,7 +108,7 @@ namespace Ombi.Api.Plex
{
var request = new Request(ServerUri, string.Empty, HttpMethod.Get, ContentType.Xml);
- AddHeaders(request, authToken);
+ await AddHeaders(request, authToken);
return await Api.Request(request);
}
@@ -70,17 +116,24 @@ namespace Ombi.Api.Plex
public async Task GetLibrarySections(string authToken, string plexFullHost)
{
var request = new Request("library/sections", plexFullHost, HttpMethod.Get);
- AddHeaders(request, authToken);
+ await AddHeaders(request, authToken);
return await Api.Request(request);
}
public async Task GetLibrary(string authToken, string plexFullHost, string libraryId)
{
var request = new Request($"library/sections/{libraryId}/all", plexFullHost, HttpMethod.Get);
- AddHeaders(request, authToken);
+ await AddHeaders(request, authToken);
return await Api.Request(request);
}
+ public async Task GetLibrariesForMachineId(string authToken, string machineId)
+ {
+ var request = new Request("", $"https://plex.tv/api/servers/{machineId}", HttpMethod.Get, ContentType.Xml);
+ await AddHeaders(request, authToken);
+ return await Api.Request(request);
+ }
+
///
// 192.168.1.69:32400/library/metadata/3662/allLeaves
// The metadata ratingkey should be in the Cache
@@ -95,21 +148,21 @@ namespace Ombi.Api.Plex
public async Task GetEpisodeMetaData(string authToken, string plexFullHost, int ratingKey)
{
var request = new Request($"/library/metadata/{ratingKey}", plexFullHost, HttpMethod.Get);
- AddHeaders(request, authToken);
+ await AddHeaders(request, authToken);
return await Api.Request(request);
}
public async Task GetMetadata(string authToken, string plexFullHost, int itemId)
{
var request = new Request($"library/metadata/{itemId}", plexFullHost, HttpMethod.Get);
- AddHeaders(request, authToken);
+ await AddHeaders(request, authToken);
return await Api.Request(request);
}
public async Task GetSeasons(string authToken, string plexFullHost, int ratingKey)
{
var request = new Request($"library/metadata/{ratingKey}/children", plexFullHost, HttpMethod.Get);
- AddHeaders(request, authToken);
+ await AddHeaders(request, authToken);
return await Api.Request(request);
}
@@ -128,9 +181,9 @@ namespace Ombi.Api.Plex
request.AddQueryString("type", "4");
AddLimitHeaders(request, start, retCount);
- AddHeaders(request, authToken);
+ await AddHeaders(request, authToken);
- return await Api.Request(request);
+ return await Api.Request(request);
}
///
@@ -141,32 +194,110 @@ namespace Ombi.Api.Plex
///
public async Task GetUsers(string authToken)
{
- var request = new Request(string.Empty,FriendsUri, HttpMethod.Get, ContentType.Xml);
- AddHeaders(request, authToken);
+ var request = new Request(string.Empty, FriendsUri, HttpMethod.Get, ContentType.Xml);
+ await AddHeaders(request, authToken);
return await Api.Request(request);
}
+ public async Task GetRecentlyAdded(string authToken, string uri, string sectionId)
+ {
+ var request = new Request($"library/sections/{sectionId}/recentlyAdded", uri, HttpMethod.Get);
+ await AddHeaders(request, authToken);
+ AddLimitHeaders(request, 0, 50);
+
+ return await Api.Request(request);
+ }
+
+ public async Task GetPin(int pinId)
+ {
+ var request = new Request($"api/v2/pins/{pinId}", "https://plex.tv/", HttpMethod.Get);
+ await AddHeaders(request);
+
+ return await Api.Request(request);
+ }
+
+ public async Task GetOAuthUrl(int pinId, string code, string applicationUrl)
+ {
+ var request = new Request("auth#", "https://app.plex.tv", HttpMethod.Get);
+ await AddHeaders(request);
+
+ request.AddQueryString("pinID", pinId.ToString());
+ request.AddQueryString("code", code);
+ request.AddQueryString("context[device][product]", ApplicationName);
+ request.AddQueryString("context[device][environment]", "bundled");
+ request.AddQueryString("context[device][layout]", "desktop");
+ request.AddQueryString("context[device][platform]", "Web");
+ request.AddQueryString("context[device][device]", "Ombi (Web)");
+
+ var s = await GetSettings();
+ await CheckInstallId(s);
+ request.AddQueryString("clientID", s.InstallId.ToString("N"));
+
+ if (request.FullUri.Fragment.Equals("#"))
+ {
+ var uri = request.FullUri.ToString();
+ var withoutEnd = uri.Remove(uri.Length - 1, 1);
+ var startOfQueryLocation = withoutEnd.IndexOf('?');
+ var better = withoutEnd.Insert(startOfQueryLocation, "#");
+ request.FullUri = new Uri(better);
+ }
+
+ return request.FullUri;
+ }
+
+ public async Task AddUser(string emailAddress, string serverId, string authToken, int[] libs)
+ {
+ var request = new Request(string.Empty, $"https://plex.tv/api/servers/{serverId}/shared_servers", HttpMethod.Post, ContentType.Xml);
+ await AddHeaders(request, authToken);
+ request.AddJsonBody(new
+ {
+ server_id = serverId,
+ shared_server = new
+ {
+ library_section_ids = libs.Length > 0 ? libs : new int[]{},
+ invited_email = emailAddress
+ },
+ sharing_settings = new { }
+ });
+ var result = await Api.RequestContent(request);
+ try
+ {
+ var add = Api.DeserializeXml(result);
+ return new PlexAddWrapper{Add = add};
+ }
+ catch (InvalidOperationException)
+ {
+ var error = Api.DeserializeXml(result);
+ return new PlexAddWrapper{Error = error};
+ }
+ }
+
+
///
/// Adds the required headers and also the authorization header
///
///
///
- private void AddHeaders(Request request, string authToken)
+ private async Task AddHeaders(Request request, string authToken)
{
request.AddHeader("X-Plex-Token", authToken);
- AddHeaders(request);
+ await AddHeaders(request);
}
///
/// Adds the main required headers to the Plex Request
///
///
- private void AddHeaders(Request request)
+ private async Task AddHeaders(Request request)
{
- request.AddHeader("X-Plex-Client-Identifier", $"OmbiV3");
- request.AddHeader("X-Plex-Product", "Ombi");
+ var s = await GetSettings();
+ await CheckInstallId(s);
+ request.AddHeader("X-Plex-Client-Identifier", s.InstallId.ToString("N"));
+ request.AddHeader("X-Plex-Product", ApplicationName);
request.AddHeader("X-Plex-Version", "3");
+ request.AddHeader("X-Plex-Device", "Ombi (Web)");
+ request.AddHeader("X-Plex-Platform", "Web");
request.AddContentHeader("Content-Type", request.ContentType == ContentType.Json ? "application/json" : "application/xml");
request.AddHeader("Accept", "application/json");
}
@@ -176,5 +307,19 @@ namespace Ombi.Api.Plex
request.AddHeader("X-Plex-Container-Start", from.ToString());
request.AddHeader("X-Plex-Container-Size", to.ToString());
}
+ private async Task CheckInstallId(PlexSettings s)
+ {
+ if (s.InstallId == null || s.InstallId == Guid.Empty)
+ {
+ s.InstallId = Guid.NewGuid();
+ await _plexSettings.SaveSettingsAsync(s);
+ }
+ }
+
+ private PlexSettings _settings;
+ private async Task GetSettings()
+ {
+ return _settings ?? (_settings = await _plexSettings.GetSettingsAsync());
+ }
}
}
diff --git a/src/Ombi.Api.Pushover/IPushoverApi.cs b/src/Ombi.Api.Pushover/IPushoverApi.cs
index 42e8e9060..554a15b60 100644
--- a/src/Ombi.Api.Pushover/IPushoverApi.cs
+++ b/src/Ombi.Api.Pushover/IPushoverApi.cs
@@ -5,6 +5,6 @@ namespace Ombi.Api.Pushover
{
public interface IPushoverApi
{
- Task PushAsync(string accessToken, string message, string userToken);
+ Task PushAsync(string accessToken, string message, string userToken, sbyte priority, string sound);
}
}
\ No newline at end of file
diff --git a/src/Ombi.Api.Pushover/PushoverApi.cs b/src/Ombi.Api.Pushover/PushoverApi.cs
index 96f4d2e95..9f91bc7ca 100644
--- a/src/Ombi.Api.Pushover/PushoverApi.cs
+++ b/src/Ombi.Api.Pushover/PushoverApi.cs
@@ -1,4 +1,5 @@
using System;
+using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
using Ombi.Api.Pushover.Models;
@@ -15,9 +16,13 @@ namespace Ombi.Api.Pushover
private readonly IApi _api;
private const string PushoverEndpoint = "https://api.pushover.net/1";
- public async Task PushAsync(string accessToken, string message, string userToken)
+ public async Task PushAsync(string accessToken, string message, string userToken, sbyte priority, string sound)
{
- var request = new Request($"messages.json?token={accessToken}&user={userToken}&message={message}", PushoverEndpoint, HttpMethod.Post);
+ if (message.Contains("'"))
+ {
+ message = message.Replace("'", "'");
+ }
+ var request = new Request($"messages.json?token={accessToken}&user={userToken}&priority={priority}&sound={sound}&message={WebUtility.HtmlEncode(message)}", PushoverEndpoint, HttpMethod.Post);
var result = await _api.Request(request);
return result;
diff --git a/src/Ombi.Api.Radarr/Ombi.Api.Radarr.csproj b/src/Ombi.Api.Radarr/Ombi.Api.Radarr.csproj
index 1031ffd4a..0c615f301 100644
--- a/src/Ombi.Api.Radarr/Ombi.Api.Radarr.csproj
+++ b/src/Ombi.Api.Radarr/Ombi.Api.Radarr.csproj
@@ -9,7 +9,7 @@
-
+
diff --git a/src/Ombi.Api.Radarr/RadarrApi.cs b/src/Ombi.Api.Radarr/RadarrApi.cs
index 1f897b60b..fd4deb140 100644
--- a/src/Ombi.Api.Radarr/RadarrApi.cs
+++ b/src/Ombi.Api.Radarr/RadarrApi.cs
@@ -79,7 +79,7 @@ namespace Ombi.Api.Radarr
tmdbId = tmdbId,
qualityProfileId = qualityId,
rootFolderPath = rootPath,
- titleSlug = title,
+ titleSlug = title + year,
monitored = true,
year = year,
minimumAvailability = minimumAvailability
diff --git a/src/Ombi.Api.Service/Ombi.Api.Service.csproj b/src/Ombi.Api.Service/Ombi.Api.Service.csproj
index 8e62012d8..8cbddd874 100644
--- a/src/Ombi.Api.Service/Ombi.Api.Service.csproj
+++ b/src/Ombi.Api.Service/Ombi.Api.Service.csproj
@@ -11,7 +11,7 @@
-
+
diff --git a/src/Ombi.Api.Sonarr/Models/Episode.cs b/src/Ombi.Api.Sonarr/Models/Episode.cs
index c17f5486c..b01e6fd8c 100644
--- a/src/Ombi.Api.Sonarr/Models/Episode.cs
+++ b/src/Ombi.Api.Sonarr/Models/Episode.cs
@@ -6,6 +6,30 @@ namespace Ombi.Api.Sonarr.Models
{
public class Episode
{
+ public Episode()
+ {
+
+ }
+
+ public Episode(Episode ep)
+ {
+ seriesId = ep.seriesId;
+ episodeFileId = ep.episodeFileId;
+ seasonNumber = ep.seasonNumber;
+ episodeNumber = ep.episodeNumber;
+ title = ep.title;
+ airDate = ep.airDate;
+ airDateUtc = ep.airDateUtc;
+ overview = ep.overview;
+ hasFile = ep.hasFile;
+ monitored = ep.monitored;
+ unverifiedSceneNumbering = ep.unverifiedSceneNumbering;
+ id = ep.id;
+ absoluteEpisodeNumber = ep.absoluteEpisodeNumber;
+ sceneAbsoluteEpisodeNumber = ep.sceneAbsoluteEpisodeNumber;
+ sceneEpisodeNumber = ep.sceneEpisodeNumber;
+ sceneSeasonNumber = ep.sceneSeasonNumber;
+ }
public int seriesId { get; set; }
public int episodeFileId { get; set; }
public int seasonNumber { get; set; }
@@ -27,6 +51,24 @@ namespace Ombi.Api.Sonarr.Models
public class Episodefile
{
+ public Episodefile()
+ {
+
+ }
+
+ public Episodefile(Episodefile e)
+ {
+ seriesId = e.seriesId;
+ seasonNumber = e.seasonNumber;
+ relativePath = e.relativePath;
+ path = e.path;
+ size = e.size;
+ dateAdded = e.dateAdded;
+ sceneName = e.sceneName;
+ quality = new EpisodeQuality(e.quality);
+ qualityCutoffNotMet = e.qualityCutoffNotMet;
+ id = e.id;
+ }
public int seriesId { get; set; }
public int seasonNumber { get; set; }
public string relativePath { get; set; }
@@ -41,12 +83,32 @@ namespace Ombi.Api.Sonarr.Models
public class EpisodeQuality
{
+ public EpisodeQuality()
+ {
+
+ }
+
+ public EpisodeQuality(EpisodeQuality e)
+ {
+ quality = new Quality(e.quality);
+ revision = new Revision(e.revision);
+ }
public Quality quality { get; set; }
public Revision revision { get; set; }
}
public class Revision
{
+ public Revision()
+ {
+
+ }
+
+ public Revision(Revision r)
+ {
+ version = r.version;
+ real = r.real;
+ }
public int version { get; set; }
public int real { get; set; }
}
diff --git a/src/Ombi.Api.Sonarr/Models/NewSeries.cs b/src/Ombi.Api.Sonarr/Models/NewSeries.cs
index 4d2c17308..ef18baddb 100644
--- a/src/Ombi.Api.Sonarr/Models/NewSeries.cs
+++ b/src/Ombi.Api.Sonarr/Models/NewSeries.cs
@@ -23,6 +23,7 @@ namespace Ombi.Api.Sonarr.Models
public string cleanTitle { get; set; }
public string imdbId { get; set; }
public string titleSlug { get; set; }
+ public string seriesType { get; set; }
public int id { get; set; }
public List images { get; set; }
diff --git a/src/Ombi.Api.Sonarr/Models/Quality.cs b/src/Ombi.Api.Sonarr/Models/Quality.cs
index 76a1c92d8..9989a9c3e 100644
--- a/src/Ombi.Api.Sonarr/Models/Quality.cs
+++ b/src/Ombi.Api.Sonarr/Models/Quality.cs
@@ -2,6 +2,16 @@ namespace Ombi.Api.Sonarr.Models
{
public class Quality
{
+ public Quality()
+ {
+
+ }
+
+ public Quality(Quality q)
+ {
+ id = q.id;
+ name = q.name;
+ }
public int id { get; set; }
public string name { get; set; }
}
diff --git a/src/Ombi.Api/Api.cs b/src/Ombi.Api/Api.cs
index 98fff5e0c..19dab7530 100644
--- a/src/Ombi.Api/Api.cs
+++ b/src/Ombi.Api/Api.cs
@@ -39,7 +39,11 @@ namespace Ombi.Api
if (!httpResponseMessage.IsSuccessStatusCode)
{
- LogError(request, httpResponseMessage);
+ if (!request.IgnoreErrors)
+ {
+ LogError(request, httpResponseMessage);
+ }
+
if (request.Retry)
{
@@ -76,15 +80,20 @@ namespace Ombi.Api
else
{
// XML
- XmlSerializer serializer = new XmlSerializer(typeof(T));
- StringReader reader = new StringReader(receivedString);
- var value = (T)serializer.Deserialize(reader);
- return value;
+ return DeserializeXml(receivedString);
}
}
}
+ public T DeserializeXml(string receivedString)
+ {
+ XmlSerializer serializer = new XmlSerializer(typeof(T));
+ StringReader reader = new StringReader(receivedString);
+ var value = (T) serializer.Deserialize(reader);
+ return value;
+ }
+
public async Task RequestContent(Request request)
{
using (var httpRequestMessage = new HttpRequestMessage(request.HttpMethod, request.FullUri))
@@ -94,7 +103,10 @@ namespace Ombi.Api
var httpResponseMessage = await _client.SendAsync(httpRequestMessage);
if (!httpResponseMessage.IsSuccessStatusCode)
{
- LogError(request, httpResponseMessage);
+ if (!request.IgnoreErrors)
+ {
+ LogError(request, httpResponseMessage);
+ }
}
// do something with the response
var data = httpResponseMessage.Content;
@@ -112,7 +124,10 @@ namespace Ombi.Api
var httpResponseMessage = await _client.SendAsync(httpRequestMessage);
if (!httpResponseMessage.IsSuccessStatusCode)
{
- LogError(request, httpResponseMessage);
+ if (!request.IgnoreErrors)
+ {
+ LogError(request, httpResponseMessage);
+ }
}
}
}
diff --git a/src/Ombi.Api/IApi.cs b/src/Ombi.Api/IApi.cs
index 2b7f71bb8..e573d2d07 100644
--- a/src/Ombi.Api/IApi.cs
+++ b/src/Ombi.Api/IApi.cs
@@ -7,5 +7,6 @@ namespace Ombi.Api
Task Request(Request request);
Task Request(Request request);
Task RequestContent(Request request);
+ T DeserializeXml(string receivedString);
}
}
\ No newline at end of file
diff --git a/src/Ombi.Api/Ombi.Api.csproj b/src/Ombi.Api/Ombi.Api.csproj
index 325f316b8..a37c128fb 100644
--- a/src/Ombi.Api/Ombi.Api.csproj
+++ b/src/Ombi.Api/Ombi.Api.csproj
@@ -9,9 +9,9 @@
-
-
-
+
+
+
diff --git a/src/Ombi.Api/Request.cs b/src/Ombi.Api/Request.cs
index e4120ed9c..fd888d0d2 100644
--- a/src/Ombi.Api/Request.cs
+++ b/src/Ombi.Api/Request.cs
@@ -10,7 +10,7 @@ namespace Ombi.Api
{
public Request()
{
-
+
}
public Request(string endpoint, string baseUrl, HttpMethod http, ContentType contentType = ContentType.Json)
@@ -25,9 +25,10 @@ namespace Ombi.Api
public string Endpoint { get; }
public string BaseUrl { get; }
public HttpMethod HttpMethod { get; }
-
+ public bool IgnoreErrors { get; set; }
public bool Retry { get; set; }
public List StatusCodeToRetry { get; set; } = new List();
+ public bool IgnoreBaseUrlAppend { get; set; }
public Action OnBeforeDeserialization { get; set; }
@@ -38,7 +39,7 @@ namespace Ombi.Api
var sb = new StringBuilder();
if (!string.IsNullOrEmpty(BaseUrl))
{
- sb.Append(!BaseUrl.EndsWith("/") ? string.Format("{0}/", BaseUrl) : BaseUrl);
+ sb.Append(!BaseUrl.EndsWith("/") && !IgnoreBaseUrlAppend ? string.Format("{0}/", BaseUrl) : BaseUrl);
}
sb.Append(Endpoint.StartsWith("/") ? Endpoint.Remove(0, 1) : Endpoint);
return sb.ToString();
@@ -105,10 +106,10 @@ namespace Ombi.Api
hasQuery = true;
startingTag = builder.Query.Contains("?") ? "&" : "?";
}
-
builder.Query = hasQuery
? $"{builder.Query}{startingTag}{key}={value}"
: $"{startingTag}{key}={value}";
+
_modified = builder.Uri;
}
diff --git a/src/Ombi.Core.Tests/Ombi.Core.Tests.csproj b/src/Ombi.Core.Tests/Ombi.Core.Tests.csproj
index 2aa71c1e2..30de4b6f0 100644
--- a/src/Ombi.Core.Tests/Ombi.Core.Tests.csproj
+++ b/src/Ombi.Core.Tests/Ombi.Core.Tests.csproj
@@ -1,15 +1,15 @@

- netcoreapp2.0
+ netcoreapp2.1
-
-
-
-
-
+
+
+
+
+
diff --git a/src/Ombi.Core.Tests/Rule/Search/EmbyAvailabilityRuleTests.cs b/src/Ombi.Core.Tests/Rule/Search/EmbyAvailabilityRuleTests.cs
index a7f20ac40..99ff5b6bd 100644
--- a/src/Ombi.Core.Tests/Rule/Search/EmbyAvailabilityRuleTests.cs
+++ b/src/Ombi.Core.Tests/Rule/Search/EmbyAvailabilityRuleTests.cs
@@ -25,11 +25,14 @@ namespace Ombi.Core.Tests.Rule.Search
[Test]
public async Task Movie_ShouldBe_Available_WhenFoundInEmby()
{
- ContextMock.Setup(x => x.Get(It.IsAny())).ReturnsAsync(new EmbyContent
+ ContextMock.Setup(x => x.GetByTheMovieDbId(It.IsAny())).ReturnsAsync(new EmbyContent
{
ProviderId = "123"
});
- var search = new SearchMovieViewModel();
+ var search = new SearchMovieViewModel()
+ {
+ TheMovieDbId = "123",
+ };
var result = await Rule.Execute(search);
Assert.True(result.Success);
@@ -39,7 +42,7 @@ namespace Ombi.Core.Tests.Rule.Search
[Test]
public async Task Movie_ShouldBe_NotAvailable_WhenNotFoundInEmby()
{
- ContextMock.Setup(x => x.Get(It.IsAny())).Returns(Task.FromResult(default(EmbyContent)));
+ ContextMock.Setup(x => x.GetByTheMovieDbId(It.IsAny())).Returns(Task.FromResult(default(EmbyContent)));
var search = new SearchMovieViewModel();
var result = await Rule.Execute(search);
diff --git a/src/Ombi.Core.Tests/Rule/Search/ExistingRequestRuleTests.cs b/src/Ombi.Core.Tests/Rule/Search/ExistingRequestRuleTests.cs
index a706472dd..e32c8e996 100644
--- a/src/Ombi.Core.Tests/Rule/Search/ExistingRequestRuleTests.cs
+++ b/src/Ombi.Core.Tests/Rule/Search/ExistingRequestRuleTests.cs
@@ -19,12 +19,14 @@ namespace Ombi.Core.Tests.Rule.Search
MovieMock = new Mock();
TvMock = new Mock();
- Rule = new ExistingRule(MovieMock.Object, TvMock.Object);
+ MusicMock = new Mock();
+ Rule = new ExistingRule(MovieMock.Object, TvMock.Object, MusicMock.Object);
}
private ExistingRule Rule { get; set; }
private Mock MovieMock { get; set; }
private Mock TvMock { get; set; }
+ private Mock MusicMock { get; set; }
[Test]
diff --git a/src/Ombi.Core.Tests/StringHelperTests.cs b/src/Ombi.Core.Tests/StringHelperTests.cs
new file mode 100644
index 000000000..c1b95fcd7
--- /dev/null
+++ b/src/Ombi.Core.Tests/StringHelperTests.cs
@@ -0,0 +1,26 @@
+using System.Collections.Generic;
+
+using NUnit.Framework;
+using Ombi.Helpers;
+
+namespace Ombi.Core.Tests
+{
+ [TestFixture]
+ public class StringHelperTests
+ {
+ [TestCaseSource(nameof(StripCharsData))]
+ public string StripCharacters(string str, char[] chars)
+ {
+ return str.StripCharacters(chars);
+ }
+
+ private static IEnumerable StripCharsData
+ {
+ get
+ {
+ yield return new TestCaseData("this!is^a*string",new []{'!','^','*'}).Returns("thisisastring").SetName("Basic Strip Multipe Chars");
+ yield return new TestCaseData("What is this madness'",new []{'\'','^','*'}).Returns("What is this madness").SetName("Basic Strip Multipe Chars");
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Ombi.Core/Authentication/PlexOAuthManager.cs b/src/Ombi.Core/Authentication/PlexOAuthManager.cs
new file mode 100644
index 000000000..426037bb7
--- /dev/null
+++ b/src/Ombi.Core/Authentication/PlexOAuthManager.cs
@@ -0,0 +1,53 @@
+using System;
+using System.Threading.Tasks;
+using Ombi.Api.Plex;
+using Ombi.Api.Plex.Models;
+using Ombi.Api.Plex.Models.OAuth;
+using Ombi.Core.Settings;
+using Ombi.Helpers;
+using Ombi.Settings.Settings.Models;
+
+namespace Ombi.Core.Authentication
+{
+ public class PlexOAuthManager : IPlexOAuthManager
+ {
+ public PlexOAuthManager(IPlexApi api, ISettingsService settings)
+ {
+ _api = api;
+ _customizationSettingsService = settings;
+ }
+
+ private readonly IPlexApi _api;
+ private readonly ISettingsService _customizationSettingsService;
+
+ public async Task GetAccessTokenFromPin(int pinId)
+ {
+ var pin = await _api.GetPin(pinId);
+ if (pin.expiresAt < DateTime.UtcNow)
+ {
+ return string.Empty;
+ }
+
+ return pin.authToken;
+ }
+
+ public async Task GetAccount(string accessToken)
+ {
+ return await _api.GetAccount(accessToken);
+ }
+
+ public async Task GetOAuthUrl(int pinId, string code, string websiteAddress = null)
+ {
+ var settings = await _customizationSettingsService.GetSettingsAsync();
+ var url = await _api.GetOAuthUrl(pinId, code, settings.ApplicationUrl.IsNullOrEmpty() ? websiteAddress : settings.ApplicationUrl);
+
+ return url;
+ }
+
+ public async Task GetWizardOAuthUrl(int pinId, string code, string websiteAddress)
+ {
+ var url = await _api.GetOAuthUrl(pinId, code, websiteAddress);
+ return url;
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Ombi.Core/Engine/BaseMediaEngine.cs b/src/Ombi.Core/Engine/BaseMediaEngine.cs
index 552b2ac38..cb0047b96 100644
--- a/src/Ombi.Core/Engine/BaseMediaEngine.cs
+++ b/src/Ombi.Core/Engine/BaseMediaEngine.cs
@@ -9,13 +9,12 @@ using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using Ombi.Core.Rule.Interfaces;
using Ombi.Store.Entities.Requests;
-using Ombi.Store.Repository;
using Ombi.Store.Repository.Requests;
-using Ombi.Store.Entities;
-using Microsoft.AspNetCore.Identity;
using Ombi.Core.Authentication;
using Ombi.Core.Settings;
using Ombi.Settings.Settings.Models;
+using Ombi.Store.Entities;
+using Ombi.Store.Repository;
namespace Ombi.Core.Engine
{
@@ -26,18 +25,21 @@ namespace Ombi.Core.Engine
private Dictionary _dbTv;
protected BaseMediaEngine(IPrincipal identity, IRequestServiceMain requestService,
- IRuleEvaluator rules, OmbiUserManager um, ICacheService cache, ISettingsService ombiSettings) : base(identity, um, rules)
+ IRuleEvaluator rules, OmbiUserManager um, ICacheService cache, ISettingsService ombiSettings, IRepository sub) : base(identity, um, rules)
{
RequestService = requestService;
Cache = cache;
OmbiSettings = ombiSettings;
+ _subscriptionRepository = sub;
}
protected IRequestServiceMain RequestService { get; }
protected IMovieRequestRepository MovieRepository => RequestService.MovieRequestService;
protected ITvRequestRepository TvRepository => RequestService.TvRequestService;
+ protected IMusicRequestRepository MusicRepository => RequestService.MusicRequestRepository;
protected readonly ICacheService Cache;
protected readonly ISettingsService OmbiSettings;
+ protected readonly IRepository _subscriptionRepository;
protected async Task> GetMovieRequests()
{
@@ -78,7 +80,7 @@ namespace Ombi.Core.Engine
var pendingTv = 0;
var approvedTv = 0;
- var availableTv = 0;
+ var availableTv = 0;
foreach (var tv in tvQuery)
{
foreach (var child in tv.ChildRequests)
@@ -108,21 +110,51 @@ namespace Ombi.Core.Engine
protected async Task HideFromOtherUsers()
{
- if (await IsInRole(OmbiRoles.Admin) || await IsInRole(OmbiRoles.PowerUser))
+ var user = await GetUser();
+ if (await IsInRole(OmbiRoles.Admin) || await IsInRole(OmbiRoles.PowerUser) || user.IsSystemUser)
{
- return new HideResult();
+ return new HideResult
+ {
+ UserId = user.Id
+ };
}
var settings = await Cache.GetOrAdd(CacheKeys.OmbiSettings, async () => await OmbiSettings.GetSettingsAsync());
var result = new HideResult
{
- Hide = settings.HideRequestsUsers
+ Hide = settings.HideRequestsUsers,
+ UserId = user.Id
+ };
+ return result;
+ }
+
+ public async Task SubscribeToRequest(int requestId, RequestType type)
+ {
+ var user = await GetUser();
+ var existingSub = await _subscriptionRepository.GetAll().FirstOrDefaultAsync(x =>
+ x.UserId.Equals(user.Id) && x.RequestId == requestId && x.RequestType == type);
+ if (existingSub != null)
+ {
+ return;
+ }
+ var sub = new RequestSubscription
+ {
+ UserId = user.Id,
+ RequestId = requestId,
+ RequestType = type
};
- if (settings.HideRequestsUsers)
+
+ await _subscriptionRepository.Add(sub);
+ }
+
+ public async Task UnSubscribeRequest(int requestId, RequestType type)
+ {
+ var user = await GetUser();
+ var existingSub = await _subscriptionRepository.GetAll().FirstOrDefaultAsync(x =>
+ x.UserId.Equals(user.Id) && x.RequestId == requestId && x.RequestType == type);
+ if (existingSub != null)
{
- var user = await GetUser();
- result.UserId = user.Id;
+ await _subscriptionRepository.Delete(existingSub);
}
- return result;
}
public class HideResult
diff --git a/src/Ombi.Core/Engine/IMusicRequestEngine.cs b/src/Ombi.Core/Engine/IMusicRequestEngine.cs
new file mode 100644
index 000000000..5caba8a34
--- /dev/null
+++ b/src/Ombi.Core/Engine/IMusicRequestEngine.cs
@@ -0,0 +1,27 @@
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using Ombi.Core.Models;
+using Ombi.Core.Models.Requests;
+using Ombi.Core.Models.UI;
+using Ombi.Store.Entities;
+using Ombi.Store.Entities.Requests;
+
+namespace Ombi.Core.Engine
+{
+ public interface IMusicRequestEngine
+ {
+ TaskApproveAlbum(AlbumRequest request);
+ Task ApproveAlbumById(int requestId);
+ Task DenyAlbumById(int modelId);
+ Task> GetRequests();
+ Task> GetRequests(int count, int position, OrderFilterModel orderFilter);
+ Task GetTotal();
+ Task MarkAvailable(int modelId);
+ Task MarkUnavailable(int modelId);
+ Task RemoveAlbumRequest(int requestId);
+ Task RequestAlbum(MusicAlbumRequestViewModel model);
+ Task> SearchAlbumRequest(string search);
+ Task UserHasRequest(string userId);
+ Task GetRemainingRequests(OmbiUser user = null);
+ }
+}
\ No newline at end of file
diff --git a/src/Ombi.Core/Engine/Interfaces/BaseEngine.cs b/src/Ombi.Core/Engine/Interfaces/BaseEngine.cs
index e608ffebb..26bc5969c 100644
--- a/src/Ombi.Core/Engine/Interfaces/BaseEngine.cs
+++ b/src/Ombi.Core/Engine/Interfaces/BaseEngine.cs
@@ -32,14 +32,7 @@ namespace Ombi.Core.Engine.Interfaces
private OmbiUser _user;
protected async Task GetUser()
{
- if (IsApiUser)
- {
- return new OmbiUser
- {
- UserName = Username,
- };
- }
- return _user ?? (_user = await UserManager.Users.FirstOrDefaultAsync(x => x.UserName == Username));
+ return _user ?? (_user = await UserManager.Users.FirstOrDefaultAsync(x => x.UserName.Equals(Username, StringComparison.CurrentCultureIgnoreCase)));
}
protected async Task UserAlias()
@@ -49,10 +42,6 @@ namespace Ombi.Core.Engine.Interfaces
protected async Task IsInRole(string roleName)
{
- if (IsApiUser && roleName != OmbiRoles.Disabled)
- {
- return true;
- }
return await UserManager.IsInRoleAsync(await GetUser(), roleName);
}
@@ -72,7 +61,5 @@ namespace Ombi.Core.Engine.Interfaces
var ruleResults = await Rules.StartSpecificRules(model, rule);
return ruleResults;
}
-
- private bool IsApiUser => Username.Equals("Api", StringComparison.CurrentCultureIgnoreCase);
}
}
\ No newline at end of file
diff --git a/src/Ombi.Core/Engine/Interfaces/IMovieRequestEngine.cs b/src/Ombi.Core/Engine/Interfaces/IMovieRequestEngine.cs
index bfeb4fbe0..152a1d923 100644
--- a/src/Ombi.Core/Engine/Interfaces/IMovieRequestEngine.cs
+++ b/src/Ombi.Core/Engine/Interfaces/IMovieRequestEngine.cs
@@ -17,6 +17,5 @@ namespace Ombi.Core.Engine.Interfaces
Task ApproveMovie(MovieRequests request);
Task ApproveMovieById(int requestId);
Task DenyMovieById(int modelId);
- Task> Filter(FilterViewModel vm);
}
}
\ No newline at end of file
diff --git a/src/Ombi.Core/Engine/Interfaces/IMusicSearchEngine.cs b/src/Ombi.Core/Engine/Interfaces/IMusicSearchEngine.cs
new file mode 100644
index 000000000..03294982a
--- /dev/null
+++ b/src/Ombi.Core/Engine/Interfaces/IMusicSearchEngine.cs
@@ -0,0 +1,16 @@
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using Ombi.Api.Lidarr.Models;
+using Ombi.Core.Models.Search;
+
+namespace Ombi.Core.Engine
+{
+ public interface IMusicSearchEngine
+ {
+ Task GetAlbumArtist(string foreignArtistId);
+ Task GetArtist(int artistId);
+ Task> GetArtistAlbums(string foreignArtistId);
+ Task> SearchAlbum(string search);
+ Task> SearchArtist(string search);
+ }
+}
\ No newline at end of file
diff --git a/src/Ombi.Core/Engine/IRecentlyAddedEngine.cs b/src/Ombi.Core/Engine/Interfaces/IRecentlyAddedEngine.cs
similarity index 100%
rename from src/Ombi.Core/Engine/IRecentlyAddedEngine.cs
rename to src/Ombi.Core/Engine/Interfaces/IRecentlyAddedEngine.cs
diff --git a/src/Ombi.Core/Engine/Interfaces/IRequestEngine.cs b/src/Ombi.Core/Engine/Interfaces/IRequestEngine.cs
index bfb8be4e8..c8b7746f0 100644
--- a/src/Ombi.Core/Engine/Interfaces/IRequestEngine.cs
+++ b/src/Ombi.Core/Engine/Interfaces/IRequestEngine.cs
@@ -1,6 +1,9 @@
using System.Collections.Generic;
using System.Threading.Tasks;
+using Ombi.Core.Models;
using Ombi.Core.Models.Requests;
+using Ombi.Core.Models.UI;
+using Ombi.Store.Entities;
namespace Ombi.Core.Engine.Interfaces
{
@@ -11,11 +14,15 @@ namespace Ombi.Core.Engine.Interfaces
//Task> GetNewRequests();
//Task> GetAvailableRequests();
RequestCountModel RequestCount();
- Task> GetRequests(int count, int position);
+ Task> GetRequests(int count, int position, OrderFilterModel model);
Task> GetRequests();
Task UserHasRequest(string userId);
Task MarkUnavailable(int modelId);
Task MarkAvailable(int modelId);
+ Task GetTotal();
+ Task UnSubscribeRequest(int requestId, RequestType type);
+ Task SubscribeToRequest(int requestId, RequestType type);
+ Task GetRemainingRequests(OmbiUser user = null);
}
}
\ No newline at end of file
diff --git a/src/Ombi.Core/Engine/Interfaces/ITvRequestEngine.cs b/src/Ombi.Core/Engine/Interfaces/ITvRequestEngine.cs
index 28eb066d4..36ae7da61 100644
--- a/src/Ombi.Core/Engine/Interfaces/ITvRequestEngine.cs
+++ b/src/Ombi.Core/Engine/Interfaces/ITvRequestEngine.cs
@@ -1,7 +1,7 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using Ombi.Core.Models.Requests;
-using Ombi.Core.Models.Search;
+using Ombi.Core.Models.UI;
using Ombi.Store.Entities.Requests;
namespace Ombi.Core.Engine.Interfaces
@@ -10,15 +10,18 @@ namespace Ombi.Core.Engine.Interfaces
{
Task RemoveTvRequest(int requestId);
+ Task GetTvRequest(int requestId);
Task RequestTvShow(TvRequestViewModel tv);
Task DenyChildRequest(int requestId);
+ Task> GetRequestsLite(int count, int position, OrderFilterModel type);
Task> SearchTvRequest(string search);
- Task>>> SearchTvRequestTree(string search);
Task UpdateTvRequest(TvRequests request);
- Task>>> GetRequestsTreeNode(int count, int position);
Task> GetAllChldren(int tvId);
Task UpdateChildRequest(ChildRequests request);
Task RemoveTvChild(int requestId);
Task ApproveChildRequest(int id);
+ Task> GetRequestsLite();
+ Task UpdateQualityProfile(int requestId, int profileId);
+ Task UpdateRootPath(int requestId, int rootPath);
}
}
\ No newline at end of file
diff --git a/src/Ombi.Core/Engine/Interfaces/ITvSearchEngine.cs b/src/Ombi.Core/Engine/Interfaces/ITvSearchEngine.cs
index 53721f792..0926a7f9a 100644
--- a/src/Ombi.Core/Engine/Interfaces/ITvSearchEngine.cs
+++ b/src/Ombi.Core/Engine/Interfaces/ITvSearchEngine.cs
@@ -7,16 +7,10 @@ namespace Ombi.Core.Engine.Interfaces
public interface ITvSearchEngine
{
Task> Search(string searchTerm);
- Task>> SearchTreeNode(string searchTerm);
- Task> GetShowInformationTreeNode(int tvdbid);
Task GetShowInformation(int tvdbid);
- Task>> PopularTree();
Task> Popular();
- Task>> AnticipatedTree();
Task