From 6a10382e7beb0287d935c85a6415283d7843d21e Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Mon, 30 Sep 2013 22:30:02 -0700 Subject: [PATCH 01/52] System now uses tabs instead of toolbar --- Gruntfile.js | 4 +- UI/Content/icons.less | 30 ++++++ UI/Controller.js | 45 +++++---- UI/Logs/Logs.less | 53 ----------- UI/Router.js | 16 +++- UI/System/About/AboutView.js | 14 +++ ...ewTemplate.html => AboutViewTemplate.html} | 0 UI/System/About/View.js | 9 -- UI/System/Layout.js | 63 ------------- UI/System/LayoutTemplate.html | 17 ---- UI/{ => System}/Logs/Files/ContentsModel.js | 0 UI/{ => System}/Logs/Files/ContentsView.js | 2 +- .../Logs/Files/ContentsViewTemplate.html | 0 UI/{ => System}/Logs/Files/FilenameCell.js | 0 .../Logs/Files/LogFileCollection.js} | 3 +- .../Logs/Files/LogFileLayout.js} | 44 +++++---- .../Logs/Files/LogFileLayoutTemplate.html} | 4 +- .../Logs/Files/LogFileModel.js} | 0 UI/{ => System}/Logs/Files/Row.js | 0 UI/System/Logs/Logs.less | 21 +++++ .../Logs/LogsCollection.js} | 4 +- UI/System/Logs/LogsLayout.js | 48 ++++++++++ UI/System/Logs/LogsLayoutTemplate.html | 11 +++ .../Model.js => System/Logs/LogsModel.js} | 0 .../Logs/Table}/LogLevelCell.js | 0 UI/{Logs => System/Logs/Table}/LogTimeCell.js | 0 .../Logs/Table/LogsTableLayout.js} | 40 ++++---- .../Logs/Table/LogsTableLayoutTemplate.html} | 4 +- UI/System/StatusModel.js | 4 +- UI/System/SystemLayout.js | 91 +++++++++++++++++++ UI/System/SystemLayoutTemplate.html | 11 +++ UI/{ => System}/Update/UpdateCollection.js | 2 +- .../Update/UpdateCollectionView.js | 2 +- UI/{ => System}/Update/UpdateItemView.js | 2 +- .../Update/UpdateItemViewTemplate.html | 0 UI/{ => System}/Update/UpdateLayout.js | 6 +- .../Update/UpdateLayoutTemplate.html | 0 UI/{ => System}/Update/UpdateModel.js | 0 UI/{ => System}/Update/update.less | 0 UI/index.html | 4 +- 40 files changed, 330 insertions(+), 224 deletions(-) delete mode 100644 UI/Logs/Logs.less create mode 100644 UI/System/About/AboutView.js rename UI/System/About/{ViewTemplate.html => AboutViewTemplate.html} (100%) delete mode 100644 UI/System/About/View.js delete mode 100644 UI/System/Layout.js delete mode 100644 UI/System/LayoutTemplate.html rename UI/{ => System}/Logs/Files/ContentsModel.js (100%) rename UI/{ => System}/Logs/Files/ContentsView.js (72%) rename UI/{ => System}/Logs/Files/ContentsViewTemplate.html (100%) rename UI/{ => System}/Logs/Files/FilenameCell.js (100%) rename UI/{Logs/Files/Collection.js => System/Logs/Files/LogFileCollection.js} (85%) rename UI/{Logs/Files/Layout.js => System/Logs/Files/LogFileLayout.js} (78%) rename UI/{Logs/Files/LayoutTemplate.html => System/Logs/Files/LogFileLayoutTemplate.html} (72%) rename UI/{Logs/Files/Model.js => System/Logs/Files/LogFileModel.js} (100%) rename UI/{ => System}/Logs/Files/Row.js (100%) create mode 100644 UI/System/Logs/Logs.less rename UI/{Logs/Collection.js => System/Logs/LogsCollection.js} (89%) create mode 100644 UI/System/Logs/LogsLayout.js create mode 100644 UI/System/Logs/LogsLayoutTemplate.html rename UI/{Logs/Model.js => System/Logs/LogsModel.js} (100%) rename UI/{Logs => System/Logs/Table}/LogLevelCell.js (100%) rename UI/{Logs => System/Logs/Table}/LogTimeCell.js (100%) rename UI/{Logs/Layout.js => System/Logs/Table/LogsTableLayout.js} (82%) rename UI/{Logs/LayoutTemplate.html => System/Logs/Table/LogsTableLayoutTemplate.html} (75%) create mode 100644 UI/System/SystemLayout.js create mode 100644 UI/System/SystemLayoutTemplate.html rename UI/{ => System}/Update/UpdateCollection.js (87%) rename UI/{ => System}/Update/UpdateCollectionView.js (83%) rename UI/{ => System}/Update/UpdateItemView.js (73%) rename UI/{ => System}/Update/UpdateItemViewTemplate.html (100%) rename UI/{ => System}/Update/UpdateLayout.js (91%) rename UI/{ => System}/Update/UpdateLayoutTemplate.html (100%) rename UI/{ => System}/Update/UpdateModel.js (100%) rename UI/{ => System}/Update/update.less (100%) diff --git a/Gruntfile.js b/Gruntfile.js index 7025f8c6b..3ce175cb2 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -71,9 +71,9 @@ module.exports = function (grunt) { 'UI/AddSeries/addSeries.less', 'UI/Calendar/calendar.less', 'UI/Cells/cells.less', - 'UI/Logs/logs.less', 'UI/Settings/settings.less', - 'UI/Update/update.less' + 'UI/System/Logs/logs.less', + 'UI/System/Update/update.less' ], dest : outputRoot, ext: '.css' diff --git a/UI/Content/icons.less b/UI/Content/icons.less index 0a253e951..131e82b07 100644 --- a/UI/Content/icons.less +++ b/UI/Content/icons.less @@ -126,4 +126,34 @@ .icon-nd-unmonitored:before { .icon(@bookmark-empty); +} + +.icon-info:before { + .icon(@info-sign); + color : dodgerblue; +} + +.icon-debug:before { + .icon(@info-sign); + color : gray; +} + +.icon-trace:before { + .icon(@info-sign); + color : lightgrey; +} + +.icon-warn:before { + .icon(@exclamation-sign); + color : orange; +} + +.icon-error:before { + .icon(@bug); + color : red; +} + +.icon-fatal:before { + .icon(@remove-sign); + color : purple; } \ No newline at end of file diff --git a/UI/Controller.js b/UI/Controller.js index a4bc4d1f9..d252b0f32 100644 --- a/UI/Controller.js +++ b/UI/Controller.js @@ -11,16 +11,27 @@ define( 'Series/SeriesCollection', 'Missing/MissingLayout', 'Calendar/CalendarLayout', - 'Logs/Layout', - 'Logs/Files/Layout', 'Release/Layout', - 'System/Layout', + 'System/SystemLayout', 'SeasonPass/SeasonPassLayout', - 'Update/UpdateLayout', + 'System/Update/UpdateLayout', 'Shared/NotFoundView', 'Shared/Modal/Region' - ], function (App, Marionette, HistoryLayout, SettingsLayout, AddSeriesLayout, SeriesIndexLayout, SeriesDetailsLayout, SeriesCollection, MissingLayout, CalendarLayout, - LogsLayout, LogFileLayout, ReleaseLayout, SystemLayout, SeasonPassLayout, UpdateLayout, NotFoundView) { + ], function (App, + Marionette, + HistoryLayout, + SettingsLayout, + AddSeriesLayout, + SeriesIndexLayout, + SeriesDetailsLayout, + SeriesCollection, + MissingLayout, + CalendarLayout, + ReleaseLayout, + SystemLayout, + SeasonPassLayout, + UpdateLayout, + NotFoundView) { return Marionette.Controller.extend({ series: function () { @@ -31,7 +42,7 @@ define( seriesDetails: function (query) { var series = SeriesCollection.where({titleSlug: query}); - if (series.length != 0) { + if (series.length !== 0) { var targetSeries = series[0]; this._setTitle(targetSeries.get('title')); App.mainRegion.show(new SeriesDetailsLayout({ model: targetSeries })); @@ -53,7 +64,7 @@ define( settings: function (action) { this._setTitle('Settings'); - App.mainRegion.show(new SettingsLayout({action: action})); + App.mainRegion.show(new SettingsLayout({ action: action })); }, missing: function () { @@ -73,21 +84,9 @@ define( App.mainRegion.show(new ReleaseLayout()); }, - logs: function (action) { - if (action) { - this._setTitle('log files'); - App.mainRegion.show(new LogFileLayout()); - } - - else { - this._setTitle('logs'); - App.mainRegion.show(new LogsLayout()); - } - }, - - system: function () { - this._setTitle('system'); - App.mainRegion.show(new SystemLayout()); + system: function (action) { + this._setTitle('System'); + App.mainRegion.show(new SystemLayout({ action: action })); }, seasonPass: function () { diff --git a/UI/Logs/Logs.less b/UI/Logs/Logs.less deleted file mode 100644 index 3c3a2a5a0..000000000 --- a/UI/Logs/Logs.less +++ /dev/null @@ -1,53 +0,0 @@ -@import "../Content/FontAwesome/font-awesome"; -@import "../Shared/Styles/clickable"; - -#logs-screen { - - .log-time-cell{ - width: 80px; - } - - .log-level-cell{ - width: 12px; - font-size: 14px; - } - - td{ - font-size: 13px; - } - - - .icon-info:before { - .icon(@info-sign); - color : dodgerblue; - } - - .icon-debug:before { - .icon(@info-sign); - color : gray; - } - - .icon-trace:before { - .icon(@info-sign); - color : lightgrey; - } - - .icon-warn:before { - .icon(@exclamation-sign); - color : orange; - } - - .icon-error:before { - .icon(@bug); - color : red; - } - - .icon-fatal:before { - .icon(@remove-sign); - color : purple; - } -} - -.log-file-row { - .clickable; -} \ No newline at end of file diff --git a/UI/Router.js b/UI/Router.js index 22c13b04f..f792762b5 100644 --- a/UI/Router.js +++ b/UI/Router.js @@ -2,6 +2,7 @@ require( [ 'app', + 'backbone', 'marionette', 'Controller', 'Series/SeriesCollection', @@ -10,7 +11,16 @@ require( 'Navbar/NavbarView', 'jQuery/RouteBinder', 'jquery' - ], function (App, Marionette, Controller, SeriesCollection, ProgressMessageCollection, CommandMessengerCollectionView, NavbarView, RouterBinder, $) { + ], function (App, + Backbone, + Marionette, + Controller, + SeriesCollection, + ProgressMessageCollection, + CommandMessengerCollectionView, + NavbarView, + RouterBinder, + $) { var Router = Marionette.AppRouter.extend({ @@ -26,12 +36,10 @@ require( 'settings/:action(/:query)' : 'settings', 'missing' : 'missing', 'history' : 'history', - 'logs' : 'logs', - 'logs/:action' : 'logs', 'rss' : 'rss', 'system' : 'system', + 'system/:action' : 'system', 'seasonpass' : 'seasonPass', - 'update' : 'update', ':whatever' : 'notFound' } }); diff --git a/UI/System/About/AboutView.js b/UI/System/About/AboutView.js new file mode 100644 index 000000000..f87b8758e --- /dev/null +++ b/UI/System/About/AboutView.js @@ -0,0 +1,14 @@ +'use strict'; +define( + [ + 'marionette', + 'System/StatusModel' + ], function (Marionette, StatusModel) { + return Marionette.ItemView.extend({ + template: 'System/About/AboutViewTemplate', + + initialize: function () { + this.model = StatusModel; + } + }); + }); diff --git a/UI/System/About/ViewTemplate.html b/UI/System/About/AboutViewTemplate.html similarity index 100% rename from UI/System/About/ViewTemplate.html rename to UI/System/About/AboutViewTemplate.html diff --git a/UI/System/About/View.js b/UI/System/About/View.js deleted file mode 100644 index d737002f2..000000000 --- a/UI/System/About/View.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; -define( - [ - 'marionette' - ], function (Marionette) { - return Marionette.ItemView.extend({ - template: 'System/About/ViewTemplate' - }); - }); diff --git a/UI/System/Layout.js b/UI/System/Layout.js deleted file mode 100644 index 5f4778c59..000000000 --- a/UI/System/Layout.js +++ /dev/null @@ -1,63 +0,0 @@ -'use strict'; -define( - [ - 'app', - 'marionette', - 'System/StatusModel', - 'System/About/View', - 'Logs/Layout', - 'Shared/Toolbar/ToolbarLayout' - ], function (App, - Marionette, - StatusModel, - AboutView, - LogsLayout, - ToolbarLayout) { - return Marionette.Layout.extend({ - template: 'System/LayoutTemplate', - - regions: { - toolbar : '#toolbar', - about : '#about', - loading : '#loading' - }, - - leftSideButtons: { - type : 'default', - storeState: false, - items : - [ - { - title: 'Logs', - icon : 'icon-book', - route: 'logs' - }, - { - title : 'Updates', - icon : 'icon-upload-alt', - route : 'update' - } - ] - }, - - initialize: function () { - this.statusModel = StatusModel; - }, - - onRender: function () { - this._showToolbar(); - this.about.show(new AboutView({ model: this.statusModel })); - }, - - _showToolbar: function () { - this.toolbar.show(new ToolbarLayout({ - left : - [ - this.leftSideButtons - ], - context: this - })); - } - }); - }); - diff --git a/UI/System/LayoutTemplate.html b/UI/System/LayoutTemplate.html deleted file mode 100644 index 3760f7c46..000000000 --- a/UI/System/LayoutTemplate.html +++ /dev/null @@ -1,17 +0,0 @@ -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
\ No newline at end of file diff --git a/UI/Logs/Files/ContentsModel.js b/UI/System/Logs/Files/ContentsModel.js similarity index 100% rename from UI/Logs/Files/ContentsModel.js rename to UI/System/Logs/Files/ContentsModel.js diff --git a/UI/Logs/Files/ContentsView.js b/UI/System/Logs/Files/ContentsView.js similarity index 72% rename from UI/Logs/Files/ContentsView.js rename to UI/System/Logs/Files/ContentsView.js index 9105467bc..2fd2cd1a1 100644 --- a/UI/Logs/Files/ContentsView.js +++ b/UI/System/Logs/Files/ContentsView.js @@ -6,6 +6,6 @@ define( 'marionette' ], function (App, Marionette) { return Marionette.ItemView.extend({ - template: 'Logs/Files/ContentsViewTemplate' + template: 'System/Logs/Files/ContentsViewTemplate' }); }); diff --git a/UI/Logs/Files/ContentsViewTemplate.html b/UI/System/Logs/Files/ContentsViewTemplate.html similarity index 100% rename from UI/Logs/Files/ContentsViewTemplate.html rename to UI/System/Logs/Files/ContentsViewTemplate.html diff --git a/UI/Logs/Files/FilenameCell.js b/UI/System/Logs/Files/FilenameCell.js similarity index 100% rename from UI/Logs/Files/FilenameCell.js rename to UI/System/Logs/Files/FilenameCell.js diff --git a/UI/Logs/Files/Collection.js b/UI/System/Logs/Files/LogFileCollection.js similarity index 85% rename from UI/Logs/Files/Collection.js rename to UI/System/Logs/Files/LogFileCollection.js index 0b2a5c8bb..b26a983fe 100644 --- a/UI/Logs/Files/Collection.js +++ b/UI/System/Logs/Files/LogFileCollection.js @@ -1,5 +1,6 @@ 'use strict'; -define(['Logs/Files/Model' ], + +define(['System/Logs/Files/LogFileModel' ], function (LogFileModel) { return Backbone.Collection.extend({ url : window.NzbDrone.ApiRoot + '/log/files', diff --git a/UI/Logs/Files/Layout.js b/UI/System/Logs/Files/LogFileLayout.js similarity index 78% rename from UI/Logs/Files/Layout.js rename to UI/System/Logs/Files/LogFileLayout.js index 43d9145c6..959e1aee3 100644 --- a/UI/Logs/Files/Layout.js +++ b/UI/System/Logs/Files/LogFileLayout.js @@ -4,16 +4,17 @@ define( 'app', 'marionette', 'backgrid', - 'Logs/Files/FilenameCell', + 'System/Logs/Files/FilenameCell', 'Cells/RelativeDateCell', - 'Logs/Files/Collection', - 'Logs/Files/Row', - 'Logs/Files/ContentsView', - 'Logs/Files/ContentsModel', - 'Shared/Toolbar/ToolbarLayout' - ], function (App, Marionette, Backgrid, FilenameCell, RelativeDateCell, LogFileCollection, LogFileRow, ContentsView, ContentsModel, ToolbarLayout) { + 'System/Logs/Files/LogFileCollection', + 'System/Logs/Files/Row', + 'System/Logs/Files/ContentsView', + 'System/Logs/Files/ContentsModel', + 'Shared/Toolbar/ToolbarLayout', + 'Shared/LoadingView' + ], function (App, Marionette, Backgrid, FilenameCell, RelativeDateCell, LogFileCollection, LogFileRow, ContentsView, ContentsModel, ToolbarLayout, LoadingView) { return Marionette.Layout.extend({ - template: 'Logs/Files/LayoutTemplate', + template: 'System/Logs/Files/LogFileLayoutTemplate', regions: { toolbar : '#x-toolbar', @@ -38,8 +39,8 @@ define( initialize: function () { this.collection = new LogFileCollection(); - App.vent.on(App.Commands.ShowLogFile, this._showLogFile, this); + App.vent.on(App.Events.CommandComplete, this._commandComplete, this); }, onShow: function () { @@ -51,15 +52,19 @@ define( _fetchAndShow: function () { var self = this; + this.contents.close(); + var promise = this.collection.fetch(); promise.done(function () { - self._showLogFile({ model: self.collection.first() }); + if (self.collection.length > 0) { + self._showLogFile({ model: self.collection.first() }); + } }); }, _showToolbar: function () { - var leftSideButtons = { + var rightSideButtons = { type : 'default', storeState: false, items : @@ -76,17 +81,15 @@ define( icon : 'icon-trash', command : 'deleteLogFiles', successMessage : 'Log files have been deleted', - errorMessage : 'Failed to delete log files', - ownerContext : this, - onSuccess: this._refreshLogs + errorMessage : 'Failed to delete log files' } ] }; this.toolbar.show(new ToolbarLayout({ - left : + right : [ - leftSideButtons + rightSideButtons ], context: this })); @@ -102,8 +105,7 @@ define( }, _showLogFile: function (options) { - - this.contents.close(); + this.contents.show(new LoadingView()); if (!options.model) { return; @@ -127,6 +129,12 @@ define( _refreshLogs: function () { this._fetchAndShow(); + }, + + _commandComplete: function (options) { + if (options.command.get('name') === 'deletelogfiles') { + this._refreshLogs(); + } } }); }); diff --git a/UI/Logs/Files/LayoutTemplate.html b/UI/System/Logs/Files/LogFileLayoutTemplate.html similarity index 72% rename from UI/Logs/Files/LayoutTemplate.html rename to UI/System/Logs/Files/LogFileLayoutTemplate.html index df28d4b8a..024af966d 100644 --- a/UI/Logs/Files/LayoutTemplate.html +++ b/UI/System/Logs/Files/LogFileLayoutTemplate.html @@ -1,12 +1,12 @@ 
-
+
-
+
\ No newline at end of file diff --git a/UI/Logs/Files/Model.js b/UI/System/Logs/Files/LogFileModel.js similarity index 100% rename from UI/Logs/Files/Model.js rename to UI/System/Logs/Files/LogFileModel.js diff --git a/UI/Logs/Files/Row.js b/UI/System/Logs/Files/Row.js similarity index 100% rename from UI/Logs/Files/Row.js rename to UI/System/Logs/Files/Row.js diff --git a/UI/System/Logs/Logs.less b/UI/System/Logs/Logs.less new file mode 100644 index 000000000..c61c3a135 --- /dev/null +++ b/UI/System/Logs/Logs.less @@ -0,0 +1,21 @@ +@import "../../Shared/Styles/clickable"; + +#logs-screen { + + .log-time-cell{ + width: 80px; + } + + .log-level-cell{ + width: 12px; + font-size: 14px; + } + + td{ + font-size: 13px; + } +} + +.log-file-row { + .clickable; +} \ No newline at end of file diff --git a/UI/Logs/Collection.js b/UI/System/Logs/LogsCollection.js similarity index 89% rename from UI/Logs/Collection.js rename to UI/System/Logs/LogsCollection.js index 9b755203a..14c80374f 100644 --- a/UI/Logs/Collection.js +++ b/UI/System/Logs/LogsCollection.js @@ -1,5 +1,7 @@ 'use strict'; -define(['backbone.pageable', 'Logs/Model', ], function (PagableCollection, LogsModel) { + +define(['backbone.pageable', 'System/Logs/LogsModel'], + function (PagableCollection, LogsModel) { return PagableCollection.extend({ url : window.NzbDrone.ApiRoot + '/log', model: LogsModel, diff --git a/UI/System/Logs/LogsLayout.js b/UI/System/Logs/LogsLayout.js new file mode 100644 index 000000000..15511b431 --- /dev/null +++ b/UI/System/Logs/LogsLayout.js @@ -0,0 +1,48 @@ +'use strict'; +define( + [ + 'marionette', + 'System/Logs/Table/LogsTableLayout', + 'System/Logs/Files/LogFileLayout' + ], function (Marionette, LogsTableLayout, LogsFileLayout) { + return Marionette.Layout.extend({ + template: 'System/Logs/LogsLayoutTemplate', + + ui: { + tableTab: '.x-table-tab', + filesTab: '.x-files-tab' + }, + + regions: { + table: '#table', + files: '#files' + }, + + events: { + 'click .x-table-tab': '_showTable', + 'click .x-files-tab': '_showFiles' + }, + + onShow: function () { + this._showTable(); + }, + + _showTable: function (e) { + if (e) { + e.preventDefault(); + } + + this.ui.tableTab.tab('show'); + this.table.show(new LogsTableLayout()); + }, + + _showFiles: function (e) { + if (e) { + e.preventDefault(); + } + + this.ui.filesTab.tab('show'); + this.files.show(new LogsFileLayout()); + } + }); + }); diff --git a/UI/System/Logs/LogsLayoutTemplate.html b/UI/System/Logs/LogsLayoutTemplate.html new file mode 100644 index 000000000..23881fc79 --- /dev/null +++ b/UI/System/Logs/LogsLayoutTemplate.html @@ -0,0 +1,11 @@ +
+ + +
+
+
+
+
\ No newline at end of file diff --git a/UI/Logs/Model.js b/UI/System/Logs/LogsModel.js similarity index 100% rename from UI/Logs/Model.js rename to UI/System/Logs/LogsModel.js diff --git a/UI/Logs/LogLevelCell.js b/UI/System/Logs/Table/LogLevelCell.js similarity index 100% rename from UI/Logs/LogLevelCell.js rename to UI/System/Logs/Table/LogLevelCell.js diff --git a/UI/Logs/LogTimeCell.js b/UI/System/Logs/Table/LogTimeCell.js similarity index 100% rename from UI/Logs/LogTimeCell.js rename to UI/System/Logs/Table/LogTimeCell.js diff --git a/UI/Logs/Layout.js b/UI/System/Logs/Table/LogsTableLayout.js similarity index 82% rename from UI/Logs/Layout.js rename to UI/System/Logs/Table/LogsTableLayout.js index 807ca580e..1eb1ef132 100644 --- a/UI/Logs/Layout.js +++ b/UI/System/Logs/Table/LogsTableLayout.js @@ -3,14 +3,15 @@ define( [ 'marionette', 'backgrid', - 'Logs/LogTimeCell', - 'Logs/LogLevelCell', + 'System/Logs/Table/LogTimeCell', + 'System/Logs/Table/LogLevelCell', 'Shared/Grid/Pager', - 'Logs/Collection', - 'Shared/Toolbar/ToolbarLayout' - ], function (Marionette, Backgrid, LogTimeCell, LogLevelCell, GridPager, LogCollection, ToolbarLayout) { + 'System/Logs/LogsCollection', + 'Shared/Toolbar/ToolbarLayout', + 'Shared/LoadingView' + ], function (Marionette, Backgrid, LogTimeCell, LogLevelCell, GridPager, LogCollection, ToolbarLayout, LoadingView) { return Marionette.Layout.extend({ - template: 'Logs/LayoutTemplate', + template: 'System/Logs/Table/LogsTableLayoutTemplate', regions: { grid : '#x-grid', @@ -55,16 +56,25 @@ define( initialize: function () { this.collection = new LogCollection(); - this.collection.fetch(); + this.collectionPromise = this.collection.fetch(); + }, + + onRender: function () { + this.grid.show(new LoadingView()); }, onShow: function () { + var self = this; this._showToolbar(); - this._showTable(); + + this.collectionPromise.done(function () { + self._showTable(); + }); }, - _showTable: function () { + + _showTable: function () { this.grid.show(new Backgrid.Grid({ row : Backgrid.Row, columns : this.columns, @@ -79,7 +89,7 @@ define( }, _showToolbar: function () { - var leftSideButtons = { + var rightSideButtons = { type : 'default', storeState: false, items : @@ -99,20 +109,14 @@ define( errorMessage : 'Failed to clear logs', ownerContext : this, onSuccess : this._refreshLogs - }, - - { - title: 'Files', - icon : 'icon-file', - route: 'logs/files' } ] }; this.toolbar.show(new ToolbarLayout({ - left : + right : [ - leftSideButtons + rightSideButtons ], context: this })); diff --git a/UI/Logs/LayoutTemplate.html b/UI/System/Logs/Table/LogsTableLayoutTemplate.html similarity index 75% rename from UI/Logs/LayoutTemplate.html rename to UI/System/Logs/Table/LogsTableLayoutTemplate.html index 43529ab0f..aae6c4dfc 100644 --- a/UI/Logs/LayoutTemplate.html +++ b/UI/System/Logs/Table/LogsTableLayoutTemplate.html @@ -1,11 +1,11 @@ 
-
+
-
+
diff --git a/UI/System/StatusModel.js b/UI/System/StatusModel.js index 20805cec7..3210fe3e6 100644 --- a/UI/System/StatusModel.js +++ b/UI/System/StatusModel.js @@ -4,12 +4,12 @@ define( 'backbone' ], function (Backbone) { - var model = Backbone.Model.extend({ + var StatusModel = Backbone.Model.extend({ url: window.NzbDrone.ApiRoot + '/system/status' }); - var instance = new model(); + var instance = new StatusModel(); instance.fetch(); return instance; }); diff --git a/UI/System/SystemLayout.js b/UI/System/SystemLayout.js new file mode 100644 index 000000000..ed41fd345 --- /dev/null +++ b/UI/System/SystemLayout.js @@ -0,0 +1,91 @@ +'use strict'; +define( + [ + 'app', + 'marionette', + 'System/About/AboutView', + 'System/Logs/LogsLayout', + 'System/Update/UpdateLayout' + ], function (App, + Marionette, + AboutView, + LogsLayout, + UpdateLayout) { + return Marionette.Layout.extend({ + template: 'System/SystemLayoutTemplate', + + regions: { + about : '#about', + logs : '#logs', + updates : '#updates' + }, + + ui: { + aboutTab : '.x-about-tab', + logsTab : '.x-logs-tab', + updatesTab: '.x-updates-tab' + }, + + events: { + 'click .x-about-tab' : '_showAbout', + 'click .x-logs-tab' : '_showLogs', + 'click .x-updates-tab': '_showUpdates' + }, + + initialize: function (options) { + if (options.action) { + this.action = options.action.toLowerCase(); + } + }, + + onShow: function () { + switch (this.action) { + case 'logs': + this._showLogs(); + break; + case 'updates': + this._showUpdates(); + break; + default: + this._showAbout(); + } + }, + + _navigate:function(route){ + require(['Router'], function(){ + App.Router.navigate(route); + }); + }, + + _showAbout: function (e) { + if (e) { + e.preventDefault(); + } + + this.about.show(new AboutView()); + this.ui.aboutTab.tab('show'); + this._navigate('system/about'); + }, + + _showLogs: function (e) { + if (e) { + e.preventDefault(); + } + + this.logs.show(new LogsLayout()); + this.ui.logsTab.tab('show'); + this._navigate('system/logs'); + }, + + _showUpdates: function (e) { + if (e) { + e.preventDefault(); + } + + this.updates.show(new UpdateLayout()); + this.ui.updatesTab.tab('show'); + this._navigate('system/updates'); + } + }); + }); + diff --git a/UI/System/SystemLayoutTemplate.html b/UI/System/SystemLayoutTemplate.html new file mode 100644 index 000000000..bddcf83b0 --- /dev/null +++ b/UI/System/SystemLayoutTemplate.html @@ -0,0 +1,11 @@ + + +
+
+
+
+
\ No newline at end of file diff --git a/UI/Update/UpdateCollection.js b/UI/System/Update/UpdateCollection.js similarity index 87% rename from UI/Update/UpdateCollection.js rename to UI/System/Update/UpdateCollection.js index b1e7bcf60..a6d5accf6 100644 --- a/UI/Update/UpdateCollection.js +++ b/UI/System/Update/UpdateCollection.js @@ -2,7 +2,7 @@ define( [ 'backbone', - 'Update/UpdateModel' + 'System/Update/UpdateModel' ], function (Backbone, UpdateModel) { return Backbone.Collection.extend({ url : window.NzbDrone.ApiRoot + '/update', diff --git a/UI/Update/UpdateCollectionView.js b/UI/System/Update/UpdateCollectionView.js similarity index 83% rename from UI/Update/UpdateCollectionView.js rename to UI/System/Update/UpdateCollectionView.js index 267af7f85..77f210d75 100644 --- a/UI/Update/UpdateCollectionView.js +++ b/UI/System/Update/UpdateCollectionView.js @@ -2,7 +2,7 @@ define( [ 'marionette', - 'Update/UpdateItemView' + 'System/Update/UpdateItemView' ], function (Marionette, UpdateItemView) { return Marionette.CollectionView.extend({ itemView: UpdateItemView diff --git a/UI/Update/UpdateItemView.js b/UI/System/Update/UpdateItemView.js similarity index 73% rename from UI/Update/UpdateItemView.js rename to UI/System/Update/UpdateItemView.js index 8d478f038..5271ec9b6 100644 --- a/UI/Update/UpdateItemView.js +++ b/UI/System/Update/UpdateItemView.js @@ -6,6 +6,6 @@ define( 'marionette' ], function (App, Marionette) { return Marionette.ItemView.extend({ - template: 'Update/UpdateItemViewTemplate' + template: 'System/Update/UpdateItemViewTemplate' }); }); diff --git a/UI/Update/UpdateItemViewTemplate.html b/UI/System/Update/UpdateItemViewTemplate.html similarity index 100% rename from UI/Update/UpdateItemViewTemplate.html rename to UI/System/Update/UpdateItemViewTemplate.html diff --git a/UI/Update/UpdateLayout.js b/UI/System/Update/UpdateLayout.js similarity index 91% rename from UI/Update/UpdateLayout.js rename to UI/System/Update/UpdateLayout.js index 4794f761c..fa2393afe 100644 --- a/UI/Update/UpdateLayout.js +++ b/UI/System/Update/UpdateLayout.js @@ -3,13 +3,13 @@ define( [ 'marionette', 'backgrid', - 'Update/UpdateCollection', - 'Update/UpdateCollectionView', + 'System/Update/UpdateCollection', + 'System/Update/UpdateCollectionView', 'Shared/Toolbar/ToolbarLayout', 'Shared/LoadingView' ], function (Marionette, Backgrid, UpdateCollection, UpdateCollectionView, ToolbarLayout, LoadingView) { return Marionette.Layout.extend({ - template: 'Update/UpdateLayoutTemplate', + template: 'System/Update/UpdateLayoutTemplate', regions: { updates: '#x-updates', diff --git a/UI/Update/UpdateLayoutTemplate.html b/UI/System/Update/UpdateLayoutTemplate.html similarity index 100% rename from UI/Update/UpdateLayoutTemplate.html rename to UI/System/Update/UpdateLayoutTemplate.html diff --git a/UI/Update/UpdateModel.js b/UI/System/Update/UpdateModel.js similarity index 100% rename from UI/Update/UpdateModel.js rename to UI/System/Update/UpdateModel.js diff --git a/UI/Update/update.less b/UI/System/Update/update.less similarity index 100% rename from UI/Update/update.less rename to UI/System/Update/update.less diff --git a/UI/index.html b/UI/index.html index 093473a8a..3e57b6590 100644 --- a/UI/index.html +++ b/UI/index.html @@ -11,11 +11,11 @@ - + - + From b6693a20a9bcf82e102d2af1897cbfe3232972e9 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Mon, 30 Sep 2013 08:09:47 -0700 Subject: [PATCH 02/52] signalr-episodes --- NzbDrone.Api/Episodes/EpisodeModule.cs | 33 ++++++++++++++++--- NzbDrone.Api/NzbDroneRestModuleWithSignalR.cs | 6 ++++ NzbDrone.Core/Datastore/Events/ModelEvent.cs | 2 +- UI/Mixins/backbone.signalr.mixin.js | 9 ++--- UI/Series/Details/SeriesDetailsLayout.js | 2 +- UI/Shared/SignalRBroadcaster.js | 4 +-- 6 files changed, 44 insertions(+), 12 deletions(-) diff --git a/NzbDrone.Api/Episodes/EpisodeModule.cs b/NzbDrone.Api/Episodes/EpisodeModule.cs index 3d6684d19..d057b3658 100644 --- a/NzbDrone.Api/Episodes/EpisodeModule.cs +++ b/NzbDrone.Api/Episodes/EpisodeModule.cs @@ -1,16 +1,25 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using NzbDrone.Api.Mapping; using NzbDrone.Api.REST; +using NzbDrone.Core.Datastore.Events; +using NzbDrone.Core.Download; +using NzbDrone.Core.MediaFiles.Events; +using NzbDrone.Core.Messaging.Commands; +using NzbDrone.Core.Messaging.Events; using NzbDrone.Core.Tv; namespace NzbDrone.Api.Episodes { - public class EpisodeModule : NzbDroneRestModule + public class EpisodeModule : NzbDroneRestModuleWithSignalR, + IHandle, + IHandle + { private readonly IEpisodeService _episodeService; - public EpisodeModule(IEpisodeService episodeService) - : base("/episodes") + public EpisodeModule(ICommandExecutor commandExecutor, IEpisodeService episodeService) + : base(commandExecutor, "episodes") { _episodeService = episodeService; @@ -40,5 +49,21 @@ namespace NzbDrone.Api.Episodes { return _episodeService.GetEpisode(id).InjectTo(); } + + public void Handle(EpisodeGrabbedEvent message) + { + foreach (var episode in message.Episode.Episodes) + { + BroadcastResourceChange(ModelAction.Updated, episode.Id); + } + } + + public void Handle(EpisodeDownloadedEvent message) + { + foreach (var episode in message.Episode.Episodes) + { + BroadcastResourceChange(ModelAction.Updated, episode.Id); + } + } } } \ No newline at end of file diff --git a/NzbDrone.Api/NzbDroneRestModuleWithSignalR.cs b/NzbDrone.Api/NzbDroneRestModuleWithSignalR.cs index 7cdfb3f53..2a70103b1 100644 --- a/NzbDrone.Api/NzbDroneRestModuleWithSignalR.cs +++ b/NzbDrone.Api/NzbDroneRestModuleWithSignalR.cs @@ -18,6 +18,12 @@ namespace NzbDrone.Api _commandExecutor = commandExecutor; } + protected NzbDroneRestModuleWithSignalR(ICommandExecutor commandExecutor, string resource) + : base(resource) + { + _commandExecutor = commandExecutor; + } + public void Handle(ModelEvent message) { if (message.Action == ModelAction.Deleted || message.Action == ModelAction.Sync) diff --git a/NzbDrone.Core/Datastore/Events/ModelEvent.cs b/NzbDrone.Core/Datastore/Events/ModelEvent.cs index 3cabd3a69..91f74887b 100644 --- a/NzbDrone.Core/Datastore/Events/ModelEvent.cs +++ b/NzbDrone.Core/Datastore/Events/ModelEvent.cs @@ -16,7 +16,7 @@ namespace NzbDrone.Core.Datastore.Events public enum ModelAction { - Unknow = 0, + Unknown = 0, Created = 1, Updated = 2, Deleted = 3, diff --git a/UI/Mixins/backbone.signalr.mixin.js b/UI/Mixins/backbone.signalr.mixin.js index 8f5c695ae..e0154e6af 100644 --- a/UI/Mixins/backbone.signalr.mixin.js +++ b/UI/Mixins/backbone.signalr.mixin.js @@ -1,8 +1,10 @@ 'use strict'; define( [ + 'underscore', + 'backbone', 'signalR' - ], function () { + ], function (_, Backbone) { _.extend(Backbone.Collection.prototype, { bindSignalR: function () { @@ -13,14 +15,14 @@ define( var model = new collection.model(options.resource, {parse: true}); collection.add(model, {merge: true}); - console.log(options.action + ": %O", options.resource); + console.log(options.action + ': {0}}'.format(options.resource)); }; require( [ 'app' ], function (app) { - collection.listenTo(app.vent, 'server:' + collection.url.replace('/api/', ''), processMessage) + collection.listenTo(app.vent, 'server:' + collection.url.replace('/api/', ''), processMessage); }); return this; @@ -28,7 +30,6 @@ define( unbindSignalR: function () { - }}); }); diff --git a/UI/Series/Details/SeriesDetailsLayout.js b/UI/Series/Details/SeriesDetailsLayout.js index d08abac58..ea4024675 100644 --- a/UI/Series/Details/SeriesDetailsLayout.js +++ b/UI/Series/Details/SeriesDetailsLayout.js @@ -171,7 +171,7 @@ define( this.seasons.show(new LoadingView()); this.seasonCollection = new SeasonCollection(this.model.get('seasons')); - this.episodeCollection = new EpisodeCollection({ seriesId: this.model.id }); + this.episodeCollection = new EpisodeCollection({ seriesId: this.model.id }).bindSignalR(); this.episodeFileCollection = new EpisodeFileCollection({ seriesId: this.model.id }); $.when(this.episodeCollection.fetch(), this.episodeFileCollection.fetch()).done(function () { diff --git a/UI/Shared/SignalRBroadcaster.js b/UI/Shared/SignalRBroadcaster.js index 5a58dcb1d..14f322fd1 100644 --- a/UI/Shared/SignalRBroadcaster.js +++ b/UI/Shared/SignalRBroadcaster.js @@ -24,7 +24,7 @@ define( } }; - this.signalRconnection = $.connection("/signalr"); + this.signalRconnection = $.connection('/signalr'); this.signalRconnection.stateChanged(function (change) { console.debug('SignalR: [{0}]'.format(getStatus(change.newState))); @@ -36,7 +36,7 @@ define( 'app' ], function (app) { app.vent.trigger('server:' + message.name, message.body); - }) + }); }); this.signalRconnection.start({ transport: From d1a4c7c942420b0541bae7e1d5ef6a7ff4222d34 Mon Sep 17 00:00:00 2001 From: Keivan Beigi Date: Fri, 20 Sep 2013 17:18:11 -0700 Subject: [PATCH 03/52] something! --- NzbDrone.Core.Test/NzbDrone.Core.Test.csproj | 1 + .../ThingiProvider/ProviderBaseFixture.cs | 23 +++++++++ NzbDrone.Core/NzbDrone.Core.csproj | 1 + NzbDrone.Core/ThingiProvider/ProviderBase.cs | 49 +++++++++++++++++++ 4 files changed, 74 insertions(+) create mode 100644 NzbDrone.Core.Test/ThingiProvider/ProviderBaseFixture.cs create mode 100644 NzbDrone.Core/ThingiProvider/ProviderBase.cs diff --git a/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj b/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj index 58b09e81e..430b4d934 100644 --- a/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj +++ b/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj @@ -181,6 +181,7 @@ + diff --git a/NzbDrone.Core.Test/ThingiProvider/ProviderBaseFixture.cs b/NzbDrone.Core.Test/ThingiProvider/ProviderBaseFixture.cs new file mode 100644 index 000000000..11006aa42 --- /dev/null +++ b/NzbDrone.Core.Test/ThingiProvider/ProviderBaseFixture.cs @@ -0,0 +1,23 @@ +using NUnit.Framework; +using NzbDrone.Core.Test.Datastore; +using NzbDrone.Core.Test.Framework; +using NzbDrone.Core.ThingiProvider; + +namespace NzbDrone.Core.Test.ThingiProvider +{ + + public class ProviderRepositoryFixture : DbTest + { + [Test] + public void should_read_write_download_provider() + { + var model = new DownloadProviderModel(); + + model.Config = new DownloadProviderConfig(); + + //Subject.Insert(new ) + } + + + } +} \ No newline at end of file diff --git a/NzbDrone.Core/NzbDrone.Core.csproj b/NzbDrone.Core/NzbDrone.Core.csproj index 23d3657e3..2ab111e2a 100644 --- a/NzbDrone.Core/NzbDrone.Core.csproj +++ b/NzbDrone.Core/NzbDrone.Core.csproj @@ -416,6 +416,7 @@ + diff --git a/NzbDrone.Core/ThingiProvider/ProviderBase.cs b/NzbDrone.Core/ThingiProvider/ProviderBase.cs new file mode 100644 index 000000000..61035d7de --- /dev/null +++ b/NzbDrone.Core/ThingiProvider/ProviderBase.cs @@ -0,0 +1,49 @@ + +using NzbDrone.Core.Datastore; +using NzbDrone.Core.Messaging.Events; + +namespace NzbDrone.Core.ThingiProvider +{ + + + public class DownloadProviderRepository : BasicRepository + { + public DownloadProviderRepository(IDatabase database, IEventAggregator eventAggregator) + : base(database, eventAggregator) + { + } + } + + public class DownloadProviderModel : Provider + { + + } + + public class DownloadProviderConfig : ProviderSetting + { + + } + + + public abstract class Provider : ModelBase + where TSettings : ProviderSetting + { + public string Implementation { get; set; } + public TSettings Config { get; set; } + } + + public abstract class ProviderSetting : IEmbeddedDocument + { + + } + + public abstract class ProviderBase where TSettings : ProviderSetting + { + public TSettings Settings { get; private set; } + + public void LoadSettings(TSettings setting) + { + Settings = setting; + } + } +} \ No newline at end of file From 08e2d60f20936344b25301d5e128e7d54bfbe591 Mon Sep 17 00:00:00 2001 From: "kay.one" Date: Fri, 20 Sep 2013 23:38:27 -0700 Subject: [PATCH 04/52] added ConverterContext to marr Converters. --- Marr.Data/Converters/BooleanIntConverter.cs | 13 ++++-- Marr.Data/Converters/BooleanYNConverter.cs | 13 ++++-- Marr.Data/Converters/CastConverter.cs | 9 +++- Marr.Data/Converters/ConverterContext.cs | 13 ++++++ Marr.Data/Converters/EnumIntConverter.cs | 11 +++-- Marr.Data/Converters/EnumStringConverter.cs | 11 +++-- Marr.Data/Converters/IConverter.cs | 3 ++ Marr.Data/Mapping/MappingHelper.cs | 11 ++++- Marr.Data/Marr.Data.csproj | 1 + .../Converters/BooleanIntConverter.cs | 13 ++++-- .../Converters/EmbeddedDocumentConverter.cs | 43 ++++++++++++++++--- .../Datastore/Converters/EnumIntConverter.cs | 11 +++-- .../Datastore/Converters/Int32Converter.cs | 15 +++++++ .../Converters/QualityIntConverter.cs | 11 +++-- .../Datastore/Converters/UtcConverter.cs | 7 ++- 15 files changed, 152 insertions(+), 33 deletions(-) create mode 100644 Marr.Data/Converters/ConverterContext.cs diff --git a/Marr.Data/Converters/BooleanIntConverter.cs b/Marr.Data/Converters/BooleanIntConverter.cs index 9dc9b41d3..18c964d15 100644 --- a/Marr.Data/Converters/BooleanIntConverter.cs +++ b/Marr.Data/Converters/BooleanIntConverter.cs @@ -20,14 +20,14 @@ namespace Marr.Data.Converters { public class BooleanIntConverter : IConverter { - public object FromDB(ColumnMap map, object dbValue) + public object FromDB(ConverterContext context) { - if (dbValue == DBNull.Value) + if (context.DbValue == DBNull.Value) { return DBNull.Value; } - int val = (int)dbValue; + int val = (int)context.DbValue; if (val == 1) { @@ -40,7 +40,12 @@ namespace Marr.Data.Converters throw new ConversionException( string.Format( "The BooleanCharConverter could not convert the value '{0}' to a boolean.", - dbValue)); + context.DbValue)); + } + + public object FromDB(ColumnMap map, object dbValue) + { + return FromDB(new ConverterContext { ColumnMap = map, DbValue = dbValue }); } public object ToDB(object clrValue) diff --git a/Marr.Data/Converters/BooleanYNConverter.cs b/Marr.Data/Converters/BooleanYNConverter.cs index b116bdeaf..38003939c 100644 --- a/Marr.Data/Converters/BooleanYNConverter.cs +++ b/Marr.Data/Converters/BooleanYNConverter.cs @@ -20,14 +20,14 @@ namespace Marr.Data.Converters { public class BooleanYNConverter : IConverter { - public object FromDB(ColumnMap map, object dbValue) + public object FromDB(ConverterContext context) { - if (dbValue == DBNull.Value) + if (context.DbValue == DBNull.Value) { return DBNull.Value; } - string val = dbValue.ToString(); + string val = context.DbValue.ToString(); if (val == "Y") { @@ -40,7 +40,12 @@ namespace Marr.Data.Converters throw new ConversionException( string.Format( "The BooleanYNConverter could not convert the value '{0}' to a boolean.", - dbValue)); + context.DbValue)); + } + + public object FromDB(ColumnMap map, object dbValue) + { + return FromDB(new ConverterContext {ColumnMap = map, DbValue = dbValue}); } public object ToDB(object clrValue) diff --git a/Marr.Data/Converters/CastConverter.cs b/Marr.Data/Converters/CastConverter.cs index 4253357ed..2fa3b8eca 100644 --- a/Marr.Data/Converters/CastConverter.cs +++ b/Marr.Data/Converters/CastConverter.cs @@ -30,12 +30,17 @@ namespace Marr.Data.Converters get { return typeof(TDb); } } - public object FromDB(ColumnMap map, object dbValue) + public object FromDB(ConverterContext context) { - TDb val = (TDb)dbValue; + TDb val = (TDb)context.DbValue; return val.ToType(typeof(TClr), CultureInfo.InvariantCulture); } + public object FromDB(ColumnMap map, object dbValue) + { + return FromDB(new ConverterContext { ColumnMap = map, DbValue = dbValue }); + } + public object ToDB(object clrValue) { TClr val = (TClr)clrValue; diff --git a/Marr.Data/Converters/ConverterContext.cs b/Marr.Data/Converters/ConverterContext.cs new file mode 100644 index 000000000..341925077 --- /dev/null +++ b/Marr.Data/Converters/ConverterContext.cs @@ -0,0 +1,13 @@ +using System.Data; +using Marr.Data.Mapping; + +namespace Marr.Data.Converters +{ + public class ConverterContext + { + public ColumnMap ColumnMap { get; set; } + public object DbValue { get; set; } + public ColumnMapCollection MapCollection { get; set; } + public IDataRecord DataRecord { get; set; } + } +} \ No newline at end of file diff --git a/Marr.Data/Converters/EnumIntConverter.cs b/Marr.Data/Converters/EnumIntConverter.cs index a7d528d16..5fe88a411 100644 --- a/Marr.Data/Converters/EnumIntConverter.cs +++ b/Marr.Data/Converters/EnumIntConverter.cs @@ -20,11 +20,16 @@ namespace Marr.Data.Converters { public class EnumIntConverter : IConverter { - public object FromDB(ColumnMap map, object dbValue) + public object FromDB(ConverterContext context) { - if (dbValue == null || dbValue == DBNull.Value) + if (context.DbValue == null || context.DbValue == DBNull.Value) return null; - return Enum.ToObject(map.FieldType, (int)dbValue); + return Enum.ToObject(context.ColumnMap.FieldType, (int)context.DbValue); + } + + public object FromDB(ColumnMap map, object dbValue) + { + return FromDB(new ConverterContext { ColumnMap = map, DbValue = dbValue }); } public object ToDB(object clrValue) diff --git a/Marr.Data/Converters/EnumStringConverter.cs b/Marr.Data/Converters/EnumStringConverter.cs index 4e304fc10..eb4f8b01a 100644 --- a/Marr.Data/Converters/EnumStringConverter.cs +++ b/Marr.Data/Converters/EnumStringConverter.cs @@ -20,11 +20,16 @@ namespace Marr.Data.Converters { public class EnumStringConverter : IConverter { - public object FromDB(ColumnMap map, object dbValue) + public object FromDB(ConverterContext context) { - if (dbValue == null || dbValue == DBNull.Value) + if (context.DbValue == null || context.DbValue == DBNull.Value) return null; - return Enum.Parse(map.FieldType, (string)dbValue); + return Enum.Parse(context.ColumnMap.FieldType, (string)context.DbValue); + } + + public object FromDB(ColumnMap map, object dbValue) + { + return FromDB(new ConverterContext { ColumnMap = map, DbValue = dbValue }); } public object ToDB(object clrValue) diff --git a/Marr.Data/Converters/IConverter.cs b/Marr.Data/Converters/IConverter.cs index 318f26957..f2e9685a9 100644 --- a/Marr.Data/Converters/IConverter.cs +++ b/Marr.Data/Converters/IConverter.cs @@ -20,6 +20,9 @@ namespace Marr.Data.Converters { public interface IConverter { + object FromDB(ConverterContext context); + + [Obsolete("use FromDB(ConverterContext context) instead")] object FromDB(ColumnMap map, object dbValue); object ToDB(object clrValue); Type DbType { get; } diff --git a/Marr.Data/Mapping/MappingHelper.cs b/Marr.Data/Mapping/MappingHelper.cs index f025528be..0b4c73681 100644 --- a/Marr.Data/Mapping/MappingHelper.cs +++ b/Marr.Data/Mapping/MappingHelper.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Data.Common; +using Marr.Data.Converters; namespace Marr.Data.Mapping { @@ -53,7 +54,15 @@ namespace Marr.Data.Mapping // Handle conversions if (dataMap.Converter != null) { - dbValue = dataMap.Converter.FromDB(dataMap, dbValue); + var convertContext = new ConverterContext + { + DbValue = dbValue, + ColumnMap = dataMap, + MapCollection = mappings, + DataRecord = reader + }; + + dbValue = dataMap.Converter.FromDB(convertContext); } if (dbValue != DBNull.Value && dbValue != null) diff --git a/Marr.Data/Marr.Data.csproj b/Marr.Data/Marr.Data.csproj index f7e58cb01..9ae7c2082 100644 --- a/Marr.Data/Marr.Data.csproj +++ b/Marr.Data/Marr.Data.csproj @@ -52,6 +52,7 @@ + diff --git a/NzbDrone.Core/Datastore/Converters/BooleanIntConverter.cs b/NzbDrone.Core/Datastore/Converters/BooleanIntConverter.cs index 88d06c669..7ec60e201 100644 --- a/NzbDrone.Core/Datastore/Converters/BooleanIntConverter.cs +++ b/NzbDrone.Core/Datastore/Converters/BooleanIntConverter.cs @@ -6,14 +6,14 @@ namespace NzbDrone.Core.Datastore.Converters { public class BooleanIntConverter : IConverter { - public object FromDB(ColumnMap map, object dbValue) + public object FromDB(ConverterContext context) { - if (dbValue == DBNull.Value) + if (context.DbValue == DBNull.Value) { return DBNull.Value; } - var val = (Int64)dbValue; + var val = (Int64)context.DbValue; switch (val) { @@ -22,10 +22,15 @@ namespace NzbDrone.Core.Datastore.Converters case 0: return false; default: - throw new ConversionException(string.Format("The BooleanCharConverter could not convert the value '{0}' to a Boolean.", dbValue)); + throw new ConversionException(string.Format("The BooleanCharConverter could not convert the value '{0}' to a Boolean.", context.DbValue)); } } + public object FromDB(ColumnMap map, object dbValue) + { + return FromDB(new ConverterContext { ColumnMap = map, DbValue = dbValue }); + } + public object ToDB(object clrValue) { var val = (Nullable)clrValue; diff --git a/NzbDrone.Core/Datastore/Converters/EmbeddedDocumentConverter.cs b/NzbDrone.Core/Datastore/Converters/EmbeddedDocumentConverter.cs index b222eb320..cde1c116d 100644 --- a/NzbDrone.Core/Datastore/Converters/EmbeddedDocumentConverter.cs +++ b/NzbDrone.Core/Datastore/Converters/EmbeddedDocumentConverter.cs @@ -5,24 +5,57 @@ using NzbDrone.Common.Serializer; namespace NzbDrone.Core.Datastore.Converters { - public class EmbeddedDocumentConverter : IConverter + + public class ProviderSettingConverter : EmbeddedDocumentConverter { + public override object FromDB(ConverterContext context) + { + if (context.DbValue == DBNull.Value) + { + return DBNull.Value; + } - public object FromDB(ColumnMap map, object dbValue) + var stringValue = (string)context.DbValue; + + if (string.IsNullOrWhiteSpace(stringValue)) + { + return null; + } + + var ordinal = context.DataRecord.GetOrdinal("ConfigContract"); + + var implementation = context.DataRecord.GetString(ordinal); + + var impType = Type.GetType(implementation, true, true); + + return Json.Deserialize(stringValue, impType); + } + + } + + + public class EmbeddedDocumentConverter : IConverter + { + public virtual object FromDB(ConverterContext context) { - if (dbValue == DBNull.Value) + if (context.DbValue == DBNull.Value) { return DBNull.Value; } - var stringValue = (string)dbValue; + var stringValue = (string)context.DbValue; if (string.IsNullOrWhiteSpace(stringValue)) { return null; } - return Json.Deserialize(stringValue, map.FieldType); + return Json.Deserialize(stringValue, context.ColumnMap.FieldType); + } + + public object FromDB(ColumnMap map, object dbValue) + { + return FromDB(new ConverterContext { ColumnMap = map, DbValue = dbValue }); } public object ToDB(object clrValue) diff --git a/NzbDrone.Core/Datastore/Converters/EnumIntConverter.cs b/NzbDrone.Core/Datastore/Converters/EnumIntConverter.cs index f79c736c2..40c2727bc 100644 --- a/NzbDrone.Core/Datastore/Converters/EnumIntConverter.cs +++ b/NzbDrone.Core/Datastore/Converters/EnumIntConverter.cs @@ -14,16 +14,21 @@ namespace NzbDrone.Core.Datastore.Converters } } - public object FromDB(ColumnMap map, object dbValue) + public object FromDB(ConverterContext context) { - if (dbValue != null && dbValue != DBNull.Value) + if (context.DbValue != null && context.DbValue != DBNull.Value) { - return Enum.ToObject(map.FieldType, (Int64)dbValue); + return Enum.ToObject(context.ColumnMap.FieldType, (Int64)context.DbValue); } return null; } + public object FromDB(ColumnMap map, object dbValue) + { + return FromDB(new ConverterContext { ColumnMap = map, DbValue = dbValue }); + } + public object ToDB(object clrValue) { if (clrValue != null) diff --git a/NzbDrone.Core/Datastore/Converters/Int32Converter.cs b/NzbDrone.Core/Datastore/Converters/Int32Converter.cs index fcf66a045..c69bfb9a5 100644 --- a/NzbDrone.Core/Datastore/Converters/Int32Converter.cs +++ b/NzbDrone.Core/Datastore/Converters/Int32Converter.cs @@ -6,6 +6,21 @@ namespace NzbDrone.Core.Datastore.Converters { public class Int32Converter : IConverter { + public object FromDB(ConverterContext context) + { + if (context.DbValue == DBNull.Value) + { + return DBNull.Value; + } + + if (context.DbValue is Int32) + { + return context.DbValue; + } + + return Convert.ToInt32(context.DbValue); + } + public object FromDB(ColumnMap map, object dbValue) { if (dbValue == DBNull.Value) diff --git a/NzbDrone.Core/Datastore/Converters/QualityIntConverter.cs b/NzbDrone.Core/Datastore/Converters/QualityIntConverter.cs index 839ef85be..6dc9d6c24 100644 --- a/NzbDrone.Core/Datastore/Converters/QualityIntConverter.cs +++ b/NzbDrone.Core/Datastore/Converters/QualityIntConverter.cs @@ -7,18 +7,23 @@ namespace NzbDrone.Core.Datastore.Converters { public class QualityIntConverter : IConverter { - public object FromDB(ColumnMap map, object dbValue) + public object FromDB(ConverterContext context) { - if (dbValue == DBNull.Value) + if (context.DbValue == DBNull.Value) { return Quality.Unknown; } - var val = Convert.ToInt32(dbValue); + var val = Convert.ToInt32(context.DbValue); return (Quality)val; } + public object FromDB(ColumnMap map, object dbValue) + { + return FromDB(new ConverterContext { ColumnMap = map, DbValue = dbValue }); + } + public object ToDB(object clrValue) { if(clrValue == null) return 0; diff --git a/NzbDrone.Core/Datastore/Converters/UtcConverter.cs b/NzbDrone.Core/Datastore/Converters/UtcConverter.cs index 0bdc802dc..25d313a6c 100644 --- a/NzbDrone.Core/Datastore/Converters/UtcConverter.cs +++ b/NzbDrone.Core/Datastore/Converters/UtcConverter.cs @@ -6,9 +6,14 @@ namespace NzbDrone.Core.Datastore.Converters { public class UtcConverter : IConverter { + public object FromDB(ConverterContext context) + { + return context.DbValue; + } + public object FromDB(ColumnMap map, object dbValue) { - return dbValue; + return FromDB(new ConverterContext { ColumnMap = map, DbValue = dbValue }); } public object ToDB(object clrValue) From 4046d356047c981f5c446f614e8e2723dba1b6fc Mon Sep 17 00:00:00 2001 From: "kay.one" Date: Fri, 20 Sep 2013 23:39:26 -0700 Subject: [PATCH 05/52] can now read/write provider config to db. --- .../ThingiProvider/ProviderBaseFixture.cs | 24 ++++--- .../Converters/EmbeddedDocumentConverter.cs | 5 +- ...2_move_notification_to_generic_provider.cs | 68 +++++++++++++++++++ NzbDrone.Core/Datastore/TableMapping.cs | 18 ++++- .../Notifications/Email/EmailSettings.cs | 3 +- .../Notifications/Growl/GrowlSettings.cs | 3 +- .../Notifications/INotifcationSettings.cs | 7 -- NzbDrone.Core/Notifications/Notification.cs | 6 +- .../Notifications/NotificationBase.cs | 3 +- .../Notifications/NotificationDefinition.cs | 8 +++ .../Notifications/NotificationService.cs | 3 +- .../NotificationSettingsProvider.cs | 5 +- .../NotifyMyAndroidSettings.cs | 3 +- .../Notifications/Plex/PlexClientSettings.cs | 3 +- .../Notifications/Plex/PlexServerSettings.cs | 3 +- .../Notifications/Prowl/ProwlSettings.cs | 3 +- .../PushBullet/PushBulletSettings.cs | 3 +- .../Pushover/PushoverSettings.cs | 3 +- .../Notifications/Xbmc/XbmcSettings.cs | 3 +- NzbDrone.Core/NzbDrone.Core.csproj | 2 +- NzbDrone.Core/ThingiProvider/ProviderBase.cs | 41 ++++++----- 21 files changed, 167 insertions(+), 50 deletions(-) create mode 100644 NzbDrone.Core/Datastore/Migration/022_move_notification_to_generic_provider.cs delete mode 100644 NzbDrone.Core/Notifications/INotifcationSettings.cs diff --git a/NzbDrone.Core.Test/ThingiProvider/ProviderBaseFixture.cs b/NzbDrone.Core.Test/ThingiProvider/ProviderBaseFixture.cs index 11006aa42..2d9cb0f9e 100644 --- a/NzbDrone.Core.Test/ThingiProvider/ProviderBaseFixture.cs +++ b/NzbDrone.Core.Test/ThingiProvider/ProviderBaseFixture.cs @@ -1,23 +1,31 @@ -using NUnit.Framework; -using NzbDrone.Core.Test.Datastore; +using FizzWare.NBuilder; +using FluentAssertions; +using NUnit.Framework; +using NzbDrone.Core.Notifications; +using NzbDrone.Core.Notifications.Email; using NzbDrone.Core.Test.Framework; using NzbDrone.Core.ThingiProvider; namespace NzbDrone.Core.Test.ThingiProvider { - public class ProviderRepositoryFixture : DbTest + public class ProviderRepositoryFixture : DbTest { [Test] public void should_read_write_download_provider() { - var model = new DownloadProviderModel(); + var model = Builder.CreateNew().BuildNew(); + var emailSettings = Builder.CreateNew().Build(); + model.Settings = emailSettings; + Subject.Insert(model); - model.Config = new DownloadProviderConfig(); + var storedProvider = Subject.Single(); + + storedProvider.Settings.Should().BeOfType(); - //Subject.Insert(new ) + var storedSetting = (EmailSettings) storedProvider.Settings; + + storedSetting.ShouldHave().AllProperties().EqualTo(emailSettings); } - - } } \ No newline at end of file diff --git a/NzbDrone.Core/Datastore/Converters/EmbeddedDocumentConverter.cs b/NzbDrone.Core/Datastore/Converters/EmbeddedDocumentConverter.cs index cde1c116d..89b2ecea1 100644 --- a/NzbDrone.Core/Datastore/Converters/EmbeddedDocumentConverter.cs +++ b/NzbDrone.Core/Datastore/Converters/EmbeddedDocumentConverter.cs @@ -1,7 +1,9 @@ using System; +using System.Linq; using Marr.Data.Converters; using Marr.Data.Mapping; using NzbDrone.Common.Serializer; +using NzbDrone.Core.ThingiProvider; namespace NzbDrone.Core.Datastore.Converters { @@ -26,7 +28,8 @@ namespace NzbDrone.Core.Datastore.Converters var implementation = context.DataRecord.GetString(ordinal); - var impType = Type.GetType(implementation, true, true); + + var impType = typeof(IProviderConfig).Assembly.GetTypes().Single(c => c.Name == implementation); return Json.Deserialize(stringValue, impType); } diff --git a/NzbDrone.Core/Datastore/Migration/022_move_notification_to_generic_provider.cs b/NzbDrone.Core/Datastore/Migration/022_move_notification_to_generic_provider.cs new file mode 100644 index 000000000..d0210438f --- /dev/null +++ b/NzbDrone.Core/Datastore/Migration/022_move_notification_to_generic_provider.cs @@ -0,0 +1,68 @@ +using System; +using System.Collections.Generic; +using System.Data; +using FluentMigrator; +using NzbDrone.Common.Serializer; +using NzbDrone.Core.Datastore.Migration.Framework; + +namespace NzbDrone.Core.Datastore.Migration +{ + [Migration(22)] + public class move_notification_to_generic_provider : NzbDroneMigrationBase + { + protected override void MainDbUpgrade() + { + Alter.Table("Notifications").AddColumn("ConfigContract").AsString().Nullable(); + + //Execute.WithConnection(ConvertSeasons); + } + + private void ConvertSeasons(IDbConnection conn, IDbTransaction tran) + { + using (IDbCommand allSeriesCmd = conn.CreateCommand()) + { + allSeriesCmd.Transaction = tran; + allSeriesCmd.CommandText = @"SELECT Id FROM Series"; + using (IDataReader allSeriesReader = allSeriesCmd.ExecuteReader()) + { + while (allSeriesReader.Read()) + { + int seriesId = allSeriesReader.GetInt32(0); + var seasons = new List(); + + using (IDbCommand seasonsCmd = conn.CreateCommand()) + { + seasonsCmd.Transaction = tran; + seasonsCmd.CommandText = String.Format(@"SELECT SeasonNumber, Monitored FROM Seasons WHERE SeriesId = {0}", seriesId); + + using (IDataReader seasonReader = seasonsCmd.ExecuteReader()) + { + while (seasonReader.Read()) + { + int seasonNumber = seasonReader.GetInt32(0); + bool monitored = seasonReader.GetBoolean(1); + + if (seasonNumber == 0) + { + monitored = false; + } + + seasons.Add(new { seasonNumber, monitored }); + } + } + } + + using (IDbCommand updateCmd = conn.CreateCommand()) + { + var text = String.Format("UPDATE Series SET Seasons = '{0}' WHERE Id = {1}", seasons.ToJson() , seriesId); + + updateCmd.Transaction = tran; + updateCmd.CommandText = text; + updateCmd.ExecuteNonQuery(); + } + } + } + } + } + } +} diff --git a/NzbDrone.Core/Datastore/TableMapping.cs b/NzbDrone.Core/Datastore/TableMapping.cs index 533b3ab70..3feda3e13 100644 --- a/NzbDrone.Core/Datastore/TableMapping.cs +++ b/NzbDrone.Core/Datastore/TableMapping.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using Marr.Data; using Marr.Data.Mapping; +using NzbDrone.Common.Reflection; using NzbDrone.Core.Configuration; using NzbDrone.Core.DataAugmentation.Scene; using NzbDrone.Core.Datastore.Converters; @@ -15,6 +16,7 @@ using NzbDrone.Core.Organizer; using NzbDrone.Core.Qualities; using NzbDrone.Core.RootFolders; using NzbDrone.Core.SeriesStats; +using NzbDrone.Core.ThingiProvider; using NzbDrone.Core.Tv; namespace NzbDrone.Core.Datastore @@ -34,6 +36,7 @@ namespace NzbDrone.Core.Datastore Mapper.Entity().RegisterModel("Indexers"); Mapper.Entity().RegisterModel("ScheduledTasks"); Mapper.Entity().RegisterModel("Notifications"); + Mapper.Entity().RegisterModel("Notifications"); Mapper.Entity().RegisterModel("SceneMappings"); @@ -69,6 +72,7 @@ namespace NzbDrone.Core.Datastore private static void RegisterMappers() { RegisterEmbeddedConverter(); + RegisterProviderSettingConverter(); MapRepository.Instance.RegisterTypeConverter(typeof(Int32), new Int32Converter()); MapRepository.Instance.RegisterTypeConverter(typeof(DateTime), new UtcConverter()); @@ -78,10 +82,20 @@ namespace NzbDrone.Core.Datastore MapRepository.Instance.RegisterTypeConverter(typeof(Dictionary), new EmbeddedDocumentConverter()); } + private static void RegisterProviderSettingConverter() + { + var settingTypes = typeof(IProviderConfig).Assembly.ImplementationsOf(); + + var providerSettingConverter = new ProviderSettingConverter(); + foreach (var embeddedType in settingTypes) + { + MapRepository.Instance.RegisterTypeConverter(embeddedType, providerSettingConverter); + } + } + private static void RegisterEmbeddedConverter() { - var embeddedTypes = typeof(IEmbeddedDocument).Assembly.GetTypes() - .Where(c => c.GetInterfaces().Any(i => i == typeof(IEmbeddedDocument))); + var embeddedTypes = typeof(IEmbeddedDocument).Assembly.ImplementationsOf(); var embeddedConvertor = new EmbeddedDocumentConverter(); diff --git a/NzbDrone.Core/Notifications/Email/EmailSettings.cs b/NzbDrone.Core/Notifications/Email/EmailSettings.cs index 6ee61b6a2..1d678dae9 100644 --- a/NzbDrone.Core/Notifications/Email/EmailSettings.cs +++ b/NzbDrone.Core/Notifications/Email/EmailSettings.cs @@ -1,9 +1,10 @@ using System; using NzbDrone.Core.Annotations; +using NzbDrone.Core.ThingiProvider; namespace NzbDrone.Core.Notifications.Email { - public class EmailSettings : INotifcationSettings + public class EmailSettings : IProviderConfig { public EmailSettings() { diff --git a/NzbDrone.Core/Notifications/Growl/GrowlSettings.cs b/NzbDrone.Core/Notifications/Growl/GrowlSettings.cs index c66060a94..75c3de74a 100644 --- a/NzbDrone.Core/Notifications/Growl/GrowlSettings.cs +++ b/NzbDrone.Core/Notifications/Growl/GrowlSettings.cs @@ -1,9 +1,10 @@ using System; using NzbDrone.Core.Annotations; +using NzbDrone.Core.ThingiProvider; namespace NzbDrone.Core.Notifications.Growl { - public class GrowlSettings : INotifcationSettings + public class GrowlSettings : IProviderConfig { public GrowlSettings() { diff --git a/NzbDrone.Core/Notifications/INotifcationSettings.cs b/NzbDrone.Core/Notifications/INotifcationSettings.cs deleted file mode 100644 index 49e113de4..000000000 --- a/NzbDrone.Core/Notifications/INotifcationSettings.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace NzbDrone.Core.Notifications -{ - public interface INotifcationSettings - { - bool IsValid { get; } - } -} diff --git a/NzbDrone.Core/Notifications/Notification.cs b/NzbDrone.Core/Notifications/Notification.cs index 09919c958..40275ecf9 100644 --- a/NzbDrone.Core/Notifications/Notification.cs +++ b/NzbDrone.Core/Notifications/Notification.cs @@ -1,4 +1,6 @@ -namespace NzbDrone.Core.Notifications +using NzbDrone.Core.ThingiProvider; + +namespace NzbDrone.Core.Notifications { public class Notification { @@ -8,7 +10,7 @@ public string Link { get; set; } public bool OnGrab { get; set; } public bool OnDownload { get; set; } - public INotifcationSettings Settings { get; set; } + public IProviderConfig Settings { get; set; } public INotification Instance { get; set; } public string Implementation { get; set; } } diff --git a/NzbDrone.Core/Notifications/NotificationBase.cs b/NzbDrone.Core/Notifications/NotificationBase.cs index e8577c978..d121bd44b 100644 --- a/NzbDrone.Core/Notifications/NotificationBase.cs +++ b/NzbDrone.Core/Notifications/NotificationBase.cs @@ -1,9 +1,10 @@ using NzbDrone.Common.Serializer; +using NzbDrone.Core.ThingiProvider; using NzbDrone.Core.Tv; namespace NzbDrone.Core.Notifications { - public abstract class NotificationBase : INotification where TSetting : class, INotifcationSettings, new() + public abstract class NotificationBase : INotification where TSetting : class, IProviderConfig, new() { public abstract string Name { get; } public abstract string ImplementationName { get; } diff --git a/NzbDrone.Core/Notifications/NotificationDefinition.cs b/NzbDrone.Core/Notifications/NotificationDefinition.cs index 7456c7783..15f274dfc 100644 --- a/NzbDrone.Core/Notifications/NotificationDefinition.cs +++ b/NzbDrone.Core/Notifications/NotificationDefinition.cs @@ -1,5 +1,6 @@ using System; using NzbDrone.Core.Datastore; +using NzbDrone.Core.ThingiProvider; namespace NzbDrone.Core.Notifications { @@ -11,4 +12,11 @@ namespace NzbDrone.Core.Notifications public String Settings { get; set; } public String Implementation { get; set; } } + + + public class NotificationProviderModel : Provider + { + public Boolean OnGrab { get; set; } + public Boolean OnDownload { get; set; } + } } \ No newline at end of file diff --git a/NzbDrone.Core/Notifications/NotificationService.cs b/NzbDrone.Core/Notifications/NotificationService.cs index 0553f4669..3febb84e0 100644 --- a/NzbDrone.Core/Notifications/NotificationService.cs +++ b/NzbDrone.Core/Notifications/NotificationService.cs @@ -7,6 +7,7 @@ using NzbDrone.Common.Serializer; using NzbDrone.Core.Download; using NzbDrone.Core.MediaFiles.Events; using NzbDrone.Core.Messaging.Events; +using NzbDrone.Core.ThingiProvider; using NzbDrone.Core.Tv; using Omu.ValueInjecter; @@ -71,7 +72,7 @@ namespace NzbDrone.Core.Notifications var instanceType = newNotification.Instance.GetType(); var baseGenArgs = instanceType.BaseType.GetGenericArguments(); - newNotification.Settings = (INotifcationSettings)Activator.CreateInstance(baseGenArgs[0]); + newNotification.Settings = (IProviderConfig)Activator.CreateInstance(baseGenArgs[0]); newNotification.Implementation = type.Name; notifications.Add(newNotification); diff --git a/NzbDrone.Core/Notifications/NotificationSettingsProvider.cs b/NzbDrone.Core/Notifications/NotificationSettingsProvider.cs index 53f4d8a58..b26afa1fd 100644 --- a/NzbDrone.Core/Notifications/NotificationSettingsProvider.cs +++ b/NzbDrone.Core/Notifications/NotificationSettingsProvider.cs @@ -1,10 +1,11 @@ using NzbDrone.Common.Serializer; +using NzbDrone.Core.ThingiProvider; namespace NzbDrone.Core.Notifications { public interface INotificationSettingsProvider { - TSetting Get(INotification indexer) where TSetting : INotifcationSettings, new(); + TSetting Get(INotification indexer) where TSetting : IProviderConfig, new(); } public class NotificationSettingsProvider : INotificationSettingsProvider @@ -16,7 +17,7 @@ namespace NzbDrone.Core.Notifications _notificationRepository = notificationRepository; } - public TSetting Get(INotification indexer) where TSetting : INotifcationSettings, new() + public TSetting Get(INotification indexer) where TSetting : IProviderConfig, new() { var indexerDef = _notificationRepository.Find(indexer.Name); diff --git a/NzbDrone.Core/Notifications/NotifyMyAndroid/NotifyMyAndroidSettings.cs b/NzbDrone.Core/Notifications/NotifyMyAndroid/NotifyMyAndroidSettings.cs index c8c941239..f9a4da283 100644 --- a/NzbDrone.Core/Notifications/NotifyMyAndroid/NotifyMyAndroidSettings.cs +++ b/NzbDrone.Core/Notifications/NotifyMyAndroid/NotifyMyAndroidSettings.cs @@ -1,9 +1,10 @@ using System; using NzbDrone.Core.Annotations; +using NzbDrone.Core.ThingiProvider; namespace NzbDrone.Core.Notifications.NotifyMyAndroid { - public class NotifyMyAndroidSettings : INotifcationSettings + public class NotifyMyAndroidSettings : IProviderConfig { [FieldDefinition(0, Label = "API Key", HelpLink = "http://www.notifymyandroid.com/")] public String ApiKey { get; set; } diff --git a/NzbDrone.Core/Notifications/Plex/PlexClientSettings.cs b/NzbDrone.Core/Notifications/Plex/PlexClientSettings.cs index 130552e52..95c9a3291 100644 --- a/NzbDrone.Core/Notifications/Plex/PlexClientSettings.cs +++ b/NzbDrone.Core/Notifications/Plex/PlexClientSettings.cs @@ -1,9 +1,10 @@ using System; using NzbDrone.Core.Annotations; +using NzbDrone.Core.ThingiProvider; namespace NzbDrone.Core.Notifications.Plex { - public class PlexClientSettings : INotifcationSettings + public class PlexClientSettings : IProviderConfig { public PlexClientSettings() { diff --git a/NzbDrone.Core/Notifications/Plex/PlexServerSettings.cs b/NzbDrone.Core/Notifications/Plex/PlexServerSettings.cs index 40b05a2c0..9f4e3cc5f 100644 --- a/NzbDrone.Core/Notifications/Plex/PlexServerSettings.cs +++ b/NzbDrone.Core/Notifications/Plex/PlexServerSettings.cs @@ -1,9 +1,10 @@ using System; using NzbDrone.Core.Annotations; +using NzbDrone.Core.ThingiProvider; namespace NzbDrone.Core.Notifications.Plex { - public class PlexServerSettings : INotifcationSettings + public class PlexServerSettings : IProviderConfig { public PlexServerSettings() { diff --git a/NzbDrone.Core/Notifications/Prowl/ProwlSettings.cs b/NzbDrone.Core/Notifications/Prowl/ProwlSettings.cs index f6b9a7603..1b6db74cc 100644 --- a/NzbDrone.Core/Notifications/Prowl/ProwlSettings.cs +++ b/NzbDrone.Core/Notifications/Prowl/ProwlSettings.cs @@ -1,9 +1,10 @@ using System; using NzbDrone.Core.Annotations; +using NzbDrone.Core.ThingiProvider; namespace NzbDrone.Core.Notifications.Prowl { - public class ProwlSettings : INotifcationSettings + public class ProwlSettings : IProviderConfig { [FieldDefinition(0, Label = "API Key", HelpLink = "https://www.prowlapp.com/api_settings.php")] public String ApiKey { get; set; } diff --git a/NzbDrone.Core/Notifications/PushBullet/PushBulletSettings.cs b/NzbDrone.Core/Notifications/PushBullet/PushBulletSettings.cs index f7a492622..cf34b3718 100644 --- a/NzbDrone.Core/Notifications/PushBullet/PushBulletSettings.cs +++ b/NzbDrone.Core/Notifications/PushBullet/PushBulletSettings.cs @@ -1,9 +1,10 @@ using System; using NzbDrone.Core.Annotations; +using NzbDrone.Core.ThingiProvider; namespace NzbDrone.Core.Notifications.PushBullet { - public class PushBulletSettings : INotifcationSettings + public class PushBulletSettings : IProviderConfig { [FieldDefinition(0, Label = "API Key", HelpLink = "https://www.pushbullet.com/")] public String ApiKey { get; set; } diff --git a/NzbDrone.Core/Notifications/Pushover/PushoverSettings.cs b/NzbDrone.Core/Notifications/Pushover/PushoverSettings.cs index 43c7937b6..4a42baac9 100644 --- a/NzbDrone.Core/Notifications/Pushover/PushoverSettings.cs +++ b/NzbDrone.Core/Notifications/Pushover/PushoverSettings.cs @@ -1,9 +1,10 @@ using System; using NzbDrone.Core.Annotations; +using NzbDrone.Core.ThingiProvider; namespace NzbDrone.Core.Notifications.Pushover { - public class PushoverSettings : INotifcationSettings + public class PushoverSettings : IProviderConfig { [FieldDefinition(0, Label = "User Key", HelpLink = "https://pushover.net/")] public String UserKey { get; set; } diff --git a/NzbDrone.Core/Notifications/Xbmc/XbmcSettings.cs b/NzbDrone.Core/Notifications/Xbmc/XbmcSettings.cs index 0a09d9d57..26e114d30 100644 --- a/NzbDrone.Core/Notifications/Xbmc/XbmcSettings.cs +++ b/NzbDrone.Core/Notifications/Xbmc/XbmcSettings.cs @@ -2,10 +2,11 @@ using System.ComponentModel; using Newtonsoft.Json; using NzbDrone.Core.Annotations; +using NzbDrone.Core.ThingiProvider; namespace NzbDrone.Core.Notifications.Xbmc { - public class XbmcSettings : INotifcationSettings + public class XbmcSettings : IProviderConfig { public XbmcSettings() { diff --git a/NzbDrone.Core/NzbDrone.Core.csproj b/NzbDrone.Core/NzbDrone.Core.csproj index 2ab111e2a..049d2cb4c 100644 --- a/NzbDrone.Core/NzbDrone.Core.csproj +++ b/NzbDrone.Core/NzbDrone.Core.csproj @@ -171,6 +171,7 @@ + @@ -370,7 +371,6 @@ - diff --git a/NzbDrone.Core/ThingiProvider/ProviderBase.cs b/NzbDrone.Core/ThingiProvider/ProviderBase.cs index 61035d7de..bf24434d2 100644 --- a/NzbDrone.Core/ThingiProvider/ProviderBase.cs +++ b/NzbDrone.Core/ThingiProvider/ProviderBase.cs @@ -1,6 +1,7 @@  using NzbDrone.Core.Datastore; using NzbDrone.Core.Messaging.Events; +using NzbDrone.Core.Notifications; namespace NzbDrone.Core.ThingiProvider { @@ -14,36 +15,44 @@ namespace NzbDrone.Core.ThingiProvider } } - public class DownloadProviderModel : Provider - { + public class NotificationProviderRepository : BasicRepository + { + public NotificationProviderRepository(IDatabase database, IEventAggregator eventAggregator) + : base(database, eventAggregator) + { + } } - public class DownloadProviderConfig : ProviderSetting + public class DownloadProviderModel : Provider { } - public abstract class Provider : ModelBase - where TSettings : ProviderSetting + public abstract class Provider : ModelBase { + public string Name { get; set; } public string Implementation { get; set; } - public TSettings Config { get; set; } - } - public abstract class ProviderSetting : IEmbeddedDocument - { + public string ConfigContract + { + get + { + if (Settings == null) return null; + return Settings.GetType().Name; + } + set + { + + } + } + public IProviderConfig Settings { get; set; } } - public abstract class ProviderBase where TSettings : ProviderSetting + public interface IProviderConfig { - public TSettings Settings { get; private set; } - - public void LoadSettings(TSettings setting) - { - Settings = setting; - } + bool IsValid { get; } } } \ No newline at end of file From 0b179a608661780b91174b52fcc4b582c4d5a452 Mon Sep 17 00:00:00 2001 From: "kay.one" Date: Sat, 21 Sep 2013 00:09:26 -0700 Subject: [PATCH 06/52] starting to move indexers to generic provider. --- .../ThingiProvider/ProviderBaseFixture.cs | 22 ++++++------- ...2_move_notification_to_generic_provider.cs | 6 ++-- NzbDrone.Core/Datastore/TableMapping.cs | 1 - NzbDrone.Core/Indexers/IIndexerSetting.cs | 9 ----- NzbDrone.Core/Indexers/IndexerBase.cs | 3 +- NzbDrone.Core/Indexers/IndexerDefinition.cs | 6 ++-- NzbDrone.Core/Indexers/IndexerService.cs | 7 ++-- .../Indexers/IndexerSettingProvider.cs | 31 ----------------- .../Indexers/IndexerSettingUpdatedEvent.cs | 5 +-- NzbDrone.Core/Indexers/IndexerWithSetting.cs | 3 +- NzbDrone.Core/Indexers/Newznab/Newznab.cs | 4 +-- .../Indexers/Newznab/NewznabSettings.cs | 3 +- NzbDrone.Core/Indexers/NullSetting.cs | 14 -------- .../Indexers/Omgwtfnzbs/OmgwtfnzbsSettings.cs | 3 +- .../Notifications/Email/EmailSettings.cs | 6 ++++ .../Notifications/Growl/GrowlSettings.cs | 6 ++++ .../Notifications/NotificationDefinition.cs | 2 +- .../Notifications/NotificationService.cs | 6 ++-- .../NotifyMyAndroidSettings.cs | 6 ++++ .../Notifications/Plex/PlexClientSettings.cs | 6 ++++ .../Notifications/Plex/PlexServerSettings.cs | 6 ++++ .../Notifications/Prowl/ProwlSettings.cs | 6 ++++ .../PushBullet/PushBulletSettings.cs | 6 ++++ .../Pushover/PushoverSettings.cs | 6 ++++ .../Notifications/Xbmc/XbmcSettings.cs | 6 ++++ NzbDrone.Core/NzbDrone.Core.csproj | 3 -- NzbDrone.Core/ThingiProvider/ProviderBase.cs | 33 ++++++++++++------- 27 files changed, 111 insertions(+), 104 deletions(-) delete mode 100644 NzbDrone.Core/Indexers/IIndexerSetting.cs delete mode 100644 NzbDrone.Core/Indexers/IndexerSettingProvider.cs delete mode 100644 NzbDrone.Core/Indexers/NullSetting.cs diff --git a/NzbDrone.Core.Test/ThingiProvider/ProviderBaseFixture.cs b/NzbDrone.Core.Test/ThingiProvider/ProviderBaseFixture.cs index 2d9cb0f9e..3ecfa62ac 100644 --- a/NzbDrone.Core.Test/ThingiProvider/ProviderBaseFixture.cs +++ b/NzbDrone.Core.Test/ThingiProvider/ProviderBaseFixture.cs @@ -1,31 +1,31 @@ using FizzWare.NBuilder; using FluentAssertions; using NUnit.Framework; -using NzbDrone.Core.Notifications; -using NzbDrone.Core.Notifications.Email; +using NzbDrone.Core.Indexers; +using NzbDrone.Core.Indexers.Newznab; using NzbDrone.Core.Test.Framework; using NzbDrone.Core.ThingiProvider; namespace NzbDrone.Core.Test.ThingiProvider { - public class ProviderRepositoryFixture : DbTest + public class ProviderRepositoryFixture : DbTest { [Test] public void should_read_write_download_provider() { - var model = Builder.CreateNew().BuildNew(); - var emailSettings = Builder.CreateNew().Build(); - model.Settings = emailSettings; + var model = Builder.CreateNew().BuildNew(); + var newznabSettings = Builder.CreateNew().Build(); + model.Settings = newznabSettings; Subject.Insert(model); var storedProvider = Subject.Single(); - - storedProvider.Settings.Should().BeOfType(); - var storedSetting = (EmailSettings) storedProvider.Settings; - - storedSetting.ShouldHave().AllProperties().EqualTo(emailSettings); + storedProvider.Settings.Should().BeOfType(); + + var storedSetting = (NewznabSettings)storedProvider.Settings; + + storedSetting.ShouldHave().AllProperties().EqualTo(newznabSettings); } } } \ No newline at end of file diff --git a/NzbDrone.Core/Datastore/Migration/022_move_notification_to_generic_provider.cs b/NzbDrone.Core/Datastore/Migration/022_move_notification_to_generic_provider.cs index d0210438f..2b5182419 100644 --- a/NzbDrone.Core/Datastore/Migration/022_move_notification_to_generic_provider.cs +++ b/NzbDrone.Core/Datastore/Migration/022_move_notification_to_generic_provider.cs @@ -8,11 +8,11 @@ using NzbDrone.Core.Datastore.Migration.Framework; namespace NzbDrone.Core.Datastore.Migration { [Migration(22)] - public class move_notification_to_generic_provider : NzbDroneMigrationBase + public class move_indexer_to_generic_provider : NzbDroneMigrationBase { protected override void MainDbUpgrade() { - Alter.Table("Notifications").AddColumn("ConfigContract").AsString().Nullable(); + Alter.Table("Indexers").AddColumn("ConfigContract").AsString().Nullable(); //Execute.WithConnection(ConvertSeasons); } @@ -54,7 +54,7 @@ namespace NzbDrone.Core.Datastore.Migration using (IDbCommand updateCmd = conn.CreateCommand()) { - var text = String.Format("UPDATE Series SET Seasons = '{0}' WHERE Id = {1}", seasons.ToJson() , seriesId); + var text = String.Format("UPDATE Series SET Seasons = '{0}' WHERE Id = {1}", seasons.ToJson(), seriesId); updateCmd.Transaction = tran; updateCmd.CommandText = text; diff --git a/NzbDrone.Core/Datastore/TableMapping.cs b/NzbDrone.Core/Datastore/TableMapping.cs index 3feda3e13..bade3c2d6 100644 --- a/NzbDrone.Core/Datastore/TableMapping.cs +++ b/NzbDrone.Core/Datastore/TableMapping.cs @@ -36,7 +36,6 @@ namespace NzbDrone.Core.Datastore Mapper.Entity().RegisterModel("Indexers"); Mapper.Entity().RegisterModel("ScheduledTasks"); Mapper.Entity().RegisterModel("Notifications"); - Mapper.Entity().RegisterModel("Notifications"); Mapper.Entity().RegisterModel("SceneMappings"); diff --git a/NzbDrone.Core/Indexers/IIndexerSetting.cs b/NzbDrone.Core/Indexers/IIndexerSetting.cs deleted file mode 100644 index 4f9cf16de..000000000 --- a/NzbDrone.Core/Indexers/IIndexerSetting.cs +++ /dev/null @@ -1,9 +0,0 @@ -using FluentValidation.Results; - -namespace NzbDrone.Core.Indexers -{ - public interface IIndexerSetting - { - ValidationResult Validate(); - } -} diff --git a/NzbDrone.Core/Indexers/IndexerBase.cs b/NzbDrone.Core/Indexers/IndexerBase.cs index 6f544a2be..28a2d1d46 100644 --- a/NzbDrone.Core/Indexers/IndexerBase.cs +++ b/NzbDrone.Core/Indexers/IndexerBase.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using NzbDrone.Core.ThingiProvider; namespace NzbDrone.Core.Indexers { @@ -22,7 +23,7 @@ namespace NzbDrone.Core.Indexers Name = Name, Enable = EnableByDefault, Implementation = GetType().Name, - Settings = String.Empty + Settings = NullSetting.Instance }; } } diff --git a/NzbDrone.Core/Indexers/IndexerDefinition.cs b/NzbDrone.Core/Indexers/IndexerDefinition.cs index a061052e7..02238e0e9 100644 --- a/NzbDrone.Core/Indexers/IndexerDefinition.cs +++ b/NzbDrone.Core/Indexers/IndexerDefinition.cs @@ -1,13 +1,11 @@ using System; using NzbDrone.Core.Datastore; +using NzbDrone.Core.ThingiProvider; namespace NzbDrone.Core.Indexers { - public class IndexerDefinition : ModelBase + public class IndexerDefinition : ProviderDefinition { public Boolean Enable { get; set; } - public String Name { get; set; } - public String Settings { get; set; } - public String Implementation { get; set; } } } \ No newline at end of file diff --git a/NzbDrone.Core/Indexers/IndexerService.cs b/NzbDrone.Core/Indexers/IndexerService.cs index e1b49c2dd..5d42c2a9d 100644 --- a/NzbDrone.Core/Indexers/IndexerService.cs +++ b/NzbDrone.Core/Indexers/IndexerService.cs @@ -7,6 +7,7 @@ using NzbDrone.Core.Configuration; using NzbDrone.Core.Indexers.Newznab; using NzbDrone.Core.Lifecycle; using NzbDrone.Core.Messaging.Events; +using NzbDrone.Core.ThingiProvider; using Omu.ValueInjecter; namespace NzbDrone.Core.Indexers @@ -16,7 +17,7 @@ namespace NzbDrone.Core.Indexers public int Id { get; set; } public string Name { get; set; } public bool Enable { get; set; } - public IIndexerSetting Settings { get; set; } + public IProviderConfig Settings { get; set; } public IIndexer Instance { get; set; } public string Implementation { get; set; } } @@ -107,7 +108,7 @@ namespace NzbDrone.Core.Indexers Name = indexer.Name, Enable = indexer.Enable, Implementation = indexer.Implementation, - Settings = indexer.Settings.ToJson() + Settings = indexer.Settings }; var instance = ToIndexer(definition).Instance; @@ -123,7 +124,7 @@ namespace NzbDrone.Core.Indexers { var definition = _indexerRepository.Get(indexer.Id); definition.InjectFrom(indexer); - definition.Settings = indexer.Settings.ToJson(); + definition.Settings = indexer.Settings; _indexerRepository.Update(definition); return indexer; diff --git a/NzbDrone.Core/Indexers/IndexerSettingProvider.cs b/NzbDrone.Core/Indexers/IndexerSettingProvider.cs deleted file mode 100644 index ab7da9e58..000000000 --- a/NzbDrone.Core/Indexers/IndexerSettingProvider.cs +++ /dev/null @@ -1,31 +0,0 @@ -using NzbDrone.Common.Serializer; - -namespace NzbDrone.Core.Indexers -{ - public interface IProviderIndexerSetting - { - TSetting Get(IIndexer indexer) where TSetting : IIndexerSetting, new(); - } - - public class IndexerSettingProvider : IProviderIndexerSetting - { - private readonly IIndexerRepository _indexerRepository; - - public IndexerSettingProvider(IIndexerRepository indexerRepository) - { - _indexerRepository = indexerRepository; - } - - public TSetting Get(IIndexer indexer) where TSetting : IIndexerSetting, new() - { - var indexerDef = _indexerRepository.Find(indexer.Name); - - if (indexerDef == null || string.IsNullOrWhiteSpace(indexerDef.Settings)) - { - return new TSetting(); - } - - return Json.Deserialize(indexerDef.Settings); - } - } -} \ No newline at end of file diff --git a/NzbDrone.Core/Indexers/IndexerSettingUpdatedEvent.cs b/NzbDrone.Core/Indexers/IndexerSettingUpdatedEvent.cs index 8b3edc513..783948b2e 100644 --- a/NzbDrone.Core/Indexers/IndexerSettingUpdatedEvent.cs +++ b/NzbDrone.Core/Indexers/IndexerSettingUpdatedEvent.cs @@ -1,13 +1,14 @@ using NzbDrone.Common.Messaging; +using NzbDrone.Core.ThingiProvider; namespace NzbDrone.Core.Indexers { public class IndexerSettingUpdatedEvent : IEvent { public string IndexerName { get; private set; } - public IIndexerSetting IndexerSetting { get; private set; } + public IProviderConfig IndexerSetting { get; private set; } - public IndexerSettingUpdatedEvent(string indexerName, IIndexerSetting indexerSetting) + public IndexerSettingUpdatedEvent(string indexerName, IProviderConfig indexerSetting) { IndexerName = indexerName; IndexerSetting = indexerSetting; diff --git a/NzbDrone.Core/Indexers/IndexerWithSetting.cs b/NzbDrone.Core/Indexers/IndexerWithSetting.cs index 78db54932..ecba9f7a9 100644 --- a/NzbDrone.Core/Indexers/IndexerWithSetting.cs +++ b/NzbDrone.Core/Indexers/IndexerWithSetting.cs @@ -1,8 +1,9 @@ using NzbDrone.Common.Serializer; +using NzbDrone.Core.ThingiProvider; namespace NzbDrone.Core.Indexers { - public abstract class IndexerWithSetting : IndexerBase where TSetting : class, IIndexerSetting, new() + public abstract class IndexerWithSetting : IndexerBase where TSetting : class, IProviderConfig, new() { public TSetting Settings { get; set; } diff --git a/NzbDrone.Core/Indexers/Newznab/Newznab.cs b/NzbDrone.Core/Indexers/Newznab/Newznab.cs index 8a13d2282..e2daf28d6 100644 --- a/NzbDrone.Core/Indexers/Newznab/Newznab.cs +++ b/NzbDrone.Core/Indexers/Newznab/Newznab.cs @@ -51,7 +51,7 @@ namespace NzbDrone.Core.Indexers.Newznab } } - private string GetSettings(string url, List categories) + private NewznabSettings GetSettings(string url, List categories) { var settings = new NewznabSettings { Url = url }; @@ -60,7 +60,7 @@ namespace NzbDrone.Core.Indexers.Newznab settings.Categories = categories; } - return settings.ToJson(); + return settings; } public override IEnumerable RecentFeed diff --git a/NzbDrone.Core/Indexers/Newznab/NewznabSettings.cs b/NzbDrone.Core/Indexers/Newznab/NewznabSettings.cs index c83623ace..5f05ba96d 100644 --- a/NzbDrone.Core/Indexers/Newznab/NewznabSettings.cs +++ b/NzbDrone.Core/Indexers/Newznab/NewznabSettings.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using FluentValidation; using FluentValidation.Results; using NzbDrone.Core.Annotations; +using NzbDrone.Core.ThingiProvider; using NzbDrone.Core.Validation; namespace NzbDrone.Core.Indexers.Newznab @@ -16,7 +17,7 @@ namespace NzbDrone.Core.Indexers.Newznab } - public class NewznabSettings : IIndexerSetting + public class NewznabSettings : IProviderConfig { private static readonly NewznabSettingsValidator Validator = new NewznabSettingsValidator(); diff --git a/NzbDrone.Core/Indexers/NullSetting.cs b/NzbDrone.Core/Indexers/NullSetting.cs deleted file mode 100644 index a7013335a..000000000 --- a/NzbDrone.Core/Indexers/NullSetting.cs +++ /dev/null @@ -1,14 +0,0 @@ -using FluentValidation.Results; - -namespace NzbDrone.Core.Indexers -{ - public class NullSetting : IIndexerSetting - { - public static readonly NullSetting Instance = new NullSetting(); - - public ValidationResult Validate() - { - return new ValidationResult(); - } - } -} \ No newline at end of file diff --git a/NzbDrone.Core/Indexers/Omgwtfnzbs/OmgwtfnzbsSettings.cs b/NzbDrone.Core/Indexers/Omgwtfnzbs/OmgwtfnzbsSettings.cs index 778b3a48e..900055608 100644 --- a/NzbDrone.Core/Indexers/Omgwtfnzbs/OmgwtfnzbsSettings.cs +++ b/NzbDrone.Core/Indexers/Omgwtfnzbs/OmgwtfnzbsSettings.cs @@ -2,6 +2,7 @@ using FluentValidation; using FluentValidation.Results; using NzbDrone.Core.Annotations; +using NzbDrone.Core.ThingiProvider; namespace NzbDrone.Core.Indexers.Omgwtfnzbs { @@ -14,7 +15,7 @@ namespace NzbDrone.Core.Indexers.Omgwtfnzbs } } - public class OmgwtfnzbsSettings : IIndexerSetting + public class OmgwtfnzbsSettings : IProviderConfig { private static readonly OmgwtfnzbsSettingsValidator Validator = new OmgwtfnzbsSettingsValidator(); diff --git a/NzbDrone.Core/Notifications/Email/EmailSettings.cs b/NzbDrone.Core/Notifications/Email/EmailSettings.cs index 1d678dae9..42aa725cd 100644 --- a/NzbDrone.Core/Notifications/Email/EmailSettings.cs +++ b/NzbDrone.Core/Notifications/Email/EmailSettings.cs @@ -1,4 +1,5 @@ using System; +using FluentValidation.Results; using NzbDrone.Core.Annotations; using NzbDrone.Core.ThingiProvider; @@ -39,5 +40,10 @@ namespace NzbDrone.Core.Notifications.Email return !string.IsNullOrWhiteSpace(Server) && Port > 0 && !string.IsNullOrWhiteSpace(From) && !string.IsNullOrWhiteSpace(To); } } + + public ValidationResult Validate() + { + throw new NotImplementedException(); + } } } diff --git a/NzbDrone.Core/Notifications/Growl/GrowlSettings.cs b/NzbDrone.Core/Notifications/Growl/GrowlSettings.cs index 75c3de74a..dd049268d 100644 --- a/NzbDrone.Core/Notifications/Growl/GrowlSettings.cs +++ b/NzbDrone.Core/Notifications/Growl/GrowlSettings.cs @@ -1,4 +1,5 @@ using System; +using FluentValidation.Results; using NzbDrone.Core.Annotations; using NzbDrone.Core.ThingiProvider; @@ -27,5 +28,10 @@ namespace NzbDrone.Core.Notifications.Growl return !string.IsNullOrWhiteSpace(Host) && !string.IsNullOrWhiteSpace(Password) && Port > 0; } } + + public ValidationResult Validate() + { + throw new NotImplementedException(); + } } } diff --git a/NzbDrone.Core/Notifications/NotificationDefinition.cs b/NzbDrone.Core/Notifications/NotificationDefinition.cs index 15f274dfc..41fc64509 100644 --- a/NzbDrone.Core/Notifications/NotificationDefinition.cs +++ b/NzbDrone.Core/Notifications/NotificationDefinition.cs @@ -14,7 +14,7 @@ namespace NzbDrone.Core.Notifications } - public class NotificationProviderModel : Provider + public class NotificationProviderModel : ProviderDefinition { public Boolean OnGrab { get; set; } public Boolean OnDownload { get; set; } diff --git a/NzbDrone.Core/Notifications/NotificationService.cs b/NzbDrone.Core/Notifications/NotificationService.cs index 3febb84e0..458c80d65 100644 --- a/NzbDrone.Core/Notifications/NotificationService.cs +++ b/NzbDrone.Core/Notifications/NotificationService.cs @@ -19,7 +19,7 @@ namespace NzbDrone.Core.Notifications Notification Get(int id); List Schema(); Notification Create(Notification notification); - Notification Update(Notification notification); + void Update(Notification notification); void Delete(int id); } @@ -94,15 +94,13 @@ namespace NzbDrone.Core.Notifications return notification; } - public Notification Update(Notification notification) + public void Update(Notification notification) { var definition = _notificationRepository.Get(notification.Id); definition.InjectFrom(notification); definition.Settings = notification.Settings.ToJson(); _notificationRepository.Update(definition); - - return notification; } public void Delete(int id) diff --git a/NzbDrone.Core/Notifications/NotifyMyAndroid/NotifyMyAndroidSettings.cs b/NzbDrone.Core/Notifications/NotifyMyAndroid/NotifyMyAndroidSettings.cs index f9a4da283..48c8c6fc6 100644 --- a/NzbDrone.Core/Notifications/NotifyMyAndroid/NotifyMyAndroidSettings.cs +++ b/NzbDrone.Core/Notifications/NotifyMyAndroid/NotifyMyAndroidSettings.cs @@ -1,4 +1,5 @@ using System; +using FluentValidation.Results; using NzbDrone.Core.Annotations; using NzbDrone.Core.ThingiProvider; @@ -19,5 +20,10 @@ namespace NzbDrone.Core.Notifications.NotifyMyAndroid return !String.IsNullOrWhiteSpace(ApiKey) && Priority != null & Priority >= -1 && Priority <= 2; } } + + public ValidationResult Validate() + { + throw new NotImplementedException(); + } } } diff --git a/NzbDrone.Core/Notifications/Plex/PlexClientSettings.cs b/NzbDrone.Core/Notifications/Plex/PlexClientSettings.cs index 95c9a3291..a0d762406 100644 --- a/NzbDrone.Core/Notifications/Plex/PlexClientSettings.cs +++ b/NzbDrone.Core/Notifications/Plex/PlexClientSettings.cs @@ -1,4 +1,5 @@ using System; +using FluentValidation.Results; using NzbDrone.Core.Annotations; using NzbDrone.Core.ThingiProvider; @@ -30,5 +31,10 @@ namespace NzbDrone.Core.Notifications.Plex return !string.IsNullOrWhiteSpace(Host); } } + + public ValidationResult Validate() + { + throw new NotImplementedException(); + } } } diff --git a/NzbDrone.Core/Notifications/Plex/PlexServerSettings.cs b/NzbDrone.Core/Notifications/Plex/PlexServerSettings.cs index 9f4e3cc5f..ed410767b 100644 --- a/NzbDrone.Core/Notifications/Plex/PlexServerSettings.cs +++ b/NzbDrone.Core/Notifications/Plex/PlexServerSettings.cs @@ -1,4 +1,5 @@ using System; +using FluentValidation.Results; using NzbDrone.Core.Annotations; using NzbDrone.Core.ThingiProvider; @@ -27,5 +28,10 @@ namespace NzbDrone.Core.Notifications.Plex return !string.IsNullOrWhiteSpace(Host); } } + + public ValidationResult Validate() + { + throw new NotImplementedException(); + } } } diff --git a/NzbDrone.Core/Notifications/Prowl/ProwlSettings.cs b/NzbDrone.Core/Notifications/Prowl/ProwlSettings.cs index 1b6db74cc..66b574179 100644 --- a/NzbDrone.Core/Notifications/Prowl/ProwlSettings.cs +++ b/NzbDrone.Core/Notifications/Prowl/ProwlSettings.cs @@ -1,4 +1,5 @@ using System; +using FluentValidation.Results; using NzbDrone.Core.Annotations; using NzbDrone.Core.ThingiProvider; @@ -19,5 +20,10 @@ namespace NzbDrone.Core.Notifications.Prowl return !string.IsNullOrWhiteSpace(ApiKey) && Priority != null & Priority >= -2 && Priority <= 2; } } + + public ValidationResult Validate() + { + throw new NotImplementedException(); + } } } diff --git a/NzbDrone.Core/Notifications/PushBullet/PushBulletSettings.cs b/NzbDrone.Core/Notifications/PushBullet/PushBulletSettings.cs index cf34b3718..1886991d8 100644 --- a/NzbDrone.Core/Notifications/PushBullet/PushBulletSettings.cs +++ b/NzbDrone.Core/Notifications/PushBullet/PushBulletSettings.cs @@ -1,4 +1,5 @@ using System; +using FluentValidation.Results; using NzbDrone.Core.Annotations; using NzbDrone.Core.ThingiProvider; @@ -19,5 +20,10 @@ namespace NzbDrone.Core.Notifications.PushBullet return !String.IsNullOrWhiteSpace(ApiKey) && DeviceId > 0; } } + + public ValidationResult Validate() + { + throw new NotImplementedException(); + } } } diff --git a/NzbDrone.Core/Notifications/Pushover/PushoverSettings.cs b/NzbDrone.Core/Notifications/Pushover/PushoverSettings.cs index 4a42baac9..ca4c332c7 100644 --- a/NzbDrone.Core/Notifications/Pushover/PushoverSettings.cs +++ b/NzbDrone.Core/Notifications/Pushover/PushoverSettings.cs @@ -1,4 +1,5 @@ using System; +using FluentValidation.Results; using NzbDrone.Core.Annotations; using NzbDrone.Core.ThingiProvider; @@ -19,5 +20,10 @@ namespace NzbDrone.Core.Notifications.Pushover return !string.IsNullOrWhiteSpace(UserKey) && Priority != null & Priority >= -1 && Priority <= 2; } } + + public ValidationResult Validate() + { + throw new NotImplementedException(); + } } } diff --git a/NzbDrone.Core/Notifications/Xbmc/XbmcSettings.cs b/NzbDrone.Core/Notifications/Xbmc/XbmcSettings.cs index 26e114d30..2c0569c89 100644 --- a/NzbDrone.Core/Notifications/Xbmc/XbmcSettings.cs +++ b/NzbDrone.Core/Notifications/Xbmc/XbmcSettings.cs @@ -1,5 +1,6 @@ using System; using System.ComponentModel; +using FluentValidation.Results; using Newtonsoft.Json; using NzbDrone.Core.Annotations; using NzbDrone.Core.ThingiProvider; @@ -52,5 +53,10 @@ namespace NzbDrone.Core.Notifications.Xbmc return !string.IsNullOrWhiteSpace(Host) && Port > 0; } } + + public ValidationResult Validate() + { + throw new NotImplementedException(); + } } } diff --git a/NzbDrone.Core/NzbDrone.Core.csproj b/NzbDrone.Core/NzbDrone.Core.csproj index 049d2cb4c..f8d3c3b7c 100644 --- a/NzbDrone.Core/NzbDrone.Core.csproj +++ b/NzbDrone.Core/NzbDrone.Core.csproj @@ -246,7 +246,6 @@ - @@ -343,13 +342,11 @@ - - diff --git a/NzbDrone.Core/ThingiProvider/ProviderBase.cs b/NzbDrone.Core/ThingiProvider/ProviderBase.cs index bf24434d2..f91577aa9 100644 --- a/NzbDrone.Core/ThingiProvider/ProviderBase.cs +++ b/NzbDrone.Core/ThingiProvider/ProviderBase.cs @@ -1,36 +1,35 @@  +using FluentValidation.Results; using NzbDrone.Core.Datastore; +using NzbDrone.Core.Indexers; using NzbDrone.Core.Messaging.Events; using NzbDrone.Core.Notifications; namespace NzbDrone.Core.ThingiProvider { - - - public class DownloadProviderRepository : BasicRepository + public class NotificationProviderRepository : BasicRepository { - public DownloadProviderRepository(IDatabase database, IEventAggregator eventAggregator) + public NotificationProviderRepository(IDatabase database, IEventAggregator eventAggregator) : base(database, eventAggregator) { } } - public class NotificationProviderRepository : BasicRepository + public class IndexerProviderRepository : BasicRepository { - public NotificationProviderRepository(IDatabase database, IEventAggregator eventAggregator) + public IndexerProviderRepository(IDatabase database, IEventAggregator eventAggregator) : base(database, eventAggregator) { } } - public class DownloadProviderModel : Provider + public abstract class ProviderBase { - + public ProviderDefinition Definition { get; set; } } - - public abstract class Provider : ModelBase + public abstract class ProviderDefinition : ModelBase { public string Name { get; set; } public string Implementation { get; set; } @@ -44,7 +43,7 @@ namespace NzbDrone.Core.ThingiProvider } set { - + } } @@ -53,6 +52,16 @@ namespace NzbDrone.Core.ThingiProvider public interface IProviderConfig { - bool IsValid { get; } + ValidationResult Validate(); + } + + public class NullSetting : IProviderConfig + { + public static readonly NullSetting Instance = new NullSetting(); + + public ValidationResult Validate() + { + return new ValidationResult(); + } } } \ No newline at end of file From 9dbfc6804f98588c13eda5eec5e8560b93471eeb Mon Sep 17 00:00:00 2001 From: "kay.one" Date: Sat, 21 Sep 2013 22:20:26 -0700 Subject: [PATCH 07/52] created generic provider factory --- .../MappingTests/ResourceMappingFixture.cs | 2 +- NzbDrone.Api/Indexers/IndexerModule.cs | 45 ++-- NzbDrone.Api/Indexers/IndexerSchemaModule.cs | 22 +- .../IndexerTests/IndexerServiceFixture.cs | 2 - .../IndexerIntegrationTests.cs | 16 +- .../ThingiProvider/ProviderBaseFixture.cs | 2 +- .../IndexerSearch/NzbSearchService.cs | 2 +- NzbDrone.Core/Indexers/Eztv/Eztv.cs | 3 +- .../Indexers/FetchAndParseRssService.cs | 2 +- NzbDrone.Core/Indexers/IIndexer.cs | 14 +- NzbDrone.Core/Indexers/IndexerBase.cs | 26 ++- NzbDrone.Core/Indexers/IndexerDefinition.cs | 5 +- NzbDrone.Core/Indexers/IndexerService.cs | 193 +----------------- NzbDrone.Core/Indexers/IndexerWithSetting.cs | 22 -- NzbDrone.Core/Indexers/Newznab/Newznab.cs | 7 +- .../Indexers/Omgwtfnzbs/Omgwtfnzbs.cs | 2 +- NzbDrone.Core/Indexers/Wombles/Wombles.cs | 3 +- NzbDrone.Core/NzbDrone.Core.csproj | 6 +- .../{ProviderBase.cs => IProvider.cs} | 30 ++- .../ThingiProvider/ProviderService.cs | 129 ++++++++++++ NzbDrone.ncrunchsolution | 2 +- 21 files changed, 227 insertions(+), 308 deletions(-) delete mode 100644 NzbDrone.Core/Indexers/IndexerWithSetting.cs rename NzbDrone.Core/ThingiProvider/{ProviderBase.cs => IProvider.cs} (56%) create mode 100644 NzbDrone.Core/ThingiProvider/ProviderService.cs diff --git a/NzbDrone.Api.Test/MappingTests/ResourceMappingFixture.cs b/NzbDrone.Api.Test/MappingTests/ResourceMappingFixture.cs index 82fb9425a..e03e02c35 100644 --- a/NzbDrone.Api.Test/MappingTests/ResourceMappingFixture.cs +++ b/NzbDrone.Api.Test/MappingTests/ResourceMappingFixture.cs @@ -36,7 +36,7 @@ namespace NzbDrone.Api.Test.MappingTests [TestCase(typeof(Episode), typeof(EpisodeResource))] [TestCase(typeof(RootFolder), typeof(RootFolderResource))] [TestCase(typeof(NamingConfig), typeof(NamingConfigResource))] - [TestCase(typeof(Indexer), typeof(IndexerResource))] + [TestCase(typeof(IndexerDefinition), typeof(IndexerResource))] [TestCase(typeof(ReleaseInfo), typeof(ReleaseResource))] [TestCase(typeof(ParsedEpisodeInfo), typeof(ReleaseResource))] [TestCase(typeof(DownloadDecision), typeof(ReleaseResource))] diff --git a/NzbDrone.Api/Indexers/IndexerModule.cs b/NzbDrone.Api/Indexers/IndexerModule.cs index 02215d3ed..cd5ed90c0 100644 --- a/NzbDrone.Api/Indexers/IndexerModule.cs +++ b/NzbDrone.Api/Indexers/IndexerModule.cs @@ -1,9 +1,7 @@ -using System; -using System.Collections.Generic; -using System.Linq; +using System.Collections.Generic; using NzbDrone.Api.ClientSchema; -using NzbDrone.Api.REST; using NzbDrone.Core.Indexers; +using NzbDrone.Core.ThingiProvider; using Omu.ValueInjecter; using FluentValidation; using NzbDrone.Api.Mapping; @@ -62,47 +60,36 @@ namespace NzbDrone.Api.Indexers private void UpdateIndexer(IndexerResource indexerResource) { - var indexer = _indexerService.Get(indexerResource.Id); - indexer.InjectFrom(indexerResource); - indexer.Settings = SchemaDeserializer.DeserializeSchema(indexer.Settings, indexerResource.Fields); + var indexer = GetIndexer(indexerResource); - ValidateIndexer(indexer); + ValidateIndexer(indexer.Settings); _indexerService.Update(indexer); } - private static void ValidateIndexer(Indexer indexer) + private static void ValidateIndexer(IProviderConfig config) { - if (indexer.Enable) - { - var validationResult = indexer.Settings.Validate(); + var validationResult = config.Validate(); - if (!validationResult.IsValid) - { - throw new ValidationException(validationResult.Errors); - } + if (!validationResult.IsValid) + { + throw new ValidationException(validationResult.Errors); } } - private Indexer GetIndexer(IndexerResource indexerResource) + private IndexerDefinition GetIndexer(IndexerResource indexerResource) { - var indexer = _indexerService.Schema() - .SingleOrDefault(i => - i.Implementation.Equals(indexerResource.Implementation, - StringComparison.InvariantCultureIgnoreCase)); - if (indexer == null) + var definition = new IndexerDefinition(); + + definition.InjectFrom(indexerResource); + if (indexerResource.Enable) { - throw new BadRequestException("Invalid Indexer Implementation"); + ValidateIndexer(definition.Settings); } - indexer.InjectFrom(indexerResource); - indexer.Settings = SchemaDeserializer.DeserializeSchema(indexer.Settings, indexerResource.Fields); - - ValidateIndexer(indexer); - - return indexer; + return definition; } private void DeleteIndexer(int id) diff --git a/NzbDrone.Api/Indexers/IndexerSchemaModule.cs b/NzbDrone.Api/Indexers/IndexerSchemaModule.cs index ad2ca7846..9fe425cf0 100644 --- a/NzbDrone.Api/Indexers/IndexerSchemaModule.cs +++ b/NzbDrone.Api/Indexers/IndexerSchemaModule.cs @@ -18,20 +18,22 @@ namespace NzbDrone.Api.Indexers private List GetSchema() { - var indexers = _indexerService.Schema(); + /* var indexers = _indexerService.Schema(); - var result = new List(indexers.Count); + var result = new List(indexers.Count); - foreach (var indexer in indexers) - { - var indexerResource = new IndexerResource(); - indexerResource.InjectFrom(indexer); - indexerResource.Fields = SchemaBuilder.GenerateSchema(indexer.Settings); + foreach (var indexer in indexers) + { + var indexerResource = new IndexerResource(); + indexerResource.InjectFrom(indexer); + indexerResource.Fields = SchemaBuilder.GenerateSchema(indexer.Settings); - result.Add(indexerResource); - } + result.Add(indexerResource); + } - return result; + return result;*/ + + return null; } } } \ No newline at end of file diff --git a/NzbDrone.Core.Test/IndexerTests/IndexerServiceFixture.cs b/NzbDrone.Core.Test/IndexerTests/IndexerServiceFixture.cs index 2de52fb5f..6ac94cc81 100644 --- a/NzbDrone.Core.Test/IndexerTests/IndexerServiceFixture.cs +++ b/NzbDrone.Core.Test/IndexerTests/IndexerServiceFixture.cs @@ -57,10 +57,8 @@ namespace NzbDrone.Core.Test.IndexerTests var indexers = Subject.All().ToList(); indexers.Should().NotBeEmpty(); indexers.Should().NotContain(c => c.Settings == null); - indexers.Should().NotContain(c => c.Instance == null); indexers.Should().NotContain(c => c.Name == null); indexers.Select(c => c.Name).Should().OnlyHaveUniqueItems(); - indexers.Select(c => c.Instance).Should().OnlyHaveUniqueItems(); } diff --git a/NzbDrone.Core.Test/IndexerTests/IntegrationTests/IndexerIntegrationTests.cs b/NzbDrone.Core.Test/IndexerTests/IntegrationTests/IndexerIntegrationTests.cs index 1be142824..9c51cd84e 100644 --- a/NzbDrone.Core.Test/IndexerTests/IntegrationTests/IndexerIntegrationTests.cs +++ b/NzbDrone.Core.Test/IndexerTests/IntegrationTests/IndexerIntegrationTests.cs @@ -48,14 +48,14 @@ namespace NzbDrone.Core.Test.IndexerTests.IntegrationTests public void nzbsorg_rss() { var indexer = new Newznab(); - indexer.Settings = new NewznabSettings - { - ApiKey = "64d61d3cfd4b75e51d01cbc7c6a78275", - Url = "http://nzbs.org" - }; - - indexer.InstanceDefinition = new IndexerDefinition(); - indexer.InstanceDefinition.Name = "nzbs.org"; + + indexer.Definition = new IndexerDefinition(); + indexer.Definition.Name = "nzbs.org"; + indexer.Definition.Settings = new NewznabSettings + { + ApiKey = "64d61d3cfd4b75e51d01cbc7c6a78275", + Url = "http://nzbs.org" + }; var result = Subject.FetchRss(indexer); diff --git a/NzbDrone.Core.Test/ThingiProvider/ProviderBaseFixture.cs b/NzbDrone.Core.Test/ThingiProvider/ProviderBaseFixture.cs index 3ecfa62ac..8aa47c176 100644 --- a/NzbDrone.Core.Test/ThingiProvider/ProviderBaseFixture.cs +++ b/NzbDrone.Core.Test/ThingiProvider/ProviderBaseFixture.cs @@ -9,7 +9,7 @@ using NzbDrone.Core.ThingiProvider; namespace NzbDrone.Core.Test.ThingiProvider { - public class ProviderRepositoryFixture : DbTest + public class ProviderRepositoryFixture : DbTest, IndexerDefinition> { [Test] public void should_read_write_download_provider() diff --git a/NzbDrone.Core/IndexerSearch/NzbSearchService.cs b/NzbDrone.Core/IndexerSearch/NzbSearchService.cs index 5770687b8..e79f3cedd 100644 --- a/NzbDrone.Core/IndexerSearch/NzbSearchService.cs +++ b/NzbDrone.Core/IndexerSearch/NzbSearchService.cs @@ -132,7 +132,7 @@ namespace NzbDrone.Core.IndexerSearch private List Dispatch(Func> searchAction, SearchCriteriaBase criteriaBase) { - var indexers = _indexerService.GetAvailableIndexers().ToList(); + var indexers = _indexerService.GetAvailableProviders().ToList(); var reports = new List(); _logger.ProgressInfo("Searching {0} indexers for {1}", indexers.Count, criteriaBase); diff --git a/NzbDrone.Core/Indexers/Eztv/Eztv.cs b/NzbDrone.Core/Indexers/Eztv/Eztv.cs index 541f3a078..8b514f255 100644 --- a/NzbDrone.Core/Indexers/Eztv/Eztv.cs +++ b/NzbDrone.Core/Indexers/Eztv/Eztv.cs @@ -1,9 +1,10 @@ using System; using System.Collections.Generic; +using NzbDrone.Core.ThingiProvider; namespace NzbDrone.Core.Indexers.Eztv { - public class Eztv : IndexerBase + public class Eztv : IndexerBase { public override string Name { diff --git a/NzbDrone.Core/Indexers/FetchAndParseRssService.cs b/NzbDrone.Core/Indexers/FetchAndParseRssService.cs index c9633c8d0..f153311fb 100644 --- a/NzbDrone.Core/Indexers/FetchAndParseRssService.cs +++ b/NzbDrone.Core/Indexers/FetchAndParseRssService.cs @@ -29,7 +29,7 @@ namespace NzbDrone.Core.Indexers { var result = new List(); - var indexers = _indexerService.GetAvailableIndexers().ToList(); + var indexers = _indexerService.GetAvailableProviders().ToList(); if (!indexers.Any()) { diff --git a/NzbDrone.Core/Indexers/IIndexer.cs b/NzbDrone.Core/Indexers/IIndexer.cs index a681ae3df..9e77b433d 100644 --- a/NzbDrone.Core/Indexers/IIndexer.cs +++ b/NzbDrone.Core/Indexers/IIndexer.cs @@ -1,23 +1,15 @@ using System; using System.Collections.Generic; +using NzbDrone.Core.ThingiProvider; namespace NzbDrone.Core.Indexers { - public interface IIndexer + public interface IIndexer : IProvider { - string Name { get; } - - bool EnableByDefault { get; } - - IEnumerable DefaultDefinitions { get; } - - IndexerDefinition InstanceDefinition { get; set; } - - IEnumerable RecentFeed { get; } - IParseFeed Parser { get; } IndexerKind Kind { get; } + IEnumerable RecentFeed { get; } IEnumerable GetEpisodeSearchUrls(string seriesTitle, int tvRageId, int seasonNumber, int episodeNumber); IEnumerable GetDailyEpisodeSearchUrls(string seriesTitle, int tvRageId, DateTime date); IEnumerable GetSeasonSearchUrls(string seriesTitle, int tvRageId, int seasonNumber, int offset); diff --git a/NzbDrone.Core/Indexers/IndexerBase.cs b/NzbDrone.Core/Indexers/IndexerBase.cs index 28a2d1d46..604f536c9 100644 --- a/NzbDrone.Core/Indexers/IndexerBase.cs +++ b/NzbDrone.Core/Indexers/IndexerBase.cs @@ -4,30 +4,38 @@ using NzbDrone.Core.ThingiProvider; namespace NzbDrone.Core.Indexers { - public abstract class IndexerBase : IIndexer + public abstract class IndexerBase : IIndexer { public abstract string Name { get; } - public abstract IndexerKind Kind { get; } - - public virtual bool EnableByDefault { get { return true; } } - - public IndexerDefinition InstanceDefinition { get; set; } - - public virtual IEnumerable DefaultDefinitions + public virtual IEnumerable DefaultDefinitions { get { yield return new IndexerDefinition { Name = Name, - Enable = EnableByDefault, + Enable = false, Implementation = GetType().Name, Settings = NullSetting.Instance }; } } + public ProviderDefinition Definition { get; set; } + + public abstract IndexerKind Kind { get; } + + public virtual bool EnableByDefault { get { return true; } } + + protected TSettings Settings + { + get + { + return (TSettings)Definition.Settings; + } + } + public virtual IParseFeed Parser { get; private set; } public abstract IEnumerable RecentFeed { get; } diff --git a/NzbDrone.Core/Indexers/IndexerDefinition.cs b/NzbDrone.Core/Indexers/IndexerDefinition.cs index 02238e0e9..5909532b4 100644 --- a/NzbDrone.Core/Indexers/IndexerDefinition.cs +++ b/NzbDrone.Core/Indexers/IndexerDefinition.cs @@ -1,11 +1,8 @@ -using System; -using NzbDrone.Core.Datastore; -using NzbDrone.Core.ThingiProvider; +using NzbDrone.Core.ThingiProvider; namespace NzbDrone.Core.Indexers { public class IndexerDefinition : ProviderDefinition { - public Boolean Enable { get; set; } } } \ No newline at end of file diff --git a/NzbDrone.Core/Indexers/IndexerService.cs b/NzbDrone.Core/Indexers/IndexerService.cs index 5d42c2a9d..cd4a8a11e 100644 --- a/NzbDrone.Core/Indexers/IndexerService.cs +++ b/NzbDrone.Core/Indexers/IndexerService.cs @@ -1,202 +1,19 @@ -using System; -using System.Collections.Generic; -using System.Linq; +using System.Collections.Generic; using NLog; -using NzbDrone.Common.Serializer; -using NzbDrone.Core.Configuration; -using NzbDrone.Core.Indexers.Newznab; -using NzbDrone.Core.Lifecycle; -using NzbDrone.Core.Messaging.Events; using NzbDrone.Core.ThingiProvider; -using Omu.ValueInjecter; namespace NzbDrone.Core.Indexers { - public class Indexer + public interface IIndexerService : IProviderFactory { - public int Id { get; set; } - public string Name { get; set; } - public bool Enable { get; set; } - public IProviderConfig Settings { get; set; } - public IIndexer Instance { get; set; } - public string Implementation { get; set; } - } - public interface IIndexerService - { - List All(); - List GetAvailableIndexers(); - Indexer Get(int id); - Indexer Get(string name); - List Schema(); - Indexer Create(Indexer indexer); - Indexer Update(Indexer indexer); - void Delete(int id); } - public class IndexerService : IIndexerService, IHandle + public class IndexerService : ProviderFactory { - private readonly IIndexerRepository _indexerRepository; - private readonly IConfigFileProvider _configFileProvider; - private readonly INewznabTestService _newznabTestService; - private readonly Logger _logger; - - private readonly List _indexers; - - public IndexerService(IIndexerRepository indexerRepository, - IEnumerable indexers, - IConfigFileProvider configFileProvider, - INewznabTestService newznabTestService, - Logger logger) - { - _indexerRepository = indexerRepository; - _configFileProvider = configFileProvider; - _newznabTestService = newznabTestService; - _logger = logger; - - - if (!configFileProvider.Torrent) - { - _indexers = indexers.Where(c => c.Kind != IndexerKind.Torrent).ToList(); - } - else - { - _indexers = indexers.ToList(); - } - } - - public List All() - { - return _indexerRepository.All().Select(ToIndexer).ToList(); - } - - public List GetAvailableIndexers() + public IndexerService(IProviderRepository providerRepository, IEnumerable providers, Logger logger) + : base(providerRepository, providers, logger) { - return All().Where(c => c.Enable && c.Settings.Validate().IsValid).Select(c => c.Instance).ToList(); - } - - public Indexer Get(int id) - { - return ToIndexer(_indexerRepository.Get(id)); - } - - public Indexer Get(string name) - { - return ToIndexer(_indexerRepository.Get(name)); - } - - public List Schema() - { - var indexers = new List(); - - var newznab = new Indexer(); - newznab.Instance = new Newznab.Newznab(); - newznab.Id = 1; - newznab.Name = "Newznab"; - newznab.Settings = new NewznabSettings(); - newznab.Implementation = "Newznab"; - - indexers.Add(newznab); - - return indexers; - } - - public Indexer Create(Indexer indexer) - { - var definition = new IndexerDefinition - { - Name = indexer.Name, - Enable = indexer.Enable, - Implementation = indexer.Implementation, - Settings = indexer.Settings - }; - - var instance = ToIndexer(definition).Instance; - _newznabTestService.Test(instance); - - definition = _indexerRepository.Insert(definition); - indexer.Id = definition.Id; - - return indexer; - } - - public Indexer Update(Indexer indexer) - { - var definition = _indexerRepository.Get(indexer.Id); - definition.InjectFrom(indexer); - definition.Settings = indexer.Settings; - _indexerRepository.Update(definition); - - return indexer; - } - - public void Delete(int id) - { - _indexerRepository.Delete(id); - } - - private Indexer ToIndexer(IndexerDefinition definition) - { - var indexer = new Indexer(); - indexer.Id = definition.Id; - indexer.Enable = definition.Enable; - indexer.Instance = GetInstance(definition); - indexer.Name = definition.Name; - indexer.Implementation = definition.Implementation; - - if (indexer.Instance.GetType().GetMethod("ImportSettingsFromJson") != null) - { - indexer.Settings = ((dynamic)indexer.Instance).ImportSettingsFromJson(definition.Settings); - } - else - { - indexer.Settings = NullSetting.Instance; - } - - return indexer; - } - - private IIndexer GetInstance(IndexerDefinition indexerDefinition) - { - var type = GetImplementation(indexerDefinition); - var instance = (IIndexer)Activator.CreateInstance(type); - instance.InstanceDefinition = indexerDefinition; - return instance; - } - - private Type GetImplementation(IndexerDefinition indexerDefinition) - { - return _indexers.Select(c => c.GetType()).SingleOrDefault(c => c.Name.Equals(indexerDefinition.Implementation, StringComparison.InvariantCultureIgnoreCase)); - } - - public void Handle(ApplicationStartedEvent message) - { - _logger.Debug("Initializing indexers. Count {0}", _indexers.Count); - - RemoveMissingImplementations(); - - var definitions = _indexers.SelectMany(indexer => indexer.DefaultDefinitions); - - var currentIndexer = All(); - - var newIndexers = definitions.Where(def => currentIndexer.All(c => c.Implementation != def.Implementation)).ToList(); - - - if (newIndexers.Any()) - { - _indexerRepository.InsertMany(newIndexers); - } - } - - private void RemoveMissingImplementations() - { - var storedIndexers = _indexerRepository.All(); - - foreach (var indexerDefinition in storedIndexers.Where(i => GetImplementation(i) == null)) - { - _logger.Debug("Removing Indexer {0} ", indexerDefinition.Name); - _indexerRepository.Delete(indexerDefinition); - } } } } \ No newline at end of file diff --git a/NzbDrone.Core/Indexers/IndexerWithSetting.cs b/NzbDrone.Core/Indexers/IndexerWithSetting.cs deleted file mode 100644 index ecba9f7a9..000000000 --- a/NzbDrone.Core/Indexers/IndexerWithSetting.cs +++ /dev/null @@ -1,22 +0,0 @@ -using NzbDrone.Common.Serializer; -using NzbDrone.Core.ThingiProvider; - -namespace NzbDrone.Core.Indexers -{ - public abstract class IndexerWithSetting : IndexerBase where TSetting : class, IProviderConfig, new() - { - public TSetting Settings { get; set; } - - public override bool EnableByDefault - { - get { return false; } - } - - public TSetting ImportSettingsFromJson(string json) - { - Settings = Json.Deserialize(json) ?? new TSetting(); - - return Settings; - } - } -} \ No newline at end of file diff --git a/NzbDrone.Core/Indexers/Newznab/Newznab.cs b/NzbDrone.Core/Indexers/Newznab/Newznab.cs index e2daf28d6..980513aa0 100644 --- a/NzbDrone.Core/Indexers/Newznab/Newznab.cs +++ b/NzbDrone.Core/Indexers/Newznab/Newznab.cs @@ -2,10 +2,11 @@ using System.Collections.Generic; using System.Linq; using NzbDrone.Common.Serializer; +using NzbDrone.Core.ThingiProvider; namespace NzbDrone.Core.Indexers.Newznab { - public class Newznab : IndexerWithSetting + public class Newznab : IndexerBase { public override IParseFeed Parser { @@ -15,7 +16,7 @@ namespace NzbDrone.Core.Indexers.Newznab } } - public override IEnumerable DefaultDefinitions + public override IEnumerable DefaultDefinitions { get { @@ -118,7 +119,7 @@ namespace NzbDrone.Core.Indexers.Newznab { get { - return InstanceDefinition.Name; + return Definition.Name; } } diff --git a/NzbDrone.Core/Indexers/Omgwtfnzbs/Omgwtfnzbs.cs b/NzbDrone.Core/Indexers/Omgwtfnzbs/Omgwtfnzbs.cs index 15f6dbbe5..4c281910e 100644 --- a/NzbDrone.Core/Indexers/Omgwtfnzbs/Omgwtfnzbs.cs +++ b/NzbDrone.Core/Indexers/Omgwtfnzbs/Omgwtfnzbs.cs @@ -3,7 +3,7 @@ using System.Collections.Generic; namespace NzbDrone.Core.Indexers.Omgwtfnzbs { - public class Omgwtfnzbs : IndexerWithSetting + public class Omgwtfnzbs : IndexerBase { public override string Name { diff --git a/NzbDrone.Core/Indexers/Wombles/Wombles.cs b/NzbDrone.Core/Indexers/Wombles/Wombles.cs index 95cd559de..2f455219e 100644 --- a/NzbDrone.Core/Indexers/Wombles/Wombles.cs +++ b/NzbDrone.Core/Indexers/Wombles/Wombles.cs @@ -1,9 +1,10 @@ using System; using System.Collections.Generic; +using NzbDrone.Core.ThingiProvider; namespace NzbDrone.Core.Indexers.Wombles { - public class Wombles : IndexerBase + public class Wombles : IndexerBase { public override string Name { diff --git a/NzbDrone.Core/NzbDrone.Core.csproj b/NzbDrone.Core/NzbDrone.Core.csproj index f8d3c3b7c..8cdb8a182 100644 --- a/NzbDrone.Core/NzbDrone.Core.csproj +++ b/NzbDrone.Core/NzbDrone.Core.csproj @@ -241,7 +241,6 @@ - @@ -413,13 +412,14 @@ - + + @@ -618,4 +618,4 @@ --> - \ No newline at end of file + diff --git a/NzbDrone.Core/ThingiProvider/ProviderBase.cs b/NzbDrone.Core/ThingiProvider/IProvider.cs similarity index 56% rename from NzbDrone.Core/ThingiProvider/ProviderBase.cs rename to NzbDrone.Core/ThingiProvider/IProvider.cs index f91577aa9..4d64ea8ec 100644 --- a/NzbDrone.Core/ThingiProvider/ProviderBase.cs +++ b/NzbDrone.Core/ThingiProvider/IProvider.cs @@ -1,38 +1,46 @@  +using System; +using System.Collections.Generic; using FluentValidation.Results; using NzbDrone.Core.Datastore; -using NzbDrone.Core.Indexers; using NzbDrone.Core.Messaging.Events; -using NzbDrone.Core.Notifications; namespace NzbDrone.Core.ThingiProvider { - public class NotificationProviderRepository : BasicRepository + public interface IProviderRepository : IBasicRepository where TProvider : ModelBase, new() { - public NotificationProviderRepository(IDatabase database, IEventAggregator eventAggregator) - : base(database, eventAggregator) - { - } + TProvider GetByName(string name); } - public class IndexerProviderRepository : BasicRepository + public class ProviderRepository : BasicRepository, IProviderRepository + where TProviderDefinition : ModelBase, + new() { - public IndexerProviderRepository(IDatabase database, IEventAggregator eventAggregator) + protected ProviderRepository(IDatabase database, IEventAggregator eventAggregator) : base(database, eventAggregator) { } + + public TProviderDefinition GetByName(string name) + { + throw new NotImplementedException(); + } } - public abstract class ProviderBase + public interface IProvider { - public ProviderDefinition Definition { get; set; } + string Name { get; } + + IEnumerable DefaultDefinitions { get; } + ProviderDefinition Definition { get; set; } } public abstract class ProviderDefinition : ModelBase { public string Name { get; set; } public string Implementation { get; set; } + public bool Enable { get; set; } public string ConfigContract { diff --git a/NzbDrone.Core/ThingiProvider/ProviderService.cs b/NzbDrone.Core/ThingiProvider/ProviderService.cs new file mode 100644 index 000000000..c55529ec1 --- /dev/null +++ b/NzbDrone.Core/ThingiProvider/ProviderService.cs @@ -0,0 +1,129 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using NLog; +using NzbDrone.Core.Lifecycle; +using NzbDrone.Core.Messaging.Events; + +namespace NzbDrone.Core.ThingiProvider +{ + public interface IProviderFactory + where TProviderDefinition : ProviderDefinition, new() + where TProvider : IProvider + { + List All(); + List GetAvailableProviders(); + TProviderDefinition Get(int id); + //List Schema(); + TProviderDefinition Create(TProviderDefinition indexer); + void Update(TProviderDefinition indexer); + void Delete(int id); + } + + public abstract class ProviderFactory : IProviderFactory, IHandle + where TProviderDefinition : ProviderDefinition, new() + where TProvider : IProvider + { + private readonly IProviderRepository _providerRepository; + private readonly Logger _logger; + + private readonly List _providers; + + protected ProviderFactory(IProviderRepository providerRepository, IEnumerable providers, Logger logger) + { + _providerRepository = providerRepository; + _providers = providers.ToList(); + _logger = logger; + } + + public List All() + { + return _providerRepository.All().ToList(); + } + + public List GetAvailableProviders() + { + return All().Where(c => c.Enable && c.Settings.Validate().IsValid) + .Select(GetInstance).ToList(); + } + + public TProviderDefinition Get(int id) + { + return _providerRepository.Get(id); + } + + /* public List Schema() + { + var indexers = new List(); + + var newznab = new Indexer(); + newznab.Instance = new Newznab.Newznab(); + newznab.Id = 1; + newznab.Name = "Newznab"; + newznab.Settings = new NewznabSettings(); + newznab.Implementation = "Newznab"; + + indexers.Add(newznab); + + return indexers; + }*/ + + public TProviderDefinition Create(TProviderDefinition provider) + { + return _providerRepository.Insert(provider); + } + + public void Update(TProviderDefinition definition) + { + _providerRepository.Update(definition); + } + + public void Delete(int id) + { + _providerRepository.Delete(id); + } + + private TProvider GetInstance(TProviderDefinition definition) + { + var type = GetImplementation(definition); + var instance = (TProvider)Activator.CreateInstance(type); + instance.Definition = definition; + return instance; + } + + private Type GetImplementation(TProviderDefinition definition) + { + return _providers.Select(c => c.GetType()).SingleOrDefault(c => c.Name.Equals(definition.Implementation, StringComparison.InvariantCultureIgnoreCase)); + } + + public void Handle(ApplicationStartedEvent message) + { + _logger.Debug("Initializing Providers. Count {0}", _providers.Count); + + RemoveMissingImplementations(); + + var definitions = _providers.SelectMany(indexer => indexer.DefaultDefinitions); + + var currentProviders = All(); + + var newProviders = definitions.Where(def => currentProviders.All(c => c.Implementation != def.Implementation)).ToList(); + + + if (newProviders.Any()) + { + _providerRepository.InsertMany(newProviders.Cast().ToList()); + } + } + + private void RemoveMissingImplementations() + { + var storedProvider = _providerRepository.All(); + + foreach (var providerDefinition in storedProvider.Where(i => GetImplementation(i) == null)) + { + _logger.Debug("Removing {0} ", providerDefinition.Name); + _providerRepository.Delete(providerDefinition); + } + } + } +} \ No newline at end of file diff --git a/NzbDrone.ncrunchsolution b/NzbDrone.ncrunchsolution index 098d74afe..28e2de798 100644 --- a/NzbDrone.ncrunchsolution +++ b/NzbDrone.ncrunchsolution @@ -7,7 +7,7 @@ Disabled Disabled Disabled - Run all tests automatically:BFRydWU=;Run all tests manually:BUZhbHNl;Run impacted tests automatically, others manually (experimental!):CklzSW1wYWN0ZWQ=;Run pinned tests automatically, others manually:CElzUGlubmVk;Fast:DlN0cnVjdHVyYWxOb2RlBAAAABNEb2VzTm90SGF2ZUNhdGVnb3J5D0ludGVncmF0aW9uVGVzdBNEb2VzTm90SGF2ZUNhdGVnb3J5BkRiVGVzdApJc0ltcGFjdGVkE0RvZXNOb3RIYXZlQ2F0ZWdvcnkORGlza0FjY2Vzc1Rlc3QAAAAAAAAAAAAAAAA= + Run all tests automatically:BFRydWU=;Run all tests manually:BUZhbHNl;Run impacted tests automatically, others manually (experimental!):CklzSW1wYWN0ZWQ=;Run pinned tests automatically, others manually:CElzUGlubmVk;Fast:DlN0cnVjdHVyYWxOb2RlBQAAABNEb2VzTm90SGF2ZUNhdGVnb3J5D0ludGVncmF0aW9uVGVzdBNEb2VzTm90SGF2ZUNhdGVnb3J5BkRiVGVzdApJc0ltcGFjdGVkE0RvZXNOb3RIYXZlQ2F0ZWdvcnkORGlza0FjY2Vzc1Rlc3QISXNQaW5uZWQAAAAAAAAAAAAAAAABAAAA \ No newline at end of file From 3e9a6ed0ef1a256508c6d58acb7fca4f49e55b40 Mon Sep 17 00:00:00 2001 From: "kay.one" Date: Sun, 22 Sep 2013 13:00:29 -0700 Subject: [PATCH 08/52] indexer cleanup. --- NzbDrone.Core/Indexers/Eztv/Eztv.cs | 23 +++-------- NzbDrone.Core/Indexers/IIndexer.cs | 2 +- NzbDrone.Core/Indexers/IndexerBase.cs | 24 ++++++++---- NzbDrone.Core/Indexers/IndexerFetchService.cs | 19 +++++----- NzbDrone.Core/Indexers/IndexerService.cs | 21 ++++++++++ NzbDrone.Core/Indexers/Newznab/Newznab.cs | 16 ++------ .../Indexers/Omgwtfnzbs/Omgwtfnzbs.cs | 9 +---- NzbDrone.Core/Indexers/Wombles/Wombles.cs | 11 ++---- NzbDrone.Core/ThingiProvider/IProvider.cs | 7 ++-- .../ThingiProvider/ProviderService.cs | 38 ++++++++----------- 10 files changed, 81 insertions(+), 89 deletions(-) diff --git a/NzbDrone.Core/Indexers/Eztv/Eztv.cs b/NzbDrone.Core/Indexers/Eztv/Eztv.cs index 8b514f255..52c55df60 100644 --- a/NzbDrone.Core/Indexers/Eztv/Eztv.cs +++ b/NzbDrone.Core/Indexers/Eztv/Eztv.cs @@ -4,26 +4,16 @@ using NzbDrone.Core.ThingiProvider; namespace NzbDrone.Core.Indexers.Eztv { - public class Eztv : IndexerBase + public class Eztv : IndexerBase { - public override string Name - { - get { return "Eztv"; } - } - - public override IndexerKind Kind + public override DownloadProtocol Protocol { get { - return IndexerKind.Torrent; + return DownloadProtocol.Torrent; } } - public override bool EnableByDefault - { - get { return false; } - } - public override IParseFeed Parser { get @@ -36,10 +26,7 @@ namespace NzbDrone.Core.Indexers.Eztv { get { - return new[] - { - "http://www.ezrss.it/feed/" - }; + yield return "http://www.ezrss.it/feed/"; } } @@ -56,7 +43,7 @@ namespace NzbDrone.Core.Indexers.Eztv public override IEnumerable GetDailyEpisodeSearchUrls(string seriesTitle, int tvRageId, DateTime date) { - //EZTV doesn't support searching based on actual epidose airdate. they only support release date. + //EZTV doesn't support searching based on actual episode airdate. they only support release date. return new string[0]; } } diff --git a/NzbDrone.Core/Indexers/IIndexer.cs b/NzbDrone.Core/Indexers/IIndexer.cs index 9e77b433d..34daa6a26 100644 --- a/NzbDrone.Core/Indexers/IIndexer.cs +++ b/NzbDrone.Core/Indexers/IIndexer.cs @@ -7,7 +7,7 @@ namespace NzbDrone.Core.Indexers public interface IIndexer : IProvider { IParseFeed Parser { get; } - IndexerKind Kind { get; } + DownloadProtocol Protocol { get; } IEnumerable RecentFeed { get; } IEnumerable GetEpisodeSearchUrls(string seriesTitle, int tvRageId, int seasonNumber, int episodeNumber); diff --git a/NzbDrone.Core/Indexers/IndexerBase.cs b/NzbDrone.Core/Indexers/IndexerBase.cs index 604f536c9..ddedc098c 100644 --- a/NzbDrone.Core/Indexers/IndexerBase.cs +++ b/NzbDrone.Core/Indexers/IndexerBase.cs @@ -6,7 +6,13 @@ namespace NzbDrone.Core.Indexers { public abstract class IndexerBase : IIndexer { - public abstract string Name { get; } + public Type ConfigContract + { + get + { + return typeof(TSettings); + } + } public virtual IEnumerable DefaultDefinitions { @@ -14,19 +20,17 @@ namespace NzbDrone.Core.Indexers { yield return new IndexerDefinition { - Name = Name, + Name = this.GetType().Name, Enable = false, Implementation = GetType().Name, - Settings = NullSetting.Instance + Settings = NullConfig.Instance }; } } public ProviderDefinition Definition { get; set; } - public abstract IndexerKind Kind { get; } - - public virtual bool EnableByDefault { get { return true; } } + public abstract DownloadProtocol Protocol { get; } protected TSettings Settings { @@ -42,9 +46,15 @@ namespace NzbDrone.Core.Indexers public abstract IEnumerable GetEpisodeSearchUrls(string seriesTitle, int tvRageId, int seasonNumber, int episodeNumber); public abstract IEnumerable GetDailyEpisodeSearchUrls(string seriesTitle, int tvRageId, DateTime date); public abstract IEnumerable GetSeasonSearchUrls(string seriesTitle, int tvRageId, int seasonNumber, int offset); + + + public override string ToString() + { + return GetType().Name; + } } - public enum IndexerKind + public enum DownloadProtocol { Usenet, Torrent diff --git a/NzbDrone.Core/Indexers/IndexerFetchService.cs b/NzbDrone.Core/Indexers/IndexerFetchService.cs index ba284c8b7..d9457f58b 100644 --- a/NzbDrone.Core/Indexers/IndexerFetchService.cs +++ b/NzbDrone.Core/Indexers/IndexerFetchService.cs @@ -33,11 +33,11 @@ namespace NzbDrone.Core.Indexers public virtual IList FetchRss(IIndexer indexer) { - _logger.Debug("Fetching feeds from " + indexer.Name); + _logger.Debug("Fetching feeds from " + indexer); var result = Fetch(indexer, indexer.RecentFeed); - _logger.Debug("Finished processing feeds from " + indexer.Name); + _logger.Debug("Finished processing feeds from " + indexer); return result; } @@ -48,7 +48,7 @@ namespace NzbDrone.Core.Indexers var result = Fetch(indexer, searchCriteria, 0).DistinctBy(c => c.DownloadUrl).ToList(); - _logger.Info("Finished searching {0} for {1}. Found {2}", indexer.Name, searchCriteria, result.Count); + _logger.Info("Finished searching {0} for {1}. Found {2}", indexer, searchCriteria, result.Count); return result; } @@ -61,7 +61,7 @@ namespace NzbDrone.Core.Indexers var result = Fetch(indexer, searchUrls); - _logger.Info("{0} offset {1}. Found {2}", indexer.Name, searchCriteria, result.Count); + _logger.Info("{0} offset {1}. Found {2}", indexer, searchCriteria, result.Count); if (result.Count > 90) { @@ -79,7 +79,7 @@ namespace NzbDrone.Core.Indexers var result = Fetch(indexer, searchUrls); - _logger.Info("Finished searching {0} for {1}. Found {2}", indexer.Name, searchCriteria, result.Count); + _logger.Info("Finished searching {0} for {1}. Found {2}", indexer, searchCriteria, result.Count); return result; } @@ -90,7 +90,7 @@ namespace NzbDrone.Core.Indexers var searchUrls = indexer.GetDailyEpisodeSearchUrls(searchCriteria.QueryTitle, searchCriteria.Series.TvRageId, searchCriteria.Airtime); var result = Fetch(indexer, searchUrls); - _logger.Info("Finished searching {0} for {1}. Found {2}", indexer.Name, searchCriteria, result.Count); + _logger.Info("Finished searching {0} for {1}. Found {2}", indexer, searchCriteria, result.Count); return result; } @@ -119,12 +119,11 @@ namespace NzbDrone.Core.Indexers if (webException.Message.Contains("502") || webException.Message.Contains("503") || webException.Message.Contains("timed out")) { - _logger.Warn("{0} server is currently unavailable. {1} {2}", indexer.Name, url, - webException.Message); + _logger.Warn("{0} server is currently unavailable. {1} {2}", indexer, url, webException.Message); } else { - _logger.Warn("{0} {1} {2}", indexer.Name, url, webException.Message); + _logger.Warn("{0} {1} {2}", indexer, url, webException.Message); } } catch (ApiKeyException) @@ -138,7 +137,7 @@ namespace NzbDrone.Core.Indexers } } - result.ForEach(c => c.Indexer = indexer.Name); + result.ForEach(c => c.Indexer = indexer.Definition.Name); return result; } diff --git a/NzbDrone.Core/Indexers/IndexerService.cs b/NzbDrone.Core/Indexers/IndexerService.cs index cd4a8a11e..e56531438 100644 --- a/NzbDrone.Core/Indexers/IndexerService.cs +++ b/NzbDrone.Core/Indexers/IndexerService.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using System.Linq; using NLog; using NzbDrone.Core.ThingiProvider; @@ -11,9 +12,29 @@ namespace NzbDrone.Core.Indexers public class IndexerService : ProviderFactory { + private readonly IProviderRepository _providerRepository; + private readonly IEnumerable _providers; + public IndexerService(IProviderRepository providerRepository, IEnumerable providers, Logger logger) : base(providerRepository, providers, logger) { + _providerRepository = providerRepository; + _providers = providers; + } + + protected override void InitializeProviders() + { + var definitions = _providers.SelectMany(indexer => indexer.DefaultDefinitions); + + var currentProviders = All(); + + var newProviders = definitions.Where(def => currentProviders.All(c => c.Implementation != def.Implementation)).ToList(); + + + if (newProviders.Any()) + { + _providerRepository.InsertMany(newProviders.Cast().ToList()); + } } } } \ No newline at end of file diff --git a/NzbDrone.Core/Indexers/Newznab/Newznab.cs b/NzbDrone.Core/Indexers/Newznab/Newznab.cs index 980513aa0..a4c106846 100644 --- a/NzbDrone.Core/Indexers/Newznab/Newznab.cs +++ b/NzbDrone.Core/Indexers/Newznab/Newznab.cs @@ -69,7 +69,7 @@ namespace NzbDrone.Core.Indexers.Newznab get { //Todo: We should be able to update settings on start - if (Name.Equals("nzbs.org", StringComparison.InvariantCultureIgnoreCase)) + if (Settings.Url.Contains("nzbs.org")) { Settings.Categories = new List { 5000 }; } @@ -115,19 +115,11 @@ namespace NzbDrone.Core.Indexers.Newznab return RecentFeed.Select(url => String.Format("{0}&limit=100&q={1}&season={2}&offset={3}", url, NewsnabifyTitle(seriesTitle), seasonNumber, offset)); } - public override string Name + public override DownloadProtocol Protocol { get { - return Definition.Name; - } - } - - public override IndexerKind Kind - { - get - { - return IndexerKind.Usenet; + return DownloadProtocol.Usenet; } } @@ -136,4 +128,4 @@ namespace NzbDrone.Core.Indexers.Newznab return title.Replace("+", "%20"); } } -} \ No newline at end of file +} diff --git a/NzbDrone.Core/Indexers/Omgwtfnzbs/Omgwtfnzbs.cs b/NzbDrone.Core/Indexers/Omgwtfnzbs/Omgwtfnzbs.cs index 4c281910e..c4daeab66 100644 --- a/NzbDrone.Core/Indexers/Omgwtfnzbs/Omgwtfnzbs.cs +++ b/NzbDrone.Core/Indexers/Omgwtfnzbs/Omgwtfnzbs.cs @@ -5,16 +5,11 @@ namespace NzbDrone.Core.Indexers.Omgwtfnzbs { public class Omgwtfnzbs : IndexerBase { - public override string Name - { - get { return "omgwtfnzbs"; } - } - - public override IndexerKind Kind + public override DownloadProtocol Protocol { get { - return IndexerKind.Usenet; + return DownloadProtocol.Usenet; } } diff --git a/NzbDrone.Core/Indexers/Wombles/Wombles.cs b/NzbDrone.Core/Indexers/Wombles/Wombles.cs index 2f455219e..5355d853d 100644 --- a/NzbDrone.Core/Indexers/Wombles/Wombles.cs +++ b/NzbDrone.Core/Indexers/Wombles/Wombles.cs @@ -4,18 +4,13 @@ using NzbDrone.Core.ThingiProvider; namespace NzbDrone.Core.Indexers.Wombles { - public class Wombles : IndexerBase + public class Wombles : IndexerBase { - public override string Name - { - get { return "WomblesIndex"; } - } - - public override IndexerKind Kind + public override DownloadProtocol Protocol { get { - return IndexerKind.Usenet; + return DownloadProtocol.Usenet; } } diff --git a/NzbDrone.Core/ThingiProvider/IProvider.cs b/NzbDrone.Core/ThingiProvider/IProvider.cs index 4d64ea8ec..7baeb4bc7 100644 --- a/NzbDrone.Core/ThingiProvider/IProvider.cs +++ b/NzbDrone.Core/ThingiProvider/IProvider.cs @@ -30,7 +30,7 @@ namespace NzbDrone.Core.ThingiProvider public interface IProvider { - string Name { get; } + Type ConfigContract { get; } IEnumerable DefaultDefinitions { get; } ProviderDefinition Definition { get; set; } @@ -51,7 +51,6 @@ namespace NzbDrone.Core.ThingiProvider } set { - } } @@ -63,9 +62,9 @@ namespace NzbDrone.Core.ThingiProvider ValidationResult Validate(); } - public class NullSetting : IProviderConfig + public class NullConfig : IProviderConfig { - public static readonly NullSetting Instance = new NullSetting(); + public static readonly NullConfig Instance = new NullConfig(); public ValidationResult Validate() { diff --git a/NzbDrone.Core/ThingiProvider/ProviderService.cs b/NzbDrone.Core/ThingiProvider/ProviderService.cs index c55529ec1..c09a1d79c 100644 --- a/NzbDrone.Core/ThingiProvider/ProviderService.cs +++ b/NzbDrone.Core/ThingiProvider/ProviderService.cs @@ -52,21 +52,21 @@ namespace NzbDrone.Core.ThingiProvider return _providerRepository.Get(id); } - /* public List Schema() - { - var indexers = new List(); + /* public List Schema() + { + var indexers = new List(); - var newznab = new Indexer(); - newznab.Instance = new Newznab.Newznab(); - newznab.Id = 1; - newznab.Name = "Newznab"; - newznab.Settings = new NewznabSettings(); - newznab.Implementation = "Newznab"; + var newznab = new Indexer(); + newznab.Instance = new Newznab.Newznab(); + newznab.Id = 1; + newznab.Name = "Newznab"; + newznab.Settings = new NewznabSettings(); + newznab.Implementation = "Newznab"; - indexers.Add(newznab); + indexers.Add(newznab); - return indexers; - }*/ + return indexers; + }*/ public TProviderDefinition Create(TProviderDefinition provider) { @@ -102,17 +102,11 @@ namespace NzbDrone.Core.ThingiProvider RemoveMissingImplementations(); - var definitions = _providers.SelectMany(indexer => indexer.DefaultDefinitions); - - var currentProviders = All(); - - var newProviders = definitions.Where(def => currentProviders.All(c => c.Implementation != def.Implementation)).ToList(); - + InitializeProviders(); + } - if (newProviders.Any()) - { - _providerRepository.InsertMany(newProviders.Cast().ToList()); - } + protected virtual void InitializeProviders() + { } private void RemoveMissingImplementations() From 1e88d2b7c3c7e9916d4be45309e0472f974eab62 Mon Sep 17 00:00:00 2001 From: "kay.one" Date: Sun, 22 Sep 2013 13:06:11 -0700 Subject: [PATCH 09/52] fixed broken tests. --- NzbDrone.Api/Indexers/IndexerResource.cs | 1 + .../ThingiProvider/ProviderBaseFixture.cs | 2 +- NzbDrone.Core/Indexers/IndexerRepository.cs | 23 ++++--------------- NzbDrone.Core/Indexers/IndexerService.cs | 4 ++-- 4 files changed, 9 insertions(+), 21 deletions(-) diff --git a/NzbDrone.Api/Indexers/IndexerResource.cs b/NzbDrone.Api/Indexers/IndexerResource.cs index 34a31551a..a613526fe 100644 --- a/NzbDrone.Api/Indexers/IndexerResource.cs +++ b/NzbDrone.Api/Indexers/IndexerResource.cs @@ -11,5 +11,6 @@ namespace NzbDrone.Api.Indexers public String Name { get; set; } public List Fields { get; set; } public String Implementation { get; set; } + public String ConfigContract { get; set; } } } \ No newline at end of file diff --git a/NzbDrone.Core.Test/ThingiProvider/ProviderBaseFixture.cs b/NzbDrone.Core.Test/ThingiProvider/ProviderBaseFixture.cs index 8aa47c176..641e62dca 100644 --- a/NzbDrone.Core.Test/ThingiProvider/ProviderBaseFixture.cs +++ b/NzbDrone.Core.Test/ThingiProvider/ProviderBaseFixture.cs @@ -9,7 +9,7 @@ using NzbDrone.Core.ThingiProvider; namespace NzbDrone.Core.Test.ThingiProvider { - public class ProviderRepositoryFixture : DbTest, IndexerDefinition> + public class ProviderRepositoryFixture : DbTest { [Test] public void should_read_write_download_provider() diff --git a/NzbDrone.Core/Indexers/IndexerRepository.cs b/NzbDrone.Core/Indexers/IndexerRepository.cs index b4c6446a1..269bb5507 100644 --- a/NzbDrone.Core/Indexers/IndexerRepository.cs +++ b/NzbDrone.Core/Indexers/IndexerRepository.cs @@ -1,33 +1,20 @@ -using System; -using System.Linq; -using NzbDrone.Core.Datastore; +using NzbDrone.Core.Datastore; using NzbDrone.Core.Messaging.Events; +using NzbDrone.Core.ThingiProvider; namespace NzbDrone.Core.Indexers { - public interface IIndexerRepository : IBasicRepository + public interface IIndexerRepository : IProviderRepository { - IndexerDefinition Get(string name); - IndexerDefinition Find(string name); + } - public class IndexerRepository : BasicRepository, IIndexerRepository + public class IndexerRepository : ProviderRepository, IIndexerRepository { public IndexerRepository(IDatabase database, IEventAggregator eventAggregator) : base(database, eventAggregator) { } - - public IndexerDefinition Get(string name) - { - return Query.Single(i => i.Name.Equals(name, StringComparison.InvariantCultureIgnoreCase)); - } - - public IndexerDefinition Find(string name) - { - return Query.SingleOrDefault(i => i.Name.Equals(name, StringComparison.InvariantCultureIgnoreCase)); - } - } } diff --git a/NzbDrone.Core/Indexers/IndexerService.cs b/NzbDrone.Core/Indexers/IndexerService.cs index e56531438..dd1b9aca9 100644 --- a/NzbDrone.Core/Indexers/IndexerService.cs +++ b/NzbDrone.Core/Indexers/IndexerService.cs @@ -12,10 +12,10 @@ namespace NzbDrone.Core.Indexers public class IndexerService : ProviderFactory { - private readonly IProviderRepository _providerRepository; + private readonly IIndexerRepository _providerRepository; private readonly IEnumerable _providers; - public IndexerService(IProviderRepository providerRepository, IEnumerable providers, Logger logger) + public IndexerService(IIndexerRepository providerRepository, IEnumerable providers, Logger logger) : base(providerRepository, providers, logger) { _providerRepository = providerRepository; From 0eec2cd5f79d4b22a43503c551262a5b5c8aa4a2 Mon Sep 17 00:00:00 2001 From: "kay.one" Date: Sun, 22 Sep 2013 16:40:36 -0700 Subject: [PATCH 10/52] schema updates --- .../ClientSchemaTests/SchemaBuilderFixture.cs | 4 +- NzbDrone.Api/ClientSchema/SchemaBuilder.cs | 51 ++++++++++++++++++- .../ClientSchema/SchemaDeserializer.cs | 34 +------------ NzbDrone.Api/Indexers/IndexerModule.cs | 21 +++++--- NzbDrone.Api/Indexers/IndexerSchemaModule.cs | 6 ++- .../Notifications/NotificationModule.cs | 8 ++- .../Notifications/NotificationSchemaModule.cs | 2 +- .../Reflection/ReflectionExtensions.cs | 7 +++ .../ProviderSettingConverterFixture.cs | 39 ++++++++++++++ NzbDrone.Core.Test/NzbDrone.Core.Test.csproj | 1 + .../Converters/EmbeddedDocumentConverter.cs | 32 ------------ .../Converters/ProviderSettingConverter.cs | 36 +++++++++++++ .../023_add_config_contract_to_indexers.cs | 23 +++++++++ NzbDrone.Core/Indexers/IndexerService.cs | 2 +- NzbDrone.Core/NzbDrone.Core.csproj | 2 + NzbDrone.Core/ThingiProvider/IProvider.cs | 15 ++++-- .../ThingiProvider/ProviderService.cs | 23 ++------- 17 files changed, 199 insertions(+), 107 deletions(-) create mode 100644 NzbDrone.Core.Test/Datastore/Converters/ProviderSettingConverterFixture.cs create mode 100644 NzbDrone.Core/Datastore/Converters/ProviderSettingConverter.cs create mode 100644 NzbDrone.Core/Datastore/Migration/023_add_config_contract_to_indexers.cs diff --git a/NzbDrone.Api.Test/ClientSchemaTests/SchemaBuilderFixture.cs b/NzbDrone.Api.Test/ClientSchemaTests/SchemaBuilderFixture.cs index bf3d72d11..385a9b989 100644 --- a/NzbDrone.Api.Test/ClientSchemaTests/SchemaBuilderFixture.cs +++ b/NzbDrone.Api.Test/ClientSchemaTests/SchemaBuilderFixture.cs @@ -12,7 +12,7 @@ namespace NzbDrone.Api.Test.ClientSchemaTests [Test] public void should_return_field_for_every_property() { - var schema = SchemaBuilder.GenerateSchema(new TestModel()); + var schema = SchemaBuilder.ToSchema(new TestModel()); schema.Should().HaveCount(2); } @@ -26,7 +26,7 @@ namespace NzbDrone.Api.Test.ClientSchemaTests LastName = "Poop" }; - var schema = SchemaBuilder.GenerateSchema(model); + var schema = SchemaBuilder.ToSchema(model); schema.Should().Contain(c => c.Order == 1 && c.Name == "LastName" && c.Label == "Last Name" && c.HelpText == "Your Last Name" && (string) c.Value == "Poop"); schema.Should().Contain(c => c.Order == 0 && c.Name == "FirstName" && c.Label == "First Name" && c.HelpText == "Your First Name" && (string) c.Value == "Bob"); diff --git a/NzbDrone.Api/ClientSchema/SchemaBuilder.cs b/NzbDrone.Api/ClientSchema/SchemaBuilder.cs index 99b2c6d15..1393387bc 100644 --- a/NzbDrone.Api/ClientSchema/SchemaBuilder.cs +++ b/NzbDrone.Api/ClientSchema/SchemaBuilder.cs @@ -1,6 +1,8 @@ using System; using System.Collections.Generic; using System.Linq; +using NzbDrone.Common; +using NzbDrone.Common.EnsureThat; using NzbDrone.Common.Reflection; using NzbDrone.Core.Annotations; @@ -8,8 +10,10 @@ namespace NzbDrone.Api.ClientSchema { public static class SchemaBuilder { - public static List GenerateSchema(object model) + public static List ToSchema(object model) { + Ensure.That(() => model).IsNotNull(); + var properties = model.GetType().GetSimpleProperties(); var result = new List(properties.Count); @@ -50,10 +54,53 @@ namespace NzbDrone.Api.ClientSchema } + + public static object ReadFormSchema(List fields, Type targetType) + { + var properties = targetType.GetSimpleProperties(); + + var target = Activator.CreateInstance(targetType); + + foreach (var propertyInfo in properties) + { + var fieldAttribute = propertyInfo.GetAttribute(false); + + if (fieldAttribute != null) + { + var field = fields.Find(f => f.Name == propertyInfo.Name); + + if (propertyInfo.PropertyType == typeof(Int32)) + { + var intValue = Convert.ToInt32(field.Value); + propertyInfo.SetValue(target, intValue, null); + } + + else if (propertyInfo.PropertyType == typeof(Nullable)) + { + var intValue = field.Value.ToString().ParseInt32(); + propertyInfo.SetValue(target, intValue, null); + } + + else + { + propertyInfo.SetValue(target, field.Value, null); + } + } + } + + return target; + + } + + public static T ReadFormSchema(List fields) + { + return (T)ReadFormSchema(fields, typeof (T)); + } + private static List GetSelectOptions(Type selectOptions) { var options = from Enum e in Enum.GetValues(selectOptions) - select new SelectOption { Value = Convert.ToInt32(e), Name = e.ToString() }; + select new SelectOption { Value = Convert.ToInt32(e), Name = e.ToString() }; return options.OrderBy(o => o.Value).ToList(); } diff --git a/NzbDrone.Api/ClientSchema/SchemaDeserializer.cs b/NzbDrone.Api/ClientSchema/SchemaDeserializer.cs index 9985ffb49..36d2a68e8 100644 --- a/NzbDrone.Api/ClientSchema/SchemaDeserializer.cs +++ b/NzbDrone.Api/ClientSchema/SchemaDeserializer.cs @@ -8,38 +8,6 @@ namespace NzbDrone.Api.ClientSchema { public static class SchemaDeserializer { - public static T DeserializeSchema(T model, List fields) - { - var properties = model.GetType().GetSimpleProperties(); - - foreach (var propertyInfo in properties) - { - var fieldAttribute = propertyInfo.GetAttribute(false); - - if (fieldAttribute != null) - { - var field = fields.Find(f => f.Name == propertyInfo.Name); - - if (propertyInfo.PropertyType == typeof (Int32)) - { - var intValue = Convert.ToInt32(field.Value); - propertyInfo.SetValue(model, intValue, null); - } - - else if (propertyInfo.PropertyType == typeof(Nullable)) - { - var intValue = field.Value.ToString().ParseInt32(); - propertyInfo.SetValue(model, intValue, null); - } - - else - { - propertyInfo.SetValue(model, field.Value, null); - } - } - } - - return model; - } + } } \ No newline at end of file diff --git a/NzbDrone.Api/Indexers/IndexerModule.cs b/NzbDrone.Api/Indexers/IndexerModule.cs index cd5ed90c0..531a7dee8 100644 --- a/NzbDrone.Api/Indexers/IndexerModule.cs +++ b/NzbDrone.Api/Indexers/IndexerModule.cs @@ -1,5 +1,6 @@ using System.Collections.Generic; using NzbDrone.Api.ClientSchema; +using NzbDrone.Common.Reflection; using NzbDrone.Core.Indexers; using NzbDrone.Core.ThingiProvider; using Omu.ValueInjecter; @@ -35,15 +36,15 @@ namespace NzbDrone.Api.Indexers private List GetAll() { - var indexers = _indexerService.All(); + var indexerDefinitions = _indexerService.All(); - var result = new List(indexers.Count); + var result = new List(indexerDefinitions.Count); - foreach (var indexer in indexers) + foreach (var definition in indexerDefinitions) { var indexerResource = new IndexerResource(); - indexerResource.InjectFrom(indexer); - indexerResource.Fields = SchemaBuilder.GenerateSchema(indexer.Settings); + indexerResource.InjectFrom(definition); + indexerResource.Fields = SchemaBuilder.ToSchema(definition.Settings); result.Add(indexerResource); } @@ -53,14 +54,14 @@ namespace NzbDrone.Api.Indexers private int CreateIndexer(IndexerResource indexerResource) { - var indexer = GetIndexer(indexerResource); + var indexer = GetDefinition(indexerResource); indexer = _indexerService.Create(indexer); return indexer.Id; } private void UpdateIndexer(IndexerResource indexerResource) { - var indexer = GetIndexer(indexerResource); + var indexer = GetDefinition(indexerResource); ValidateIndexer(indexer.Settings); @@ -78,12 +79,16 @@ namespace NzbDrone.Api.Indexers } } - private IndexerDefinition GetIndexer(IndexerResource indexerResource) + private IndexerDefinition GetDefinition(IndexerResource indexerResource) { var definition = new IndexerDefinition(); definition.InjectFrom(indexerResource); + + var configContract = ReflectionExtensions.CoreAssembly.FindTypeByName(definition.ConfigContract); + definition.Settings = (IProviderConfig)SchemaBuilder.ReadFormSchema(indexerResource.Fields, configContract); + if (indexerResource.Enable) { ValidateIndexer(definition.Settings); diff --git a/NzbDrone.Api/Indexers/IndexerSchemaModule.cs b/NzbDrone.Api/Indexers/IndexerSchemaModule.cs index 9fe425cf0..8d9b09f2a 100644 --- a/NzbDrone.Api/Indexers/IndexerSchemaModule.cs +++ b/NzbDrone.Api/Indexers/IndexerSchemaModule.cs @@ -1,5 +1,6 @@ using System.Collections.Generic; using NzbDrone.Api.ClientSchema; +using NzbDrone.Api.Mapping; using NzbDrone.Core.Indexers; using Omu.ValueInjecter; @@ -18,6 +19,9 @@ namespace NzbDrone.Api.Indexers private List GetSchema() { + + var indexers = _indexerService.All().InjectTo>(); + /* var indexers = _indexerService.Schema(); var result = new List(indexers.Count); @@ -33,7 +37,7 @@ namespace NzbDrone.Api.Indexers return result;*/ - return null; + return indexers; } } } \ No newline at end of file diff --git a/NzbDrone.Api/Notifications/NotificationModule.cs b/NzbDrone.Api/Notifications/NotificationModule.cs index bc7ca8aac..c8be13f67 100644 --- a/NzbDrone.Api/Notifications/NotificationModule.cs +++ b/NzbDrone.Api/Notifications/NotificationModule.cs @@ -4,6 +4,7 @@ using System.Linq; using NzbDrone.Api.ClientSchema; using NzbDrone.Api.Mapping; using NzbDrone.Api.REST; +using NzbDrone.Common.Reflection; using NzbDrone.Core.Notifications; using Omu.ValueInjecter; @@ -39,7 +40,7 @@ namespace NzbDrone.Api.Notifications { var notificationResource = new NotificationResource(); notificationResource.InjectFrom(notification); - notificationResource.Fields = SchemaBuilder.GenerateSchema(notification.Settings); + notificationResource.Fields = SchemaBuilder.ToSchema(notification.Settings); notificationResource.TestCommand = String.Format("test{0}", notification.Implementation.ToLowerInvariant()); result.Add(notificationResource); @@ -79,7 +80,10 @@ namespace NzbDrone.Api.Notifications } notification.InjectFrom(notificationResource); - notification.Settings = SchemaDeserializer.DeserializeSchema(notification.Settings, notificationResource.Fields); + + //var configType = ReflectionExtensions.CoreAssembly.FindTypeByName(notification) + + //notification.Settings = SchemaBuilder.ReadFormSchema(notification.Settings, notificationResource.Fields); return notification; } diff --git a/NzbDrone.Api/Notifications/NotificationSchemaModule.cs b/NzbDrone.Api/Notifications/NotificationSchemaModule.cs index d347e343c..68a5bd594 100644 --- a/NzbDrone.Api/Notifications/NotificationSchemaModule.cs +++ b/NzbDrone.Api/Notifications/NotificationSchemaModule.cs @@ -28,7 +28,7 @@ namespace NzbDrone.Api.Notifications { var notificationResource = new NotificationResource(); notificationResource.InjectFrom(notification); - notificationResource.Fields = SchemaBuilder.GenerateSchema(notification.Settings); + notificationResource.Fields = SchemaBuilder.ToSchema(notification.Settings); notificationResource.TestCommand = String.Format("test{0}", notification.Implementation.ToLowerInvariant()); result.Add(notificationResource); diff --git a/NzbDrone.Common/Reflection/ReflectionExtensions.cs b/NzbDrone.Common/Reflection/ReflectionExtensions.cs index 98ff9ff12..0c70d0c42 100644 --- a/NzbDrone.Common/Reflection/ReflectionExtensions.cs +++ b/NzbDrone.Common/Reflection/ReflectionExtensions.cs @@ -7,6 +7,8 @@ namespace NzbDrone.Common.Reflection { public static class ReflectionExtensions { + public static readonly Assembly CoreAssembly = Assembly.Load("NzbDrone.Core"); + public static List GetSimpleProperties(this Type type) { var properties = type.GetProperties(); @@ -58,6 +60,11 @@ namespace NzbDrone.Common.Reflection return (T)attribute; } + public static Type FindTypeByName(this Assembly assembly, string name) + { + return assembly.GetTypes().Single(c => c.Name.Equals(name, StringComparison.InvariantCultureIgnoreCase)); + } + public static bool HasAttribute(this Type type) { return type.GetCustomAttributes(typeof(TAttribute), true).Any(); diff --git a/NzbDrone.Core.Test/Datastore/Converters/ProviderSettingConverterFixture.cs b/NzbDrone.Core.Test/Datastore/Converters/ProviderSettingConverterFixture.cs new file mode 100644 index 000000000..9aafbee73 --- /dev/null +++ b/NzbDrone.Core.Test/Datastore/Converters/ProviderSettingConverterFixture.cs @@ -0,0 +1,39 @@ +using System; +using FluentAssertions; +using Marr.Data.Converters; +using NUnit.Framework; +using NzbDrone.Core.Datastore.Converters; +using NzbDrone.Core.Test.Framework; +using NzbDrone.Core.ThingiProvider; + +namespace NzbDrone.Core.Test.Datastore.Converters +{ + [TestFixture] + public class ProviderSettingConverterFixture : CoreTest + { + [Test] + public void should_return_null_config_if_config_is_null() + { + var result = Subject.FromDB(new ConverterContext() + { + DbValue = DBNull.Value + }); + + + result.Should().Be(NullConfig.Instance); + } + + [TestCase(null)] + [TestCase("")] + public void should_return_null_config_if_config_is_empty(object dbValue) + { + var result = Subject.FromDB(new ConverterContext() + { + DbValue = dbValue + }); + + + result.Should().Be(NullConfig.Instance); + } + } +} \ No newline at end of file diff --git a/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj b/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj index 430b4d934..39bda7be4 100644 --- a/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj +++ b/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj @@ -102,6 +102,7 @@ + diff --git a/NzbDrone.Core/Datastore/Converters/EmbeddedDocumentConverter.cs b/NzbDrone.Core/Datastore/Converters/EmbeddedDocumentConverter.cs index 89b2ecea1..e144d4cf4 100644 --- a/NzbDrone.Core/Datastore/Converters/EmbeddedDocumentConverter.cs +++ b/NzbDrone.Core/Datastore/Converters/EmbeddedDocumentConverter.cs @@ -1,42 +1,10 @@ using System; -using System.Linq; using Marr.Data.Converters; using Marr.Data.Mapping; using NzbDrone.Common.Serializer; -using NzbDrone.Core.ThingiProvider; namespace NzbDrone.Core.Datastore.Converters { - - public class ProviderSettingConverter : EmbeddedDocumentConverter - { - public override object FromDB(ConverterContext context) - { - if (context.DbValue == DBNull.Value) - { - return DBNull.Value; - } - - var stringValue = (string)context.DbValue; - - if (string.IsNullOrWhiteSpace(stringValue)) - { - return null; - } - - var ordinal = context.DataRecord.GetOrdinal("ConfigContract"); - - var implementation = context.DataRecord.GetString(ordinal); - - - var impType = typeof(IProviderConfig).Assembly.GetTypes().Single(c => c.Name == implementation); - - return Json.Deserialize(stringValue, impType); - } - - } - - public class EmbeddedDocumentConverter : IConverter { public virtual object FromDB(ConverterContext context) diff --git a/NzbDrone.Core/Datastore/Converters/ProviderSettingConverter.cs b/NzbDrone.Core/Datastore/Converters/ProviderSettingConverter.cs new file mode 100644 index 000000000..8e83938a9 --- /dev/null +++ b/NzbDrone.Core/Datastore/Converters/ProviderSettingConverter.cs @@ -0,0 +1,36 @@ +using System; +using Marr.Data.Converters; +using NzbDrone.Common.Reflection; +using NzbDrone.Common.Serializer; +using NzbDrone.Core.ThingiProvider; + +namespace NzbDrone.Core.Datastore.Converters +{ + public class ProviderSettingConverter : EmbeddedDocumentConverter + { + public override object FromDB(ConverterContext context) + { + if (context.DbValue == DBNull.Value) + { + return NullConfig.Instance; + } + + var stringValue = (string)context.DbValue; + + if (string.IsNullOrWhiteSpace(stringValue)) + { + return NullConfig.Instance; + } + + var ordinal = context.DataRecord.GetOrdinal("ConfigContract"); + + var implementation = context.DataRecord.GetString(ordinal); + + + var impType = typeof (IProviderConfig).Assembly.FindTypeByName(implementation); + + return Json.Deserialize(stringValue, impType); + } + + } +} \ No newline at end of file diff --git a/NzbDrone.Core/Datastore/Migration/023_add_config_contract_to_indexers.cs b/NzbDrone.Core/Datastore/Migration/023_add_config_contract_to_indexers.cs new file mode 100644 index 000000000..cf2153605 --- /dev/null +++ b/NzbDrone.Core/Datastore/Migration/023_add_config_contract_to_indexers.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Data; +using FluentMigrator; +using NzbDrone.Common.Serializer; +using NzbDrone.Core.Datastore.Migration.Framework; + +namespace NzbDrone.Core.Datastore.Migration +{ + [Migration(23)] + public class add_config_contract_to_indexers : NzbDroneMigrationBase + { + protected override void MainDbUpgrade() + { + Update.Table("Indexers").Set(new { ConfigContract = "NewznabSettings" }).Where(new { Implementation = "Newznab" }); + Update.Table("Indexers").Set(new { ConfigContract = "OmgwtfnzbsSettings" }).Where(new { Implementation = "Omgwtfnzbs" }); + Update.Table("Indexers").Set(new { ConfigContract = "NullConfig" }).Where(new { Implementation = "Wombles" }); + Update.Table("Indexers").Set(new { ConfigContract = "NullConfig" }).Where(new { Implementation = "Eztv" }); + + Delete.FromTable("Indexers").IsNull("ConfigContract"); + } + } +} diff --git a/NzbDrone.Core/Indexers/IndexerService.cs b/NzbDrone.Core/Indexers/IndexerService.cs index dd1b9aca9..70e845747 100644 --- a/NzbDrone.Core/Indexers/IndexerService.cs +++ b/NzbDrone.Core/Indexers/IndexerService.cs @@ -10,7 +10,7 @@ namespace NzbDrone.Core.Indexers } - public class IndexerService : ProviderFactory + public class IndexerService : ProviderFactory, IIndexerService { private readonly IIndexerRepository _providerRepository; private readonly IEnumerable _providers; diff --git a/NzbDrone.Core/NzbDrone.Core.csproj b/NzbDrone.Core/NzbDrone.Core.csproj index 8cdb8a182..5956274e0 100644 --- a/NzbDrone.Core/NzbDrone.Core.csproj +++ b/NzbDrone.Core/NzbDrone.Core.csproj @@ -140,6 +140,7 @@ + @@ -172,6 +173,7 @@ + diff --git a/NzbDrone.Core/ThingiProvider/IProvider.cs b/NzbDrone.Core/ThingiProvider/IProvider.cs index 7baeb4bc7..c3308316e 100644 --- a/NzbDrone.Core/ThingiProvider/IProvider.cs +++ b/NzbDrone.Core/ThingiProvider/IProvider.cs @@ -38,23 +38,28 @@ namespace NzbDrone.Core.ThingiProvider public abstract class ProviderDefinition : ModelBase { + private IProviderConfig _settings; public string Name { get; set; } public string Implementation { get; set; } public bool Enable { get; set; } - public string ConfigContract + public string ConfigContract { get; set; } + + public IProviderConfig Settings { get { - if (Settings == null) return null; - return Settings.GetType().Name; + return _settings; } set { + _settings = value; + if (value != null) + { + ConfigContract = value.GetType().Name; + } } } - - public IProviderConfig Settings { get; set; } } public interface IProviderConfig diff --git a/NzbDrone.Core/ThingiProvider/ProviderService.cs b/NzbDrone.Core/ThingiProvider/ProviderService.cs index c09a1d79c..b56f6cac3 100644 --- a/NzbDrone.Core/ThingiProvider/ProviderService.cs +++ b/NzbDrone.Core/ThingiProvider/ProviderService.cs @@ -14,7 +14,6 @@ namespace NzbDrone.Core.ThingiProvider List All(); List GetAvailableProviders(); TProviderDefinition Get(int id); - //List Schema(); TProviderDefinition Create(TProviderDefinition indexer); void Update(TProviderDefinition indexer); void Delete(int id); @@ -52,22 +51,6 @@ namespace NzbDrone.Core.ThingiProvider return _providerRepository.Get(id); } - /* public List Schema() - { - var indexers = new List(); - - var newznab = new Indexer(); - newznab.Instance = new Newznab.Newznab(); - newznab.Id = 1; - newznab.Name = "Newznab"; - newznab.Settings = new NewznabSettings(); - newznab.Implementation = "Newznab"; - - indexers.Add(newznab); - - return indexers; - }*/ - public TProviderDefinition Create(TProviderDefinition provider) { return _providerRepository.Insert(provider); @@ -113,10 +96,10 @@ namespace NzbDrone.Core.ThingiProvider { var storedProvider = _providerRepository.All(); - foreach (var providerDefinition in storedProvider.Where(i => GetImplementation(i) == null)) + foreach (var invalidDefinition in storedProvider.Where(def => GetImplementation(def) == null)) { - _logger.Debug("Removing {0} ", providerDefinition.Name); - _providerRepository.Delete(providerDefinition); + _logger.Debug("Removing {0} ", invalidDefinition.Name); + _providerRepository.Delete(invalidDefinition); } } } From 4f9b745e7021d404e12f4e65cf479d149f63a43f Mon Sep 17 00:00:00 2001 From: "kay.one" Date: Sun, 22 Sep 2013 17:27:00 -0700 Subject: [PATCH 11/52] fixed schema support for indexers --- NzbDrone.Api/Indexers/IndexerModule.cs | 13 +++++----- NzbDrone.Api/Indexers/IndexerSchemaModule.cs | 25 ++++++++----------- .../ThingiProvider/ProviderService.cs | 12 +++++++++ 3 files changed, 29 insertions(+), 21 deletions(-) diff --git a/NzbDrone.Api/Indexers/IndexerModule.cs b/NzbDrone.Api/Indexers/IndexerModule.cs index 531a7dee8..5776a14b0 100644 --- a/NzbDrone.Api/Indexers/IndexerModule.cs +++ b/NzbDrone.Api/Indexers/IndexerModule.cs @@ -63,15 +63,17 @@ namespace NzbDrone.Api.Indexers { var indexer = GetDefinition(indexerResource); - ValidateIndexer(indexer.Settings); + ValidateIndexer(indexer); _indexerService.Update(indexer); } - private static void ValidateIndexer(IProviderConfig config) + private static void ValidateIndexer(ProviderDefinition definition) { - var validationResult = config.Validate(); + if (!definition.Enable) return; + + var validationResult = definition.Settings.Validate(); if (!validationResult.IsValid) { @@ -89,10 +91,7 @@ namespace NzbDrone.Api.Indexers var configContract = ReflectionExtensions.CoreAssembly.FindTypeByName(definition.ConfigContract); definition.Settings = (IProviderConfig)SchemaBuilder.ReadFormSchema(indexerResource.Fields, configContract); - if (indexerResource.Enable) - { - ValidateIndexer(definition.Settings); - } + ValidateIndexer(definition); return definition; } diff --git a/NzbDrone.Api/Indexers/IndexerSchemaModule.cs b/NzbDrone.Api/Indexers/IndexerSchemaModule.cs index 8d9b09f2a..368af9383 100644 --- a/NzbDrone.Api/Indexers/IndexerSchemaModule.cs +++ b/NzbDrone.Api/Indexers/IndexerSchemaModule.cs @@ -1,6 +1,6 @@ using System.Collections.Generic; +using System.Linq; using NzbDrone.Api.ClientSchema; -using NzbDrone.Api.Mapping; using NzbDrone.Core.Indexers; using Omu.ValueInjecter; @@ -20,24 +20,21 @@ namespace NzbDrone.Api.Indexers private List GetSchema() { - var indexers = _indexerService.All().InjectTo>(); + var indexers = _indexerService.Templates().Where(c => c.Implementation =="Newznab"); - /* var indexers = _indexerService.Schema(); - var result = new List(indexers.Count); + var result = new List(indexers.Count()); - foreach (var indexer in indexers) - { - var indexerResource = new IndexerResource(); - indexerResource.InjectFrom(indexer); - indexerResource.Fields = SchemaBuilder.GenerateSchema(indexer.Settings); + foreach (var indexer in indexers) + { + var indexerResource = new IndexerResource(); + indexerResource.InjectFrom(indexer); + indexerResource.Fields = SchemaBuilder.ToSchema(indexer.Settings); - result.Add(indexerResource); - } + result.Add(indexerResource); + } - return result;*/ - - return indexers; + return result; } } } \ No newline at end of file diff --git a/NzbDrone.Core/ThingiProvider/ProviderService.cs b/NzbDrone.Core/ThingiProvider/ProviderService.cs index b56f6cac3..9869f9679 100644 --- a/NzbDrone.Core/ThingiProvider/ProviderService.cs +++ b/NzbDrone.Core/ThingiProvider/ProviderService.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using NLog; +using NzbDrone.Common.Reflection; using NzbDrone.Core.Lifecycle; using NzbDrone.Core.Messaging.Events; @@ -17,6 +18,7 @@ namespace NzbDrone.Core.ThingiProvider TProviderDefinition Create(TProviderDefinition indexer); void Update(TProviderDefinition indexer); void Delete(int id); + List Templates(); } public abstract class ProviderFactory : IProviderFactory, IHandle @@ -40,6 +42,16 @@ namespace NzbDrone.Core.ThingiProvider return _providerRepository.All().ToList(); } + public List Templates() + { + return _providers.Select(p => new TProviderDefinition() + { + ConfigContract = p.ConfigContract.Name, + Implementation = p.GetType().Name, + Settings = (IProviderConfig)Activator.CreateInstance(ReflectionExtensions.CoreAssembly.FindTypeByName(p.ConfigContract.Name)) + }).ToList(); + } + public List GetAvailableProviders() { return All().Where(c => c.Enable && c.Settings.Validate().IsValid) From eaed756655adc11fdd0c44af0e351c5299803c49 Mon Sep 17 00:00:00 2001 From: kayone Date: Tue, 24 Sep 2013 16:42:55 -0700 Subject: [PATCH 12/52] created ProviderModuleBase --- NzbDrone.Api/IndexerResource.cs | 16 +++ NzbDrone.Api/Indexers/IndexerModule.cs | 100 +------------ NzbDrone.Api/Indexers/IndexerSchemaModule.cs | 8 +- NzbDrone.Api/NzbDrone.Api.csproj | 2 + NzbDrone.Api/ProviderModuleBase.cs | 133 ++++++++++++++++++ NzbDrone.App.Test/ContainerFixture.cs | 2 +- .../IndexerTests/IndexerServiceFixture.cs | 2 +- .../IndexerSearch/NzbSearchService.cs | 8 +- .../Indexers/FetchAndParseRssService.cs | 8 +- .../{IndexerService.cs => IndexerFactory.cs} | 6 +- NzbDrone.Core/NzbDrone.Core.csproj | 2 +- 11 files changed, 173 insertions(+), 114 deletions(-) create mode 100644 NzbDrone.Api/IndexerResource.cs create mode 100644 NzbDrone.Api/ProviderModuleBase.cs rename NzbDrone.Core/Indexers/{IndexerService.cs => IndexerFactory.cs} (82%) diff --git a/NzbDrone.Api/IndexerResource.cs b/NzbDrone.Api/IndexerResource.cs new file mode 100644 index 000000000..65c5bad64 --- /dev/null +++ b/NzbDrone.Api/IndexerResource.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using NzbDrone.Api.ClientSchema; +using NzbDrone.Api.REST; + +namespace NzbDrone.Api +{ + public class ProviderResource : RestResource + { + public Boolean Enable { get; set; } + public String Name { get; set; } + public List Fields { get; set; } + public String Implementation { get; set; } + public String ConfigContract { get; set; } + } +} \ No newline at end of file diff --git a/NzbDrone.Api/Indexers/IndexerModule.cs b/NzbDrone.Api/Indexers/IndexerModule.cs index 5776a14b0..52b38fe7d 100644 --- a/NzbDrone.Api/Indexers/IndexerModule.cs +++ b/NzbDrone.Api/Indexers/IndexerModule.cs @@ -1,104 +1,12 @@ -using System.Collections.Generic; -using NzbDrone.Api.ClientSchema; -using NzbDrone.Common.Reflection; -using NzbDrone.Core.Indexers; -using NzbDrone.Core.ThingiProvider; -using Omu.ValueInjecter; -using FluentValidation; -using NzbDrone.Api.Mapping; +using NzbDrone.Core.Indexers; namespace NzbDrone.Api.Indexers { - public class IndexerModule : NzbDroneRestModule + public class IndexerModule : ProviderModuleBase { - private readonly IIndexerService _indexerService; - - public IndexerModule(IIndexerService indexerService) - { - _indexerService = indexerService; - GetResourceAll = GetAll; - GetResourceById = GetIndexer; - CreateResource = CreateIndexer; - UpdateResource = UpdateIndexer; - DeleteResource = DeleteIndexer; - - - SharedValidator.RuleFor(c => c.Name).NotEmpty(); - SharedValidator.RuleFor(c => c.Implementation).NotEmpty(); - - PostValidator.RuleFor(c => c.Fields).NotEmpty(); - } - - private IndexerResource GetIndexer(int id) - { - return _indexerService.Get(id).InjectTo(); - } - - private List GetAll() - { - var indexerDefinitions = _indexerService.All(); - - var result = new List(indexerDefinitions.Count); - - foreach (var definition in indexerDefinitions) - { - var indexerResource = new IndexerResource(); - indexerResource.InjectFrom(definition); - indexerResource.Fields = SchemaBuilder.ToSchema(definition.Settings); - - result.Add(indexerResource); - } - - return result; - } - - private int CreateIndexer(IndexerResource indexerResource) - { - var indexer = GetDefinition(indexerResource); - indexer = _indexerService.Create(indexer); - return indexer.Id; - } - - private void UpdateIndexer(IndexerResource indexerResource) - { - var indexer = GetDefinition(indexerResource); - - ValidateIndexer(indexer); - - _indexerService.Update(indexer); - } - - - private static void ValidateIndexer(ProviderDefinition definition) - { - if (!definition.Enable) return; - - var validationResult = definition.Settings.Validate(); - - if (!validationResult.IsValid) - { - throw new ValidationException(validationResult.Errors); - } - } - - private IndexerDefinition GetDefinition(IndexerResource indexerResource) - { - - var definition = new IndexerDefinition(); - - definition.InjectFrom(indexerResource); - - var configContract = ReflectionExtensions.CoreAssembly.FindTypeByName(definition.ConfigContract); - definition.Settings = (IProviderConfig)SchemaBuilder.ReadFormSchema(indexerResource.Fields, configContract); - - ValidateIndexer(definition); - - return definition; - } - - private void DeleteIndexer(int id) + public IndexerModule(IndexerFactory indexerFactory) + : base(indexerFactory) { - _indexerService.Delete(id); } } } \ No newline at end of file diff --git a/NzbDrone.Api/Indexers/IndexerSchemaModule.cs b/NzbDrone.Api/Indexers/IndexerSchemaModule.cs index 368af9383..a0312bdc4 100644 --- a/NzbDrone.Api/Indexers/IndexerSchemaModule.cs +++ b/NzbDrone.Api/Indexers/IndexerSchemaModule.cs @@ -8,19 +8,19 @@ namespace NzbDrone.Api.Indexers { public class IndexerSchemaModule : NzbDroneRestModule { - private readonly IIndexerService _indexerService; + private readonly IIndexerFactory _indexerFactory; - public IndexerSchemaModule(IIndexerService indexerService) + public IndexerSchemaModule(IIndexerFactory indexerFactory) : base("indexer/schema") { - _indexerService = indexerService; + _indexerFactory = indexerFactory; GetResourceAll = GetSchema; } private List GetSchema() { - var indexers = _indexerService.Templates().Where(c => c.Implementation =="Newznab"); + var indexers = _indexerFactory.Templates().Where(c => c.Implementation =="Newznab"); var result = new List(indexers.Count()); diff --git a/NzbDrone.Api/NzbDrone.Api.csproj b/NzbDrone.Api/NzbDrone.Api.csproj index b88c2277d..8c8493ad3 100644 --- a/NzbDrone.Api/NzbDrone.Api.csproj +++ b/NzbDrone.Api/NzbDrone.Api.csproj @@ -109,6 +109,8 @@ + + diff --git a/NzbDrone.Api/ProviderModuleBase.cs b/NzbDrone.Api/ProviderModuleBase.cs new file mode 100644 index 000000000..a56891a68 --- /dev/null +++ b/NzbDrone.Api/ProviderModuleBase.cs @@ -0,0 +1,133 @@ +using System.Collections.Generic; +using System.Linq; +using FluentValidation; +using Nancy; +using NzbDrone.Api.ClientSchema; +using NzbDrone.Api.Extensions; +using NzbDrone.Api.Indexers; +using NzbDrone.Api.Mapping; +using NzbDrone.Common.Reflection; +using NzbDrone.Core.ThingiProvider; +using Omu.ValueInjecter; + +namespace NzbDrone.Api +{ + public abstract class ProviderModuleBase : NzbDroneRestModule + where TProviderDefinition : ProviderDefinition, new() + where TProvider : IProvider + where TProviderResource : ProviderResource, new() + { + private readonly IProviderFactory _providerFactory; + + protected ProviderModuleBase(IProviderFactory providerFactory) + { + _providerFactory = providerFactory; + Get["templates"] = x => GetTemplates(); + GetResourceAll = GetAll; + GetResourceById = GetProviderById; + CreateResource = CreateProvider; + UpdateResource = UpdateProvider; + DeleteResource = DeleteProvider; + + + + SharedValidator.RuleFor(c => c.Name).NotEmpty(); + SharedValidator.RuleFor(c => c.Implementation).NotEmpty(); + SharedValidator.RuleFor(c => c.ConfigContract).NotEmpty(); + + PostValidator.RuleFor(c => c.Fields).NotEmpty(); + } + + private TProviderResource GetProviderById(int id) + { + return _providerFactory.Get(id).InjectTo(); + } + + private List GetAll() + { + var indexerDefinitions = _providerFactory.All(); + + var result = new List(indexerDefinitions.Count); + + foreach (var definition in indexerDefinitions) + { + var indexerResource = new TProviderResource(); + indexerResource.InjectFrom(definition); + indexerResource.Fields = SchemaBuilder.ToSchema(definition.Settings); + + result.Add(indexerResource); + } + + return result; + } + + private int CreateProvider(TProviderResource indexerResource) + { + var indexer = GetDefinition(indexerResource); + indexer = _providerFactory.Create(indexer); + return indexer.Id; + } + + private void UpdateProvider(TProviderResource indexerResource) + { + var indexer = GetDefinition(indexerResource); + + ValidateIndexer(indexer); + + _providerFactory.Update(indexer); + } + + + private static void ValidateIndexer(ProviderDefinition definition) + { + if (!definition.Enable) return; + + var validationResult = definition.Settings.Validate(); + + if (!validationResult.IsValid) + { + throw new ValidationException(validationResult.Errors); + } + } + + private TProviderDefinition GetDefinition(TProviderResource indexerResource) + { + + var definition = new TProviderDefinition(); + + definition.InjectFrom(indexerResource); + + var configContract = ReflectionExtensions.CoreAssembly.FindTypeByName(definition.ConfigContract); + definition.Settings = (IProviderConfig)SchemaBuilder.ReadFormSchema(indexerResource.Fields, configContract); + + ValidateIndexer(definition); + + return definition; + } + + private void DeleteProvider(int id) + { + _providerFactory.Delete(id); + } + + private Response GetTemplates() + { + + var indexers = _providerFactory.Templates(); + + + var result = new List(indexers.Count()); + + foreach (var indexer in indexers) + { + var indexerResource = new IndexerResource(); + indexerResource.InjectFrom(indexer); + indexerResource.Fields = SchemaBuilder.ToSchema(indexer.Settings); + + result.Add(indexerResource); + } + + return result.AsResponse(); + } + } +} \ No newline at end of file diff --git a/NzbDrone.App.Test/ContainerFixture.cs b/NzbDrone.App.Test/ContainerFixture.cs index 14a35688d..a165f9348 100644 --- a/NzbDrone.App.Test/ContainerFixture.cs +++ b/NzbDrone.App.Test/ContainerFixture.cs @@ -37,7 +37,7 @@ namespace NzbDrone.App.Test { var factory = MainAppContainerBuilder.BuildContainer(args).Resolve(); - factory.Build().Should().NotBeNull(); + factory.Build().Should().NotBeNull(); } [Test] diff --git a/NzbDrone.Core.Test/IndexerTests/IndexerServiceFixture.cs b/NzbDrone.Core.Test/IndexerTests/IndexerServiceFixture.cs index 6ac94cc81..2012921f0 100644 --- a/NzbDrone.Core.Test/IndexerTests/IndexerServiceFixture.cs +++ b/NzbDrone.Core.Test/IndexerTests/IndexerServiceFixture.cs @@ -13,7 +13,7 @@ using NzbDrone.Core.Test.Framework; namespace NzbDrone.Core.Test.IndexerTests { - public class IndexerServiceFixture : DbTest + public class IndexerServiceFixture : DbTest { private List _indexers; diff --git a/NzbDrone.Core/IndexerSearch/NzbSearchService.cs b/NzbDrone.Core/IndexerSearch/NzbSearchService.cs index e79f3cedd..96b52e8cf 100644 --- a/NzbDrone.Core/IndexerSearch/NzbSearchService.cs +++ b/NzbDrone.Core/IndexerSearch/NzbSearchService.cs @@ -24,7 +24,7 @@ namespace NzbDrone.Core.IndexerSearch public class NzbSearchService : ISearchForNzb { - private readonly IIndexerService _indexerService; + private readonly IIndexerFactory _indexerFactory; private readonly IFetchFeedFromIndexers _feedFetcher; private readonly ISceneMappingService _sceneMapping; private readonly ISeriesService _seriesService; @@ -32,7 +32,7 @@ namespace NzbDrone.Core.IndexerSearch private readonly IMakeDownloadDecision _makeDownloadDecision; private readonly Logger _logger; - public NzbSearchService(IIndexerService indexerService, + public NzbSearchService(IIndexerFactory indexerFactory, IFetchFeedFromIndexers feedFetcher, ISceneMappingService sceneMapping, ISeriesService seriesService, @@ -40,7 +40,7 @@ namespace NzbDrone.Core.IndexerSearch IMakeDownloadDecision makeDownloadDecision, Logger logger) { - _indexerService = indexerService; + _indexerFactory = indexerFactory; _feedFetcher = feedFetcher; _sceneMapping = sceneMapping; _seriesService = seriesService; @@ -132,7 +132,7 @@ namespace NzbDrone.Core.IndexerSearch private List Dispatch(Func> searchAction, SearchCriteriaBase criteriaBase) { - var indexers = _indexerService.GetAvailableProviders().ToList(); + var indexers = _indexerFactory.GetAvailableProviders().ToList(); var reports = new List(); _logger.ProgressInfo("Searching {0} indexers for {1}", indexers.Count, criteriaBase); diff --git a/NzbDrone.Core/Indexers/FetchAndParseRssService.cs b/NzbDrone.Core/Indexers/FetchAndParseRssService.cs index f153311fb..534668b6b 100644 --- a/NzbDrone.Core/Indexers/FetchAndParseRssService.cs +++ b/NzbDrone.Core/Indexers/FetchAndParseRssService.cs @@ -14,13 +14,13 @@ namespace NzbDrone.Core.Indexers public class FetchAndParseRssService : IFetchAndParseRss { - private readonly IIndexerService _indexerService; + private readonly IIndexerFactory _indexerFactory; private readonly IFetchFeedFromIndexers _feedFetcher; private readonly Logger _logger; - public FetchAndParseRssService(IIndexerService indexerService, IFetchFeedFromIndexers feedFetcher, Logger logger) + public FetchAndParseRssService(IIndexerFactory indexerFactory, IFetchFeedFromIndexers feedFetcher, Logger logger) { - _indexerService = indexerService; + _indexerFactory = indexerFactory; _feedFetcher = feedFetcher; _logger = logger; } @@ -29,7 +29,7 @@ namespace NzbDrone.Core.Indexers { var result = new List(); - var indexers = _indexerService.GetAvailableProviders().ToList(); + var indexers = _indexerFactory.GetAvailableProviders().ToList(); if (!indexers.Any()) { diff --git a/NzbDrone.Core/Indexers/IndexerService.cs b/NzbDrone.Core/Indexers/IndexerFactory.cs similarity index 82% rename from NzbDrone.Core/Indexers/IndexerService.cs rename to NzbDrone.Core/Indexers/IndexerFactory.cs index 70e845747..a8796fc28 100644 --- a/NzbDrone.Core/Indexers/IndexerService.cs +++ b/NzbDrone.Core/Indexers/IndexerFactory.cs @@ -5,17 +5,17 @@ using NzbDrone.Core.ThingiProvider; namespace NzbDrone.Core.Indexers { - public interface IIndexerService : IProviderFactory + public interface IIndexerFactory : IProviderFactory { } - public class IndexerService : ProviderFactory, IIndexerService + public class IndexerFactory : ProviderFactory, IIndexerFactory { private readonly IIndexerRepository _providerRepository; private readonly IEnumerable _providers; - public IndexerService(IIndexerRepository providerRepository, IEnumerable providers, Logger logger) + public IndexerFactory(IIndexerRepository providerRepository, IEnumerable providers, Logger logger) : base(providerRepository, providers, logger) { _providerRepository = providerRepository; diff --git a/NzbDrone.Core/NzbDrone.Core.csproj b/NzbDrone.Core/NzbDrone.Core.csproj index 5956274e0..e5058b047 100644 --- a/NzbDrone.Core/NzbDrone.Core.csproj +++ b/NzbDrone.Core/NzbDrone.Core.csproj @@ -500,7 +500,7 @@ Code - + Code From e8b2d1fda0e679a4d2b875897438cc722014cd2d Mon Sep 17 00:00:00 2001 From: kayone Date: Tue, 24 Sep 2013 17:01:03 -0700 Subject: [PATCH 13/52] fixed broken test, cleaned up some code around config contracts. --- NzbDrone.Api/ClientSchema/SchemaBuilder.cs | 2 ++ NzbDrone.Common/Reflection/ReflectionExtensions.cs | 2 +- .../IndexerTests/IndexerServiceFixture.cs | 1 + .../Converters/ProviderSettingConverter.cs | 8 ++++++-- NzbDrone.Core/NzbDrone.Core.csproj | 1 + .../ConfigContractNotFoundException.cs | 13 +++++++++++++ NzbDrone.Core/ThingiProvider/ProviderService.cs | 2 +- 7 files changed, 25 insertions(+), 4 deletions(-) create mode 100644 NzbDrone.Core/ThingiProvider/ConfigContractNotFoundException.cs diff --git a/NzbDrone.Api/ClientSchema/SchemaBuilder.cs b/NzbDrone.Api/ClientSchema/SchemaBuilder.cs index 1393387bc..c5c96c302 100644 --- a/NzbDrone.Api/ClientSchema/SchemaBuilder.cs +++ b/NzbDrone.Api/ClientSchema/SchemaBuilder.cs @@ -57,6 +57,8 @@ namespace NzbDrone.Api.ClientSchema public static object ReadFormSchema(List fields, Type targetType) { + Ensure.That(() => targetType).IsNotNull(); + var properties = targetType.GetSimpleProperties(); var target = Activator.CreateInstance(targetType); diff --git a/NzbDrone.Common/Reflection/ReflectionExtensions.cs b/NzbDrone.Common/Reflection/ReflectionExtensions.cs index 0c70d0c42..898d45119 100644 --- a/NzbDrone.Common/Reflection/ReflectionExtensions.cs +++ b/NzbDrone.Common/Reflection/ReflectionExtensions.cs @@ -62,7 +62,7 @@ namespace NzbDrone.Common.Reflection public static Type FindTypeByName(this Assembly assembly, string name) { - return assembly.GetTypes().Single(c => c.Name.Equals(name, StringComparison.InvariantCultureIgnoreCase)); + return assembly.GetTypes().SingleOrDefault(c => c.Name.Equals(name, StringComparison.InvariantCultureIgnoreCase)); } public static bool HasAttribute(this Type type) diff --git a/NzbDrone.Core.Test/IndexerTests/IndexerServiceFixture.cs b/NzbDrone.Core.Test/IndexerTests/IndexerServiceFixture.cs index 2012921f0..bbfb8404a 100644 --- a/NzbDrone.Core.Test/IndexerTests/IndexerServiceFixture.cs +++ b/NzbDrone.Core.Test/IndexerTests/IndexerServiceFixture.cs @@ -71,6 +71,7 @@ namespace NzbDrone.Core.Test.IndexerTests var existingIndexers = Builder.CreateNew().BuildNew(); + existingIndexers.ConfigContract = typeof (NewznabSettings).Name; repo.Insert(existingIndexers); diff --git a/NzbDrone.Core/Datastore/Converters/ProviderSettingConverter.cs b/NzbDrone.Core/Datastore/Converters/ProviderSettingConverter.cs index 8e83938a9..ace64d6af 100644 --- a/NzbDrone.Core/Datastore/Converters/ProviderSettingConverter.cs +++ b/NzbDrone.Core/Datastore/Converters/ProviderSettingConverter.cs @@ -23,11 +23,15 @@ namespace NzbDrone.Core.Datastore.Converters } var ordinal = context.DataRecord.GetOrdinal("ConfigContract"); + var contract = context.DataRecord.GetString(ordinal); - var implementation = context.DataRecord.GetString(ordinal); + var impType = typeof (IProviderConfig).Assembly.FindTypeByName(contract); - var impType = typeof (IProviderConfig).Assembly.FindTypeByName(implementation); + if (impType == null) + { + throw new ConfigContractNotFoundException(contract); + } return Json.Deserialize(stringValue, impType); } diff --git a/NzbDrone.Core/NzbDrone.Core.csproj b/NzbDrone.Core/NzbDrone.Core.csproj index e5058b047..582096964 100644 --- a/NzbDrone.Core/NzbDrone.Core.csproj +++ b/NzbDrone.Core/NzbDrone.Core.csproj @@ -414,6 +414,7 @@ + diff --git a/NzbDrone.Core/ThingiProvider/ConfigContractNotFoundException.cs b/NzbDrone.Core/ThingiProvider/ConfigContractNotFoundException.cs new file mode 100644 index 000000000..47d6ecdf3 --- /dev/null +++ b/NzbDrone.Core/ThingiProvider/ConfigContractNotFoundException.cs @@ -0,0 +1,13 @@ +using NzbDrone.Common.Exceptions; + +namespace NzbDrone.Core.ThingiProvider +{ + public class ConfigContractNotFoundException : NzbDroneException + { + public ConfigContractNotFoundException(string contract) + : base("Couldn't find config contract " + contract) + { + } + + } +} diff --git a/NzbDrone.Core/ThingiProvider/ProviderService.cs b/NzbDrone.Core/ThingiProvider/ProviderService.cs index 9869f9679..4765de4bc 100644 --- a/NzbDrone.Core/ThingiProvider/ProviderService.cs +++ b/NzbDrone.Core/ThingiProvider/ProviderService.cs @@ -48,7 +48,7 @@ namespace NzbDrone.Core.ThingiProvider { ConfigContract = p.ConfigContract.Name, Implementation = p.GetType().Name, - Settings = (IProviderConfig)Activator.CreateInstance(ReflectionExtensions.CoreAssembly.FindTypeByName(p.ConfigContract.Name)) + Settings = (IProviderConfig)Activator.CreateInstance(p.ConfigContract) }).ToList(); } From 7b14d09976839f87b141431762bc2e5a2de8cb8a Mon Sep 17 00:00:00 2001 From: kayone Date: Tue, 24 Sep 2013 17:12:45 -0700 Subject: [PATCH 14/52] fixed indexer integration tests. --- .../IntegrationTests/IndexerIntegrationTests.cs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/NzbDrone.Core.Test/IndexerTests/IntegrationTests/IndexerIntegrationTests.cs b/NzbDrone.Core.Test/IndexerTests/IntegrationTests/IndexerIntegrationTests.cs index 9c51cd84e..28dc053e4 100644 --- a/NzbDrone.Core.Test/IndexerTests/IntegrationTests/IndexerIntegrationTests.cs +++ b/NzbDrone.Core.Test/IndexerTests/IntegrationTests/IndexerIntegrationTests.cs @@ -7,6 +7,7 @@ using NzbDrone.Core.Indexers.Wombles; using NzbDrone.Core.Parser.Model; using NzbDrone.Core.Test.Framework; using NUnit.Framework; +using NzbDrone.Core.ThingiProvider; using NzbDrone.Test.Common.Categories; using System.Linq; @@ -27,6 +28,12 @@ namespace NzbDrone.Core.Test.IndexerTests.IntegrationTests { var indexer = new Wombles(); + indexer.Definition = new IndexerDefinition + { + Name = "Wombles", + Settings = NullConfig.Instance + }; + var result = Subject.FetchRss(indexer); ValidateResult(result, skipSize: true, skipInfo: true); @@ -37,6 +44,11 @@ namespace NzbDrone.Core.Test.IndexerTests.IntegrationTests public void extv_rss() { var indexer = new Eztv(); + indexer.Definition = new IndexerDefinition + { + Name = "Eztv", + Settings = NullConfig.Instance + }; var result = Subject.FetchRss(indexer); From c9f5cb02570e7d4fdad6966ec4cefa957c147471 Mon Sep 17 00:00:00 2001 From: kayone Date: Tue, 1 Oct 2013 10:13:40 -0700 Subject: [PATCH 15/52] cleaned up ThingiProvider --- NzbDrone.Core/Indexers/IndexerFetchService.cs | 2 +- NzbDrone.Core/NzbDrone.Core.csproj | 10 ++- NzbDrone.Core/NzbDrone.Core.ncrunchproject | 2 +- NzbDrone.Core/ThingiProvider/IProvider.cs | 65 ------------------- .../ThingiProvider/IProviderConfig.cs | 9 +++ .../ThingiProvider/IProviderFactory.cs | 17 +++++ .../ThingiProvider/IProviderRepository.cs | 8 +++ NzbDrone.Core/ThingiProvider/NullConfig.cs | 14 ++++ .../ThingiProvider/ProviderDefinition.cs | 30 +++++++++ ...{ProviderService.cs => ProviderFactory.cs} | 14 ---- .../ThingiProvider/ProviderRepository.cs | 16 +++++ 11 files changed, 104 insertions(+), 83 deletions(-) create mode 100644 NzbDrone.Core/ThingiProvider/IProviderConfig.cs create mode 100644 NzbDrone.Core/ThingiProvider/IProviderFactory.cs create mode 100644 NzbDrone.Core/ThingiProvider/IProviderRepository.cs create mode 100644 NzbDrone.Core/ThingiProvider/NullConfig.cs create mode 100644 NzbDrone.Core/ThingiProvider/ProviderDefinition.cs rename NzbDrone.Core/ThingiProvider/{ProviderService.cs => ProviderFactory.cs} (86%) create mode 100644 NzbDrone.Core/ThingiProvider/ProviderRepository.cs diff --git a/NzbDrone.Core/Indexers/IndexerFetchService.cs b/NzbDrone.Core/Indexers/IndexerFetchService.cs index d9457f58b..b571f6466 100644 --- a/NzbDrone.Core/Indexers/IndexerFetchService.cs +++ b/NzbDrone.Core/Indexers/IndexerFetchService.cs @@ -128,7 +128,7 @@ namespace NzbDrone.Core.Indexers } catch (ApiKeyException) { - _logger.Warn("Invalid API Key for {0} {1}", indexer.Name, url); + _logger.Warn("Invalid API Key for {0} {1}", indexer, url); } catch (Exception feedEx) { diff --git a/NzbDrone.Core/NzbDrone.Core.csproj b/NzbDrone.Core/NzbDrone.Core.csproj index 582096964..c19c6e319 100644 --- a/NzbDrone.Core/NzbDrone.Core.csproj +++ b/NzbDrone.Core/NzbDrone.Core.csproj @@ -422,7 +422,13 @@ - + + + + + + + @@ -621,4 +627,4 @@ --> - + \ No newline at end of file diff --git a/NzbDrone.Core/NzbDrone.Core.ncrunchproject b/NzbDrone.Core/NzbDrone.Core.ncrunchproject index b2eed192e..b36cf9e27 100644 --- a/NzbDrone.Core/NzbDrone.Core.ncrunchproject +++ b/NzbDrone.Core/NzbDrone.Core.ncrunchproject @@ -13,7 +13,7 @@ true true 5000 - Debug + RELEASE x86 x86 diff --git a/NzbDrone.Core/ThingiProvider/IProvider.cs b/NzbDrone.Core/ThingiProvider/IProvider.cs index c3308316e..4947c3d8b 100644 --- a/NzbDrone.Core/ThingiProvider/IProvider.cs +++ b/NzbDrone.Core/ThingiProvider/IProvider.cs @@ -1,33 +1,9 @@  using System; using System.Collections.Generic; -using FluentValidation.Results; -using NzbDrone.Core.Datastore; -using NzbDrone.Core.Messaging.Events; namespace NzbDrone.Core.ThingiProvider { - public interface IProviderRepository : IBasicRepository where TProvider : ModelBase, new() - { - TProvider GetByName(string name); - } - - - public class ProviderRepository : BasicRepository, IProviderRepository - where TProviderDefinition : ModelBase, - new() - { - protected ProviderRepository(IDatabase database, IEventAggregator eventAggregator) - : base(database, eventAggregator) - { - } - - public TProviderDefinition GetByName(string name) - { - throw new NotImplementedException(); - } - } - public interface IProvider { Type ConfigContract { get; } @@ -35,45 +11,4 @@ namespace NzbDrone.Core.ThingiProvider IEnumerable DefaultDefinitions { get; } ProviderDefinition Definition { get; set; } } - - public abstract class ProviderDefinition : ModelBase - { - private IProviderConfig _settings; - public string Name { get; set; } - public string Implementation { get; set; } - public bool Enable { get; set; } - - public string ConfigContract { get; set; } - - public IProviderConfig Settings - { - get - { - return _settings; - } - set - { - _settings = value; - if (value != null) - { - ConfigContract = value.GetType().Name; - } - } - } - } - - public interface IProviderConfig - { - ValidationResult Validate(); - } - - public class NullConfig : IProviderConfig - { - public static readonly NullConfig Instance = new NullConfig(); - - public ValidationResult Validate() - { - return new ValidationResult(); - } - } } \ No newline at end of file diff --git a/NzbDrone.Core/ThingiProvider/IProviderConfig.cs b/NzbDrone.Core/ThingiProvider/IProviderConfig.cs new file mode 100644 index 000000000..46501fb34 --- /dev/null +++ b/NzbDrone.Core/ThingiProvider/IProviderConfig.cs @@ -0,0 +1,9 @@ +using FluentValidation.Results; + +namespace NzbDrone.Core.ThingiProvider +{ + public interface IProviderConfig + { + ValidationResult Validate(); + } +} \ No newline at end of file diff --git a/NzbDrone.Core/ThingiProvider/IProviderFactory.cs b/NzbDrone.Core/ThingiProvider/IProviderFactory.cs new file mode 100644 index 000000000..54e8315a6 --- /dev/null +++ b/NzbDrone.Core/ThingiProvider/IProviderFactory.cs @@ -0,0 +1,17 @@ +using System.Collections.Generic; + +namespace NzbDrone.Core.ThingiProvider +{ + public interface IProviderFactory + where TProviderDefinition : ProviderDefinition, new() + where TProvider : IProvider + { + List All(); + List GetAvailableProviders(); + TProviderDefinition Get(int id); + TProviderDefinition Create(TProviderDefinition indexer); + void Update(TProviderDefinition indexer); + void Delete(int id); + List Templates(); + } +} \ No newline at end of file diff --git a/NzbDrone.Core/ThingiProvider/IProviderRepository.cs b/NzbDrone.Core/ThingiProvider/IProviderRepository.cs new file mode 100644 index 000000000..13043b64d --- /dev/null +++ b/NzbDrone.Core/ThingiProvider/IProviderRepository.cs @@ -0,0 +1,8 @@ +using NzbDrone.Core.Datastore; + +namespace NzbDrone.Core.ThingiProvider +{ + public interface IProviderRepository : IBasicRepository where TProvider : ModelBase, new() + { + } +} \ No newline at end of file diff --git a/NzbDrone.Core/ThingiProvider/NullConfig.cs b/NzbDrone.Core/ThingiProvider/NullConfig.cs new file mode 100644 index 000000000..6eea2e66c --- /dev/null +++ b/NzbDrone.Core/ThingiProvider/NullConfig.cs @@ -0,0 +1,14 @@ +using FluentValidation.Results; + +namespace NzbDrone.Core.ThingiProvider +{ + public class NullConfig : IProviderConfig + { + public static readonly NullConfig Instance = new NullConfig(); + + public ValidationResult Validate() + { + return new ValidationResult(); + } + } +} \ No newline at end of file diff --git a/NzbDrone.Core/ThingiProvider/ProviderDefinition.cs b/NzbDrone.Core/ThingiProvider/ProviderDefinition.cs new file mode 100644 index 000000000..ef21d3206 --- /dev/null +++ b/NzbDrone.Core/ThingiProvider/ProviderDefinition.cs @@ -0,0 +1,30 @@ +using NzbDrone.Core.Datastore; + +namespace NzbDrone.Core.ThingiProvider +{ + public abstract class ProviderDefinition : ModelBase + { + private IProviderConfig _settings; + public string Name { get; set; } + public string Implementation { get; set; } + public bool Enable { get; set; } + + public string ConfigContract { get; set; } + + public IProviderConfig Settings + { + get + { + return _settings; + } + set + { + _settings = value; + if (value != null) + { + ConfigContract = value.GetType().Name; + } + } + } + } +} \ No newline at end of file diff --git a/NzbDrone.Core/ThingiProvider/ProviderService.cs b/NzbDrone.Core/ThingiProvider/ProviderFactory.cs similarity index 86% rename from NzbDrone.Core/ThingiProvider/ProviderService.cs rename to NzbDrone.Core/ThingiProvider/ProviderFactory.cs index 4765de4bc..bbd909bb3 100644 --- a/NzbDrone.Core/ThingiProvider/ProviderService.cs +++ b/NzbDrone.Core/ThingiProvider/ProviderFactory.cs @@ -2,25 +2,11 @@ using System.Collections.Generic; using System.Linq; using NLog; -using NzbDrone.Common.Reflection; using NzbDrone.Core.Lifecycle; using NzbDrone.Core.Messaging.Events; namespace NzbDrone.Core.ThingiProvider { - public interface IProviderFactory - where TProviderDefinition : ProviderDefinition, new() - where TProvider : IProvider - { - List All(); - List GetAvailableProviders(); - TProviderDefinition Get(int id); - TProviderDefinition Create(TProviderDefinition indexer); - void Update(TProviderDefinition indexer); - void Delete(int id); - List Templates(); - } - public abstract class ProviderFactory : IProviderFactory, IHandle where TProviderDefinition : ProviderDefinition, new() where TProvider : IProvider diff --git a/NzbDrone.Core/ThingiProvider/ProviderRepository.cs b/NzbDrone.Core/ThingiProvider/ProviderRepository.cs new file mode 100644 index 000000000..cceaaefcb --- /dev/null +++ b/NzbDrone.Core/ThingiProvider/ProviderRepository.cs @@ -0,0 +1,16 @@ +using System; +using NzbDrone.Core.Datastore; +using NzbDrone.Core.Messaging.Events; + +namespace NzbDrone.Core.ThingiProvider +{ + public class ProviderRepository : BasicRepository, IProviderRepository + where TProviderDefinition : ModelBase, + new() + { + protected ProviderRepository(IDatabase database, IEventAggregator eventAggregator) + : base(database, eventAggregator) + { + } + } +} \ No newline at end of file From 1b234f40df010ea86e0f49f1d084395e6684dc6a Mon Sep 17 00:00:00 2001 From: kayone Date: Tue, 1 Oct 2013 10:27:22 -0700 Subject: [PATCH 16/52] fixed indexer endpoint. --- NzbDrone.Api/Indexers/IndexerModule.cs | 2 +- NzbDrone.Api/ProviderModuleBase.cs | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/NzbDrone.Api/Indexers/IndexerModule.cs b/NzbDrone.Api/Indexers/IndexerModule.cs index 52b38fe7d..33c56a108 100644 --- a/NzbDrone.Api/Indexers/IndexerModule.cs +++ b/NzbDrone.Api/Indexers/IndexerModule.cs @@ -5,7 +5,7 @@ namespace NzbDrone.Api.Indexers public class IndexerModule : ProviderModuleBase { public IndexerModule(IndexerFactory indexerFactory) - : base(indexerFactory) + : base(indexerFactory, "indexer") { } } diff --git a/NzbDrone.Api/ProviderModuleBase.cs b/NzbDrone.Api/ProviderModuleBase.cs index a56891a68..f379f598a 100644 --- a/NzbDrone.Api/ProviderModuleBase.cs +++ b/NzbDrone.Api/ProviderModuleBase.cs @@ -19,7 +19,8 @@ namespace NzbDrone.Api { private readonly IProviderFactory _providerFactory; - protected ProviderModuleBase(IProviderFactory providerFactory) + protected ProviderModuleBase(IProviderFactory providerFactory, string resource) + : base(resource) { _providerFactory = providerFactory; Get["templates"] = x => GetTemplates(); From 27bd59268d21ed38285c2a14bea981431bbd242c Mon Sep 17 00:00:00 2001 From: kayone Date: Tue, 1 Oct 2013 12:32:08 -0700 Subject: [PATCH 17/52] nullconfig indexers are enabled by default. --- NzbDrone.Core.Test/NzbDrone.Core.Test.csproj | 1 + .../ThingiProviderTests/NullConfigFixture.cs | 17 +++++++++++++++++ NzbDrone.Core/Indexers/IndexerBase.cs | 10 ++++++---- .../IndexerIntegrationFixture.cs | 5 ++++- .../ReleaseIntegrationTest.cs | 8 ++++++-- 5 files changed, 34 insertions(+), 7 deletions(-) create mode 100644 NzbDrone.Core.Test/ThingiProviderTests/NullConfigFixture.cs diff --git a/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj b/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj index 39bda7be4..8a79c19af 100644 --- a/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj +++ b/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj @@ -182,6 +182,7 @@ + diff --git a/NzbDrone.Core.Test/ThingiProviderTests/NullConfigFixture.cs b/NzbDrone.Core.Test/ThingiProviderTests/NullConfigFixture.cs new file mode 100644 index 000000000..0f47d9a91 --- /dev/null +++ b/NzbDrone.Core.Test/ThingiProviderTests/NullConfigFixture.cs @@ -0,0 +1,17 @@ +using FluentAssertions; +using NUnit.Framework; +using NzbDrone.Core.Test.Framework; +using NzbDrone.Core.ThingiProvider; + +namespace NzbDrone.Core.Test.ThingiProviderTests +{ + [TestFixture] + public class NullConfigFixture : CoreTest + { + [Test] + public void should_be_valid() + { + Subject.Validate().IsValid.Should().BeTrue(); + } + } +} \ No newline at end of file diff --git a/NzbDrone.Core/Indexers/IndexerBase.cs b/NzbDrone.Core/Indexers/IndexerBase.cs index ddedc098c..41942d35b 100644 --- a/NzbDrone.Core/Indexers/IndexerBase.cs +++ b/NzbDrone.Core/Indexers/IndexerBase.cs @@ -4,7 +4,7 @@ using NzbDrone.Core.ThingiProvider; namespace NzbDrone.Core.Indexers { - public abstract class IndexerBase : IIndexer + public abstract class IndexerBase : IIndexer where TSettings : IProviderConfig, new() { public Type ConfigContract { @@ -18,12 +18,14 @@ namespace NzbDrone.Core.Indexers { get { + var config = (IProviderConfig)new TSettings(); + yield return new IndexerDefinition { - Name = this.GetType().Name, - Enable = false, + Name = GetType().Name, + Enable = config.Validate().IsValid, Implementation = GetType().Name, - Settings = NullConfig.Instance + Settings = config }; } } diff --git a/NzbDrone.Integration.Test/IndexerIntegrationFixture.cs b/NzbDrone.Integration.Test/IndexerIntegrationFixture.cs index 33fb6e0ab..96003762b 100644 --- a/NzbDrone.Integration.Test/IndexerIntegrationFixture.cs +++ b/NzbDrone.Integration.Test/IndexerIntegrationFixture.cs @@ -1,5 +1,7 @@ -using FluentAssertions; +using System.Linq; +using FluentAssertions; using NUnit.Framework; +using NzbDrone.Core.ThingiProvider; namespace NzbDrone.Integration.Test { @@ -13,6 +15,7 @@ namespace NzbDrone.Integration.Test indexers.Should().NotBeEmpty(); indexers.Should().NotContain(c => string.IsNullOrWhiteSpace(c.Name)); + indexers.Where(c => c.ConfigContract == typeof(NullConfig).Name).Should().OnlyContain(c => c.Enable); } } } \ No newline at end of file diff --git a/NzbDrone.Integration.Test/ReleaseIntegrationTest.cs b/NzbDrone.Integration.Test/ReleaseIntegrationTest.cs index b9a86674e..eb76f1255 100644 --- a/NzbDrone.Integration.Test/ReleaseIntegrationTest.cs +++ b/NzbDrone.Integration.Test/ReleaseIntegrationTest.cs @@ -1,4 +1,5 @@ -using FluentAssertions; +using System.Threading; +using FluentAssertions; using NUnit.Framework; using NzbDrone.Api.Indexers; @@ -10,10 +11,13 @@ namespace NzbDrone.Integration.Test [Test] public void should_only_have_unknown_series_releases() { + var releases = Releases.All(); + var indexers = Indexers.All(); + releases.Should().OnlyContain(c => c.Rejections.Contains("Unknown Series")); - releases.Should().OnlyContain(c=>BeValidRelease(c)); + releases.Should().OnlyContain(c => BeValidRelease(c)); } From c7660891881a09ae029ed0e71b35b5f617c2fd0f Mon Sep 17 00:00:00 2001 From: kayone Date: Tue, 1 Oct 2013 12:33:48 -0700 Subject: [PATCH 18/52] hide torrent indexers. --- NzbDrone.Core/Indexers/IndexerFactory.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/NzbDrone.Core/Indexers/IndexerFactory.cs b/NzbDrone.Core/Indexers/IndexerFactory.cs index a8796fc28..b89f0d539 100644 --- a/NzbDrone.Core/Indexers/IndexerFactory.cs +++ b/NzbDrone.Core/Indexers/IndexerFactory.cs @@ -24,7 +24,8 @@ namespace NzbDrone.Core.Indexers protected override void InitializeProviders() { - var definitions = _providers.SelectMany(indexer => indexer.DefaultDefinitions); + var definitions = _providers.Where(c => c.Protocol == DownloadProtocol.Usenet) + .SelectMany(indexer => indexer.DefaultDefinitions); var currentProviders = All(); From daeb2fc65264b90465557ac25bd22f84b604e9b9 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Tue, 1 Oct 2013 22:20:30 -0700 Subject: [PATCH 19/52] Episode grid will show downloading on grab New: Update episode status in UI on grab and download --- .../EpisodeFiles/EpisodeFileModule.cs | 19 ++- NzbDrone.Api/Episodes/EpisodeModule.cs | 5 +- NzbDrone.Api/Episodes/EpisodeResource.cs | 2 + NzbDrone.Api/NzbDrone.Api.csproj | 2 + NzbDrone.Api/NzbDroneRestModuleWithSignalR.cs | 11 ++ NzbDrone.Api/Queue/QueueModule.cs | 32 +++++ NzbDrone.Api/Queue/QueueResource.cs | 18 +++ NzbDrone.Api/ResourceChangeMessage.cs | 2 +- NzbDrone.Core/Datastore/Events/ModelEvent.cs | 2 - .../{SabQueueItem.cs => QueueItem.cs} | 6 +- .../EpisodeImport/ImportApprovedEpisodes.cs | 8 +- NzbDrone.Core/NzbDrone.Core.csproj | 7 +- NzbDrone.Core/Queue/Queue.cs | 17 +++ NzbDrone.Core/Queue/QueueScheduler.cs | 58 ++++++++ NzbDrone.Core/Queue/QueueService.cs | 72 ++++++++++ NzbDrone.Core/Queue/UpdateQueueEvent.cs | 8 ++ UI/Cells/EpisodeNumberCell.js | 2 +- UI/Cells/EpisodeStatusCell.js | 25 +++- UI/Controller.js | 4 +- .../{Collection.js => HistoryCollection.js} | 2 +- UI/History/HistoryLayout.js | 134 +++++++----------- UI/History/HistoryLayoutTemplate.html | 20 ++- UI/History/{Model.js => HistoryModel.js} | 0 UI/History/IndexerTemplate.html | 1 - UI/History/Queue/QueueCollection.js | 17 +++ UI/History/Queue/QueueLayout.js | 77 ++++++++++ UI/History/Queue/QueueLayoutTemplate.html | 5 + UI/History/Queue/QueueModel.js | 16 +++ UI/History/Queue/TimeleftCell.js | 27 ++++ .../{ => Table}/ControlsColumnTemplate.html | 0 UI/History/{ => Table}/EventTypeCell.js | 0 UI/History/{ => Table}/HistoryDetailsCell.js | 0 UI/History/Table/HistoryTableLayout.js | 108 ++++++++++++++ .../Table/HistoryTableLayoutTemplate.html | 11 ++ UI/Mixins/backbone.signalr.mixin.js | 7 + UI/Router.js | 3 + UI/Series/Details/SeriesDetailsLayout.js | 3 +- 37 files changed, 608 insertions(+), 123 deletions(-) create mode 100644 NzbDrone.Api/Queue/QueueModule.cs create mode 100644 NzbDrone.Api/Queue/QueueResource.cs rename NzbDrone.Core/Download/{SabQueueItem.cs => QueueItem.cs} (98%) create mode 100644 NzbDrone.Core/Queue/Queue.cs create mode 100644 NzbDrone.Core/Queue/QueueScheduler.cs create mode 100644 NzbDrone.Core/Queue/QueueService.cs create mode 100644 NzbDrone.Core/Queue/UpdateQueueEvent.cs rename UI/History/{Collection.js => HistoryCollection.js} (97%) rename UI/History/{Model.js => HistoryModel.js} (100%) delete mode 100644 UI/History/IndexerTemplate.html create mode 100644 UI/History/Queue/QueueCollection.js create mode 100644 UI/History/Queue/QueueLayout.js create mode 100644 UI/History/Queue/QueueLayoutTemplate.html create mode 100644 UI/History/Queue/QueueModel.js create mode 100644 UI/History/Queue/TimeleftCell.js rename UI/History/{ => Table}/ControlsColumnTemplate.html (100%) rename UI/History/{ => Table}/EventTypeCell.js (100%) rename UI/History/{ => Table}/HistoryDetailsCell.js (100%) create mode 100644 UI/History/Table/HistoryTableLayout.js create mode 100644 UI/History/Table/HistoryTableLayoutTemplate.html diff --git a/NzbDrone.Api/EpisodeFiles/EpisodeFileModule.cs b/NzbDrone.Api/EpisodeFiles/EpisodeFileModule.cs index 15b4e65ed..f9df68dee 100644 --- a/NzbDrone.Api/EpisodeFiles/EpisodeFileModule.cs +++ b/NzbDrone.Api/EpisodeFiles/EpisodeFileModule.cs @@ -1,16 +1,22 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using NzbDrone.Api.REST; +using NzbDrone.Core.Datastore.Events; using NzbDrone.Core.MediaFiles; using NzbDrone.Api.Mapping; +using NzbDrone.Core.MediaFiles.Events; +using NzbDrone.Core.Messaging.Commands; +using NzbDrone.Core.Messaging.Events; namespace NzbDrone.Api.EpisodeFiles { - public class EpisodeModule : NzbDroneRestModule + public class EpisodeModule : NzbDroneRestModuleWithSignalR, + IHandle { private readonly IMediaFileService _mediaFileService; - public EpisodeModule(IMediaFileService mediaFileService) - : base("/episodefile") + public EpisodeModule(ICommandExecutor commandExecutor, IMediaFileService mediaFileService) + : base(commandExecutor) { _mediaFileService = mediaFileService; GetResourceById = GetEpisodeFile; @@ -41,5 +47,10 @@ namespace NzbDrone.Api.EpisodeFiles episodeFile.Quality = episodeFileResource.Quality; _mediaFileService.Update(episodeFile); } + + public void Handle(EpisodeFileAddedEvent message) + { + BroadcastResourceChange(ModelAction.Updated, message.EpisodeFile.Id); + } } } \ No newline at end of file diff --git a/NzbDrone.Api/Episodes/EpisodeModule.cs b/NzbDrone.Api/Episodes/EpisodeModule.cs index d057b3658..aaab212a8 100644 --- a/NzbDrone.Api/Episodes/EpisodeModule.cs +++ b/NzbDrone.Api/Episodes/EpisodeModule.cs @@ -54,7 +54,10 @@ namespace NzbDrone.Api.Episodes { foreach (var episode in message.Episode.Episodes) { - BroadcastResourceChange(ModelAction.Updated, episode.Id); + var resource = episode.InjectTo(); + resource.Downloading = true; + + BroadcastResourceChange(ModelAction.Updated, resource); } } diff --git a/NzbDrone.Api/Episodes/EpisodeResource.cs b/NzbDrone.Api/Episodes/EpisodeResource.cs index 03ae675c5..a767ef9e6 100644 --- a/NzbDrone.Api/Episodes/EpisodeResource.cs +++ b/NzbDrone.Api/Episodes/EpisodeResource.cs @@ -26,5 +26,7 @@ namespace NzbDrone.Api.Episodes public DateTime? GrabDate { get; set; } public Core.Tv.Series Series { get; set; } public String SeriesTitle { get; set; } + + public Boolean Downloading { get; set; } } } diff --git a/NzbDrone.Api/NzbDrone.Api.csproj b/NzbDrone.Api/NzbDrone.Api.csproj index b88c2277d..8de55e952 100644 --- a/NzbDrone.Api/NzbDrone.Api.csproj +++ b/NzbDrone.Api/NzbDrone.Api.csproj @@ -126,6 +126,8 @@ + + diff --git a/NzbDrone.Api/NzbDroneRestModuleWithSignalR.cs b/NzbDrone.Api/NzbDroneRestModuleWithSignalR.cs index 2a70103b1..bb35273df 100644 --- a/NzbDrone.Api/NzbDroneRestModuleWithSignalR.cs +++ b/NzbDrone.Api/NzbDroneRestModuleWithSignalR.cs @@ -34,6 +34,17 @@ namespace NzbDrone.Api BroadcastResourceChange(message.Action, message.Model.Id); } + protected void BroadcastResourceChange(ModelAction action, TResource resource) + { + var signalRMessage = new SignalRMessage + { + Name = Resource, + Body = new ResourceChangeMessage(resource, action) + }; + + _commandExecutor.PublishCommand(new BroadcastSignalRMessage(signalRMessage)); + } + protected void BroadcastResourceChange(ModelAction action, int id) { var resource = GetResourceById(id); diff --git a/NzbDrone.Api/Queue/QueueModule.cs b/NzbDrone.Api/Queue/QueueModule.cs new file mode 100644 index 000000000..efc5ac7ff --- /dev/null +++ b/NzbDrone.Api/Queue/QueueModule.cs @@ -0,0 +1,32 @@ +using System.Collections.Generic; +using NzbDrone.Core.Datastore.Events; +using NzbDrone.Core.Download; +using NzbDrone.Core.Messaging.Commands; +using NzbDrone.Core.Messaging.Events; +using NzbDrone.Core.Queue; + +namespace NzbDrone.Api.Queue +{ + public class QueueModule : NzbDroneRestModuleWithSignalR, + IHandle + { + private readonly IQueueService _queueService; + + public QueueModule(ICommandExecutor commandExecutor, IQueueService queueService) + : base(commandExecutor) + { + _queueService = queueService; + GetResourceAll = GetQueue; + } + + private List GetQueue() + { + return ToListResource(_queueService.GetQueue); + } + + public void Handle(UpdateQueueEvent message) + { + BroadcastResourceChange(ModelAction.Sync); + } + } +} \ No newline at end of file diff --git a/NzbDrone.Api/Queue/QueueResource.cs b/NzbDrone.Api/Queue/QueueResource.cs new file mode 100644 index 000000000..4d91534dc --- /dev/null +++ b/NzbDrone.Api/Queue/QueueResource.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using NzbDrone.Api.REST; +using NzbDrone.Core.Tv; + +namespace NzbDrone.Api.Queue +{ + public class QueueResource : RestResource + { + public Core.Tv.Series Series { get; set; } + public Episode Episode { get; set; } + public QualityModel Quality { get; set; } + public Decimal Size { get; set; } + public String Title { get; set; } + public Decimal SizeLeft { get; set; } + public TimeSpan Timeleft { get; set; } + } +} diff --git a/NzbDrone.Api/ResourceChangeMessage.cs b/NzbDrone.Api/ResourceChangeMessage.cs index 6b7efb50a..6319dcc39 100644 --- a/NzbDrone.Api/ResourceChangeMessage.cs +++ b/NzbDrone.Api/ResourceChangeMessage.cs @@ -11,7 +11,7 @@ namespace NzbDrone.Api public ResourceChangeMessage(ModelAction action) { - if (action != ModelAction.Deleted || action != ModelAction.Sync) + if (action != ModelAction.Deleted && action != ModelAction.Sync) { throw new InvalidOperationException("Resource message without a resource needs to have Delete or Sync as action"); } diff --git a/NzbDrone.Core/Datastore/Events/ModelEvent.cs b/NzbDrone.Core/Datastore/Events/ModelEvent.cs index 91f74887b..72ff55296 100644 --- a/NzbDrone.Core/Datastore/Events/ModelEvent.cs +++ b/NzbDrone.Core/Datastore/Events/ModelEvent.cs @@ -22,6 +22,4 @@ namespace NzbDrone.Core.Datastore.Events Deleted = 3, Sync = 4 } - - } \ No newline at end of file diff --git a/NzbDrone.Core/Download/SabQueueItem.cs b/NzbDrone.Core/Download/QueueItem.cs similarity index 98% rename from NzbDrone.Core/Download/SabQueueItem.cs rename to NzbDrone.Core/Download/QueueItem.cs index eed0879ab..f9de11ff0 100644 --- a/NzbDrone.Core/Download/SabQueueItem.cs +++ b/NzbDrone.Core/Download/QueueItem.cs @@ -4,14 +4,10 @@ namespace NzbDrone.Core.Download { public class QueueItem { + public string Id { get; set; } public decimal Size { get; set; } - public string Title { get; set; } - public decimal SizeLeft { get; set; } - - public string Id { get; set; } - public TimeSpan Timeleft { get; set; } } } diff --git a/NzbDrone.Core/MediaFiles/EpisodeImport/ImportApprovedEpisodes.cs b/NzbDrone.Core/MediaFiles/EpisodeImport/ImportApprovedEpisodes.cs index a725176e7..6b56d4d00 100644 --- a/NzbDrone.Core/MediaFiles/EpisodeImport/ImportApprovedEpisodes.cs +++ b/NzbDrone.Core/MediaFiles/EpisodeImport/ImportApprovedEpisodes.cs @@ -70,12 +70,16 @@ namespace NzbDrone.Core.MediaFiles.EpisodeImport { episodeFile.SceneName = Path.GetFileNameWithoutExtension(localEpisode.Path.CleanFilePath()); episodeFile.Path = _episodeFileUpgrader.UpgradeEpisodeFile(episodeFile, localEpisode); - _eventAggregator.PublishEvent(new EpisodeImportedEvent(localEpisode, episodeFile)); - _eventAggregator.PublishEvent(new EpisodeDownloadedEvent(localEpisode)); } _mediaFileService.Add(episodeFile); imported.Add(importDecision); + + if (newDownload) + { + _eventAggregator.PublishEvent(new EpisodeImportedEvent(localEpisode, episodeFile)); + _eventAggregator.PublishEvent(new EpisodeDownloadedEvent(localEpisode)); + } } catch (Exception e) { diff --git a/NzbDrone.Core/NzbDrone.Core.csproj b/NzbDrone.Core/NzbDrone.Core.csproj index 23d3657e3..3c48dd31d 100644 --- a/NzbDrone.Core/NzbDrone.Core.csproj +++ b/NzbDrone.Core/NzbDrone.Core.csproj @@ -110,6 +110,7 @@ + @@ -216,7 +217,7 @@ - + @@ -419,6 +420,10 @@ + + + + diff --git a/NzbDrone.Core/Queue/Queue.cs b/NzbDrone.Core/Queue/Queue.cs new file mode 100644 index 000000000..7b82aeb80 --- /dev/null +++ b/NzbDrone.Core/Queue/Queue.cs @@ -0,0 +1,17 @@ +using System; +using NzbDrone.Core.Datastore; +using NzbDrone.Core.Tv; + +namespace NzbDrone.Core.Queue +{ + public class Queue : ModelBase + { + public Series Series { get; set; } + public Episode Episode { get; set; } + public QualityModel Quality { get; set; } + public Decimal Size { get; set; } + public String Title { get; set; } + public Decimal SizeLeft { get; set; } + public TimeSpan Timeleft { get; set; } + } +} diff --git a/NzbDrone.Core/Queue/QueueScheduler.cs b/NzbDrone.Core/Queue/QueueScheduler.cs new file mode 100644 index 000000000..bce64d8f3 --- /dev/null +++ b/NzbDrone.Core/Queue/QueueScheduler.cs @@ -0,0 +1,58 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using NzbDrone.Common.TPL; +using NzbDrone.Core.Lifecycle; +using NzbDrone.Core.Messaging.Events; +using Timer = System.Timers.Timer; + +namespace NzbDrone.Core.Queue +{ + public class QueueScheduler : IHandle, + IHandle + { + private readonly IEventAggregator _eventAggregator; + private static readonly Timer Timer = new Timer(); + private static CancellationTokenSource _cancellationTokenSource; + + public QueueScheduler(IEventAggregator eventAggregator) + { + _eventAggregator = eventAggregator; + } + + private void CheckQueue() + { + try + { + Timer.Enabled = false; + _eventAggregator.PublishEvent(new UpdateQueueEvent()); + } + finally + { + if (!_cancellationTokenSource.IsCancellationRequested) + { + Timer.Enabled = true; + } + } + } + + public void Handle(ApplicationStartedEvent message) + { + _cancellationTokenSource = new CancellationTokenSource(); + Timer.Interval = 1000 * 30; + Timer.Elapsed += (o, args) => Task.Factory.StartNew(CheckQueue, _cancellationTokenSource.Token) + .LogExceptions(); + + Timer.Start(); + } + + public void Handle(ApplicationShutdownRequested message) + { + _cancellationTokenSource.Cancel(true); + Timer.Stop(); + } + } +} diff --git a/NzbDrone.Core/Queue/QueueService.cs b/NzbDrone.Core/Queue/QueueService.cs new file mode 100644 index 000000000..019645c6e --- /dev/null +++ b/NzbDrone.Core/Queue/QueueService.cs @@ -0,0 +1,72 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using NLog; +using NzbDrone.Core.Download; +using NzbDrone.Core.Parser; + +namespace NzbDrone.Core.Queue +{ + public interface IQueueService + { + List GetQueue(); + } + + public class QueueService : IQueueService + { + private readonly IProvideDownloadClient _downloadClientProvider; + private readonly IParsingService _parsingService; + private readonly Logger _logger; + + public QueueService(IProvideDownloadClient downloadClientProvider, IParsingService parsingService, Logger logger) + { + _downloadClientProvider = downloadClientProvider; + _parsingService = parsingService; + _logger = logger; + } + + public List GetQueue() + { + var downloadClient = _downloadClientProvider.GetDownloadClient(); + var queueItems = downloadClient.GetQueue(); + + return MapQueue(queueItems); + } + + private List MapQueue(IEnumerable queueItems) + { + var queued = new List(); + + foreach (var queueItem in queueItems) + { + var parsedEpisodeInfo = Parser.Parser.ParseTitle(queueItem.Title); + + if (parsedEpisodeInfo != null && !string.IsNullOrWhiteSpace(parsedEpisodeInfo.SeriesTitle)) + { + var remoteEpisode = _parsingService.Map(parsedEpisodeInfo, 0); + + if (remoteEpisode.Series == null) + { + continue; + } + + foreach (var episode in remoteEpisode.Episodes) + { + var queue = new Queue(); + queue.Id = queueItem.Id.GetHashCode(); + queue.Series = remoteEpisode.Series; + queue.Episode = episode; + queue.Quality = remoteEpisode.ParsedEpisodeInfo.Quality; + queue.Title = queueItem.Title; + queue.Size = queueItem.Size; + queue.SizeLeft = queueItem.SizeLeft; + queue.Timeleft = queueItem.Timeleft; + queued.Add(queue); + } + } + } + + return queued; + } + } +} diff --git a/NzbDrone.Core/Queue/UpdateQueueEvent.cs b/NzbDrone.Core/Queue/UpdateQueueEvent.cs new file mode 100644 index 000000000..38535a89d --- /dev/null +++ b/NzbDrone.Core/Queue/UpdateQueueEvent.cs @@ -0,0 +1,8 @@ +using NzbDrone.Common.Messaging; + +namespace NzbDrone.Core.Queue +{ + public class UpdateQueueEvent : IEvent + { + } +} diff --git a/UI/Cells/EpisodeNumberCell.js b/UI/Cells/EpisodeNumberCell.js index 85be40255..0daf55b81 100644 --- a/UI/Cells/EpisodeNumberCell.js +++ b/UI/Cells/EpisodeNumberCell.js @@ -1,4 +1,4 @@ -'use strict'; + 'use strict'; define( [ diff --git a/UI/Cells/EpisodeStatusCell.js b/UI/Cells/EpisodeStatusCell.js index 091064380..a8f5c8c00 100644 --- a/UI/Cells/EpisodeStatusCell.js +++ b/UI/Cells/EpisodeStatusCell.js @@ -3,15 +3,25 @@ define( [ 'app', + 'underscore', 'Cells/NzbDroneCell', + 'History/Queue/QueueCollection', 'moment', 'Shared/FormatHelpers' - ], function (App, NzbDroneCell, Moment, FormatHelpers) { + ], function (App, _, NzbDroneCell, QueueCollection, Moment, FormatHelpers) { return NzbDroneCell.extend({ className: 'episode-status-cell', render: function () { + this.listenTo(QueueCollection, 'sync', this._renderCell); + + this._renderCell(); + + return this; + }, + + _renderCell: function () { this.$el.empty(); if (this.model) { @@ -41,10 +51,17 @@ define( this.$el.html('{1}'.format(title, quality.quality.name)); } - return this; + return; } + else { - if (this.model.get('downloading')) { + var model = this.model; + + var downloading = _.find(QueueCollection.models, function (queueModel) { + return queueModel.get('episode').id === model.get('id'); + }); + + if (downloading || this.model.get('downloading')) { icon = 'icon-nd-downloading'; tooltip = 'Episode is downloading'; } @@ -66,8 +83,6 @@ define( this.$el.html(''.format(icon, tooltip)); } - - return this; } }); }); diff --git a/UI/Controller.js b/UI/Controller.js index d252b0f32..97efe7b3d 100644 --- a/UI/Controller.js +++ b/UI/Controller.js @@ -73,10 +73,10 @@ define( App.mainRegion.show(new MissingLayout()); }, - history: function () { + history: function (action) { this._setTitle('History'); - App.mainRegion.show(new HistoryLayout()); + App.mainRegion.show(new HistoryLayout({ action: action })); }, rss: function () { diff --git a/UI/History/Collection.js b/UI/History/HistoryCollection.js similarity index 97% rename from UI/History/Collection.js rename to UI/History/HistoryCollection.js index e3f19ca04..821dd086b 100644 --- a/UI/History/Collection.js +++ b/UI/History/HistoryCollection.js @@ -1,7 +1,7 @@ 'use strict'; define( [ - 'History/Model', + 'History/HistoryModel', 'backbone.pageable' ], function (HistoryModel, PageableCollection) { return PageableCollection.extend({ diff --git a/UI/History/HistoryLayout.js b/UI/History/HistoryLayout.js index bf3d9928b..c055984f8 100644 --- a/UI/History/HistoryLayout.js +++ b/UI/History/HistoryLayout.js @@ -1,108 +1,74 @@ 'use strict'; define( [ + 'app', 'marionette', 'backgrid', - 'History/Collection', - 'History/EventTypeCell', - 'Cells/SeriesTitleCell', - 'Cells/EpisodeNumberCell', - 'Cells/EpisodeTitleCell', - 'Cells/QualityCell', - 'Cells/RelativeDateCell', - 'History/HistoryDetailsCell', - 'Shared/Grid/Pager', - 'Shared/LoadingView' - ], function (Marionette, + 'History/Table/HistoryTableLayout', + 'History/Queue/QueueLayout' + ], function (App, + Marionette, Backgrid, - HistoryCollection, - EventTypeCell, - SeriesTitleCell, - EpisodeNumberCell, - EpisodeTitleCell, - QualityCell, - RelativeDateCell, - HistoryDetailsCell, - GridPager, - LoadingView) { + HistoryTableLayout, + QueueLayout) { return Marionette.Layout.extend({ template: 'History/HistoryLayoutTemplate', regions: { - history: '#x-history', - toolbar: '#x-toolbar', - pager : '#x-pager' + history: '#history', + queueRegion : '#queue' }, - columns: - [ - { - name : 'eventType', - label : '', - cell : EventTypeCell, - cellValue: 'this' - }, - { - name : 'series', - label: 'Series', - cell : SeriesTitleCell - }, - { - name : 'episode', - label : 'Episode', - sortable: false, - cell : EpisodeNumberCell - }, - { - name : 'episode', - label : 'Episode Title', - sortable: false, - cell : EpisodeTitleCell - }, - { - name : 'quality', - label : 'Quality', - cell : QualityCell, - sortable: false - }, - { - name : 'date', - label: 'Date', - cell : RelativeDateCell - }, - { - name : 'this', - label : '', - cell : HistoryDetailsCell, - sortable: false - } - ], + ui: { + historyTab: '.x-history-tab', + queueTab : '.x-queue-tab' + }, + events: { + 'click .x-history-tab' : '_showHistory', + 'click .x-queue-tab' : '_showQueue' + }, - initialize: function () { - this.collection = new HistoryCollection(); - this.listenTo(this.collection, 'sync', this._showTable); + initialize: function (options) { + if (options.action) { + this.action = options.action.toLowerCase(); + } }, + onShow: function () { + switch (this.action) { + case 'queue': + this._showQueue(); + break; + default: + this._showHistory(); + } + }, - _showTable: function (collection) { + _navigate:function(route){ + require(['Router'], function(){ + App.Router.navigate(route); + }); + }, - this.history.show(new Backgrid.Grid({ - columns : this.columns, - collection: collection, - className : 'table table-hover' - })); + _showHistory: function (e) { + if (e) { + e.preventDefault(); + } - this.pager.show(new GridPager({ - columns : this.columns, - collection: collection - })); + this.history.show(new HistoryTableLayout()); + this.ui.historyTab.tab('show'); + this._navigate('/history'); }, - onShow: function () { - this.history.show(new LoadingView()); - this.collection.fetch(); - } + _showQueue: function (e) { + if (e) { + e.preventDefault(); + } + this.queueRegion.show(new QueueLayout()); + this.ui.queueTab.tab('show'); + this._navigate('/history/queue'); + } }); }); diff --git a/UI/History/HistoryLayoutTemplate.html b/UI/History/HistoryLayoutTemplate.html index ae43e6692..50c981bf0 100644 --- a/UI/History/HistoryLayoutTemplate.html +++ b/UI/History/HistoryLayoutTemplate.html @@ -1,11 +1,9 @@ -
-
-
-
-
-
-
-
-
-
-
+ + +
+
+
+
\ No newline at end of file diff --git a/UI/History/Model.js b/UI/History/HistoryModel.js similarity index 100% rename from UI/History/Model.js rename to UI/History/HistoryModel.js diff --git a/UI/History/IndexerTemplate.html b/UI/History/IndexerTemplate.html deleted file mode 100644 index 5f493178b..000000000 --- a/UI/History/IndexerTemplate.html +++ /dev/null @@ -1 +0,0 @@ -{{indexer}} \ No newline at end of file diff --git a/UI/History/Queue/QueueCollection.js b/UI/History/Queue/QueueCollection.js new file mode 100644 index 000000000..d7340341d --- /dev/null +++ b/UI/History/Queue/QueueCollection.js @@ -0,0 +1,17 @@ +'use strict'; +define( + [ + 'backbone', + 'History/Queue/QueueModel', + 'Mixins/backbone.signalr.mixin' + ], function (Backbone, QueueModel) { + var QueueCollection = Backbone.Collection.extend({ + url : window.NzbDrone.ApiRoot + '/queue', + model: QueueModel + }); + + var collection = new QueueCollection().bindSignalR(); + collection.fetch(); + + return collection; + }); diff --git a/UI/History/Queue/QueueLayout.js b/UI/History/Queue/QueueLayout.js new file mode 100644 index 000000000..d397d4fd7 --- /dev/null +++ b/UI/History/Queue/QueueLayout.js @@ -0,0 +1,77 @@ +'use strict'; +define( + [ + 'marionette', + 'backgrid', + 'History/Queue/QueueCollection', + 'Cells/SeriesTitleCell', + 'Cells/EpisodeNumberCell', + 'Cells/EpisodeTitleCell', + 'Cells/QualityCell', + 'History/Queue/TimeleftCell' + ], function (Marionette, + Backgrid, + QueueCollection, + SeriesTitleCell, + EpisodeNumberCell, + EpisodeTitleCell, + QualityCell, + TimeleftCell) { + return Marionette.Layout.extend({ + template: 'History/Queue/QueueLayoutTemplate', + + regions: { + table: '#x-queue' + }, + + columns: + [ + { + name : 'series', + label: 'Series', + cell : SeriesTitleCell + }, + { + name : 'episode', + label : 'Episode', + sortable: false, + cell : EpisodeNumberCell + }, + { + name : 'episode', + label : 'Episode Title', + sortable: false, + cell : EpisodeTitleCell + }, + { + name : 'quality', + label : 'Quality', + cell : QualityCell, + sortable: false + }, + { + name : 'timeleft', + label : 'Timeleft', + cell : TimeleftCell, + cellValue : 'this' + } + ], + + + initialize: function () { + this.listenTo(QueueCollection, 'sync', this._showTable); + }, + + onShow: function () { + this._showTable(); + }, + + _showTable: function () { + this.table.show(new Backgrid.Grid({ + columns : this.columns, + collection: QueueCollection, + className : 'table table-hover' + })); + } + }); + }); diff --git a/UI/History/Queue/QueueLayoutTemplate.html b/UI/History/Queue/QueueLayoutTemplate.html new file mode 100644 index 000000000..113673518 --- /dev/null +++ b/UI/History/Queue/QueueLayoutTemplate.html @@ -0,0 +1,5 @@ +
+
+
+
+
diff --git a/UI/History/Queue/QueueModel.js b/UI/History/Queue/QueueModel.js new file mode 100644 index 000000000..4af579646 --- /dev/null +++ b/UI/History/Queue/QueueModel.js @@ -0,0 +1,16 @@ +'use strict'; +define( + [ + 'backbone', + 'Series/SeriesModel', + 'Series/EpisodeModel' + ], function (Backbone, SeriesModel, EpisodeModel) { + return Backbone.Model.extend({ + parse: function (model) { + model.series = new SeriesModel(model.series); + model.episode = new EpisodeModel(model.episode); + model.episode.set('series', model.series); + return model; + } + }); + }); diff --git a/UI/History/Queue/TimeleftCell.js b/UI/History/Queue/TimeleftCell.js new file mode 100644 index 000000000..00b924398 --- /dev/null +++ b/UI/History/Queue/TimeleftCell.js @@ -0,0 +1,27 @@ +'use strict'; + +define( + [ + 'Cells/NzbDroneCell' + ], function (NzbDroneCell) { + return NzbDroneCell.extend({ + + className: 'history-event-type-cell', + + render: function () { + this.$el.empty(); + + if (this.cellValue) { + + var timeleft = this.cellValue.get('timeleft'); + var size = this.cellValue.get('size'); + var sizeLeft = this.cellValue.get('sizeLeft'); + + this.$el.html(timeleft); + this.$el.attr('title', '{0} MB / {1} MB'.format(sizeLeft, size)); + } + + return this; + } + }); + }); diff --git a/UI/History/ControlsColumnTemplate.html b/UI/History/Table/ControlsColumnTemplate.html similarity index 100% rename from UI/History/ControlsColumnTemplate.html rename to UI/History/Table/ControlsColumnTemplate.html diff --git a/UI/History/EventTypeCell.js b/UI/History/Table/EventTypeCell.js similarity index 100% rename from UI/History/EventTypeCell.js rename to UI/History/Table/EventTypeCell.js diff --git a/UI/History/HistoryDetailsCell.js b/UI/History/Table/HistoryDetailsCell.js similarity index 100% rename from UI/History/HistoryDetailsCell.js rename to UI/History/Table/HistoryDetailsCell.js diff --git a/UI/History/Table/HistoryTableLayout.js b/UI/History/Table/HistoryTableLayout.js new file mode 100644 index 000000000..1ab551fe7 --- /dev/null +++ b/UI/History/Table/HistoryTableLayout.js @@ -0,0 +1,108 @@ +'use strict'; +define( + [ + 'marionette', + 'backgrid', + 'History/HistoryCollection', + 'History/Table/EventTypeCell', + 'Cells/SeriesTitleCell', + 'Cells/EpisodeNumberCell', + 'Cells/EpisodeTitleCell', + 'Cells/QualityCell', + 'Cells/RelativeDateCell', + 'History/Table/HistoryDetailsCell', + 'Shared/Grid/Pager', + 'Shared/LoadingView' + ], function (Marionette, + Backgrid, + HistoryCollection, + EventTypeCell, + SeriesTitleCell, + EpisodeNumberCell, + EpisodeTitleCell, + QualityCell, + RelativeDateCell, + HistoryDetailsCell, + GridPager, + LoadingView) { + return Marionette.Layout.extend({ + template: 'History/Table/HistoryTableLayoutTemplate', + + regions: { + history: '#x-history', + toolbar: '#x-toolbar', + pager : '#x-pager' + }, + + columns: + [ + { + name : 'eventType', + label : '', + cell : EventTypeCell, + cellValue: 'this' + }, + { + name : 'series', + label: 'Series', + cell : SeriesTitleCell + }, + { + name : 'episode', + label : 'Episode', + sortable: false, + cell : EpisodeNumberCell + }, + { + name : 'episode', + label : 'Episode Title', + sortable: false, + cell : EpisodeTitleCell + }, + { + name : 'quality', + label : 'Quality', + cell : QualityCell, + sortable: false + }, + { + name : 'date', + label: 'Date', + cell : RelativeDateCell + }, + { + name : 'this', + label : '', + cell : HistoryDetailsCell, + sortable: false + } + ], + + + initialize: function () { + this.collection = new HistoryCollection(); + this.listenTo(this.collection, 'sync', this._showTable); + }, + + + _showTable: function (collection) { + + this.history.show(new Backgrid.Grid({ + columns : this.columns, + collection: collection, + className : 'table table-hover' + })); + + this.pager.show(new GridPager({ + columns : this.columns, + collection: collection + })); + }, + + onShow: function () { + this.history.show(new LoadingView()); + this.collection.fetch(); + } + + }); + }); diff --git a/UI/History/Table/HistoryTableLayoutTemplate.html b/UI/History/Table/HistoryTableLayoutTemplate.html new file mode 100644 index 000000000..ae43e6692 --- /dev/null +++ b/UI/History/Table/HistoryTableLayoutTemplate.html @@ -0,0 +1,11 @@ +
+
+
+
+
+
+
+
+
+
+
diff --git a/UI/Mixins/backbone.signalr.mixin.js b/UI/Mixins/backbone.signalr.mixin.js index e0154e6af..759488776 100644 --- a/UI/Mixins/backbone.signalr.mixin.js +++ b/UI/Mixins/backbone.signalr.mixin.js @@ -13,6 +13,13 @@ define( var processMessage = function (options) { + if (options.action === 'sync') { + console.log('sync received, refetching collection'); + collection.fetch(); + + return; + } + var model = new collection.model(options.resource, {parse: true}); collection.add(model, {merge: true}); console.log(options.action + ': {0}}'.format(options.resource)); diff --git a/UI/Router.js b/UI/Router.js index f792762b5..a37039da1 100644 --- a/UI/Router.js +++ b/UI/Router.js @@ -8,6 +8,7 @@ require( 'Series/SeriesCollection', 'ProgressMessaging/ProgressMessageCollection', 'Commands/CommandMessengerCollectionView', + 'History/Queue/QueueCollection', 'Navbar/NavbarView', 'jQuery/RouteBinder', 'jquery' @@ -18,6 +19,7 @@ require( SeriesCollection, ProgressMessageCollection, CommandMessengerCollectionView, + QueueCollection, NavbarView, RouterBinder, $) { @@ -36,6 +38,7 @@ require( 'settings/:action(/:query)' : 'settings', 'missing' : 'missing', 'history' : 'history', + 'history/:action' : 'history', 'rss' : 'rss', 'system' : 'system', 'system/:action' : 'system', diff --git a/UI/Series/Details/SeriesDetailsLayout.js b/UI/Series/Details/SeriesDetailsLayout.js index ea4024675..5e0066564 100644 --- a/UI/Series/Details/SeriesDetailsLayout.js +++ b/UI/Series/Details/SeriesDetailsLayout.js @@ -150,7 +150,6 @@ define( }, _renameSeries: function () { - CommandController.Execute('renameSeries', { name : 'renameSeries', seriesId: this.model.id @@ -172,7 +171,7 @@ define( this.seasonCollection = new SeasonCollection(this.model.get('seasons')); this.episodeCollection = new EpisodeCollection({ seriesId: this.model.id }).bindSignalR(); - this.episodeFileCollection = new EpisodeFileCollection({ seriesId: this.model.id }); + this.episodeFileCollection = new EpisodeFileCollection({ seriesId: this.model.id }).bindSignalR(); $.when(this.episodeCollection.fetch(), this.episodeFileCollection.fetch()).done(function () { var seasonCollectionView = new SeasonCollectionView({ From fc3ad9023dda85f9ddf89336869cb9665de28742 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Wed, 2 Oct 2013 08:16:41 -0700 Subject: [PATCH 20/52] Close view after adding series --- UI/AddSeries/AddSeriesView.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/UI/AddSeries/AddSeriesView.js b/UI/AddSeries/AddSeriesView.js index 957b2cabc..2eb2596d6 100644 --- a/UI/AddSeries/AddSeriesView.js +++ b/UI/AddSeries/AddSeriesView.js @@ -99,7 +99,7 @@ define( else if (!this.isExisting) { this.collection.reset(); - this.searchResult.show(this.resultCollectionView); + this.searchResult.close(); this.ui.seriesSearch.val(''); this.ui.seriesSearch.focus(); } From 76089b460c2fcafb6a7579142f45abdd88fb14e8 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Wed, 2 Oct 2013 08:33:23 -0700 Subject: [PATCH 21/52] Cleaned up queue table a bit. --- NzbDrone.Api/Queue/QueueResource.cs | 2 +- NzbDrone.Core/Queue/Queue.cs | 2 +- NzbDrone.Core/Queue/QueueService.cs | 2 +- UI/Cells/cells.less | 5 +++++ UI/History/Queue/TimeleftCell.js | 6 +++--- 5 files changed, 11 insertions(+), 6 deletions(-) diff --git a/NzbDrone.Api/Queue/QueueResource.cs b/NzbDrone.Api/Queue/QueueResource.cs index 4d91534dc..77a7c2772 100644 --- a/NzbDrone.Api/Queue/QueueResource.cs +++ b/NzbDrone.Api/Queue/QueueResource.cs @@ -12,7 +12,7 @@ namespace NzbDrone.Api.Queue public QualityModel Quality { get; set; } public Decimal Size { get; set; } public String Title { get; set; } - public Decimal SizeLeft { get; set; } + public Decimal Sizeleft { get; set; } public TimeSpan Timeleft { get; set; } } } diff --git a/NzbDrone.Core/Queue/Queue.cs b/NzbDrone.Core/Queue/Queue.cs index 7b82aeb80..611aa05f4 100644 --- a/NzbDrone.Core/Queue/Queue.cs +++ b/NzbDrone.Core/Queue/Queue.cs @@ -11,7 +11,7 @@ namespace NzbDrone.Core.Queue public QualityModel Quality { get; set; } public Decimal Size { get; set; } public String Title { get; set; } - public Decimal SizeLeft { get; set; } + public Decimal Sizeleft { get; set; } public TimeSpan Timeleft { get; set; } } } diff --git a/NzbDrone.Core/Queue/QueueService.cs b/NzbDrone.Core/Queue/QueueService.cs index 019645c6e..07eb767f2 100644 --- a/NzbDrone.Core/Queue/QueueService.cs +++ b/NzbDrone.Core/Queue/QueueService.cs @@ -59,7 +59,7 @@ namespace NzbDrone.Core.Queue queue.Quality = remoteEpisode.ParsedEpisodeInfo.Quality; queue.Title = queueItem.Title; queue.Size = queueItem.Size; - queue.SizeLeft = queueItem.SizeLeft; + queue.Sizeleft = queueItem.SizeLeft; queue.Timeleft = queueItem.Timeleft; queued.Add(queue); } diff --git a/UI/Cells/cells.less b/UI/Cells/cells.less index 38789980c..af5a71e8d 100644 --- a/UI/Cells/cells.less +++ b/UI/Cells/cells.less @@ -91,4 +91,9 @@ td.episode-status-cell, td.quality-cell { .series-actions-cell { width: 40px; +} + +.timeleft-cell { + cursor: default; + width: 80px; } \ No newline at end of file diff --git a/UI/History/Queue/TimeleftCell.js b/UI/History/Queue/TimeleftCell.js index 00b924398..9ead67f63 100644 --- a/UI/History/Queue/TimeleftCell.js +++ b/UI/History/Queue/TimeleftCell.js @@ -6,7 +6,7 @@ define( ], function (NzbDroneCell) { return NzbDroneCell.extend({ - className: 'history-event-type-cell', + className: 'timeleft-cell', render: function () { this.$el.empty(); @@ -15,10 +15,10 @@ define( var timeleft = this.cellValue.get('timeleft'); var size = this.cellValue.get('size'); - var sizeLeft = this.cellValue.get('sizeLeft'); + var sizeleft = this.cellValue.get('sizeleft'); this.$el.html(timeleft); - this.$el.attr('title', '{0} MB / {1} MB'.format(sizeLeft, size)); + this.$el.attr('title', '{0} MB / {1} MB'.format(sizeleft, size)); } return this; From fe5b42696d27ff2930129159f3acdaffdf8918c8 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Wed, 2 Oct 2013 12:41:21 -0700 Subject: [PATCH 22/52] Auto detect first day of week for calendar New: Calendar will use systems first day of week when displaying --- NzbDrone.Api/System/SystemModule.cs | 3 ++- NzbDrone.Common/DateTimeExtensions.cs | 24 +++++++++++++++++++++++ NzbDrone.Common/EnvironmentInfo/OsInfo.cs | 8 ++++++++ NzbDrone.Common/NzbDrone.Common.csproj | 1 + UI/Calendar/CalendarView.js | 1 + 5 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 NzbDrone.Common/DateTimeExtensions.cs diff --git a/NzbDrone.Api/System/SystemModule.cs b/NzbDrone.Api/System/SystemModule.cs index a013b15af..f409612fd 100644 --- a/NzbDrone.Api/System/SystemModule.cs +++ b/NzbDrone.Api/System/SystemModule.cs @@ -42,7 +42,8 @@ namespace NzbDrone.Api.System IsLinux = OsInfo.IsLinux, IsWindows = OsInfo.IsWindows, Branch = _configFileProvider.Branch, - Authentication = _configFileProvider.AuthenticationEnabled + Authentication = _configFileProvider.AuthenticationEnabled, + StartOfWeek = (int)OsInfo.FirstDayOfWeek }.AsResponse(); } diff --git a/NzbDrone.Common/DateTimeExtensions.cs b/NzbDrone.Common/DateTimeExtensions.cs new file mode 100644 index 000000000..8b2ba6491 --- /dev/null +++ b/NzbDrone.Common/DateTimeExtensions.cs @@ -0,0 +1,24 @@ +using System; +using System.Globalization; + +namespace NzbDrone.Common +{ + public static class DateTimeExtensions + { + public static DateTime GetFirstDayOfWeek(this DateTime dayInWeek) + { + var defaultCultureInfo = CultureInfo.CurrentCulture; + return GetFirstDayOfWeek(dayInWeek, defaultCultureInfo); + } + + public static DateTime GetFirstDayOfWeek(this DateTime dayInWeek, CultureInfo cultureInfo) + { + DayOfWeek firstDay = cultureInfo.DateTimeFormat.FirstDayOfWeek; + DateTime firstDayInWeek = dayInWeek.Date; + while (firstDayInWeek.DayOfWeek != firstDay) + firstDayInWeek = firstDayInWeek.AddDays(-1); + + return firstDayInWeek; + } + } +} diff --git a/NzbDrone.Common/EnvironmentInfo/OsInfo.cs b/NzbDrone.Common/EnvironmentInfo/OsInfo.cs index b30c2c2ee..3b769bfea 100644 --- a/NzbDrone.Common/EnvironmentInfo/OsInfo.cs +++ b/NzbDrone.Common/EnvironmentInfo/OsInfo.cs @@ -28,5 +28,13 @@ namespace NzbDrone.Common.EnvironmentInfo return !IsLinux; } } + + public static DayOfWeek FirstDayOfWeek + { + get + { + return DateTime.Today.GetFirstDayOfWeek().DayOfWeek; + } + } } } \ No newline at end of file diff --git a/NzbDrone.Common/NzbDrone.Common.csproj b/NzbDrone.Common/NzbDrone.Common.csproj index 0d76e91a2..91c71c005 100644 --- a/NzbDrone.Common/NzbDrone.Common.csproj +++ b/NzbDrone.Common/NzbDrone.Common.csproj @@ -66,6 +66,7 @@ + diff --git a/UI/Calendar/CalendarView.js b/UI/Calendar/CalendarView.js index 38c3affea..ec4012a8e 100644 --- a/UI/Calendar/CalendarView.js +++ b/UI/Calendar/CalendarView.js @@ -21,6 +21,7 @@ define( allDayDefault : false, ignoreTimezone: false, weekMode : 'variable', + firstDay : window.NzbDrone.ServerStatus.startOfWeek, timeFormat : 'h(:mm)tt', header : { left : 'prev,next today', From 5bf0e197ec6fc9fe844cacba0f6c67010187a2c0 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Wed, 2 Oct 2013 18:01:32 -0700 Subject: [PATCH 23/52] Moved source code under src folder - massive change --- Gruntfile.js | 132 +++---- NzbDrone.Api/NzbDrone.Api.ncrunchproject | 22 -- .../NzbDrone.Common.Test.ncrunchproject | 60 ---- .../NzbDrone.Common.ncrunchproject | 22 -- NzbDrone.Core.Test/App_Data/Config.xml | 5 - NzbDrone.Core/NzbDrone.Core.ncrunchproject | 23 -- .../NzbDrone.Test.Common.ncrunchproject | 22 -- .../NzbDrone.Test.Dummy.ncrunchproject | 22 -- .../NzbDrone.Update.Test.ncrunchproject | 22 -- .../NzbDrone.Update.ncrunchproject | 22 -- NzbDrone.Wix/configuration.xml | 22 -- NzbDrone.Wix/dotNetInstaller.exe | Bin 1134592 -> 0 bytes NzbDrone.Wix/nzbdrone.wix.build.bat | 8 - NzbDrone.Wix/nzbdrone.wix.build.debug.bat | 10 - NzbDrone.Wix/nzbdrone.wix.build.wxs | 84 ----- NzbDrone.ncrunchsolution | 13 - .../ServiceInstall.ncrunchproject | 23 -- .../ServiceUninstall.ncrunchproject | 23 -- build.ps1 | 17 +- {.nuget => src/.nuget}/NuGet.Config | 0 {.nuget => src/.nuget}/NuGet.exe | Bin {.nuget => src/.nuget}/NuGet.targets | 0 .../Configuration/ExceptronConfiguration.cs | 0 .../Exceptron.Client}/ExceptionData.cs | 0 .../Exceptron.Client}/ExceptionSeverity.cs | 0 .../Exceptron.Client}/Exceptron.Client.csproj | 4 +- .../Exceptron.Client}/Exceptron.Client.nuspec | 0 .../ExceptronApiException.cs | 0 .../Exceptron.Client}/ExceptronClient.cs | 0 .../Exceptron.Client}/IExceptronClient.cs | 0 .../Exceptron.Client}/IRestClient.cs | 0 .../Message/ExceptionReport.cs | 0 .../Message/ExceptionResponse.cs | 0 .../Exceptron.Client}/Message/Frame.cs | 0 .../NuGet/web.config.transform | 0 .../Properties/AssemblyInfo.cs | 0 .../Exceptron.Client}/RestClient.cs | 0 .../Exceptron.Client}/fastJSON/Getters.cs | 0 .../Exceptron.Client}/fastJSON/JSON.cs | 0 .../Exceptron.Client}/fastJSON/JsonParser.cs | 0 .../fastJSON/JsonSerializer.cs | 0 .../fastJSON/SafeDictionary.cs | 0 .../Exceptron.Client}/fastJSON/license.txt | 0 .../Libraries}/Interop.NetFwTypeLib.dll | Bin .../Libraries}/Manifest Tool/mt.exe | Bin .../Libraries}/Manifest Tool/mt.exe.config | 0 .../Libraries}/Sqlite/System.Data.SQLite.dll | Bin .../Libraries}/Sqlite/System.Data.SQLite.xml | 0 .../Libraries}/Sqlite/sqlite3.dll | Bin .../Converters/BooleanIntConverter.cs | 0 .../Converters/BooleanYNConverter.cs | 0 .../Marr.Data}/Converters/CastConverter.cs | 0 .../Converters/ConversionException.cs | 0 .../Marr.Data}/Converters/ConverterContext.cs | 0 .../Marr.Data}/Converters/EnumIntConverter.cs | 0 .../Converters/EnumStringConverter.cs | 0 .../Marr.Data}/Converters/IConverter.cs | 0 {Marr.Data => src/Marr.Data}/DataHelper.cs | 0 {Marr.Data => src/Marr.Data}/DataMapper.cs | 0 .../Marr.Data}/DataMappingException.cs | 0 {Marr.Data => src/Marr.Data}/EntityGraph.cs | 0 {Marr.Data => src/Marr.Data}/EntityMerger.cs | 0 .../Marr.Data}/EntityReference.cs | 0 .../Marr.Data}/ExtensionMethods.cs | 0 .../Marr.Data}/GroupingKeyCollection.cs | 0 {Marr.Data => src/Marr.Data}/IDataMapper.cs | 0 {Marr.Data => src/Marr.Data}/LazyLoaded.cs | 0 {Marr.Data => src/Marr.Data}/MapRepository.cs | 0 .../Marr.Data}/Mapping/ColumnAttribute.cs | 0 .../Marr.Data}/Mapping/ColumnInfo.cs | 0 .../Marr.Data}/Mapping/ColumnMap.cs | 0 .../Marr.Data}/Mapping/ColumnMapBuilder.cs | 0 .../Marr.Data}/Mapping/ColumnMapCollection.cs | 0 .../Marr.Data}/Mapping/EnumConversionType.cs | 0 .../Marr.Data}/Mapping/FluentMappings.cs | 0 .../Marr.Data}/Mapping/IColumnInfo.cs | 0 .../Marr.Data}/Mapping/IRelationshipInfo.cs | 0 .../Marr.Data}/Mapping/MapBuilder.cs | 0 .../Marr.Data}/Mapping/MappingHelper.cs | 0 .../Marr.Data}/Mapping/Relationship.cs | 0 .../Mapping/RelationshipAttribute.cs | 0 .../Marr.Data}/Mapping/RelationshipBuilder.cs | 0 .../Mapping/RelationshipCollection.cs | 0 .../Marr.Data}/Mapping/RelationshipInfo.cs | 0 .../Strategies/AttributeMapStrategy.cs | 0 .../Strategies/ConventionMapStrategy.cs | 0 .../Mapping/Strategies/IMapStrategy.cs | 0 .../Mapping/Strategies/PropertyMapStrategy.cs | 0 .../Strategies/ReflectionMapStrategyBase.cs | 0 .../Marr.Data}/Mapping/TableAttribute.cs | 0 .../Marr.Data}/Mapping/TableBuilder.cs | 0 {Marr.Data => src/Marr.Data}/Marr.Data.csproj | 4 +- .../Marr.Data}/Parameters/DbTypeBuilder.cs | 0 .../Marr.Data}/Parameters/IDbTypeBuilder.cs | 0 .../Marr.Data}/Parameters/OleDbTypeBuilder.cs | 0 .../Parameters/ParameterChainMethods.cs | 0 .../Marr.Data}/Parameters/SqlDbTypeBuilder.cs | 0 .../Marr.Data}/Properties/AssemblyInfo.cs | 0 .../Marr.Data}/QGen/DeleteQuery.cs | 0 .../Marr.Data}/QGen/Dialects/Dialect.cs | 0 .../QGen/Dialects/FirebirdDialect.cs | 0 .../Marr.Data}/QGen/Dialects/OracleDialect.cs | 0 .../QGen/Dialects/SqlServerCeDialect.cs | 0 .../QGen/Dialects/SqlServerDialect.cs | 0 .../Marr.Data}/QGen/Dialects/SqliteDialect.cs | 0 .../Marr.Data}/QGen/ExpressionVisitor.cs | 0 {Marr.Data => src/Marr.Data}/QGen/IQuery.cs | 0 .../Marr.Data}/QGen/IQueryBuilder.cs | 0 .../Marr.Data}/QGen/InsertQuery.cs | 0 .../Marr.Data}/QGen/InsertQueryBuilder.cs | 0 .../Marr.Data}/QGen/JoinBuilder.cs | 0 .../Marr.Data}/QGen/PagingQueryDecorator.cs | 0 .../Marr.Data}/QGen/QueryBuilder.cs | 0 .../Marr.Data}/QGen/QueryFactory.cs | 0 .../Marr.Data}/QGen/QueryQueueItem.cs | 0 .../Marr.Data}/QGen/RowCountQueryDecorator.cs | 0 .../Marr.Data}/QGen/SelectQuery.cs | 0 .../Marr.Data}/QGen/SortBuilder.cs | 0 .../Marr.Data}/QGen/SortColumn.cs | 0 .../QGen/SqlitePagingQueryDecorator.cs | 0 .../QGen/SqliteRowCountQueryDecorator.cs | 0 {Marr.Data => src/Marr.Data}/QGen/Table.cs | 0 .../Marr.Data}/QGen/TableCollection.cs | 0 .../Marr.Data}/QGen/UpdateQuery.cs | 0 .../Marr.Data}/QGen/UpdateQueryBuilder.cs | 0 {Marr.Data => src/Marr.Data}/QGen/View.cs | 0 .../Marr.Data}/QGen/WhereBuilder.cs | 0 .../Reflection/IReflectionStrategy.cs | 0 .../Marr.Data}/Reflection/ReflectionHelper.cs | 0 .../Reflection/SimpleReflectionStrategy.cs | 0 {Marr.Data => src/Marr.Data}/SqlModesEnum.cs | 0 {Marr.Data => src/Marr.Data}/UnitOfWork.cs | 0 .../Marr.Data}/UnitOfWorkSharedContext.cs | 0 .../ClientSchemaTests/SchemaBuilderFixture.cs | 0 .../DirectoryLookupServiceFixture.cs | 0 .../MappingTests/ResourceMappingFixture.cs | 0 .../NzbDrone.Api.Test.csproj | 0 .../Properties/AssemblyInfo.cs | 0 .../NzbDrone.Api.Test}/packages.config | 0 .../Authentication/AuthenticationService.cs | 0 .../Authentication/EnableBasicAuthInNancy.cs | 0 .../EnableStatelessAuthInNancy.cs | 0 .../Authentication/NzbDroneUser.cs | 0 .../NzbDrone.Api}/Calendar/CalendarModule.cs | 0 .../NzbDrone.Api}/ClientSchema/Field.cs | 0 .../ClientSchema/FieldDefinitionAttribute.cs | 0 .../ClientSchema/SchemaBuilder.cs | 0 .../ClientSchema/SchemaDeserializer.cs | 0 .../ClientSchema/SelectOption.cs | 0 .../NzbDrone.Api}/Commands/CommandModule.cs | 0 .../NzbDrone.Api}/Commands/CommandResource.cs | 0 .../Config/NamingConfigResource.cs | 0 .../NzbDrone.Api}/Config/NamingModule.cs | 0 .../Config/NamingSampleResource.cs | 0 .../NzbDrone.Api}/Config/SettingsModule.cs | 0 .../Directories/DirectoryLookupService.cs | 0 .../Directories/DirectoryModule.cs | 0 .../EpisodeFiles/EpisodeFileModule.cs | 0 .../EpisodeFiles/EpisodeFileResource.cs | 0 .../NzbDrone.Api}/Episodes/EpisodeModule.cs | 0 .../NzbDrone.Api}/Episodes/EpisodeResource.cs | 0 .../ErrorManagement/ApiException.cs | 0 .../ErrorManagement/ErrorHandler.cs | 0 .../ErrorManagement/ErrorModel.cs | 0 .../ErrorManagement/NzbDroneErrorPipeline.cs | 0 .../Exceptions/InvalidApiKeyException.cs | 0 .../Extensions/LazyExtensions.cs | 0 .../Extensions/NancyJsonSerializer.cs | 0 .../Pipelines/CacheHeaderPipeline.cs | 0 .../Extensions/Pipelines/GZipPipeline.cs | 0 .../Pipelines/IRegisterNancyPipeline.cs | 0 .../Pipelines/IfModifiedPipeline.cs | 0 .../Extensions/ReqResExtensions.cs | 0 .../Extensions/RequestExtensions.cs | 0 .../Frontend/IsCacheableSpecification.cs | 0 .../Mappers/IMapHttpRequestsToDisk.cs | 0 .../Frontend/Mappers/IndexHtmlMapper.cs | 0 .../Frontend/Mappers/LogFileMapper.cs | 0 .../Frontend/Mappers/MediaCoverMapper.cs | 0 .../Frontend/Mappers/StaticResourceMapper.cs | 0 .../Mappers/StaticResourceMapperBase.cs | 0 .../Frontend/StaticResourceModule.cs | 0 .../NzbDrone.Api}/History/HistoryModule.cs | 0 .../NzbDrone.Api}/History/HistoryResource.cs | 0 .../NzbDrone.Api}/IndexerResource.cs | 0 .../NzbDrone.Api}/Indexers/IndexerModule.cs | 0 .../NzbDrone.Api}/Indexers/IndexerResource.cs | 0 .../Indexers/IndexerSchemaModule.cs | 0 .../NzbDrone.Api}/Indexers/ReleaseModule.cs | 0 .../NzbDrone.Api}/Indexers/ReleaseResource.cs | 0 .../NzbDrone.Api}/Logs/LogFileModule.cs | 0 .../NzbDrone.Api}/Logs/LogFileResource.cs | 0 .../NzbDrone.Api}/Logs/LogModule.cs | 0 .../NzbDrone.Api}/Logs/LogResource.cs | 0 .../NzbDrone.Api}/Mapping/CloneInjection.cs | 0 .../Mapping/MappingValidation.cs | 0 .../Mapping/ResourceMappingException.cs | 0 .../Mapping/ValueInjectorExtensions.cs | 80 ++--- .../NzbDrone.Api}/Missing/MissingModule.cs | 0 .../NzbDrone.Api}/NancyBootstrapper.cs | 0 .../Notifications/NotificationModule.cs | 0 .../Notifications/NotificationResource.cs | 0 .../Notifications/NotificationSchemaModule.cs | 0 .../NzbDrone.Api}/NzbDrone.Api.csproj | 4 +- .../NzbDrone.Api}/NzbDroneApiModule.cs | 0 .../NzbDrone.Api}/NzbDroneRestModule.cs | 0 .../NzbDroneRestModuleWithSignalR.cs | 0 .../NzbDrone.Api}/PagingResource.cs | 0 .../NzbDrone.Api}/Properties/AssemblyInfo.cs | 0 .../NzbDrone.Api}/ProviderModuleBase.cs | 0 .../Qualities/QualityProfileModule.cs | 0 .../Qualities/QualityProfileResource.cs | 0 .../Qualities/QualityProfileSchemaModule.cs | 0 .../Qualities/QualitySizeModule.cs | 0 .../Qualities/QualitySizeResource.cs | 0 .../NzbDrone.Api}/Queue/QueueModule.cs | 0 .../NzbDrone.Api}/Queue/QueueResource.cs | 0 .../NzbDrone.Api}/REST/BadRequestException.cs | 0 .../NzbDrone.Api}/REST/ResourceValidator.cs | 0 .../NzbDrone.Api}/REST/RestModule.cs | 0 .../NzbDrone.Api}/REST/RestResource.cs | 0 .../NzbDrone.Api}/ResourceChangeMessage.cs | 0 .../RootFolders/RootFolderModule.cs | 0 .../RootFolders/RootFolderResource.cs | 0 .../Series/SeriesLookupModule.cs | 0 .../NzbDrone.Api}/Series/SeriesModule.cs | 0 .../NzbDrone.Api}/Series/SeriesResource.cs | 0 .../NzbDrone.Api}/System/SystemModule.cs | 0 .../NzbDrone.Api}/TinyIoCNancyBootstrapper.cs | 0 .../NzbDrone.Api}/Update/UpdateModule.cs | 0 .../NzbDrone.Api}/Validation/PathValidator.cs | 0 .../Validation/RuleBuilderExtensions.cs | 0 .../NzbDrone.Api}/packages.config | 0 .../NzbDrone.App.Test}/ContainerFixture.cs | 0 .../NzbDrone.App.Test}/License.txt | 0 .../MonitoringProviderTest.cs | 0 .../NzbDrone.Host.Test.csproj | 0 .../Properties/AssemblyInfo.cs | 0 .../NzbDrone.App.Test}/RouterTest.cs | 0 .../NzbDrone.App.Test}/packages.config | 0 .../CacheTests/CachedFixture.cs | 0 .../CacheTests/CachedManagerFixture.cs | 0 .../ConfigFileProviderTest.cs | 0 .../DiskProviderTests/DiskProviderFixture.cs | 0 .../DiskProviderTests/FreeSpaceFixture.cs | 0 .../DiskProviderTests/IsParentFixture.cs | 0 .../EnsureTest/PathExtensionFixture.cs | 0 .../EnvironmentProviderTest.cs | 0 .../EnvironmentProviderTest.cs | 0 .../StartupArgumentsFixture.cs | 0 .../NzbDrone.Common.Test}/License.txt | 0 .../NzbDrone.Common.Test.csproj | 0 .../PathExtensionFixture.cs | 0 .../ProcessProviderTests.cs | 0 .../ReflectionExtensions.cs | 0 .../ReflectionExtensionFixture.cs | 60 ++-- .../ServiceFactoryFixture.cs | 0 .../ServiceProviderTests.cs | 0 .../NzbDrone.Common.Test}/WebClientTests.cs | 0 .../NzbDrone.Common.Test}/packages.config | 0 .../NzbDrone.Common}/ArchiveProvider.cs | 0 .../NzbDrone.Common}/Cache/CacheManger.cs | 0 .../NzbDrone.Common}/Cache/Cached.cs | 0 .../NzbDrone.Common}/Cache/ICached.cs | 0 .../NzbDrone.Common}/Composition/Container.cs | 0 .../Composition/ContainerBuilderBase.cs | 0 .../Composition/IContainer.cs | 0 .../NzbDrone.Common}/ConsoleService.cs | 0 .../NzbDrone.Common}/DateTimeExtensions.cs | 0 .../NzbDrone.Common}/DiskProvider.cs | 0 .../NzbDrone.Common}/EnsureThat/Ensure.cs | 0 .../EnsureThat/EnsureBoolExtensions.cs | 0 .../EnsureThat/EnsureCollectionExtensions.cs | 0 .../EnsureThat/EnsureDateTimeExtensions.cs | 0 .../EnsureThat/EnsureDecimalExtensions.cs | 0 .../EnsureThat/EnsureDoubleExtensions.cs | 0 .../EnsureThat/EnsureGuidExtensions.cs | 0 .../EnsureThat/EnsureIntExtensions.cs | 0 .../EnsureThat/EnsureLongExtensions.cs | 0 .../EnsureNullableValueTypeExtensions.cs | 0 .../EnsureThat/EnsureObjectExtensions.cs | 0 .../EnsureThat/EnsureShortExtensions.cs | 0 .../EnsureThat/EnsureStringExtensions.cs | 0 .../EnsureThat/EnsureTypeExtensions.cs | 0 .../EnsureThat/ExceptionFactory.cs | 0 .../EnsureThat/ExpressionExtensions.cs | 0 .../NzbDrone.Common}/EnsureThat/Param.cs | 0 .../Resources/ExceptionMessages.Designer.cs | 0 .../Resources/ExceptionMessages.resx | 0 .../NzbDrone.Common}/EnsureThat/TypeParam.cs | 0 .../EnvironmentInfo/AppFolderInfo.cs | 0 .../EnvironmentInfo/BuildInfo.cs | 0 .../EnvironmentInfo/OsInfo.cs | 0 .../EnvironmentInfo/RuntimeInfo.cs | 0 .../EnvironmentInfo/StartupArguments.cs | 0 .../Exceptions/NzbDroneException.cs | 0 .../Expansive/CircularReferenceException.cs | 0 .../NzbDrone.Common}/Expansive/Expansive.cs | 0 .../Expansive/PatternStyle.cs | 0 .../NzbDrone.Common}/Expansive/Tree.cs | 0 .../NzbDrone.Common}/Expansive/TreeNode.cs | 0 .../Expansive/TreeNodeList.cs | 0 .../NzbDrone.Common}/Expansive/license.txt | 0 .../NzbDrone.Common}/HashUtil.cs | 0 .../NzbDrone.Common}/HttpProvider.cs | 0 .../NzbDrone.Common}/IEnumerableExtensions.cs | 0 .../Instrumentation/ExceptronTarget.cs | 0 .../GlobalExceptionHandlers.cs | 0 .../Instrumentation/LogEventExtensions.cs | 76 ++--- .../Instrumentation/LogTargets.cs | 0 .../Instrumentation/LogglyTarget.cs | 124 +++---- .../Instrumentation/NzbDroneLogger.cs | 0 .../Instrumentation/VersionLayoutRenderer.cs | 0 .../NzbDrone.Common}/Messaging/IEvent.cs | 0 .../NzbDrone.Common}/Messaging/IMessage.cs | 0 .../NzbDrone.Common}/Model/ProcessInfo.cs | 0 .../NzbDrone.Common}/NzbDrone.Common.csproj | 4 +- .../NzbDrone.Common}/PathEqualityComparer.cs | 0 .../NzbDrone.Common}/PathExtensions.cs | 0 .../Processes/ProcessOutput.cs | 0 .../Processes/ProcessProvider.cs | 0 .../Properties/AssemblyInfo.cs | 0 .../Properties/SharedAssemblyInfo.cs | 0 .../Reflection/ReflectionExtensions.cs | 0 .../Security/IgnoreCertErrorPolicy.cs | 0 .../Serializer/IntConverter.cs | 0 .../NzbDrone.Common}/Serializer/Json.cs | 0 .../NzbDrone.Common}/ServiceFactory.cs | 0 .../NzbDrone.Common}/ServiceProvider.cs | 0 .../NzbDrone.Common}/Services.cs | 0 .../NzbDrone.Common}/StringExtensions.cs | 0 .../LimitedConcurrencyLevelTaskScheduler.cs | 0 .../NzbDrone.Common}/TPL/TaskExtensions.cs | 0 .../NzbDrone.Common}/TinyIoC.cs | 0 .../NzbDrone.Common}/TryParseExtension.cs | 0 .../NzbDrone.Common}/packages.config | 0 .../NzbDrone.Console}/ConsoleAlerts.cs | 0 .../NzbDrone.Console}/ConsoleApp.cs | 0 .../NzbDrone.Console}/NzbDrone.Console.csproj | 4 +- .../Properties/AssemblyInfo.cs | 0 .../NzbDrone.Console}/packages.config | 0 .../Configuration/ConfigCachingFixture.cs | 0 .../Configuration/ConfigServiceFixture.cs | 0 .../Scene/SceneMappingProxyFixture.cs | 0 .../Scene/SceneMappingServiceFixture.cs | 0 .../Datastore/BasicRepositoryFixture.cs | 0 .../ProviderSettingConverterFixture.cs | 0 .../Datastore/DatabaseRelationshipFixture.cs | 0 .../Datastore/MappingExtentionFixture.cs | 0 .../Datastore/ObjectDatabaseFixture.cs | 0 .../PagingOffsetFixture.cs | 0 .../ToSortDirectionFixture.cs | 0 .../ReflectionStrategyFixture/Benchmarks.cs | 0 .../AlterFixture.cs | 0 .../DuplicateFixture.cs | 0 .../AcceptableSizeSpecificationFixture.cs | 0 .../CutoffSpecificationFixture.cs | 0 .../DownloadDecisionMakerFixture.cs | 0 .../LanguageSpecificationFixture.cs | 0 .../MonitoredEpisodeSpecificationFixture.cs | 0 ...otRestrictedReleaseSpecificationFixture.cs | 0 ...ityAllowedByProfileSpecificationFixture.cs | 0 .../QualityUpgradeSpecificationFixture.cs | 0 .../RetentionSpecificationFixture.cs | 0 .../RssSync/ProperSpecificationFixture.cs | 0 .../UpgradeDiskSpecificationFixture.cs | 0 .../UpgradeHistorySpecificationFixture.cs | 0 .../DownloadApprovedFixture.cs | 0 .../GetQualifiedReportsFixture.cs | 0 .../BlackholeProviderFixture.cs | 0 .../NzbgetProviderTests/DownloadNzbFixture.cs | 0 .../NzbgetProviderTests/QueueFixture.cs | 0 .../PneumaticProviderFixture.cs | 0 .../SabProviderTests/QueueFixture.cs | 0 .../SabProviderTests/SabProviderFixture.cs | 0 .../Download/DownloadServiceFixture.cs | 0 .../EpisodeParseResultTest.cs | 0 .../Files/Categories_json.txt | 0 .../NzbDrone.Core.Test}/Files/History.txt | 0 .../Files/HistoryEmpty.txt | 0 .../Files/Indexers/Newznab/unauthorized.xml | 0 .../NzbDrone.Core.Test}/Files/JsonError.txt | 0 .../Files/LongOverview.txt | 0 .../Files/Media/H264_sample.mp4 | Bin .../Files/Nzbget/JsonError.txt | 0 .../Files/Nzbget/Queue.txt | 0 .../Files/Nzbget/Queue_empty.txt | 0 .../NzbDrone.Core.Test}/Files/Queue.txt | 0 .../NzbDrone.Core.Test}/Files/QueueEmpty.txt | 0 .../Files/QueueUnknownPriority.txt | 0 .../Files/RSS/SizeParsing/newznab.xml | 0 .../Files/RSS/SizeParsing/nzbclub.xml | 0 .../Files/RSS/SizeParsing/nzbindex.xml | 0 .../Files/RSS/SizeParsing/nzbsrus.xml | 0 .../Files/RSS/SizeParsing/omgwtfnzbs.xml | 0 .../Files/RSS/filesharingtalk.xml | 0 .../NzbDrone.Core.Test}/Files/RSS/newznab.xml | 0 .../NzbDrone.Core.Test}/Files/RSS/nzbclub.xml | 0 .../Files/RSS/nzbindex.xml | 0 .../NzbDrone.Core.Test}/Files/RSS/nzbsrus.xml | 0 .../Files/RSS/omgwtfnzbs.xml | 0 .../NzbDrone.Core.Test}/Files/RSS/wombles.xml | 0 .../Files/SceneMappings.json | 0 .../NzbDrone.Core.Test}/Files/TestArchive.zip | Bin .../NzbDrone.Core.Test}/Files/Xem/Failure.txt | 0 .../NzbDrone.Core.Test}/Files/Xem/Ids.txt | 0 .../Files/Xem/Mappings.txt | 0 .../NzbDrone.Core.Test}/Files/Xem/Names.txt | 0 .../NzbDrone.Core.Test}/FluentTest.cs | 0 .../NzbDrone.Core.Test}/Framework/CoreTest.cs | 0 .../NzbDrone.Core.Test}/Framework/DbTest.cs | 0 .../Framework/NBuilderExtensions.cs | 0 .../Framework/TestBaseTests.cs | 0 .../Framework/TestDbHelper.cs | 0 .../HistoryTests/HistoryRepositoryFixture.cs | 0 .../CleanupOrphanedEpisodesFixture.cs | 0 .../CleanupOrphanedHistoryItemsFixture.cs | 0 .../FetchAndParseRssServiceFixture.cs | 0 .../SearchDefinitionFixture.cs | 0 .../IndexerTests/BasicRssParserFixture.cs | 0 .../FetchAndParseRssServiceFixture.cs | 0 .../IndexerTests/IndexerServiceFixture.cs | 0 .../IndexerIntegrationTests.cs | 0 .../IndexerTests/XElementExtensionsFixture.cs | 0 .../DatabaseTargetFixture.cs | 0 .../JobTests/JobRepositoryFixture.cs | 0 .../NzbDrone.Core.Test}/JobTests/TestJobs.cs | 0 .../CoverExistsSpecificationFixture.cs | 148 ++++---- .../MediaCoverServiceFixture.cs | 0 .../DownloadedEpisodesImportServiceFixture.cs | 0 .../ImportDecisionMakerFixture.cs | 0 .../FreeSpaceSpecificationFixture.cs | 0 .../NotInUseSpecificationFixture.cs | 0 .../NotSampleSpecificationFixture.cs | 0 .../NotUnpackingSpecificationFixture.cs | 0 .../UpgradeSpecificationFixture.cs | 0 .../ImportApprovedEpisodesFixture.cs | 0 .../MediaFiles/MediaFileRepositoryFixture.cs | 0 .../MediaFiles/MediaFileServiceTest.cs | 0 .../MediaFileTableCleanupServiceFixture.cs | 0 .../MediaInfo/VideoFileInfoReaderFixture.cs | 0 .../RenameEpisodeFileServiceFixture.cs | 0 .../UpgradeMediaFileServiceFixture.cs | 0 .../CommandEqualityComparerFixture.cs | 0 .../Commands/CommandExecutorFixture.cs | 0 .../Messaging/Commands/CommandFixture.cs | 0 .../Events/EventAggregatorFixture.cs | 0 .../MetadataSourceTests/TraktProxyFixture.cs | 0 .../NotificationTests/GrowlProviderTest.cs | 0 .../NotificationServiceFixture.cs | 0 .../NotificationTests/PlexProviderTest.cs | 0 .../NotificationTests/ProwlProviderTest.cs | 0 .../Xbmc/GetJsonVersionFixture.cs | 0 .../Xbmc/Http/ActivePlayersFixture.cs | 0 .../Xbmc/Http/CheckForErrorFixture.cs | 0 .../Xbmc/Http/GetSeriesPathFixture.cs | 0 .../Xbmc/Http/UpdateFixture.cs | 0 .../Xbmc/Json/ActivePlayersFixture.cs | 0 .../Xbmc/Json/CheckForErrorFixture.cs | 0 .../Xbmc/Json/GetSeriesPathFixture.cs | 0 .../Xbmc/Json/UpdateFixture.cs | 0 .../NzbDrone.Core.Test.csproj | 0 .../OrganizerTests/BuildFilePathFixture.cs | 0 .../OrganizerTests/GetNewFilenameFixture.cs | 0 .../ParserTests/ParserFixture.cs | 0 .../ParsingServiceTests/GetEpisodesFixture.cs | 0 .../ParsingServiceTests/MapFixture.cs | 0 .../ParserTests/QualityParserFixture.cs | 0 .../Properties/AssemblyInfo.cs | 0 .../ArchiveProviderFixture.cs | 0 .../DiskProviderTests/FreeDiskSpaceFixture.cs | 0 .../GetVideoFilesFixture.cs | 0 .../RecycleBinProviderTests/CleanupFixture.cs | 0 .../DeleteDirectoryFixture.cs | 0 .../DeleteFileFixture.cs | 0 .../RecycleBinProviderTests/EmptyFixture.cs | 0 .../Providers/XemProxyFixture.cs | 0 .../Qualities/QualityFixture.cs | 0 .../QualityProfileRepositoryFixture.cs | 0 .../Qualities/QualityProfileServiceFixture.cs | 0 .../Qualities/QualitySizeRepositoryFixture.cs | 0 .../Qualities/QualitySizeServiceFixture.cs | 0 .../FreeSpaceOnDrivesFixture.cs | 0 .../RootFolderServiceFixture.cs | 0 .../SeriesStatisticsFixture.cs | 0 .../ThingiProvider/ProviderBaseFixture.cs | 0 .../ThingiProviderTests/NullConfigFixture.cs | 0 .../EpisodeProviderTest.cs | 0 ...deProviderTest_GetEpisodesByParseResult.cs | 0 .../HandleEpisodeFileDeletedFixture.cs | 0 .../EpisodesBetweenDatesFixture.cs | 0 .../EpisodesRepositoryReadFixture.cs | 0 .../EpisodesWithoutFilesFixture.cs | 0 .../FindEpisodeFixture.cs | 0 .../TvTests/QualityModelFixture.cs | 0 .../TvTests/RefreshEpisodeServiceFixture.cs | Bin .../QualityProfileRepositoryFixture.cs | 0 .../SeriesServiceTests/AddSeriesFixture.cs | Bin .../SeriesServiceTests/UpdateSeriesFixture.cs | Bin .../UpdatePackageProviderFixture.cs | 0 .../UpdateTests/UpdateServiceFixture.cs | 0 .../NzbDrone.Core.Test}/XbmcVersionTests.cs | 0 .../NzbDrone.Core.Test}/packages.config | 0 .../Annotations/FieldDefinitionAttribute.cs | 0 .../NzbDrone.Core}/App.config | 0 .../NzbDrone.Core}/Configuration/Config.cs | 0 .../Configuration/ConfigFileProvider.cs | 0 .../Configuration/ConfigRepository.cs | 0 .../Configuration/ConfigService.cs | 0 .../Events/ConfigFileSavedEvent.cs | 0 .../Configuration/Events/ConfigSavedEvent.cs | 0 .../Configuration/IConfigService.cs | 0 .../InvalidConfigFileException.cs | 0 .../DailySeries/DailySeriesDataProxy.cs | 0 .../DailySeries/DailySeriesService.cs | 0 .../DataAugmentation/Scene/SceneMapping.cs | 0 .../Scene/SceneMappingProxy.cs | 0 .../Scene/SceneMappingRepository.cs | 0 .../Scene/SceneMappingService.cs | 0 .../Scene/UpdateSceneMappingCommand.cs | 0 .../DataAugmentation/Xem/Model/XemResult.cs | 0 .../Xem/Model/XemSceneTvdbMapping.cs | 0 .../DataAugmentation/Xem/Model/XemValues.cs | 0 .../Xem/UpdateXemMappingsCommand.cs | 0 .../DataAugmentation/Xem/XemProxy.cs | 0 .../DataAugmentation/Xem/XemService.cs | 0 .../Datastore/BasicRepository.cs | 0 .../Datastore/ConnectionStringFactory.cs | 0 .../Converters/BooleanIntConverter.cs | 0 .../Converters/EmbeddedDocumentConverter.cs | 0 .../Datastore/Converters/EnumIntConverter.cs | 0 .../Datastore/Converters/Int32Converter.cs | 0 .../Converters/ProviderSettingConverter.cs | 0 .../Converters/QualityIntConverter.cs | 0 .../Datastore/Converters/UtcConverter.cs | 0 .../NzbDrone.Core}/Datastore/Database.cs | 0 .../NzbDrone.Core}/Datastore/DbFactory.cs | 0 .../Datastore/Events/ModelEvent.cs | 0 .../Datastore/IEmbeddedDocument.cs | 0 .../NzbDrone.Core}/Datastore/LazyList.cs | 0 .../Datastore/MappingExtensions.cs | 120 +++---- .../Datastore/Migration/001_InitialSetup.cs | 0 ...02_Remove_tvrage_imdb_unique_constraint.cs | 0 ...3_remove_clean_title_from_scene_mapping.cs | 0 .../Migration/004_updated_history.cs | 0 .../005_added_eventtype_to_history.cs | 0 .../Migration/006_add_index_to_log_time.cs | 0 .../007_add_renameEpisodes_to_naming.cs | 0 .../Datastore/Migration/008_remove_backlog.cs | 0 .../Migration/009_fix_renameEpisodes.cs | 0 .../Datastore/Migration/010_add_monitored.cs | 0 .../Datastore/Migration/011_remove_ignored.cs | 0 .../Migration/012_remove_custom_start_date.cs | 0 .../Migration/013_add_air_date_utc.cs | 0 .../Datastore/Migration/014_drop_air_date.cs | 0 .../Migration/015_add_air_date_as_string.cs | 0 .../016_updated_imported_history_item.cs | 0 .../Migration/017_reset_scene_names.cs | 0 .../Migration/018_remove_duplicates.cs | 0 .../019_restore_unique_constraints.cs | 0 .../020_add_year_and_seasons_to_series.cs | 0 .../Migration/021_drop_seasons_table.cs | 0 ...2_move_notification_to_generic_provider.cs | 0 .../023_add_config_contract_to_indexers.cs | 0 .../Migration/Framework/MigrationContext.cs | 0 .../Framework/MigrationController.cs | 0 .../Migration/Framework/MigrationExtension.cs | 0 .../Migration/Framework/MigrationLogger.cs | 0 .../Migration/Framework/MigrationOptions.cs | 0 .../Framework/NzbDroneMigrationBase.cs | 0 .../Migration/Framework/SQLiteColumn.cs | 0 .../Migration/Framework/SQLiteIndex.cs | 0 ...per (vaio's conflicted copy 2013-09-04).cs | 0 .../Framework/SQLiteMigrationHelper.cs | 0 .../Migration/Framework/SqliteAlter.cs | 0 .../NzbDrone.Core}/Datastore/MigrationType.cs | 0 .../NzbDrone.Core}/Datastore/ModelBase.cs | 0 .../Datastore/ModelNotFoundException.cs | 0 .../NzbDrone.Core}/Datastore/PagingSpec.cs | 0 .../Datastore/PagingSpecExtensions.cs | 0 .../Datastore/RelationshipExtensions.cs | 0 .../NzbDrone.Core}/Datastore/ResultSet.cs | 0 .../NzbDrone.Core}/Datastore/TableMapping.cs | 0 .../DecisionEngine/DownloadDecisionMaker.cs | 0 .../IDecisionEngineSpecification.cs | 0 .../DecisionEngine/IRejectWithReason.cs | 0 .../QualityUpgradableSpecification.cs | 0 .../AcceptableSizeSpecification.cs | 0 .../Specifications/CutoffSpecification.cs | 0 .../Specifications/DownloadDecision.cs | 0 .../Specifications/LanguageSpecification.cs | 0 .../Specifications/NotInQueueSpecification.cs | 0 .../NotRestrictedReleaseSpecification.cs | 0 .../Specifications/NotSampleSpecification.cs | 0 .../QualityAllowedByProfileSpecification.cs | 0 .../Specifications/RetentionSpecification.cs | 0 .../RssSync/MonitoredEpisodeSpecification.cs | 0 .../RssSync/ProperSpecification.cs | 0 .../RssSync/UpgradeHistorySpecification.cs | 0 .../Search/DailyEpisodeMatchSpecification.cs | 0 .../Search/SeasonMatchSpecification.cs | 0 .../Search/SingleEpisodeMatchSpecification.cs | 0 .../SingleEpisodeSearchMatchSpecification.cs | 0 .../UpgradeDiskSpecification.cs | 0 .../Download/Clients/BlackholeProvider.cs | 0 .../Clients/Nzbget/EnqueueResponse.cs | 0 .../Download/Clients/Nzbget/ErrorModel.cs | 0 .../Download/Clients/Nzbget/JsonError.cs | 0 .../Download/Clients/Nzbget/JsonRequest.cs | 0 .../Download/Clients/Nzbget/NzbGetQueue.cs | 0 .../Clients/Nzbget/NzbGetQueueItem.cs | 0 .../Download/Clients/Nzbget/NzbgetClient.cs | 0 .../Download/Clients/Nzbget/PriorityType.cs | 0 .../Download/Clients/Nzbget/VersionModel.cs | 0 .../Download/Clients/PneumaticClient.cs | 0 .../Clients/Sabnzbd/ConnectionInfoModel.cs | 0 .../SabnzbdPriorityTypeConverter.cs | 0 .../SabnzbdQueueTimeConverter.cs | 0 .../Clients/Sabnzbd/SabAddResponse.cs | 0 .../Sabnzbd/SabAutoConfigureService.cs | 0 .../Clients/Sabnzbd/SabCategoryModel.cs | 0 .../Download/Clients/Sabnzbd/SabHistory.cs | 0 .../Clients/Sabnzbd/SabHistoryItem.cs | 0 .../Download/Clients/Sabnzbd/SabJsonError.cs | 0 .../Download/Clients/Sabnzbd/SabModel.cs | 0 .../Clients/Sabnzbd/SabPriorityType.cs | 0 .../Download/Clients/Sabnzbd/SabQueue.cs | 0 .../Download/Clients/Sabnzbd/SabQueueItem.cs | 0 .../Clients/Sabnzbd/SabVersionModel.cs | 0 .../Download/Clients/Sabnzbd/SabnzbdClient.cs | 0 .../Download/DownloadApprovedReports.cs | 0 .../Download/DownloadClientProvider.cs | 0 .../Download/DownloadClientType.cs | 0 .../Download/DownloadService.cs | 0 .../Download/EpisodeGrabbedEvent.cs | 0 .../Download/IDownloadClient.cs | 0 .../NzbDrone.Core}/Download/QueueItem.cs | 0 .../Exceptions/BadRequestException.cs | 0 .../Exceptions/DownstreamException.cs | 0 .../Exceptions/NzbDroneClientException.cs | 0 .../Exceptions/StatusCodeToExceptions.cs | 0 .../NzbDrone.Core}/Fluent.cs | 0 .../NzbDrone.Core}/History/History.cs | 0 .../History/HistoryRepository.cs | 0 .../NzbDrone.Core}/History/HistoryService.cs | 0 .../Housekeepers/CleanupOrphanedEpisodes.cs | 0 .../CleanupOrphanedHistoryItems.cs | 0 .../Housekeeping/HousekeepingCommand.cs | 0 .../Housekeeping/HousekeepingService.cs | 0 .../Housekeeping/IHousekeepingTask.cs | 0 .../Definitions/DailyEpisodeSearchCriteria.cs | 0 .../Definitions/SearchCriteriaBase.cs | 0 .../Definitions/SeasonSearchCriteria.cs | 0 .../SingleEpisodeSearchCriteria.cs | 0 .../IndexerSearch/EpisodeSearchCommand.cs | 0 .../IndexerSearch/EpisodeSearchService.cs | 0 .../IndexerSearch/NzbSearchService.cs | 0 .../IndexerSearch/SearchAndDownloadService.cs | 0 .../IndexerSearch/SeasonSearchCommand.cs | 0 .../IndexerSearch/SeasonSearchService.cs | 0 .../IndexerSearch/SeriesSearchCommand.cs | 0 .../IndexerSearch/SeriesSearchService.cs | 0 .../Indexers/BasicTorrentRssParser.cs | 0 .../Indexers/DownloadProtocols.cs | 0 .../Indexers/Exceptions/ApiKeyException.cs | 0 .../NzbDrone.Core}/Indexers/Eztv/Eztv.cs | 0 .../Indexers/FetchAndParseRssService.cs | 0 .../NzbDrone.Core}/Indexers/IIndexer.cs | 0 .../NzbDrone.Core}/Indexers/IParseFeed.cs | 0 .../NzbDrone.Core}/Indexers/IndexerBase.cs | 0 .../Indexers/IndexerDefinition.cs | 0 .../NzbDrone.Core}/Indexers/IndexerFactory.cs | 0 .../Indexers/IndexerFetchService.cs | 0 .../Indexers/IndexerRepository.cs | 0 .../Indexers/IndexerSettingUpdatedEvent.cs | 0 .../Indexers/Newznab/Newznab.cs | 0 .../Indexers/Newznab/NewznabException.cs | 0 .../Indexers/Newznab/NewznabParser.cs | 0 .../Indexers/Newznab/NewznabPreProcessor.cs | 0 .../Indexers/Newznab/NewznabSettings.cs | 0 .../Indexers/Newznab/SizeParsingException.cs | 0 .../Indexers/NewznabTestService.cs | 0 .../Indexers/Omgwtfnzbs/Omgwtfnzbs.cs | 0 .../Indexers/Omgwtfnzbs/OmgwtfnzbsParser.cs | 0 .../Indexers/Omgwtfnzbs/OmgwtfnzbsSettings.cs | 0 .../NzbDrone.Core}/Indexers/RssParserBase.cs | 0 .../NzbDrone.Core}/Indexers/RssSyncCommand.cs | 0 .../NzbDrone.Core}/Indexers/RssSyncService.cs | 0 .../Indexers/Wombles/Wombles.cs | 0 .../Indexers/Wombles/WomblesParser.cs | 0 .../Indexers/XElementExtensions.cs | 0 .../Commands/ClearLogCommand.cs | 0 .../Commands/DeleteLogFilesCommand.cs | 0 .../Commands/TrimLogCommand.cs | 0 .../Instrumentation/DatabaseTarget.cs | 0 .../Instrumentation/DeleteLogFilesService.cs | 0 .../NzbDrone.Core}/Instrumentation/Log.cs | 0 .../Instrumentation/LogRepository.cs | 0 .../Instrumentation/LogService.cs | 0 .../Instrumentation/LoggerExtensions.cs | 0 .../Instrumentation/SetLoggingLevel.cs | 0 .../NzbDrone.Core}/Jobs/JobRepository.cs | 0 .../NzbDrone.Core}/Jobs/ScheduledTask.cs | 0 .../NzbDrone.Core}/Jobs/Scheduler.cs | 0 .../NzbDrone.Core}/Jobs/TaskManager.cs | 0 .../Lifecycle/ApplicationShutdownRequested.cs | 0 .../Lifecycle/ApplicationStartedEvent.cs | 0 .../CoverAlreadyExistsSpecification.cs | 98 +++--- .../NzbDrone.Core}/MediaCover/MediaCover.cs | 0 .../MediaCover/MediaCoverService.cs | 0 .../Commands/BackendCommandAttribute.cs | 0 .../MediaFiles/Commands/CleanMediaFileDb.cs | 0 .../Commands/CleanUpRecycleBinCommand.cs | 0 .../Commands/DownloadedEpisodesScanCommand.cs | 0 .../Commands/RenameSeasonCommand.cs | 0 .../Commands/RenameSeriesCommand.cs | 0 .../MediaFiles/DiskScanService.cs | 0 .../DownloadedEpisodesImportService.cs | 0 .../NzbDrone.Core}/MediaFiles/EpisodeFile.cs | 0 .../MediaFiles/EpisodeFileMovingService.cs | 0 .../IImportDecisionEngineSpecification.cs | 0 .../EpisodeImport/ImportApprovedEpisodes.cs | 0 .../EpisodeImport/ImportDecision.cs | 0 .../EpisodeImport/ImportDecisionMaker.cs | 0 .../Specifications/FreeSpaceSpecification.cs | 0 .../Specifications/NotInUseSpecification.cs | 0 .../Specifications/NotSampleSpecification.cs | 0 .../NotUnpackingSpecification.cs | 0 .../Specifications/UpgradeSpecification.cs | 0 .../Events/EpisodeDownloadedEvent.cs | 0 .../Events/EpisodeFileAddedEvent.cs | 0 .../Events/EpisodeFileDeletedEvent.cs | 0 .../MediaFiles/Events/EpisodeImportedEvent.cs | 0 .../MediaFiles/Events/SeriesRenamedEvent.cs | 0 .../MediaFiles/MediaFileExtensions.cs | 0 .../MediaFiles/MediaFileRepository.cs | 0 .../MediaFiles/MediaFileService.cs | 0 .../MediaFileTableCleanupService.cs | 0 .../MediaFiles/MediaInfo/MediaInfoModel.cs | 0 .../MediaInfo/VideoFileInfoReader.cs | 0 .../MediaFiles/RecycleBinProvider.cs | 0 .../MediaFiles/RenameEpisodeFileService.cs | 0 .../MediaFiles/SameFilenameException.cs | 0 .../MediaFiles/UpgradeMediaFileService.cs | 0 .../NzbDrone.Core}/MediaInfo.dll | Bin .../Commands/BackendCommandAttribute.cs | 0 .../Messaging/Commands/Command.cs | 0 .../Commands/CommandEqualityComparer.cs | 0 .../Messaging/Commands/CommandExecutor.cs | 0 .../Messaging/Commands/ICommandExecutor.cs | 0 .../Messaging/Commands/IExecute.cs | 0 .../Messaging/Commands/TestCommand.cs | 0 .../Messaging/Commands/TestCommandExecutor.cs | 0 .../Commands/Tracking/CommandStatus.cs | 0 .../Tracking/CommandTrackingService.cs | 0 .../Commands/Tracking/ExistingCommand.cs | 0 .../Tracking/TrackedCommandCleanupCommand.cs | 0 .../Messaging/Events/CommandCreatedEvent.cs | 0 .../Messaging/Events/CommandExecutedEvent.cs | 0 .../Messaging/Events/EventAggregator.cs | 0 .../Messaging/Events/IEventAggregator.cs | 0 .../Messaging/Events/IHandle.cs | 0 .../Messaging/IProcessMessage.cs | 0 .../MetadataSource/IProvideSeriesInfo.cs | 0 .../MetadataSource/ISearchForNewSeries.cs | 0 .../MetadataSource/Trakt/Episode.cs | 0 .../MetadataSource/Trakt/FullShow.cs | 0 .../MetadataSource/Trakt/Images.cs | 0 .../MetadataSource/Trakt/Season.cs | 0 .../MetadataSource/Trakt/TraktException.cs | 0 .../MetadataSource/TraktProxy.cs | 0 .../Notifications/Email/Email.cs | 0 .../Notifications/Email/EmailService.cs | 0 .../Notifications/Email/EmailSettings.cs | 0 .../Notifications/Email/TestEmailCommand.cs | 0 .../Notifications/Growl/Growl.cs | 0 .../Notifications/Growl/GrowlService.cs | 0 .../Notifications/Growl/GrowlSettings.cs | 0 .../Notifications/Growl/TestGrowlCommand.cs | 0 .../Notifications/INotification.cs | 0 .../Notifications/Notification.cs | 0 .../Notifications/NotificationBase.cs | 0 .../Notifications/NotificationDefinition.cs | 0 .../Notifications/NotificationRepository.cs | 0 .../Notifications/NotificationService.cs | 0 .../NotificationSettingsProvider.cs | 0 .../NotifyMyAndroid/NotifyMyAndroid.cs | 0 .../NotifyMyAndroidPriority.cs | 0 .../NotifyMyAndroid/NotifyMyAndroidProxy.cs | 0 .../NotifyMyAndroidSettings.cs | 0 .../TestNotifyMyAndroidCommand.cs | 0 .../Notifications/Plex/PlexClient.cs | 0 .../Notifications/Plex/PlexClientSettings.cs | 0 .../Notifications/Plex/PlexServer.cs | 0 .../Notifications/Plex/PlexServerSettings.cs | 0 .../Notifications/Plex/PlexService.cs | 0 .../Plex/TestPlexClientCommand.cs | 0 .../Plex/TestPlexServerCommand.cs | 0 .../Prowl/InvalidApiKeyException.cs | 0 .../Notifications/Prowl/Prowl.cs | 0 .../Notifications/Prowl/ProwlPriority.cs | 0 .../Notifications/Prowl/ProwlService.cs | 0 .../Notifications/Prowl/ProwlSettings.cs | 0 .../Notifications/Prowl/TestProwlCommand.cs | 0 .../Notifications/PushBullet/PushBullet.cs | 0 .../PushBullet/PushBulletProxy.cs | 0 .../PushBullet/PushBulletSettings.cs | 0 .../PushBullet/TestPushBulletCommand.cs | 0 .../Pushover/InvalidResponseException.cs | 0 .../Notifications/Pushover/Pushover.cs | 0 .../Pushover/PushoverPriority.cs | 0 .../Notifications/Pushover/PushoverService.cs | 0 .../Pushover/PushoverSettings.cs | 0 .../Pushover/TestPushoverCommand.cs | 0 .../Notifications/Xbmc/HttpApiProvider.cs | 0 .../Notifications/Xbmc/IApiProvider.cs | 0 .../Xbmc/InvalidXbmcVersionException.cs | 0 .../Notifications/Xbmc/JsonApiProvider.cs | 0 .../Notifications/Xbmc/Model/ActivePlayer.cs | 0 .../Xbmc/Model/ActivePlayersDharmaResult.cs | 0 .../Xbmc/Model/ActivePlayersEdenResult.cs | 0 .../Notifications/Xbmc/Model/ErrorResult.cs | 0 .../Notifications/Xbmc/Model/TvShow.cs | 0 .../Xbmc/Model/TvShowResponse.cs | 0 .../Notifications/Xbmc/Model/TvShowResult.cs | 0 .../Notifications/Xbmc/Model/VersionResult.cs | 0 .../Xbmc/Model/XbmcJsonResult.cs | 0 .../Notifications/Xbmc/Model/XbmcVersion.cs | 0 .../Notifications/Xbmc/TestXbmcCommand.cs | 0 .../NzbDrone.Core}/Notifications/Xbmc/Xbmc.cs | 0 .../Notifications/Xbmc/XbmcService.cs | 0 .../Notifications/Xbmc/XbmcSettings.cs | 0 .../NzbDrone.Core}/NzbDrone.Core.csproj | 4 +- .../Organizer/EpisodeSortingType.cs | 0 .../Organizer/FileNameBuilder.cs | 0 .../NzbDrone.Core}/Organizer/NamingConfig.cs | 0 .../NzbDrone.Core}/Parser/Language.cs | 0 .../Parser/Model/LocalEpisode.cs | 0 .../Parser/Model/ParsedEpisodeInfo.cs | 0 .../Parser/Model/ReleaseInfo.cs | 0 .../Parser/Model/RemoteEpisode.cs | 0 .../Parser/Model/TorrentInfo.cs | 0 .../NzbDrone.Core}/Parser/Parser.cs | 0 .../NzbDrone.Core}/Parser/ParsingService.cs | 0 .../NzbDrone.Core}/Parser/QualityParser.cs | 0 .../ProgressMessaging}/CommandUpdatedEvent.cs | 0 .../ProgressMessageTarget.cs | 0 .../Properties/AnalysisRules.ruleset | 0 .../NzbDrone.Core}/Properties/AssemblyInfo.cs | 0 .../NzbDrone.Core}/Qualities/Quality.cs | 0 .../Qualities/QualityProfile.cs | 0 .../Qualities/QualityProfileInUseException.cs | 0 .../Qualities/QualityProfileRepository.cs | 0 .../Qualities/QualityProfileService.cs | 0 .../NzbDrone.Core}/Qualities/QualitySize.cs | 0 .../Qualities/QualitySizeRepository.cs | 0 .../Qualities/QualitySizeService.cs | 0 .../NzbDrone.Core}/Queue/Queue.cs | 0 .../NzbDrone.Core}/Queue/QueueScheduler.cs | 0 .../NzbDrone.Core}/Queue/QueueService.cs | 0 .../NzbDrone.Core}/Queue/UpdateQueueEvent.cs | 0 .../NzbDrone.Core}/Rest/RestException.cs | 0 .../Rest/RestSharpExtensions.cs | 0 .../NzbDrone.Core}/RootFolders/RootFolder.cs | 0 .../RootFolders/RootFolderService.cs | 0 .../RootFolders/UnmappedFolder.cs | 0 .../SeriesStats/SeriesStatistics.cs | 0 .../SeriesStats/SeriesStatisticsRepository.cs | 0 .../SeriesStats/SeriesStatisticsService.cs | 0 .../ConfigContractNotFoundException.cs | 0 .../ThingiProvider/IProvider.cs | 0 .../ThingiProvider/IProviderConfig.cs | 0 .../ThingiProvider/IProviderFactory.cs | 0 .../ThingiProvider/IProviderRepository.cs | 0 .../ThingiProvider/NullConfig.cs | 0 .../ThingiProvider/ProviderDefinition.cs | 0 .../ThingiProvider/ProviderFactory.cs | 0 .../ThingiProvider/ProviderRepository.cs | 0 .../Tv/Commands/RefreshSeriesCommand.cs | 0 .../NzbDrone.Core}/Tv/Episode.cs | 0 .../NzbDrone.Core}/Tv/EpisodeRepository.cs | 278 +++++++-------- .../NzbDrone.Core}/Tv/EpisodeService.cs | 0 .../Tv/Events/EpisodeInfoAddedEvent.cs | 0 .../Tv/Events/EpisodeInfoDeletedEvent.cs | 0 .../Tv/Events/EpisodeInfoUpdatedEvent.cs | 0 .../Tv/Events/SeriesAddedEvent.cs | 0 .../Tv/Events/SeriesDeletedEvent.cs | 0 .../Tv/Events/SeriesUpdatedEvent.cs | 0 .../NzbDrone.Core}/Tv/QualityModel.cs | 0 .../Tv/RefreshEpisodeService.cs | 286 ++++++++-------- .../NzbDrone.Core}/Tv/RefreshSeriesService.cs | 0 .../NzbDrone.Core}/Tv/Season.cs | 0 .../NzbDrone.Core}/Tv/Series.cs | 0 .../NzbDrone.Core}/Tv/SeriesRepository.cs | 0 .../NzbDrone.Core}/Tv/SeriesService.cs | 0 .../NzbDrone.Core}/Tv/SeriesStatusType.cs | 0 .../NzbDrone.Core}/Tv/SeriesTypes.cs | 0 .../Commands/ApplicationUpdateCommand.cs | 0 .../Update/InstallUpdateService.cs | 0 .../Update/RecentUpdateProvider.cs | 0 .../NzbDrone.Core}/Update/UpdateChanges.cs | 0 .../Update/UpdateCheckService.cs | 0 .../NzbDrone.Core}/Update/UpdatePackage.cs | 0 .../Update/UpdatePackageAvailable.cs | 0 .../Update/UpdatePackageProvider.cs | 0 .../Validation/RuleBuilderExtensions.cs | 0 .../NzbDrone.Core}/packages.config | 0 .../AccessControl/FirewallAdapter.cs | 0 .../AccessControl/NetshProvider.cs | 0 .../AccessControl/SslAdapter.cs | 0 .../AccessControl/UrlAclAdapter.cs | 0 .../NzbDrone.Host}/ApplicationModes.cs | 0 .../NzbDrone.Host}/ApplicationServer.cs | 0 .../NzbDrone.Host}/Bootstrap.cs | 0 .../NzbDrone.Host}/IUserAlert.cs | 0 .../NzbDrone.Host}/MainAppContainerBuilder.cs | 0 {NzbDrone.Host => src/NzbDrone.Host}/NLog.xsd | 0 .../NzbDrone.Host}/NzbDrone.Host.csproj | 4 +- .../NzbDrone.Host}/NzbDrone.ico | Bin .../NzbDrone.Host}/Owin/IHostController.cs | 0 .../Owin/MiddleWare/IOwinMiddleWare.cs | 0 .../Owin/MiddleWare/NancyMiddleWare.cs | 0 .../Owin/MiddleWare/SignalRMiddleWare.cs | 0 .../NzbDrone.Host}/Owin/NlogTextWriter.cs | 0 .../NzbDrone.Host}/Owin/OwinHostController.cs | 0 .../Owin/OwinServiceProvider.cs | 0 .../Owin/OwinTraceOutputFactory.cs | 0 .../NzbDrone.Host}/Owin/PortInUseException.cs | 0 .../NzbDrone.Host}/PlatformValidation.cs | 0 .../NzbDrone.Host}/PriorityMonitor.cs | 0 .../NzbDrone.Host}/Properties/AssemblyInfo.cs | 0 .../NzbDrone.Host}/Router.cs | 0 .../TerminateApplicationException.cs | 0 .../NzbDrone.Host}/app.config | 0 .../NzbDrone.Host}/packages.config | 0 .../Client/ClientBase.cs | 306 ++++++++--------- .../Client/EpisodeClient.cs | 0 .../Client/IndexerClient.cs | 0 .../Client/ReleaseClient.cs | 0 .../Client/SeriesClient.cs | 0 .../CommandIntegerationTests.cs | 0 .../EpisodeIntegrationTests.cs | 0 .../HistoryIntegrationTest.cs | 0 .../IndexerIntegrationFixture.cs | 0 .../IntegrationTest.cs | 0 .../IntegrationTestDirectoryInfo.cs | 0 .../NamingConfigTests.cs | 0 .../NzbDrone.Integration.Test.csproj | 0 .../NzbDroneRunner.cs | 0 .../Properties/AssemblyInfo.cs | 0 .../QualityProfileIntegrationTest.cs | 0 .../ReleaseIntegrationTest.cs | 0 .../RootFolderIntegrationTest.cs | 0 .../SeriesIntegrationTest.cs | 0 .../packages.config | 0 .../JsonTests/JsonFixture.cs | 0 .../NzbDrone.Libraries.Test.csproj | 0 .../Properties/AssemblyInfo.cs | 0 .../NzbDrone.Libraries.Test}/packages.config | 0 .../BroadcastSignalRMessage.cs | 0 .../NoOpPerformanceCounterManager.cs | 0 .../NzbDrone.SignalR}/NzbDrone.SignalR.csproj | 4 +- .../NzbDronePersistentConnection.cs | 0 .../Properties/AssemblyInfo.cs | 0 .../NzbDrone.SignalR}/Serializer.cs | 0 .../NzbDrone.SignalR}/SignalRMessage.cs | 0 .../SignalrDependencyResolver.cs | 0 .../NzbDrone.SignalR}/packages.config | 0 .../NzbDrone.Test.Common}/App.config | 0 .../AutoMoq/AutoMoqer.cs | 0 .../NzbDrone.Test.Common}/AutoMoq/License.txt | 0 .../Unity/AutoMockingBuilderStrategy.cs | 0 .../Unity/AutoMockingContainerExtension.cs | 0 .../Categories/DiskAccessTestAttribute.cs | 0 .../Categories/IntegrationTestAttribute.cs | 0 .../ConcurrencyCounter.cs | 0 .../ExceptionVerification.cs | 0 .../NzbDrone.Test.Common}/License.txt | 0 .../NzbDrone.Test.Common}/LoggingTest.cs | 0 .../NzbDrone.Test.Common}/MockerExtensions.cs | 0 .../NzbDrone.Test.Common.csproj | 0 .../NzbDrone.Test.Common}/ObjectExtentions.cs | 0 .../Properties/AssemblyInfo.cs | 0 .../ReflectionExtensions.cs | 0 .../NzbDrone.Test.Common}/StringExtensions.cs | 0 .../NzbDrone.Test.Common}/TestBase.cs | 0 .../NzbDrone.Test.Common}/TestException.cs | 0 .../NzbDrone.Test.Common}/packages.config | 0 .../NzbDrone.Test.Dummy}/DummyApp.cs | 0 .../NzbDrone.Test.Dummy.csproj | 0 .../Properties/AssemblyInfo.cs | 0 .../NzbDrone.Test.Dummy}/app.config | 0 .../InstallUpdateServiceFixture.cs | 0 .../NzbDrone.Update.Test}/License.txt | 0 .../NzbDrone.Update.Test.csproj | 0 .../NzbDrone.Update.Test}/ProgramFixture.cs | 0 .../Properties/AssemblyInfo.cs | 0 .../StartNzbDroneService.cs | 0 .../UpdateProviderStartFixture.cs | 0 .../NzbDrone.Update.Test}/packages.config | 0 .../NzbDrone.Update}/AppType.cs | 0 .../NzbDrone.Update}/NLog.xsd | 0 .../NzbDrone.Update}/NzbDrone.Update.csproj | 4 +- .../Properties/AssemblyInfo.cs | 0 .../NzbDrone.Update}/UpdateApp.cs | 0 .../UpdateContainerBuilder.cs | 0 .../UpdateEngine/BackupAndRestore.cs | 0 .../UpdateEngine/DetectApplicationType.cs | 0 .../UpdateEngine/InstallUpdateService.cs | 0 .../UpdateEngine/StartNzbDrone.cs | 0 .../UpdateEngine/TerminateNzbDrone.cs | 0 .../NzbDrone.Update}/app.config | 0 .../NzbDrone.Update}/packages.config | 0 NzbDrone.sln => src/NzbDrone.sln | 0 .../NzbDrone.sln.DotSettings | 0 .../NzbDrone}/MessageBoxUserAlert.cs | 0 {NzbDrone => src/NzbDrone}/NzbDrone.csproj | 4 +- .../NzbDrone}/Properties/AssemblyInfo.cs | 0 .../Properties/Resources.Designer.cs | 0 .../NzbDrone}/Properties/Resources.resx | 0 .../NzbDrone}/SysTray/SysTrayApp.cs | 0 {NzbDrone => src/NzbDrone}/WindowsApp.cs | 0 {NzbDrone => src/NzbDrone}/packages.config | 0 .../ServiceHelpers}/ServiceInstall/Program.cs | 0 .../ServiceInstall/Properties/AssemblyInfo.cs | 0 .../ServiceInstall/ServiceHelper.cs | 0 .../ServiceInstall/ServiceInstall.csproj | 4 +- .../ServiceHelpers}/ServiceInstall/app.config | 0 .../ServiceInstall/app.manifest | 0 .../ServiceInstall/green_puzzle.ico | Bin .../ServiceUninstall/Program.cs | 0 .../Properties/AssemblyInfo.cs | 0 .../ServiceUninstall/ServiceHelper.cs | 0 .../ServiceUninstall/ServiceUninstall.csproj | 4 +- .../ServiceUninstall/app.config | 0 .../ServiceUninstall/app.manifest | 0 .../ServiceUninstall/red_puzzle.ico | Bin .../SharedLiveTemplates.xml | 0 {UI => src/UI}/.idea/.name | 0 {UI => src/UI}/.idea/NzbDrone.UI.iml | 0 {UI => src/UI}/.idea/codeStyleSettings.xml | 0 {UI => src/UI}/.idea/dictionaries/Keivan.xml | 0 .../UI}/.idea/dictionaries/Keivan_Beigi.xml | 0 {UI => src/UI}/.idea/dictionaries/Mark.xml | 0 {UI => src/UI}/.idea/encodings.xml | 0 .../inspectionProfiles/Project_Default.xml | 0 .../inspectionProfiles/profiles_settings.xml | 0 {UI => src/UI}/.idea/jsLibraryMappings.xml | 0 {UI => src/UI}/.idea/jsLinters/jshint.xml | 0 {UI => src/UI}/.idea/jsLinters/jslint.xml | 0 {UI => src/UI}/.idea/misc.xml | 0 {UI => src/UI}/.idea/modules.xml | 0 .../runConfigurations/Debug___Chrome.xml | 0 .../runConfigurations/Debug___Firefox.xml | 0 {UI => src/UI}/.idea/scopes/NzbDrone.xml | 0 .../UI}/.idea/scopes/scope_settings.xml | 0 {UI => src/UI}/.idea/vcs.xml | 0 .../UI}/AddSeries/AddSeriesCollection.js | 0 {UI => src/UI}/AddSeries/AddSeriesLayout.js | 0 .../AddSeries/AddSeriesLayoutTemplate.html | 0 {UI => src/UI}/AddSeries/AddSeriesView.js | 0 .../UI}/AddSeries/AddSeriesViewTemplate.html | 0 .../AddExistingSeriesCollectionView.js | 0 .../Existing/UnmappedFolderCollection.js | 0 .../AddSeries/Existing/UnmappedFolderModel.js | 0 .../UI}/AddSeries/NotFoundTemplate.html | 0 {UI => src/UI}/AddSeries/NotFoundView.js | 0 .../UI}/AddSeries/RootFolders/Collection.js | 0 .../AddSeries/RootFolders/CollectionView.js | 0 .../UI}/AddSeries/RootFolders/ItemView.js | 0 .../RootFolders/ItemViewTemplate.html | 0 .../UI}/AddSeries/RootFolders/Layout.js | 0 .../AddSeries/RootFolders/LayoutTemplate.html | 0 {UI => src/UI}/AddSeries/RootFolders/Model.js | 0 .../RootFolderSelectionPartial.html | 0 .../StartingSeasonSelectionPartial.html | 0 .../AddSeries/SearchResultCollectionView.js | 0 {UI => src/UI}/AddSeries/SearchResultView.js | 322 +++++++++--------- .../AddSeries/SearchResultViewTemplate.html | 0 {UI => src/UI}/AddSeries/addSeries.less | 0 {UI => src/UI}/Calendar/CalendarLayout.js | 0 .../UI}/Calendar/CalendarLayoutTemplate.html | 0 {UI => src/UI}/Calendar/CalendarView.js | 0 {UI => src/UI}/Calendar/Collection.js | 0 {UI => src/UI}/Calendar/UpcomingCollection.js | 0 .../UI}/Calendar/UpcomingCollectionView.js | 0 {UI => src/UI}/Calendar/UpcomingItemView.js | 0 .../Calendar/UpcomingItemViewTemplate.html | 0 {UI => src/UI}/Calendar/calendar.less | 0 {UI => src/UI}/Cells/ApprovalStatusCell.js | 0 .../UI}/Cells/ApprovalStatusCellTemplate.html | 0 .../UI}/Cells/Edit/QualityCellEditor.js | 0 .../Cells/Edit/QualityCellEditorTemplate.html | 0 {UI => src/UI}/Cells/EpisodeActionsCell.js | 0 .../UI}/Cells/EpisodeActionsCellTemplate.html | 0 {UI => src/UI}/Cells/EpisodeNumberCell.js | 0 {UI => src/UI}/Cells/EpisodeProgressCell.js | 0 .../Cells/EpisodeProgressCellTemplate.html | 0 {UI => src/UI}/Cells/EpisodeStatusCell.js | 0 {UI => src/UI}/Cells/EpisodeTitleCell.js | 0 {UI => src/UI}/Cells/FileSizeCell.js | 0 .../UI}/Cells/Header/QualityHeaderCell.js | 0 {UI => src/UI}/Cells/IndexerCell.js | 0 {UI => src/UI}/Cells/NzbDroneCell.js | 0 {UI => src/UI}/Cells/QualityCell.js | 0 {UI => src/UI}/Cells/QualityCellTemplate.html | 0 {UI => src/UI}/Cells/QualityProfileCell.js | 0 {UI => src/UI}/Cells/RelativeDateCell.js | 0 {UI => src/UI}/Cells/SeriesActionsCell.js | 0 {UI => src/UI}/Cells/SeriesStatusCell.js | 0 {UI => src/UI}/Cells/SeriesTitleCell.js | 0 {UI => src/UI}/Cells/SeriesTitleTemplate.html | 0 {UI => src/UI}/Cells/TemplatedCell.js | 0 {UI => src/UI}/Cells/ToggleCell.js | 0 {UI => src/UI}/Cells/cells.less | 0 {UI => src/UI}/Commands/CommandCollection.js | 0 {UI => src/UI}/Commands/CommandController.js | 0 .../CommandMessengerCollectionView.js | 0 .../UI}/Commands/CommandMessengerItemView.js | 0 {UI => src/UI}/Commands/CommandModel.js | 0 {UI => src/UI}/Config.js | 0 {UI => src/UI}/Content/Backgrid/backgrid.less | 0 {UI => src/UI}/Content/Backgrid/filter.less | 0 .../UI}/Content/Backgrid/paginator.less | 0 .../UI}/Content/Bootstrap/accordion.less | 0 {UI => src/UI}/Content/Bootstrap/alerts.less | 0 .../UI}/Content/Bootstrap/bootstrap.less | 0 .../UI}/Content/Bootstrap/breadcrumbs.less | 0 .../UI}/Content/Bootstrap/button-groups.less | 0 {UI => src/UI}/Content/Bootstrap/buttons.less | 0 .../UI}/Content/Bootstrap/carousel.less | 0 {UI => src/UI}/Content/Bootstrap/close.less | 0 {UI => src/UI}/Content/Bootstrap/code.less | 0 .../Bootstrap/component-animations.less | 0 .../UI}/Content/Bootstrap/dropdowns.less | 0 {UI => src/UI}/Content/Bootstrap/forms.less | 0 {UI => src/UI}/Content/Bootstrap/grid.less | 0 .../UI}/Content/Bootstrap/hero-unit.less | 0 .../UI}/Content/Bootstrap/labels-badges.less | 0 {UI => src/UI}/Content/Bootstrap/layouts.less | 0 {UI => src/UI}/Content/Bootstrap/media.less | 0 {UI => src/UI}/Content/Bootstrap/mixins.less | 0 {UI => src/UI}/Content/Bootstrap/modals.less | 0 {UI => src/UI}/Content/Bootstrap/navbar.less | 0 {UI => src/UI}/Content/Bootstrap/navs.less | 0 {UI => src/UI}/Content/Bootstrap/pager.less | 0 .../UI}/Content/Bootstrap/pagination.less | 0 .../UI}/Content/Bootstrap/popovers.less | 0 .../UI}/Content/Bootstrap/progress-bars.less | 0 {UI => src/UI}/Content/Bootstrap/reset.less | 0 .../UI}/Content/Bootstrap/scaffolding.less | 0 {UI => src/UI}/Content/Bootstrap/sprites.less | 0 {UI => src/UI}/Content/Bootstrap/tables.less | 0 .../UI}/Content/Bootstrap/thumbnails.less | 0 {UI => src/UI}/Content/Bootstrap/tooltip.less | 0 {UI => src/UI}/Content/Bootstrap/type.less | 0 .../UI}/Content/Bootstrap/utilities.less | 0 .../UI}/Content/Bootstrap/variables.less | 0 {UI => src/UI}/Content/Bootstrap/wells.less | 0 .../UI/Content/FontAwesome/FontAwesome.otf | Bin .../UI}/Content/FontAwesome/bootstrap.less | 0 {UI => src/UI}/Content/FontAwesome/core.less | 0 .../UI}/Content/FontAwesome/extras.less | 0 .../Content/FontAwesome/font-awesome-ie7.less | 0 .../UI}/Content/FontAwesome/font-awesome.less | 0 .../FontAwesome/fontawesome-webfont.eot | Bin .../FontAwesome/fontawesome-webfont.svg | 0 .../FontAwesome/fontawesome-webfont.ttf | Bin .../FontAwesome/fontawesome-webfont.woff | Bin {UI => src/UI}/Content/FontAwesome/icons.less | 0 .../UI}/Content/FontAwesome/mixins.less | 0 {UI => src/UI}/Content/FontAwesome/path.less | 0 .../UI}/Content/FontAwesome/variables.less | 0 {UI => src/UI}/Content/Images/404.png | Bin .../UI}/Content/Images/black_linen_v2.png | Bin {UI => src/UI}/Content/Images/logo.png | Bin {UI => src/UI}/Content/Images/pattern.png | Bin {UI => src/UI}/Content/Images/poster-dark.jpg | Bin {UI => src/UI}/Content/Images/touch/114.png | Bin {UI => src/UI}/Content/Images/touch/144.png | Bin {UI => src/UI}/Content/Images/touch/57.png | Bin {UI => src/UI}/Content/Images/touch/72.png | Bin .../UI}/Content/Messenger/messenger.css | 0 .../Content/Messenger/messenger.future.css | 0 .../UI}/Content/Overrides/bootstrap.less | 0 .../Overrides/bootstrap.toggle-switch.less | 0 {UI => src/UI}/Content/Overrides/browser.less | 0 .../UI}/Content/bootstrap.toggle-switch.css | 0 {UI => src/UI}/Content/font.less | 0 .../UI/Content/fonts/opensans-italic.eot | Bin .../UI/Content/fonts/opensans-italic.ttf | Bin .../UI/Content/fonts/opensans-italic.woff | Bin .../UI/Content/fonts/opensans-light.eot | Bin .../UI/Content/fonts/opensans-light.ttf | Bin .../UI/Content/fonts/opensans-light.woff | Bin .../UI/Content/fonts/opensans-lightitalic.eot | Bin .../UI/Content/fonts/opensans-lightitalic.ttf | Bin .../Content/fonts/opensans-lightitalic.woff | Bin .../UI/Content/fonts/opensans-regular.eot | Bin .../UI/Content/fonts/opensans-regular.ttf | Bin .../UI/Content/fonts/opensans-regular.woff | Bin .../UI/Content/fonts/opensans-semibold.eot | Bin .../UI/Content/fonts/opensans-semibold.ttf | Bin .../UI/Content/fonts/opensans-semibold.woff | Bin .../Content/fonts/opensans-semibolditalic.eot | Bin .../Content/fonts/opensans-semibolditalic.ttf | Bin .../fonts/opensans-semibolditalic.woff | Bin {UI => src/UI}/Content/form.less | 0 {UI => src/UI}/Content/fullcalendar.css | 0 {UI => src/UI}/Content/icons.less | 0 {UI => src/UI}/Content/legend.less | 0 {UI => src/UI}/Content/menu.less | 0 {UI => src/UI}/Content/overrides.less | 0 {UI => src/UI}/Content/prefixer.less | 0 {UI => src/UI}/Content/spinner.less | 0 {UI => src/UI}/Content/theme.less | 0 {UI => src/UI}/Content/variables.less | 0 {UI => src/UI}/Controller.js | 0 .../UI}/Episode/EpisodeDetailsLayout.js | 0 .../Episode/EpisodeDetailsLayoutTemplate.html | 0 {UI => src/UI}/Episode/Search/ButtonsView.js | 0 .../Episode/Search/ButtonsViewTemplate.html | 0 .../UI}/Episode/Search/EpisodeSearchLayout.js | 0 .../Search/EpisodeSearchLayoutTemplate.html | 0 {UI => src/UI}/Episode/Search/ManualLayout.js | 0 .../Episode/Search/ManualLayoutTemplate.html | 0 .../Episode/Summary/EpisodeSummaryLayout.js | 0 .../Summary/EpisodeSummaryLayoutTemplate.html | 0 {UI => src/UI}/Episode/Summary/NoFileView.js | 0 .../Episode/Summary/NoFileViewTemplate.html | 0 {UI => src/UI}/Form/CheckboxTemplate.html | 0 {UI => src/UI}/Form/FormBuilder.js | 0 {UI => src/UI}/Form/FormHelpPartial.html | 0 {UI => src/UI}/Form/PasswordTemplate.html | 0 {UI => src/UI}/Form/SelectTemplate.html | 0 {UI => src/UI}/Form/TextboxTemplate.html | 0 {UI => src/UI}/Handlebars/Handlebars.Debug.js | 0 {UI => src/UI}/Handlebars/Helpers/DateTime.js | 0 {UI => src/UI}/Handlebars/Helpers/Episode.js | 0 {UI => src/UI}/Handlebars/Helpers/Html.js | 0 {UI => src/UI}/Handlebars/Helpers/Numbers.js | 0 {UI => src/UI}/Handlebars/Helpers/Quality.js | 0 {UI => src/UI}/Handlebars/Helpers/Series.js | 0 {UI => src/UI}/Handlebars/Helpers/Version.js | 0 .../backbone.marionette.templates.js | 0 .../UI}/History/Details/HistoryDetailsView.js | 0 .../Details/HistoryDetailsViewTemplate.html | 0 {UI => src/UI}/History/HistoryCollection.js | 0 {UI => src/UI}/History/HistoryLayout.js | 0 .../UI}/History/HistoryLayoutTemplate.html | 0 {UI => src/UI}/History/HistoryModel.js | 0 .../UI}/History/Queue/QueueCollection.js | 0 {UI => src/UI}/History/Queue/QueueLayout.js | 0 .../History/Queue/QueueLayoutTemplate.html | 0 {UI => src/UI}/History/Queue/QueueModel.js | 0 {UI => src/UI}/History/Queue/TimeleftCell.js | 0 .../History/Table/ControlsColumnTemplate.html | 0 {UI => src/UI}/History/Table/EventTypeCell.js | 0 .../UI}/History/Table/HistoryDetailsCell.js | 0 .../UI}/History/Table/HistoryTableLayout.js | 0 .../Table/HistoryTableLayoutTemplate.html | 0 .../UI}/Instrumentation/ErrorHandler.js | 0 .../UI}/Instrumentation/StringFormat.js | 0 .../JsLibraries/backbone.backgrid.filter.js | 0 .../UI}/JsLibraries/backbone.backgrid.js | 0 .../backbone.backgrid.paginator.js | 0 .../UI}/JsLibraries/backbone.deep.model.js | 0 {UI => src/UI}/JsLibraries/backbone.js | 0 .../UI}/JsLibraries/backbone.marionette.js | 0 .../UI}/JsLibraries/backbone.modelbinder.js | 0 .../UI}/JsLibraries/backbone.pageable.js | 0 .../UI}/JsLibraries/backbone.shortcuts.js | 0 .../UI}/JsLibraries/backbone.validation.js | 0 {UI => src/UI}/JsLibraries/bootstrap.js | 0 {UI => src/UI}/JsLibraries/filesize.js | 0 {UI => src/UI}/JsLibraries/fullcalendar.js | 0 .../UI}/JsLibraries/handlebars.helpers.js | 0 .../UI}/JsLibraries/handlebars.runtime.js | 0 .../UI}/JsLibraries/jquery.backstretch.js | 0 .../UI}/JsLibraries/jquery.dotdotdot.js | 0 {UI => src/UI}/JsLibraries/jquery.js | 0 {UI => src/UI}/JsLibraries/jquery.knob.js | 0 {UI => src/UI}/JsLibraries/jquery.signalR.js | 0 .../UI}/JsLibraries/lodash.underscore.js | 0 {UI => src/UI}/JsLibraries/messenger.js | 0 {UI => src/UI}/JsLibraries/moment.js | 0 {UI => src/UI}/JsLibraries/require.js | 0 {UI => src/UI}/Missing/Collection.js | 0 .../UI}/Missing/ControlsColumnTemplate.html | 0 {UI => src/UI}/Missing/MissingLayout.js | 0 .../UI}/Missing/MissingLayoutTemplate.html | 0 .../UI}/Mixins/AsChangeTrackingModel.js | 0 {UI => src/UI}/Mixins/AsModelBoundView.js | 0 {UI => src/UI}/Mixins/AsNamedView.js | 0 {UI => src/UI}/Mixins/AsValidatedView.js | 0 {UI => src/UI}/Mixins/AutoComplete.js | 0 .../backbone.marionette.region.mixin.js | 0 .../UI}/Mixins/backbone.signalr.mixin.js | 0 {UI => src/UI}/Mixins/jquery.ajax.js | 0 .../UI}/Mixins/underscore.mixin.deepExtend.js | 0 {UI => src/UI}/Navbar/NavbarTemplate.html | 0 {UI => src/UI}/Navbar/NavbarView.js | 0 {UI => src/UI}/Navbar/Search.js | 0 .../ProgressMessageCollection.js | 0 .../UI}/Quality/QualityProfileCollection.js | 0 {UI => src/UI}/Quality/QualityProfileModel.js | 0 .../QualityProfileSelectionPartial.html | 0 .../UI}/Quality/QualitySizeCollection.js | 0 {UI => src/UI}/Quality/QualitySizeModel.js | 0 {UI => src/UI}/Release/Collection.js | 0 {UI => src/UI}/Release/DownloadReportCell.js | 0 {UI => src/UI}/Release/Layout.js | 0 {UI => src/UI}/Release/LayoutTemplate.html | 0 {UI => src/UI}/Release/Model.js | 0 {UI => src/UI}/Router.js | 0 {UI => src/UI}/SeasonPass/SeasonPassLayout.js | 0 .../SeasonPass/SeasonPassLayoutTemplate.html | 0 .../UI}/SeasonPass/SeriesCollectionView.js | 0 {UI => src/UI}/SeasonPass/SeriesLayout.js | 0 .../UI}/SeasonPass/SeriesLayoutTemplate.html | 0 .../Series/Delete/DeleteSeriesTemplate.html | 0 .../UI}/Series/Delete/DeleteSeriesView.js | 0 {UI => src/UI}/Series/Details/InfoView.js | 0 .../UI}/Series/Details/InfoViewTemplate.html | 0 .../Series/Details/SeasonCollectionView.js | 0 {UI => src/UI}/Series/Details/SeasonLayout.js | 0 .../Series/Details/SeasonLayoutTemplate.html | 0 .../UI}/Series/Details/SeriesDetailsLayout.js | 0 .../Series/Details/SeriesDetailsTemplate.html | 0 .../UI}/Series/Edit/EditSeriesTemplate.html | 0 {UI => src/UI}/Series/Edit/EditSeriesView.js | 0 {UI => src/UI}/Series/EpisodeCollection.js | 0 .../UI}/Series/EpisodeFileCollection.js | 0 {UI => src/UI}/Series/EpisodeFileModel.js | 0 {UI => src/UI}/Series/EpisodeModel.js | 0 .../UI}/Series/Index/EmptySeriesIndexView.js | 0 .../UI}/Series/Index/EmptyTemplate.html | 0 {UI => src/UI}/Series/Index/EmptyView.js | 0 .../Series/Index/EpisodeProgressPartial.html | 0 {UI => src/UI}/Series/Index/FooterModel.js | 0 {UI => src/UI}/Series/Index/FooterView.js | 0 .../UI}/Series/Index/FooterViewTemplate.html | 0 .../Series/Index/List/CollectionTemplate.html | 0 .../UI}/Series/Index/List/CollectionView.js | 0 .../UI}/Series/Index/List/ItemTemplate.html | 0 {UI => src/UI}/Series/Index/List/ItemView.js | 0 .../Index/Posters/CollectionTemplate.html | 0 .../Series/Index/Posters/CollectionView.js | 0 .../Series/Index/Posters/ItemTemplate.html | 0 .../UI}/Series/Index/Posters/ItemView.js | 0 .../UI}/Series/Index/SeriesIndexLayout.js | 0 .../Index/SeriesIndexLayoutTemplate.html | 0 {UI => src/UI}/Series/SeasonCollection.js | 0 {UI => src/UI}/Series/SeasonModel.js | 0 {UI => src/UI}/Series/SeriesCollection.js | 0 {UI => src/UI}/Series/SeriesModel.js | 0 {UI => src/UI}/Series/series.less | 0 {UI => src/UI}/ServerStatus.js | 0 .../Settings/DownloadClient/BlackholeView.js | 0 .../DownloadClient/BlackholeViewTemplate.html | 0 .../UI}/Settings/DownloadClient/Layout.js | 0 .../DownloadClient/LayoutTemplate.html | 0 .../UI}/Settings/DownloadClient/NzbgetView.js | 0 .../DownloadClient/NzbgetViewTemplate.html | 0 .../Settings/DownloadClient/PneumaticView.js | 0 .../DownloadClient/PneumaticViewTemplate.html | 0 .../UI}/Settings/DownloadClient/SabView.js | 0 .../DownloadClient/SabViewTemplate.html | 0 .../Settings/General/GeneralSettingsModel.js | 0 .../UI}/Settings/General/GeneralTemplate.html | 0 .../UI}/Settings/General/GeneralView.js | 0 .../UI}/Settings/Indexers/Collection.js | 0 .../Settings/Indexers/CollectionTemplate.html | 0 .../UI}/Settings/Indexers/CollectionView.js | 0 .../UI}/Settings/Indexers/DeleteTemplate.html | 0 .../UI}/Settings/Indexers/DeleteView.js | 0 .../UI}/Settings/Indexers/EditTemplate.html | 0 {UI => src/UI}/Settings/Indexers/EditView.js | 0 .../UI}/Settings/Indexers/IndexerLayout.js | 0 .../Indexers/IndexerLayoutTemplate.html | 0 .../UI}/Settings/Indexers/ItemTemplate.html | 0 {UI => src/UI}/Settings/Indexers/ItemView.js | 0 {UI => src/UI}/Settings/Indexers/Model.js | 0 .../Indexers/Options/IndexerOptionsView.js | 0 .../Options/IndexerOptionsViewTemplate.html | 0 .../UI}/Settings/Indexers/indexers.less | 0 .../FileManagement/FileManagementView.js | 0 .../FileManagementViewTemplate.html | 0 .../MediaManagement/MediaManagementLayout.js | 0 .../MediaManagementLayoutTemplate.html | 0 .../Settings/MediaManagement/Naming/Model.js | 0 .../Settings/MediaManagement/Naming/View.js | 0 .../MediaManagement/Naming/ViewTemplate.html | 0 .../Settings/MediaManagement/Sorting/View.js | 0 .../MediaManagement/Sorting/ViewTemplate.html | 0 .../Notifications/AddItemTemplate.html | 0 .../UI}/Settings/Notifications/AddItemView.js | 0 .../Settings/Notifications/AddTemplate.html | 0 .../UI}/Settings/Notifications/AddView.js | 0 .../UI}/Settings/Notifications/Collection.js | 0 .../Notifications/CollectionTemplate.html | 0 .../Settings/Notifications/CollectionView.js | 0 .../Notifications/DeleteTemplate.html | 0 .../UI}/Settings/Notifications/DeleteView.js | 0 .../Settings/Notifications/EditTemplate.html | 0 .../UI}/Settings/Notifications/EditView.js | 0 .../Settings/Notifications/ItemTemplate.html | 0 .../UI}/Settings/Notifications/ItemView.js | 0 .../UI}/Settings/Notifications/Model.js | 0 .../UI}/Settings/Notifications/SchemaModal.js | 0 .../Settings/Notifications/notifications.less | 0 .../Quality/Profile/AllowedLabeler.js | 0 .../Quality/Profile/DeleteTemplate.html | 0 .../Settings/Quality/Profile/DeleteView.js | 0 .../Profile/EditQualityProfileTemplate.html | 0 .../Quality/Profile/EditQualityProfileView.js | 0 .../QualityProfileCollectionTemplate.html | 0 .../Profile/QualityProfileCollectionView.js | 0 .../Profile/QualityProfileSchemaCollection.js | 0 .../Profile/QualityProfileTemplate.html | 0 .../Quality/Profile/QualityProfileView.js | 0 .../UI}/Settings/Quality/QualityLayout.js | 0 .../Quality/QualityLayoutTemplate.html | 0 .../Size/QualitySizeCollectionTemplate.html | 0 .../Quality/Size/QualitySizeCollectionView.js | 0 .../Quality/Size/QualitySizeTemplate.html | 0 .../Settings/Quality/Size/QualitySizeView.js | 0 {UI => src/UI}/Settings/Quality/quality.less | 0 {UI => src/UI}/Settings/SettingsLayout.js | 0 .../UI}/Settings/SettingsLayoutTemplate.html | 0 {UI => src/UI}/Settings/SettingsModel.js | 0 {UI => src/UI}/Settings/SettingsModelBase.js | 0 {UI => src/UI}/Settings/settings.less | 0 {UI => src/UI}/Shared/Footer/Template.html | 0 {UI => src/UI}/Shared/Footer/View.js | 0 {UI => src/UI}/Shared/FormatHelpers.js | 0 {UI => src/UI}/Shared/Grid/DateHeaderCell.js | 0 {UI => src/UI}/Shared/Grid/HeaderCell.js | 0 {UI => src/UI}/Shared/Grid/Pager.js | 0 {UI => src/UI}/Shared/Grid/PagerTemplate.html | 0 {UI => src/UI}/Shared/LoadingTemplate.html | 0 {UI => src/UI}/Shared/LoadingView.js | 0 {UI => src/UI}/Shared/Messenger.js | 0 {UI => src/UI}/Shared/Modal/Controller.js | 0 {UI => src/UI}/Shared/Modal/Region.js | 0 {UI => src/UI}/Shared/NotFoundTemplate.html | 0 {UI => src/UI}/Shared/NotFoundView.js | 0 {UI => src/UI}/Shared/SignalRBroadcaster.js | 0 {UI => src/UI}/Shared/Styles/card.less | 0 {UI => src/UI}/Shared/Styles/clickable.less | 0 .../Toolbar/Button/ButtonCollectionView.js | 0 .../UI}/Shared/Toolbar/Button/ButtonView.js | 0 .../UI}/Shared/Toolbar/ButtonCollection.js | 0 {UI => src/UI}/Shared/Toolbar/ButtonModel.js | 0 .../UI}/Shared/Toolbar/ButtonTemplate.html | 0 .../Radio/RadioButtonCollectionView.js | 0 .../Shared/Toolbar/Radio/RadioButtonView.js | 0 .../UI}/Shared/Toolbar/ToolbarLayout.js | 0 .../Shared/Toolbar/ToolbarLayoutTemplate.html | 0 {UI => src/UI}/System/About/AboutView.js | 0 .../UI}/System/About/AboutViewTemplate.html | 0 .../UI}/System/Logs/Files/ContentsModel.js | 0 .../UI}/System/Logs/Files/ContentsView.js | 0 .../Logs/Files/ContentsViewTemplate.html | 0 .../UI}/System/Logs/Files/FilenameCell.js | 0 .../System/Logs/Files/LogFileCollection.js | 0 .../UI}/System/Logs/Files/LogFileLayout.js | 0 .../Logs/Files/LogFileLayoutTemplate.html | 0 .../UI}/System/Logs/Files/LogFileModel.js | 0 {UI => src/UI}/System/Logs/Files/Row.js | 0 {UI => src/UI}/System/Logs/Logs.less | 0 {UI => src/UI}/System/Logs/LogsCollection.js | 0 {UI => src/UI}/System/Logs/LogsLayout.js | 0 .../UI}/System/Logs/LogsLayoutTemplate.html | 0 {UI => src/UI}/System/Logs/LogsModel.js | 0 .../UI}/System/Logs/Table/LogLevelCell.js | 0 .../UI}/System/Logs/Table/LogTimeCell.js | 0 .../UI}/System/Logs/Table/LogsTableLayout.js | 0 .../Logs/Table/LogsTableLayoutTemplate.html | 0 {UI => src/UI}/System/StatusModel.js | 0 {UI => src/UI}/System/SystemLayout.js | 0 .../UI}/System/SystemLayoutTemplate.html | 0 .../UI}/System/Update/UpdateCollection.js | 0 .../UI}/System/Update/UpdateCollectionView.js | 0 .../UI}/System/Update/UpdateItemView.js | 0 .../System/Update/UpdateItemViewTemplate.html | 0 {UI => src/UI}/System/Update/UpdateLayout.js | 0 .../System/Update/UpdateLayoutTemplate.html | 0 {UI => src/UI}/System/Update/UpdateModel.js | 0 {UI => src/UI}/System/Update/update.less | 0 {UI => src/UI}/app.js | 0 {UI => src/UI}/favicon.ico | Bin {UI => src/UI}/index.html | 0 {UI => src/UI}/jQuery/RouteBinder.js | 0 {UI => src/UI}/jQuery/ToTheTop.js | 0 {UI => src/UI}/jQuery/TooltipBinder.js | 0 {UI => src/UI}/jQuery/jquery.spin.js | 0 {UI => src/UI}/jQuery/jquery.validation.js | 0 {UI => src/UI}/polyfills.js | 0 1499 files changed, 1054 insertions(+), 1444 deletions(-) delete mode 100644 NzbDrone.Api/NzbDrone.Api.ncrunchproject delete mode 100644 NzbDrone.Common.Test/NzbDrone.Common.Test.ncrunchproject delete mode 100644 NzbDrone.Common/NzbDrone.Common.ncrunchproject delete mode 100644 NzbDrone.Core.Test/App_Data/Config.xml delete mode 100644 NzbDrone.Core/NzbDrone.Core.ncrunchproject delete mode 100644 NzbDrone.Test.Common/NzbDrone.Test.Common.ncrunchproject delete mode 100644 NzbDrone.Test.Dummy/NzbDrone.Test.Dummy.ncrunchproject delete mode 100644 NzbDrone.Update.Test/NzbDrone.Update.Test.ncrunchproject delete mode 100644 NzbDrone.Update/NzbDrone.Update.ncrunchproject delete mode 100644 NzbDrone.Wix/configuration.xml delete mode 100644 NzbDrone.Wix/dotNetInstaller.exe delete mode 100644 NzbDrone.Wix/nzbdrone.wix.build.bat delete mode 100644 NzbDrone.Wix/nzbdrone.wix.build.debug.bat delete mode 100644 NzbDrone.Wix/nzbdrone.wix.build.wxs delete mode 100644 NzbDrone.ncrunchsolution delete mode 100644 ServiceHelpers/ServiceInstall/ServiceInstall.ncrunchproject delete mode 100644 ServiceHelpers/ServiceUninstall/ServiceUninstall.ncrunchproject rename {.nuget => src/.nuget}/NuGet.Config (100%) rename {.nuget => src/.nuget}/NuGet.exe (100%) rename {.nuget => src/.nuget}/NuGet.targets (100%) rename {Exceptron.Client => src/Exceptron.Client}/Configuration/ExceptronConfiguration.cs (100%) rename {Exceptron.Client => src/Exceptron.Client}/ExceptionData.cs (100%) rename {Exceptron.Client => src/Exceptron.Client}/ExceptionSeverity.cs (100%) rename {Exceptron.Client => src/Exceptron.Client}/Exceptron.Client.csproj (97%) rename {Exceptron.Client => src/Exceptron.Client}/Exceptron.Client.nuspec (100%) rename {Exceptron.Client => src/Exceptron.Client}/ExceptronApiException.cs (100%) rename {Exceptron.Client => src/Exceptron.Client}/ExceptronClient.cs (100%) rename {Exceptron.Client => src/Exceptron.Client}/IExceptronClient.cs (100%) rename {Exceptron.Client => src/Exceptron.Client}/IRestClient.cs (100%) rename {Exceptron.Client => src/Exceptron.Client}/Message/ExceptionReport.cs (100%) rename {Exceptron.Client => src/Exceptron.Client}/Message/ExceptionResponse.cs (100%) rename {Exceptron.Client => src/Exceptron.Client}/Message/Frame.cs (100%) rename {Exceptron.Client => src/Exceptron.Client}/NuGet/web.config.transform (100%) rename {Exceptron.Client => src/Exceptron.Client}/Properties/AssemblyInfo.cs (100%) rename {Exceptron.Client => src/Exceptron.Client}/RestClient.cs (100%) rename {Exceptron.Client => src/Exceptron.Client}/fastJSON/Getters.cs (100%) rename {Exceptron.Client => src/Exceptron.Client}/fastJSON/JSON.cs (100%) rename {Exceptron.Client => src/Exceptron.Client}/fastJSON/JsonParser.cs (100%) rename {Exceptron.Client => src/Exceptron.Client}/fastJSON/JsonSerializer.cs (100%) rename {Exceptron.Client => src/Exceptron.Client}/fastJSON/SafeDictionary.cs (100%) rename {Exceptron.Client => src/Exceptron.Client}/fastJSON/license.txt (100%) rename {Libraries => src/Libraries}/Interop.NetFwTypeLib.dll (100%) rename {Libraries => src/Libraries}/Manifest Tool/mt.exe (100%) rename {Libraries => src/Libraries}/Manifest Tool/mt.exe.config (100%) rename {Libraries => src/Libraries}/Sqlite/System.Data.SQLite.dll (100%) rename {Libraries => src/Libraries}/Sqlite/System.Data.SQLite.xml (100%) rename {Libraries => src/Libraries}/Sqlite/sqlite3.dll (100%) rename {Marr.Data => src/Marr.Data}/Converters/BooleanIntConverter.cs (100%) rename {Marr.Data => src/Marr.Data}/Converters/BooleanYNConverter.cs (100%) rename {Marr.Data => src/Marr.Data}/Converters/CastConverter.cs (100%) rename {Marr.Data => src/Marr.Data}/Converters/ConversionException.cs (100%) rename {Marr.Data => src/Marr.Data}/Converters/ConverterContext.cs (100%) rename {Marr.Data => src/Marr.Data}/Converters/EnumIntConverter.cs (100%) rename {Marr.Data => src/Marr.Data}/Converters/EnumStringConverter.cs (100%) rename {Marr.Data => src/Marr.Data}/Converters/IConverter.cs (100%) rename {Marr.Data => src/Marr.Data}/DataHelper.cs (100%) rename {Marr.Data => src/Marr.Data}/DataMapper.cs (100%) rename {Marr.Data => src/Marr.Data}/DataMappingException.cs (100%) rename {Marr.Data => src/Marr.Data}/EntityGraph.cs (100%) rename {Marr.Data => src/Marr.Data}/EntityMerger.cs (100%) rename {Marr.Data => src/Marr.Data}/EntityReference.cs (100%) rename {Marr.Data => src/Marr.Data}/ExtensionMethods.cs (100%) rename {Marr.Data => src/Marr.Data}/GroupingKeyCollection.cs (100%) rename {Marr.Data => src/Marr.Data}/IDataMapper.cs (100%) rename {Marr.Data => src/Marr.Data}/LazyLoaded.cs (100%) rename {Marr.Data => src/Marr.Data}/MapRepository.cs (100%) rename {Marr.Data => src/Marr.Data}/Mapping/ColumnAttribute.cs (100%) rename {Marr.Data => src/Marr.Data}/Mapping/ColumnInfo.cs (100%) rename {Marr.Data => src/Marr.Data}/Mapping/ColumnMap.cs (100%) rename {Marr.Data => src/Marr.Data}/Mapping/ColumnMapBuilder.cs (100%) rename {Marr.Data => src/Marr.Data}/Mapping/ColumnMapCollection.cs (100%) rename {Marr.Data => src/Marr.Data}/Mapping/EnumConversionType.cs (100%) rename {Marr.Data => src/Marr.Data}/Mapping/FluentMappings.cs (100%) rename {Marr.Data => src/Marr.Data}/Mapping/IColumnInfo.cs (100%) rename {Marr.Data => src/Marr.Data}/Mapping/IRelationshipInfo.cs (100%) rename {Marr.Data => src/Marr.Data}/Mapping/MapBuilder.cs (100%) rename {Marr.Data => src/Marr.Data}/Mapping/MappingHelper.cs (100%) rename {Marr.Data => src/Marr.Data}/Mapping/Relationship.cs (100%) rename {Marr.Data => src/Marr.Data}/Mapping/RelationshipAttribute.cs (100%) rename {Marr.Data => src/Marr.Data}/Mapping/RelationshipBuilder.cs (100%) rename {Marr.Data => src/Marr.Data}/Mapping/RelationshipCollection.cs (100%) rename {Marr.Data => src/Marr.Data}/Mapping/RelationshipInfo.cs (100%) rename {Marr.Data => src/Marr.Data}/Mapping/Strategies/AttributeMapStrategy.cs (100%) rename {Marr.Data => src/Marr.Data}/Mapping/Strategies/ConventionMapStrategy.cs (100%) rename {Marr.Data => src/Marr.Data}/Mapping/Strategies/IMapStrategy.cs (100%) rename {Marr.Data => src/Marr.Data}/Mapping/Strategies/PropertyMapStrategy.cs (100%) rename {Marr.Data => src/Marr.Data}/Mapping/Strategies/ReflectionMapStrategyBase.cs (100%) rename {Marr.Data => src/Marr.Data}/Mapping/TableAttribute.cs (100%) rename {Marr.Data => src/Marr.Data}/Mapping/TableBuilder.cs (100%) rename {Marr.Data => src/Marr.Data}/Marr.Data.csproj (98%) rename {Marr.Data => src/Marr.Data}/Parameters/DbTypeBuilder.cs (100%) rename {Marr.Data => src/Marr.Data}/Parameters/IDbTypeBuilder.cs (100%) rename {Marr.Data => src/Marr.Data}/Parameters/OleDbTypeBuilder.cs (100%) rename {Marr.Data => src/Marr.Data}/Parameters/ParameterChainMethods.cs (100%) rename {Marr.Data => src/Marr.Data}/Parameters/SqlDbTypeBuilder.cs (100%) rename {Marr.Data => src/Marr.Data}/Properties/AssemblyInfo.cs (100%) rename {Marr.Data => src/Marr.Data}/QGen/DeleteQuery.cs (100%) rename {Marr.Data => src/Marr.Data}/QGen/Dialects/Dialect.cs (100%) rename {Marr.Data => src/Marr.Data}/QGen/Dialects/FirebirdDialect.cs (100%) rename {Marr.Data => src/Marr.Data}/QGen/Dialects/OracleDialect.cs (100%) rename {Marr.Data => src/Marr.Data}/QGen/Dialects/SqlServerCeDialect.cs (100%) rename {Marr.Data => src/Marr.Data}/QGen/Dialects/SqlServerDialect.cs (100%) rename {Marr.Data => src/Marr.Data}/QGen/Dialects/SqliteDialect.cs (100%) rename {Marr.Data => src/Marr.Data}/QGen/ExpressionVisitor.cs (100%) rename {Marr.Data => src/Marr.Data}/QGen/IQuery.cs (100%) rename {Marr.Data => src/Marr.Data}/QGen/IQueryBuilder.cs (100%) rename {Marr.Data => src/Marr.Data}/QGen/InsertQuery.cs (100%) rename {Marr.Data => src/Marr.Data}/QGen/InsertQueryBuilder.cs (100%) rename {Marr.Data => src/Marr.Data}/QGen/JoinBuilder.cs (100%) rename {Marr.Data => src/Marr.Data}/QGen/PagingQueryDecorator.cs (100%) rename {Marr.Data => src/Marr.Data}/QGen/QueryBuilder.cs (100%) rename {Marr.Data => src/Marr.Data}/QGen/QueryFactory.cs (100%) rename {Marr.Data => src/Marr.Data}/QGen/QueryQueueItem.cs (100%) rename {Marr.Data => src/Marr.Data}/QGen/RowCountQueryDecorator.cs (100%) rename {Marr.Data => src/Marr.Data}/QGen/SelectQuery.cs (100%) rename {Marr.Data => src/Marr.Data}/QGen/SortBuilder.cs (100%) rename {Marr.Data => src/Marr.Data}/QGen/SortColumn.cs (100%) rename {Marr.Data => src/Marr.Data}/QGen/SqlitePagingQueryDecorator.cs (100%) rename {Marr.Data => src/Marr.Data}/QGen/SqliteRowCountQueryDecorator.cs (100%) rename {Marr.Data => src/Marr.Data}/QGen/Table.cs (100%) rename {Marr.Data => src/Marr.Data}/QGen/TableCollection.cs (100%) rename {Marr.Data => src/Marr.Data}/QGen/UpdateQuery.cs (100%) rename {Marr.Data => src/Marr.Data}/QGen/UpdateQueryBuilder.cs (100%) rename {Marr.Data => src/Marr.Data}/QGen/View.cs (100%) rename {Marr.Data => src/Marr.Data}/QGen/WhereBuilder.cs (100%) rename {Marr.Data => src/Marr.Data}/Reflection/IReflectionStrategy.cs (100%) rename {Marr.Data => src/Marr.Data}/Reflection/ReflectionHelper.cs (100%) rename {Marr.Data => src/Marr.Data}/Reflection/SimpleReflectionStrategy.cs (100%) rename {Marr.Data => src/Marr.Data}/SqlModesEnum.cs (100%) rename {Marr.Data => src/Marr.Data}/UnitOfWork.cs (100%) rename {Marr.Data => src/Marr.Data}/UnitOfWorkSharedContext.cs (100%) rename {NzbDrone.Api.Test => src/NzbDrone.Api.Test}/ClientSchemaTests/SchemaBuilderFixture.cs (100%) rename {NzbDrone.Api.Test => src/NzbDrone.Api.Test}/DirectoryLookupServiceFixture.cs (100%) rename {NzbDrone.Api.Test => src/NzbDrone.Api.Test}/MappingTests/ResourceMappingFixture.cs (100%) rename {NzbDrone.Api.Test => src/NzbDrone.Api.Test}/NzbDrone.Api.Test.csproj (100%) rename {NzbDrone.Api.Test => src/NzbDrone.Api.Test}/Properties/AssemblyInfo.cs (100%) rename {NzbDrone.Api.Test => src/NzbDrone.Api.Test}/packages.config (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/Authentication/AuthenticationService.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/Authentication/EnableBasicAuthInNancy.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/Authentication/EnableStatelessAuthInNancy.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/Authentication/NzbDroneUser.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/Calendar/CalendarModule.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/ClientSchema/Field.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/ClientSchema/FieldDefinitionAttribute.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/ClientSchema/SchemaBuilder.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/ClientSchema/SchemaDeserializer.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/ClientSchema/SelectOption.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/Commands/CommandModule.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/Commands/CommandResource.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/Config/NamingConfigResource.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/Config/NamingModule.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/Config/NamingSampleResource.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/Config/SettingsModule.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/Directories/DirectoryLookupService.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/Directories/DirectoryModule.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/EpisodeFiles/EpisodeFileModule.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/EpisodeFiles/EpisodeFileResource.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/Episodes/EpisodeModule.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/Episodes/EpisodeResource.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/ErrorManagement/ApiException.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/ErrorManagement/ErrorHandler.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/ErrorManagement/ErrorModel.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/ErrorManagement/NzbDroneErrorPipeline.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/Exceptions/InvalidApiKeyException.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/Extensions/LazyExtensions.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/Extensions/NancyJsonSerializer.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/Extensions/Pipelines/CacheHeaderPipeline.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/Extensions/Pipelines/GZipPipeline.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/Extensions/Pipelines/IRegisterNancyPipeline.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/Extensions/Pipelines/IfModifiedPipeline.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/Extensions/ReqResExtensions.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/Extensions/RequestExtensions.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/Frontend/IsCacheableSpecification.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/Frontend/Mappers/IMapHttpRequestsToDisk.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/Frontend/Mappers/IndexHtmlMapper.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/Frontend/Mappers/LogFileMapper.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/Frontend/Mappers/MediaCoverMapper.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/Frontend/Mappers/StaticResourceMapper.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/Frontend/Mappers/StaticResourceMapperBase.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/Frontend/StaticResourceModule.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/History/HistoryModule.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/History/HistoryResource.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/IndexerResource.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/Indexers/IndexerModule.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/Indexers/IndexerResource.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/Indexers/IndexerSchemaModule.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/Indexers/ReleaseModule.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/Indexers/ReleaseResource.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/Logs/LogFileModule.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/Logs/LogFileResource.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/Logs/LogModule.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/Logs/LogResource.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/Mapping/CloneInjection.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/Mapping/MappingValidation.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/Mapping/ResourceMappingException.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/Mapping/ValueInjectorExtensions.cs (97%) rename {NzbDrone.Api => src/NzbDrone.Api}/Missing/MissingModule.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/NancyBootstrapper.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/Notifications/NotificationModule.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/Notifications/NotificationResource.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/Notifications/NotificationSchemaModule.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/NzbDrone.Api.csproj (99%) rename {NzbDrone.Api => src/NzbDrone.Api}/NzbDroneApiModule.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/NzbDroneRestModule.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/NzbDroneRestModuleWithSignalR.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/PagingResource.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/Properties/AssemblyInfo.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/ProviderModuleBase.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/Qualities/QualityProfileModule.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/Qualities/QualityProfileResource.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/Qualities/QualityProfileSchemaModule.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/Qualities/QualitySizeModule.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/Qualities/QualitySizeResource.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/Queue/QueueModule.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/Queue/QueueResource.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/REST/BadRequestException.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/REST/ResourceValidator.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/REST/RestModule.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/REST/RestResource.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/ResourceChangeMessage.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/RootFolders/RootFolderModule.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/RootFolders/RootFolderResource.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/Series/SeriesLookupModule.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/Series/SeriesModule.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/Series/SeriesResource.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/System/SystemModule.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/TinyIoCNancyBootstrapper.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/Update/UpdateModule.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/Validation/PathValidator.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/Validation/RuleBuilderExtensions.cs (100%) rename {NzbDrone.Api => src/NzbDrone.Api}/packages.config (100%) rename {NzbDrone.App.Test => src/NzbDrone.App.Test}/ContainerFixture.cs (100%) rename {NzbDrone.App.Test => src/NzbDrone.App.Test}/License.txt (100%) rename {NzbDrone.App.Test => src/NzbDrone.App.Test}/MonitoringProviderTest.cs (100%) rename {NzbDrone.App.Test => src/NzbDrone.App.Test}/NzbDrone.Host.Test.csproj (100%) rename {NzbDrone.App.Test => src/NzbDrone.App.Test}/Properties/AssemblyInfo.cs (100%) rename {NzbDrone.App.Test => src/NzbDrone.App.Test}/RouterTest.cs (100%) rename {NzbDrone.App.Test => src/NzbDrone.App.Test}/packages.config (100%) rename {NzbDrone.Common.Test => src/NzbDrone.Common.Test}/CacheTests/CachedFixture.cs (100%) rename {NzbDrone.Common.Test => src/NzbDrone.Common.Test}/CacheTests/CachedManagerFixture.cs (100%) rename {NzbDrone.Common.Test => src/NzbDrone.Common.Test}/ConfigFileProviderTest.cs (100%) rename {NzbDrone.Common.Test => src/NzbDrone.Common.Test}/DiskProviderTests/DiskProviderFixture.cs (100%) rename {NzbDrone.Common.Test => src/NzbDrone.Common.Test}/DiskProviderTests/FreeSpaceFixture.cs (100%) rename {NzbDrone.Common.Test => src/NzbDrone.Common.Test}/DiskProviderTests/IsParentFixture.cs (100%) rename {NzbDrone.Common.Test => src/NzbDrone.Common.Test}/EnsureTest/PathExtensionFixture.cs (100%) rename {NzbDrone.Common.Test => src/NzbDrone.Common.Test}/EnvironmentProviderTest.cs (100%) rename {NzbDrone.Common.Test => src/NzbDrone.Common.Test}/EnvironmentTests/EnvironmentProviderTest.cs (100%) rename {NzbDrone.Common.Test => src/NzbDrone.Common.Test}/EnvironmentTests/StartupArgumentsFixture.cs (100%) rename {NzbDrone.Common.Test => src/NzbDrone.Common.Test}/License.txt (100%) rename {NzbDrone.Common.Test => src/NzbDrone.Common.Test}/NzbDrone.Common.Test.csproj (100%) rename {NzbDrone.Common.Test => src/NzbDrone.Common.Test}/PathExtensionFixture.cs (100%) rename {NzbDrone.Common.Test => src/NzbDrone.Common.Test}/ProcessProviderTests.cs (100%) rename {NzbDrone.Common.Test => src/NzbDrone.Common.Test}/ReflectionExtensions.cs (100%) rename {NzbDrone.Common.Test => src/NzbDrone.Common.Test}/ReflectionTests/ReflectionExtensionFixture.cs (96%) rename {NzbDrone.Common.Test => src/NzbDrone.Common.Test}/ServiceFactoryFixture.cs (100%) rename {NzbDrone.Common.Test => src/NzbDrone.Common.Test}/ServiceProviderTests.cs (100%) rename {NzbDrone.Common.Test => src/NzbDrone.Common.Test}/WebClientTests.cs (100%) rename {NzbDrone.Common.Test => src/NzbDrone.Common.Test}/packages.config (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/ArchiveProvider.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/Cache/CacheManger.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/Cache/Cached.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/Cache/ICached.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/Composition/Container.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/Composition/ContainerBuilderBase.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/Composition/IContainer.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/ConsoleService.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/DateTimeExtensions.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/DiskProvider.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/EnsureThat/Ensure.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/EnsureThat/EnsureBoolExtensions.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/EnsureThat/EnsureCollectionExtensions.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/EnsureThat/EnsureDateTimeExtensions.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/EnsureThat/EnsureDecimalExtensions.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/EnsureThat/EnsureDoubleExtensions.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/EnsureThat/EnsureGuidExtensions.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/EnsureThat/EnsureIntExtensions.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/EnsureThat/EnsureLongExtensions.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/EnsureThat/EnsureNullableValueTypeExtensions.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/EnsureThat/EnsureObjectExtensions.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/EnsureThat/EnsureShortExtensions.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/EnsureThat/EnsureStringExtensions.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/EnsureThat/EnsureTypeExtensions.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/EnsureThat/ExceptionFactory.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/EnsureThat/ExpressionExtensions.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/EnsureThat/Param.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/EnsureThat/Resources/ExceptionMessages.Designer.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/EnsureThat/Resources/ExceptionMessages.resx (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/EnsureThat/TypeParam.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/EnvironmentInfo/AppFolderInfo.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/EnvironmentInfo/BuildInfo.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/EnvironmentInfo/OsInfo.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/EnvironmentInfo/RuntimeInfo.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/EnvironmentInfo/StartupArguments.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/Exceptions/NzbDroneException.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/Expansive/CircularReferenceException.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/Expansive/Expansive.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/Expansive/PatternStyle.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/Expansive/Tree.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/Expansive/TreeNode.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/Expansive/TreeNodeList.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/Expansive/license.txt (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/HashUtil.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/HttpProvider.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/IEnumerableExtensions.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/Instrumentation/ExceptronTarget.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/Instrumentation/GlobalExceptionHandlers.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/Instrumentation/LogEventExtensions.cs (96%) rename {NzbDrone.Common => src/NzbDrone.Common}/Instrumentation/LogTargets.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/Instrumentation/LogglyTarget.cs (96%) rename {NzbDrone.Common => src/NzbDrone.Common}/Instrumentation/NzbDroneLogger.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/Instrumentation/VersionLayoutRenderer.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/Messaging/IEvent.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/Messaging/IMessage.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/Model/ProcessInfo.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/NzbDrone.Common.csproj (98%) rename {NzbDrone.Common => src/NzbDrone.Common}/PathEqualityComparer.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/PathExtensions.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/Processes/ProcessOutput.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/Processes/ProcessProvider.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/Properties/AssemblyInfo.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/Properties/SharedAssemblyInfo.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/Reflection/ReflectionExtensions.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/Security/IgnoreCertErrorPolicy.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/Serializer/IntConverter.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/Serializer/Json.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/ServiceFactory.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/ServiceProvider.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/Services.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/StringExtensions.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/TPL/LimitedConcurrencyLevelTaskScheduler.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/TPL/TaskExtensions.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/TinyIoC.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/TryParseExtension.cs (100%) rename {NzbDrone.Common => src/NzbDrone.Common}/packages.config (100%) rename {NzbDrone.Console => src/NzbDrone.Console}/ConsoleAlerts.cs (100%) rename {NzbDrone.Console => src/NzbDrone.Console}/ConsoleApp.cs (100%) rename {NzbDrone.Console => src/NzbDrone.Console}/NzbDrone.Console.csproj (98%) rename {NzbDrone.Console => src/NzbDrone.Console}/Properties/AssemblyInfo.cs (100%) rename {NzbDrone.Console => src/NzbDrone.Console}/packages.config (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Configuration/ConfigCachingFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Configuration/ConfigServiceFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/DataAugmentationFixture/Scene/SceneMappingProxyFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/DataAugmentationFixture/Scene/SceneMappingServiceFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Datastore/BasicRepositoryFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Datastore/Converters/ProviderSettingConverterFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Datastore/DatabaseRelationshipFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Datastore/MappingExtentionFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Datastore/ObjectDatabaseFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Datastore/PagingSpecExtenstionsTests/PagingOffsetFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Datastore/PagingSpecExtenstionsTests/ToSortDirectionFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Datastore/ReflectionStrategyFixture/Benchmarks.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Datastore/SQLiteMigrationHelperTests/AlterFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Datastore/SQLiteMigrationHelperTests/DuplicateFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/DecisionEngineTests/AcceptableSizeSpecificationFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/DecisionEngineTests/CutoffSpecificationFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/DecisionEngineTests/DownloadDecisionMakerFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/DecisionEngineTests/LanguageSpecificationFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/DecisionEngineTests/MonitoredEpisodeSpecificationFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/DecisionEngineTests/NotRestrictedReleaseSpecificationFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/DecisionEngineTests/QualityAllowedByProfileSpecificationFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/DecisionEngineTests/QualityUpgradeSpecificationFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/DecisionEngineTests/RetentionSpecificationFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/DecisionEngineTests/RssSync/ProperSpecificationFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/DecisionEngineTests/UpgradeDiskSpecificationFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/DecisionEngineTests/UpgradeHistorySpecificationFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Download/DownloadApprovedReportsTests/DownloadApprovedFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Download/DownloadApprovedReportsTests/GetQualifiedReportsFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Download/DownloadClientTests/BlackholeProviderFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Download/DownloadClientTests/NzbgetProviderTests/DownloadNzbFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Download/DownloadClientTests/NzbgetProviderTests/QueueFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Download/DownloadClientTests/PneumaticProviderFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Download/DownloadClientTests/SabProviderTests/QueueFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Download/DownloadClientTests/SabProviderTests/SabProviderFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Download/DownloadServiceFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/EpisodeParseResultTest.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Files/Categories_json.txt (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Files/History.txt (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Files/HistoryEmpty.txt (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Files/Indexers/Newznab/unauthorized.xml (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Files/JsonError.txt (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Files/LongOverview.txt (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Files/Media/H264_sample.mp4 (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Files/Nzbget/JsonError.txt (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Files/Nzbget/Queue.txt (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Files/Nzbget/Queue_empty.txt (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Files/Queue.txt (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Files/QueueEmpty.txt (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Files/QueueUnknownPriority.txt (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Files/RSS/SizeParsing/newznab.xml (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Files/RSS/SizeParsing/nzbclub.xml (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Files/RSS/SizeParsing/nzbindex.xml (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Files/RSS/SizeParsing/nzbsrus.xml (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Files/RSS/SizeParsing/omgwtfnzbs.xml (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Files/RSS/filesharingtalk.xml (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Files/RSS/newznab.xml (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Files/RSS/nzbclub.xml (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Files/RSS/nzbindex.xml (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Files/RSS/nzbsrus.xml (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Files/RSS/omgwtfnzbs.xml (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Files/RSS/wombles.xml (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Files/SceneMappings.json (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Files/TestArchive.zip (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Files/Xem/Failure.txt (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Files/Xem/Ids.txt (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Files/Xem/Mappings.txt (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Files/Xem/Names.txt (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/FluentTest.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Framework/CoreTest.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Framework/DbTest.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Framework/NBuilderExtensions.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Framework/TestBaseTests.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Framework/TestDbHelper.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/HistoryTests/HistoryRepositoryFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Housekeeping/Housekeepers/CleanupOrphanedEpisodesFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Housekeeping/Housekeepers/CleanupOrphanedHistoryItemsFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/IndexerSearchTests/FetchAndParseRssServiceFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/IndexerSearchTests/SearchDefinitionFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/IndexerTests/BasicRssParserFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/IndexerTests/FetchAndParseRssServiceFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/IndexerTests/IndexerServiceFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/IndexerTests/IntegrationTests/IndexerIntegrationTests.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/IndexerTests/XElementExtensionsFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/InstrumentationTests/DatabaseTargetFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/JobTests/JobRepositoryFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/JobTests/TestJobs.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/MediaCoverTests/CoverExistsSpecificationFixture.cs (96%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/MediaCoverTests/MediaCoverServiceFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/MediaFiles/DownloadedEpisodesImportServiceFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/MediaFiles/EpisodeImport/ImportDecisionMakerFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/MediaFiles/EpisodeImport/Specifications/FreeSpaceSpecificationFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/MediaFiles/EpisodeImport/Specifications/NotInUseSpecificationFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/MediaFiles/EpisodeImport/Specifications/NotSampleSpecificationFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/MediaFiles/EpisodeImport/Specifications/NotUnpackingSpecificationFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/MediaFiles/EpisodeImport/Specifications/UpgradeSpecificationFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/MediaFiles/ImportApprovedEpisodesFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/MediaFiles/MediaFileRepositoryFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/MediaFiles/MediaFileServiceTest.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/MediaFiles/MediaFileTableCleanupServiceFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/MediaFiles/MediaInfo/VideoFileInfoReaderFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/MediaFiles/RenameEpisodeFileServiceFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/MediaFiles/UpgradeMediaFileServiceFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Messaging/Commands/CommandEqualityComparerFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Messaging/Commands/CommandExecutorFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Messaging/Commands/CommandFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Messaging/Events/EventAggregatorFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/MetadataSourceTests/TraktProxyFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/NotificationTests/GrowlProviderTest.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/NotificationTests/NotificationServiceFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/NotificationTests/PlexProviderTest.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/NotificationTests/ProwlProviderTest.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/NotificationTests/Xbmc/GetJsonVersionFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/NotificationTests/Xbmc/Http/ActivePlayersFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/NotificationTests/Xbmc/Http/CheckForErrorFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/NotificationTests/Xbmc/Http/GetSeriesPathFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/NotificationTests/Xbmc/Http/UpdateFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/NotificationTests/Xbmc/Json/ActivePlayersFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/NotificationTests/Xbmc/Json/CheckForErrorFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/NotificationTests/Xbmc/Json/GetSeriesPathFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/NotificationTests/Xbmc/Json/UpdateFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/NzbDrone.Core.Test.csproj (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/OrganizerTests/BuildFilePathFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/OrganizerTests/GetNewFilenameFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/ParserTests/ParserFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/ParserTests/ParsingServiceTests/GetEpisodesFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/ParserTests/ParsingServiceTests/MapFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/ParserTests/QualityParserFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Properties/AssemblyInfo.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/ProviderTests/DiskProviderTests/ArchiveProviderFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/ProviderTests/DiskProviderTests/FreeDiskSpaceFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/ProviderTests/DiskScanProviderTests/GetVideoFilesFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/ProviderTests/RecycleBinProviderTests/CleanupFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/ProviderTests/RecycleBinProviderTests/DeleteDirectoryFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/ProviderTests/RecycleBinProviderTests/DeleteFileFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/ProviderTests/RecycleBinProviderTests/EmptyFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Providers/XemProxyFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Qualities/QualityFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Qualities/QualityProfileRepositoryFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Qualities/QualityProfileServiceFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Qualities/QualitySizeRepositoryFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/Qualities/QualitySizeServiceFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/RootFolderTests/FreeSpaceOnDrivesFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/RootFolderTests/RootFolderServiceFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/SeriesStatsTests/SeriesStatisticsFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/ThingiProvider/ProviderBaseFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/ThingiProviderTests/NullConfigFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/TvTests/EpisodeProviderTests/EpisodeProviderTest.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/TvTests/EpisodeProviderTests/EpisodeProviderTest_GetEpisodesByParseResult.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/TvTests/EpisodeProviderTests/HandleEpisodeFileDeletedFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/TvTests/EpisodeRepositoryTests/EpisodesBetweenDatesFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/TvTests/EpisodeRepositoryTests/EpisodesRepositoryReadFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/TvTests/EpisodeRepositoryTests/EpisodesWithoutFilesFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/TvTests/EpisodeRepositoryTests/FindEpisodeFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/TvTests/QualityModelFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/TvTests/RefreshEpisodeServiceFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/TvTests/SeriesRepositoryTests/QualityProfileRepositoryFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/TvTests/SeriesServiceTests/AddSeriesFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/TvTests/SeriesServiceTests/UpdateSeriesFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/UpdateTests/UpdatePackageProviderFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/UpdateTests/UpdateServiceFixture.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/XbmcVersionTests.cs (100%) rename {NzbDrone.Core.Test => src/NzbDrone.Core.Test}/packages.config (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Annotations/FieldDefinitionAttribute.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/App.config (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Configuration/Config.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Configuration/ConfigFileProvider.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Configuration/ConfigRepository.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Configuration/ConfigService.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Configuration/Events/ConfigFileSavedEvent.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Configuration/Events/ConfigSavedEvent.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Configuration/IConfigService.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Configuration/InvalidConfigFileException.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/DataAugmentation/DailySeries/DailySeriesDataProxy.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/DataAugmentation/DailySeries/DailySeriesService.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/DataAugmentation/Scene/SceneMapping.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/DataAugmentation/Scene/SceneMappingProxy.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/DataAugmentation/Scene/SceneMappingRepository.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/DataAugmentation/Scene/SceneMappingService.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/DataAugmentation/Scene/UpdateSceneMappingCommand.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/DataAugmentation/Xem/Model/XemResult.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/DataAugmentation/Xem/Model/XemSceneTvdbMapping.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/DataAugmentation/Xem/Model/XemValues.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/DataAugmentation/Xem/UpdateXemMappingsCommand.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/DataAugmentation/Xem/XemProxy.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/DataAugmentation/Xem/XemService.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Datastore/BasicRepository.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Datastore/ConnectionStringFactory.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Datastore/Converters/BooleanIntConverter.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Datastore/Converters/EmbeddedDocumentConverter.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Datastore/Converters/EnumIntConverter.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Datastore/Converters/Int32Converter.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Datastore/Converters/ProviderSettingConverter.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Datastore/Converters/QualityIntConverter.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Datastore/Converters/UtcConverter.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Datastore/Database.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Datastore/DbFactory.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Datastore/Events/ModelEvent.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Datastore/IEmbeddedDocument.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Datastore/LazyList.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Datastore/MappingExtensions.cs (97%) rename {NzbDrone.Core => src/NzbDrone.Core}/Datastore/Migration/001_InitialSetup.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Datastore/Migration/002_Remove_tvrage_imdb_unique_constraint.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Datastore/Migration/003_remove_clean_title_from_scene_mapping.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Datastore/Migration/004_updated_history.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Datastore/Migration/005_added_eventtype_to_history.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Datastore/Migration/006_add_index_to_log_time.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Datastore/Migration/007_add_renameEpisodes_to_naming.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Datastore/Migration/008_remove_backlog.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Datastore/Migration/009_fix_renameEpisodes.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Datastore/Migration/010_add_monitored.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Datastore/Migration/011_remove_ignored.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Datastore/Migration/012_remove_custom_start_date.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Datastore/Migration/013_add_air_date_utc.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Datastore/Migration/014_drop_air_date.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Datastore/Migration/015_add_air_date_as_string.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Datastore/Migration/016_updated_imported_history_item.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Datastore/Migration/017_reset_scene_names.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Datastore/Migration/018_remove_duplicates.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Datastore/Migration/019_restore_unique_constraints.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Datastore/Migration/020_add_year_and_seasons_to_series.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Datastore/Migration/021_drop_seasons_table.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Datastore/Migration/022_move_notification_to_generic_provider.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Datastore/Migration/023_add_config_contract_to_indexers.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Datastore/Migration/Framework/MigrationContext.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Datastore/Migration/Framework/MigrationController.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Datastore/Migration/Framework/MigrationExtension.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Datastore/Migration/Framework/MigrationLogger.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Datastore/Migration/Framework/MigrationOptions.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Datastore/Migration/Framework/NzbDroneMigrationBase.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Datastore/Migration/Framework/SQLiteColumn.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Datastore/Migration/Framework/SQLiteIndex.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Datastore/Migration/Framework/SQLiteMigrationHelper (vaio's conflicted copy 2013-09-04).cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Datastore/Migration/Framework/SQLiteMigrationHelper.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Datastore/Migration/Framework/SqliteAlter.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Datastore/MigrationType.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Datastore/ModelBase.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Datastore/ModelNotFoundException.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Datastore/PagingSpec.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Datastore/PagingSpecExtensions.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Datastore/RelationshipExtensions.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Datastore/ResultSet.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Datastore/TableMapping.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/DecisionEngine/DownloadDecisionMaker.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/DecisionEngine/IDecisionEngineSpecification.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/DecisionEngine/IRejectWithReason.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/DecisionEngine/QualityUpgradableSpecification.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/DecisionEngine/Specifications/AcceptableSizeSpecification.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/DecisionEngine/Specifications/CutoffSpecification.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/DecisionEngine/Specifications/DownloadDecision.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/DecisionEngine/Specifications/LanguageSpecification.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/DecisionEngine/Specifications/NotInQueueSpecification.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/DecisionEngine/Specifications/NotRestrictedReleaseSpecification.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/DecisionEngine/Specifications/NotSampleSpecification.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/DecisionEngine/Specifications/QualityAllowedByProfileSpecification.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/DecisionEngine/Specifications/RetentionSpecification.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/DecisionEngine/Specifications/RssSync/MonitoredEpisodeSpecification.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/DecisionEngine/Specifications/RssSync/ProperSpecification.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/DecisionEngine/Specifications/RssSync/UpgradeHistorySpecification.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/DecisionEngine/Specifications/Search/DailyEpisodeMatchSpecification.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/DecisionEngine/Specifications/Search/SeasonMatchSpecification.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/DecisionEngine/Specifications/Search/SingleEpisodeMatchSpecification.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/DecisionEngine/Specifications/Search/SingleEpisodeSearchMatchSpecification.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/DecisionEngine/Specifications/UpgradeDiskSpecification.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Download/Clients/BlackholeProvider.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Download/Clients/Nzbget/EnqueueResponse.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Download/Clients/Nzbget/ErrorModel.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Download/Clients/Nzbget/JsonError.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Download/Clients/Nzbget/JsonRequest.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Download/Clients/Nzbget/NzbGetQueue.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Download/Clients/Nzbget/NzbGetQueueItem.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Download/Clients/Nzbget/NzbgetClient.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Download/Clients/Nzbget/PriorityType.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Download/Clients/Nzbget/VersionModel.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Download/Clients/PneumaticClient.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Download/Clients/Sabnzbd/ConnectionInfoModel.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Download/Clients/Sabnzbd/JsonConverters/SabnzbdPriorityTypeConverter.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Download/Clients/Sabnzbd/JsonConverters/SabnzbdQueueTimeConverter.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Download/Clients/Sabnzbd/SabAddResponse.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Download/Clients/Sabnzbd/SabAutoConfigureService.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Download/Clients/Sabnzbd/SabCategoryModel.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Download/Clients/Sabnzbd/SabHistory.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Download/Clients/Sabnzbd/SabHistoryItem.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Download/Clients/Sabnzbd/SabJsonError.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Download/Clients/Sabnzbd/SabModel.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Download/Clients/Sabnzbd/SabPriorityType.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Download/Clients/Sabnzbd/SabQueue.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Download/Clients/Sabnzbd/SabQueueItem.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Download/Clients/Sabnzbd/SabVersionModel.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Download/Clients/Sabnzbd/SabnzbdClient.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Download/DownloadApprovedReports.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Download/DownloadClientProvider.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Download/DownloadClientType.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Download/DownloadService.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Download/EpisodeGrabbedEvent.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Download/IDownloadClient.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Download/QueueItem.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Exceptions/BadRequestException.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Exceptions/DownstreamException.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Exceptions/NzbDroneClientException.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Exceptions/StatusCodeToExceptions.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Fluent.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/History/History.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/History/HistoryRepository.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/History/HistoryService.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Housekeeping/Housekeepers/CleanupOrphanedEpisodes.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Housekeeping/Housekeepers/CleanupOrphanedHistoryItems.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Housekeeping/HousekeepingCommand.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Housekeeping/HousekeepingService.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Housekeeping/IHousekeepingTask.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/IndexerSearch/Definitions/DailyEpisodeSearchCriteria.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/IndexerSearch/Definitions/SearchCriteriaBase.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/IndexerSearch/Definitions/SeasonSearchCriteria.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/IndexerSearch/Definitions/SingleEpisodeSearchCriteria.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/IndexerSearch/EpisodeSearchCommand.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/IndexerSearch/EpisodeSearchService.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/IndexerSearch/NzbSearchService.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/IndexerSearch/SearchAndDownloadService.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/IndexerSearch/SeasonSearchCommand.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/IndexerSearch/SeasonSearchService.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/IndexerSearch/SeriesSearchCommand.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/IndexerSearch/SeriesSearchService.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Indexers/BasicTorrentRssParser.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Indexers/DownloadProtocols.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Indexers/Exceptions/ApiKeyException.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Indexers/Eztv/Eztv.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Indexers/FetchAndParseRssService.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Indexers/IIndexer.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Indexers/IParseFeed.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Indexers/IndexerBase.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Indexers/IndexerDefinition.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Indexers/IndexerFactory.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Indexers/IndexerFetchService.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Indexers/IndexerRepository.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Indexers/IndexerSettingUpdatedEvent.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Indexers/Newznab/Newznab.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Indexers/Newznab/NewznabException.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Indexers/Newznab/NewznabParser.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Indexers/Newznab/NewznabPreProcessor.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Indexers/Newznab/NewznabSettings.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Indexers/Newznab/SizeParsingException.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Indexers/NewznabTestService.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Indexers/Omgwtfnzbs/Omgwtfnzbs.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Indexers/Omgwtfnzbs/OmgwtfnzbsParser.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Indexers/Omgwtfnzbs/OmgwtfnzbsSettings.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Indexers/RssParserBase.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Indexers/RssSyncCommand.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Indexers/RssSyncService.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Indexers/Wombles/Wombles.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Indexers/Wombles/WomblesParser.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Indexers/XElementExtensions.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Instrumentation/Commands/ClearLogCommand.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Instrumentation/Commands/DeleteLogFilesCommand.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Instrumentation/Commands/TrimLogCommand.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Instrumentation/DatabaseTarget.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Instrumentation/DeleteLogFilesService.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Instrumentation/Log.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Instrumentation/LogRepository.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Instrumentation/LogService.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Instrumentation/LoggerExtensions.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Instrumentation/SetLoggingLevel.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Jobs/JobRepository.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Jobs/ScheduledTask.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Jobs/Scheduler.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Jobs/TaskManager.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Lifecycle/ApplicationShutdownRequested.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Lifecycle/ApplicationStartedEvent.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/MediaCover/CoverAlreadyExistsSpecification.cs (96%) rename {NzbDrone.Core => src/NzbDrone.Core}/MediaCover/MediaCover.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/MediaCover/MediaCoverService.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/MediaFiles/Commands/BackendCommandAttribute.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/MediaFiles/Commands/CleanMediaFileDb.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/MediaFiles/Commands/CleanUpRecycleBinCommand.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/MediaFiles/Commands/DownloadedEpisodesScanCommand.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/MediaFiles/Commands/RenameSeasonCommand.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/MediaFiles/Commands/RenameSeriesCommand.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/MediaFiles/DiskScanService.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/MediaFiles/DownloadedEpisodesImportService.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/MediaFiles/EpisodeFile.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/MediaFiles/EpisodeFileMovingService.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/MediaFiles/EpisodeImport/IImportDecisionEngineSpecification.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/MediaFiles/EpisodeImport/ImportApprovedEpisodes.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/MediaFiles/EpisodeImport/ImportDecision.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/MediaFiles/EpisodeImport/ImportDecisionMaker.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/MediaFiles/EpisodeImport/Specifications/FreeSpaceSpecification.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/MediaFiles/EpisodeImport/Specifications/NotInUseSpecification.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/MediaFiles/EpisodeImport/Specifications/NotSampleSpecification.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/MediaFiles/EpisodeImport/Specifications/NotUnpackingSpecification.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/MediaFiles/EpisodeImport/Specifications/UpgradeSpecification.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/MediaFiles/Events/EpisodeDownloadedEvent.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/MediaFiles/Events/EpisodeFileAddedEvent.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/MediaFiles/Events/EpisodeFileDeletedEvent.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/MediaFiles/Events/EpisodeImportedEvent.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/MediaFiles/Events/SeriesRenamedEvent.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/MediaFiles/MediaFileExtensions.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/MediaFiles/MediaFileRepository.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/MediaFiles/MediaFileService.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/MediaFiles/MediaFileTableCleanupService.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/MediaFiles/MediaInfo/MediaInfoModel.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/MediaFiles/MediaInfo/VideoFileInfoReader.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/MediaFiles/RecycleBinProvider.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/MediaFiles/RenameEpisodeFileService.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/MediaFiles/SameFilenameException.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/MediaFiles/UpgradeMediaFileService.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/MediaInfo.dll (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Messaging/Commands/BackendCommandAttribute.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Messaging/Commands/Command.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Messaging/Commands/CommandEqualityComparer.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Messaging/Commands/CommandExecutor.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Messaging/Commands/ICommandExecutor.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Messaging/Commands/IExecute.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Messaging/Commands/TestCommand.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Messaging/Commands/TestCommandExecutor.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Messaging/Commands/Tracking/CommandStatus.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Messaging/Commands/Tracking/CommandTrackingService.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Messaging/Commands/Tracking/ExistingCommand.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Messaging/Commands/Tracking/TrackedCommandCleanupCommand.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Messaging/Events/CommandCreatedEvent.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Messaging/Events/CommandExecutedEvent.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Messaging/Events/EventAggregator.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Messaging/Events/IEventAggregator.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Messaging/Events/IHandle.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Messaging/IProcessMessage.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/MetadataSource/IProvideSeriesInfo.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/MetadataSource/ISearchForNewSeries.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/MetadataSource/Trakt/Episode.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/MetadataSource/Trakt/FullShow.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/MetadataSource/Trakt/Images.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/MetadataSource/Trakt/Season.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/MetadataSource/Trakt/TraktException.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/MetadataSource/TraktProxy.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Notifications/Email/Email.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Notifications/Email/EmailService.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Notifications/Email/EmailSettings.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Notifications/Email/TestEmailCommand.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Notifications/Growl/Growl.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Notifications/Growl/GrowlService.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Notifications/Growl/GrowlSettings.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Notifications/Growl/TestGrowlCommand.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Notifications/INotification.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Notifications/Notification.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Notifications/NotificationBase.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Notifications/NotificationDefinition.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Notifications/NotificationRepository.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Notifications/NotificationService.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Notifications/NotificationSettingsProvider.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Notifications/NotifyMyAndroid/NotifyMyAndroid.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Notifications/NotifyMyAndroid/NotifyMyAndroidPriority.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Notifications/NotifyMyAndroid/NotifyMyAndroidProxy.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Notifications/NotifyMyAndroid/NotifyMyAndroidSettings.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Notifications/NotifyMyAndroid/TestNotifyMyAndroidCommand.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Notifications/Plex/PlexClient.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Notifications/Plex/PlexClientSettings.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Notifications/Plex/PlexServer.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Notifications/Plex/PlexServerSettings.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Notifications/Plex/PlexService.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Notifications/Plex/TestPlexClientCommand.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Notifications/Plex/TestPlexServerCommand.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Notifications/Prowl/InvalidApiKeyException.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Notifications/Prowl/Prowl.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Notifications/Prowl/ProwlPriority.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Notifications/Prowl/ProwlService.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Notifications/Prowl/ProwlSettings.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Notifications/Prowl/TestProwlCommand.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Notifications/PushBullet/PushBullet.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Notifications/PushBullet/PushBulletProxy.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Notifications/PushBullet/PushBulletSettings.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Notifications/PushBullet/TestPushBulletCommand.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Notifications/Pushover/InvalidResponseException.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Notifications/Pushover/Pushover.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Notifications/Pushover/PushoverPriority.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Notifications/Pushover/PushoverService.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Notifications/Pushover/PushoverSettings.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Notifications/Pushover/TestPushoverCommand.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Notifications/Xbmc/HttpApiProvider.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Notifications/Xbmc/IApiProvider.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Notifications/Xbmc/InvalidXbmcVersionException.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Notifications/Xbmc/JsonApiProvider.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Notifications/Xbmc/Model/ActivePlayer.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Notifications/Xbmc/Model/ActivePlayersDharmaResult.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Notifications/Xbmc/Model/ActivePlayersEdenResult.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Notifications/Xbmc/Model/ErrorResult.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Notifications/Xbmc/Model/TvShow.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Notifications/Xbmc/Model/TvShowResponse.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Notifications/Xbmc/Model/TvShowResult.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Notifications/Xbmc/Model/VersionResult.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Notifications/Xbmc/Model/XbmcJsonResult.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Notifications/Xbmc/Model/XbmcVersion.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Notifications/Xbmc/TestXbmcCommand.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Notifications/Xbmc/Xbmc.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Notifications/Xbmc/XbmcService.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Notifications/Xbmc/XbmcSettings.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/NzbDrone.Core.csproj (99%) rename {NzbDrone.Core => src/NzbDrone.Core}/Organizer/EpisodeSortingType.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Organizer/FileNameBuilder.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Organizer/NamingConfig.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Parser/Language.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Parser/Model/LocalEpisode.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Parser/Model/ParsedEpisodeInfo.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Parser/Model/ReleaseInfo.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Parser/Model/RemoteEpisode.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Parser/Model/TorrentInfo.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Parser/Parser.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Parser/ParsingService.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Parser/QualityParser.cs (100%) rename {NzbDrone.Core/progressmessaging => src/NzbDrone.Core/ProgressMessaging}/CommandUpdatedEvent.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/ProgressMessaging/ProgressMessageTarget.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Properties/AnalysisRules.ruleset (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Properties/AssemblyInfo.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Qualities/Quality.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Qualities/QualityProfile.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Qualities/QualityProfileInUseException.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Qualities/QualityProfileRepository.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Qualities/QualityProfileService.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Qualities/QualitySize.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Qualities/QualitySizeRepository.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Qualities/QualitySizeService.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Queue/Queue.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Queue/QueueScheduler.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Queue/QueueService.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Queue/UpdateQueueEvent.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Rest/RestException.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Rest/RestSharpExtensions.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/RootFolders/RootFolder.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/RootFolders/RootFolderService.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/RootFolders/UnmappedFolder.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/SeriesStats/SeriesStatistics.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/SeriesStats/SeriesStatisticsRepository.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/SeriesStats/SeriesStatisticsService.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/ThingiProvider/ConfigContractNotFoundException.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/ThingiProvider/IProvider.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/ThingiProvider/IProviderConfig.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/ThingiProvider/IProviderFactory.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/ThingiProvider/IProviderRepository.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/ThingiProvider/NullConfig.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/ThingiProvider/ProviderDefinition.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/ThingiProvider/ProviderFactory.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/ThingiProvider/ProviderRepository.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Tv/Commands/RefreshSeriesCommand.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Tv/Episode.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Tv/EpisodeRepository.cs (97%) rename {NzbDrone.Core => src/NzbDrone.Core}/Tv/EpisodeService.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Tv/Events/EpisodeInfoAddedEvent.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Tv/Events/EpisodeInfoDeletedEvent.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Tv/Events/EpisodeInfoUpdatedEvent.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Tv/Events/SeriesAddedEvent.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Tv/Events/SeriesDeletedEvent.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Tv/Events/SeriesUpdatedEvent.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Tv/QualityModel.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Tv/RefreshEpisodeService.cs (97%) rename {NzbDrone.Core => src/NzbDrone.Core}/Tv/RefreshSeriesService.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Tv/Season.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Tv/Series.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Tv/SeriesRepository.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Tv/SeriesService.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Tv/SeriesStatusType.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Tv/SeriesTypes.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Update/Commands/ApplicationUpdateCommand.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Update/InstallUpdateService.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Update/RecentUpdateProvider.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Update/UpdateChanges.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Update/UpdateCheckService.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Update/UpdatePackage.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Update/UpdatePackageAvailable.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Update/UpdatePackageProvider.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/Validation/RuleBuilderExtensions.cs (100%) rename {NzbDrone.Core => src/NzbDrone.Core}/packages.config (100%) rename {NzbDrone.Host => src/NzbDrone.Host}/AccessControl/FirewallAdapter.cs (100%) rename {NzbDrone.Host => src/NzbDrone.Host}/AccessControl/NetshProvider.cs (100%) rename {NzbDrone.Host => src/NzbDrone.Host}/AccessControl/SslAdapter.cs (100%) rename {NzbDrone.Host => src/NzbDrone.Host}/AccessControl/UrlAclAdapter.cs (100%) rename {NzbDrone.Host => src/NzbDrone.Host}/ApplicationModes.cs (100%) rename {NzbDrone.Host => src/NzbDrone.Host}/ApplicationServer.cs (100%) rename {NzbDrone.Host => src/NzbDrone.Host}/Bootstrap.cs (100%) rename {NzbDrone.Host => src/NzbDrone.Host}/IUserAlert.cs (100%) rename {NzbDrone.Host => src/NzbDrone.Host}/MainAppContainerBuilder.cs (100%) rename {NzbDrone.Host => src/NzbDrone.Host}/NLog.xsd (100%) rename {NzbDrone.Host => src/NzbDrone.Host}/NzbDrone.Host.csproj (99%) rename {NzbDrone.Host => src/NzbDrone.Host}/NzbDrone.ico (100%) rename {NzbDrone.Host => src/NzbDrone.Host}/Owin/IHostController.cs (100%) rename {NzbDrone.Host => src/NzbDrone.Host}/Owin/MiddleWare/IOwinMiddleWare.cs (100%) rename {NzbDrone.Host => src/NzbDrone.Host}/Owin/MiddleWare/NancyMiddleWare.cs (100%) rename {NzbDrone.Host => src/NzbDrone.Host}/Owin/MiddleWare/SignalRMiddleWare.cs (100%) rename {NzbDrone.Host => src/NzbDrone.Host}/Owin/NlogTextWriter.cs (100%) rename {NzbDrone.Host => src/NzbDrone.Host}/Owin/OwinHostController.cs (100%) rename {NzbDrone.Host => src/NzbDrone.Host}/Owin/OwinServiceProvider.cs (100%) rename {NzbDrone.Host => src/NzbDrone.Host}/Owin/OwinTraceOutputFactory.cs (100%) rename {NzbDrone.Host => src/NzbDrone.Host}/Owin/PortInUseException.cs (100%) rename {NzbDrone.Host => src/NzbDrone.Host}/PlatformValidation.cs (100%) rename {NzbDrone.Host => src/NzbDrone.Host}/PriorityMonitor.cs (100%) rename {NzbDrone.Host => src/NzbDrone.Host}/Properties/AssemblyInfo.cs (100%) rename {NzbDrone.Host => src/NzbDrone.Host}/Router.cs (100%) rename {NzbDrone.Host => src/NzbDrone.Host}/TerminateApplicationException.cs (100%) rename {NzbDrone.Host => src/NzbDrone.Host}/app.config (100%) rename {NzbDrone.Host => src/NzbDrone.Host}/packages.config (100%) rename {NzbDrone.Integration.Test => src/NzbDrone.Integration.Test}/Client/ClientBase.cs (96%) rename {NzbDrone.Integration.Test => src/NzbDrone.Integration.Test}/Client/EpisodeClient.cs (100%) rename {NzbDrone.Integration.Test => src/NzbDrone.Integration.Test}/Client/IndexerClient.cs (100%) rename {NzbDrone.Integration.Test => src/NzbDrone.Integration.Test}/Client/ReleaseClient.cs (100%) rename {NzbDrone.Integration.Test => src/NzbDrone.Integration.Test}/Client/SeriesClient.cs (100%) rename {NzbDrone.Integration.Test => src/NzbDrone.Integration.Test}/CommandIntegerationTests.cs (100%) rename {NzbDrone.Integration.Test => src/NzbDrone.Integration.Test}/EpisodeIntegrationTests.cs (100%) rename {NzbDrone.Integration.Test => src/NzbDrone.Integration.Test}/HistoryIntegrationTest.cs (100%) rename {NzbDrone.Integration.Test => src/NzbDrone.Integration.Test}/IndexerIntegrationFixture.cs (100%) rename {NzbDrone.Integration.Test => src/NzbDrone.Integration.Test}/IntegrationTest.cs (100%) rename {NzbDrone.Integration.Test => src/NzbDrone.Integration.Test}/IntegrationTestDirectoryInfo.cs (100%) rename {NzbDrone.Integration.Test => src/NzbDrone.Integration.Test}/NamingConfigTests.cs (100%) rename {NzbDrone.Integration.Test => src/NzbDrone.Integration.Test}/NzbDrone.Integration.Test.csproj (100%) rename {NzbDrone.Integration.Test => src/NzbDrone.Integration.Test}/NzbDroneRunner.cs (100%) rename {NzbDrone.Integration.Test => src/NzbDrone.Integration.Test}/Properties/AssemblyInfo.cs (100%) rename {NzbDrone.Integration.Test => src/NzbDrone.Integration.Test}/QualityProfileIntegrationTest.cs (100%) rename {NzbDrone.Integration.Test => src/NzbDrone.Integration.Test}/ReleaseIntegrationTest.cs (100%) rename {NzbDrone.Integration.Test => src/NzbDrone.Integration.Test}/RootFolderIntegrationTest.cs (100%) rename {NzbDrone.Integration.Test => src/NzbDrone.Integration.Test}/SeriesIntegrationTest.cs (100%) rename {NzbDrone.Integration.Test => src/NzbDrone.Integration.Test}/packages.config (100%) rename {NzbDrone.Libraries.Test => src/NzbDrone.Libraries.Test}/JsonTests/JsonFixture.cs (100%) rename {NzbDrone.Libraries.Test => src/NzbDrone.Libraries.Test}/NzbDrone.Libraries.Test.csproj (100%) rename {NzbDrone.Libraries.Test => src/NzbDrone.Libraries.Test}/Properties/AssemblyInfo.cs (100%) rename {NzbDrone.Libraries.Test => src/NzbDrone.Libraries.Test}/packages.config (100%) rename {NzbDrone.SignalR => src/NzbDrone.SignalR}/BroadcastSignalRMessage.cs (100%) rename {NzbDrone.SignalR => src/NzbDrone.SignalR}/NoOpPerformanceCounterManager.cs (100%) rename {NzbDrone.SignalR => src/NzbDrone.SignalR}/NzbDrone.SignalR.csproj (97%) rename {NzbDrone.SignalR => src/NzbDrone.SignalR}/NzbDronePersistentConnection.cs (100%) rename {NzbDrone.SignalR => src/NzbDrone.SignalR}/Properties/AssemblyInfo.cs (100%) rename {NzbDrone.SignalR => src/NzbDrone.SignalR}/Serializer.cs (100%) rename {NzbDrone.SignalR => src/NzbDrone.SignalR}/SignalRMessage.cs (100%) rename {NzbDrone.SignalR => src/NzbDrone.SignalR}/SignalrDependencyResolver.cs (100%) rename {NzbDrone.SignalR => src/NzbDrone.SignalR}/packages.config (100%) rename {NzbDrone.Test.Common => src/NzbDrone.Test.Common}/App.config (100%) rename {NzbDrone.Test.Common => src/NzbDrone.Test.Common}/AutoMoq/AutoMoqer.cs (100%) rename {NzbDrone.Test.Common => src/NzbDrone.Test.Common}/AutoMoq/License.txt (100%) rename {NzbDrone.Test.Common => src/NzbDrone.Test.Common}/AutoMoq/Unity/AutoMockingBuilderStrategy.cs (100%) rename {NzbDrone.Test.Common => src/NzbDrone.Test.Common}/AutoMoq/Unity/AutoMockingContainerExtension.cs (100%) rename {NzbDrone.Test.Common => src/NzbDrone.Test.Common}/Categories/DiskAccessTestAttribute.cs (100%) rename {NzbDrone.Test.Common => src/NzbDrone.Test.Common}/Categories/IntegrationTestAttribute.cs (100%) rename {NzbDrone.Test.Common => src/NzbDrone.Test.Common}/ConcurrencyCounter.cs (100%) rename {NzbDrone.Test.Common => src/NzbDrone.Test.Common}/ExceptionVerification.cs (100%) rename {NzbDrone.Test.Common => src/NzbDrone.Test.Common}/License.txt (100%) rename {NzbDrone.Test.Common => src/NzbDrone.Test.Common}/LoggingTest.cs (100%) rename {NzbDrone.Test.Common => src/NzbDrone.Test.Common}/MockerExtensions.cs (100%) rename {NzbDrone.Test.Common => src/NzbDrone.Test.Common}/NzbDrone.Test.Common.csproj (100%) rename {NzbDrone.Test.Common => src/NzbDrone.Test.Common}/ObjectExtentions.cs (100%) rename {NzbDrone.Test.Common => src/NzbDrone.Test.Common}/Properties/AssemblyInfo.cs (100%) rename {NzbDrone.Test.Common => src/NzbDrone.Test.Common}/ReflectionExtensions.cs (100%) rename {NzbDrone.Test.Common => src/NzbDrone.Test.Common}/StringExtensions.cs (100%) rename {NzbDrone.Test.Common => src/NzbDrone.Test.Common}/TestBase.cs (100%) rename {NzbDrone.Test.Common => src/NzbDrone.Test.Common}/TestException.cs (100%) rename {NzbDrone.Test.Common => src/NzbDrone.Test.Common}/packages.config (100%) rename {NzbDrone.Test.Dummy => src/NzbDrone.Test.Dummy}/DummyApp.cs (100%) rename {NzbDrone.Test.Dummy => src/NzbDrone.Test.Dummy}/NzbDrone.Test.Dummy.csproj (100%) rename {NzbDrone.Test.Dummy => src/NzbDrone.Test.Dummy}/Properties/AssemblyInfo.cs (100%) rename {NzbDrone.Test.Dummy => src/NzbDrone.Test.Dummy}/app.config (100%) rename {NzbDrone.Update.Test => src/NzbDrone.Update.Test}/InstallUpdateServiceFixture.cs (100%) rename {NzbDrone.Update.Test => src/NzbDrone.Update.Test}/License.txt (100%) rename {NzbDrone.Update.Test => src/NzbDrone.Update.Test}/NzbDrone.Update.Test.csproj (100%) rename {NzbDrone.Update.Test => src/NzbDrone.Update.Test}/ProgramFixture.cs (100%) rename {NzbDrone.Update.Test => src/NzbDrone.Update.Test}/Properties/AssemblyInfo.cs (100%) rename {NzbDrone.Update.Test => src/NzbDrone.Update.Test}/StartNzbDroneService.cs (100%) rename {NzbDrone.Update.Test => src/NzbDrone.Update.Test}/UpdateProviderStartFixture.cs (100%) rename {NzbDrone.Update.Test => src/NzbDrone.Update.Test}/packages.config (100%) rename {NzbDrone.Update => src/NzbDrone.Update}/AppType.cs (100%) rename {NzbDrone.Update => src/NzbDrone.Update}/NLog.xsd (100%) rename {NzbDrone.Update => src/NzbDrone.Update}/NzbDrone.Update.csproj (96%) rename {NzbDrone.Update => src/NzbDrone.Update}/Properties/AssemblyInfo.cs (100%) rename {NzbDrone.Update => src/NzbDrone.Update}/UpdateApp.cs (100%) rename {NzbDrone.Update => src/NzbDrone.Update}/UpdateContainerBuilder.cs (100%) rename {NzbDrone.Update => src/NzbDrone.Update}/UpdateEngine/BackupAndRestore.cs (100%) rename {NzbDrone.Update => src/NzbDrone.Update}/UpdateEngine/DetectApplicationType.cs (100%) rename {NzbDrone.Update => src/NzbDrone.Update}/UpdateEngine/InstallUpdateService.cs (100%) rename {NzbDrone.Update => src/NzbDrone.Update}/UpdateEngine/StartNzbDrone.cs (100%) rename {NzbDrone.Update => src/NzbDrone.Update}/UpdateEngine/TerminateNzbDrone.cs (100%) rename {NzbDrone.Update => src/NzbDrone.Update}/app.config (100%) rename {NzbDrone.Update => src/NzbDrone.Update}/packages.config (100%) rename NzbDrone.sln => src/NzbDrone.sln (100%) rename NzbDrone.sln.DotSettings => src/NzbDrone.sln.DotSettings (100%) rename {NzbDrone => src/NzbDrone}/MessageBoxUserAlert.cs (100%) rename {NzbDrone => src/NzbDrone}/NzbDrone.csproj (98%) rename {NzbDrone => src/NzbDrone}/Properties/AssemblyInfo.cs (100%) rename {NzbDrone => src/NzbDrone}/Properties/Resources.Designer.cs (100%) rename {NzbDrone => src/NzbDrone}/Properties/Resources.resx (100%) rename {NzbDrone => src/NzbDrone}/SysTray/SysTrayApp.cs (100%) rename {NzbDrone => src/NzbDrone}/WindowsApp.cs (100%) rename {NzbDrone => src/NzbDrone}/packages.config (100%) rename {ServiceHelpers => src/ServiceHelpers}/ServiceInstall/Program.cs (100%) rename {ServiceHelpers => src/ServiceHelpers}/ServiceInstall/Properties/AssemblyInfo.cs (100%) rename {ServiceHelpers => src/ServiceHelpers}/ServiceInstall/ServiceHelper.cs (100%) rename {ServiceHelpers => src/ServiceHelpers}/ServiceInstall/ServiceInstall.csproj (96%) rename {ServiceHelpers => src/ServiceHelpers}/ServiceInstall/app.config (100%) rename {ServiceHelpers => src/ServiceHelpers}/ServiceInstall/app.manifest (100%) rename {ServiceHelpers => src/ServiceHelpers}/ServiceInstall/green_puzzle.ico (100%) rename {ServiceHelpers => src/ServiceHelpers}/ServiceUninstall/Program.cs (100%) rename {ServiceHelpers => src/ServiceHelpers}/ServiceUninstall/Properties/AssemblyInfo.cs (100%) rename {ServiceHelpers => src/ServiceHelpers}/ServiceUninstall/ServiceHelper.cs (100%) rename {ServiceHelpers => src/ServiceHelpers}/ServiceUninstall/ServiceUninstall.csproj (96%) rename {ServiceHelpers => src/ServiceHelpers}/ServiceUninstall/app.config (100%) rename {ServiceHelpers => src/ServiceHelpers}/ServiceUninstall/app.manifest (100%) rename {ServiceHelpers => src/ServiceHelpers}/ServiceUninstall/red_puzzle.ico (100%) rename SharedLiveTemplates.xml => src/SharedLiveTemplates.xml (100%) rename {UI => src/UI}/.idea/.name (100%) rename {UI => src/UI}/.idea/NzbDrone.UI.iml (100%) rename {UI => src/UI}/.idea/codeStyleSettings.xml (100%) rename {UI => src/UI}/.idea/dictionaries/Keivan.xml (100%) rename {UI => src/UI}/.idea/dictionaries/Keivan_Beigi.xml (100%) rename {UI => src/UI}/.idea/dictionaries/Mark.xml (100%) rename {UI => src/UI}/.idea/encodings.xml (100%) rename {UI => src/UI}/.idea/inspectionProfiles/Project_Default.xml (100%) rename {UI => src/UI}/.idea/inspectionProfiles/profiles_settings.xml (100%) rename {UI => src/UI}/.idea/jsLibraryMappings.xml (100%) rename {UI => src/UI}/.idea/jsLinters/jshint.xml (100%) rename {UI => src/UI}/.idea/jsLinters/jslint.xml (100%) rename {UI => src/UI}/.idea/misc.xml (100%) rename {UI => src/UI}/.idea/modules.xml (100%) rename {UI => src/UI}/.idea/runConfigurations/Debug___Chrome.xml (100%) rename {UI => src/UI}/.idea/runConfigurations/Debug___Firefox.xml (100%) rename {UI => src/UI}/.idea/scopes/NzbDrone.xml (100%) rename {UI => src/UI}/.idea/scopes/scope_settings.xml (100%) rename {UI => src/UI}/.idea/vcs.xml (100%) rename {UI => src/UI}/AddSeries/AddSeriesCollection.js (100%) rename {UI => src/UI}/AddSeries/AddSeriesLayout.js (100%) rename {UI => src/UI}/AddSeries/AddSeriesLayoutTemplate.html (100%) rename {UI => src/UI}/AddSeries/AddSeriesView.js (100%) rename {UI => src/UI}/AddSeries/AddSeriesViewTemplate.html (100%) rename {UI => src/UI}/AddSeries/Existing/AddExistingSeriesCollectionView.js (100%) rename {UI => src/UI}/AddSeries/Existing/UnmappedFolderCollection.js (100%) rename {UI => src/UI}/AddSeries/Existing/UnmappedFolderModel.js (100%) rename {UI => src/UI}/AddSeries/NotFoundTemplate.html (100%) rename {UI => src/UI}/AddSeries/NotFoundView.js (100%) rename {UI => src/UI}/AddSeries/RootFolders/Collection.js (100%) rename {UI => src/UI}/AddSeries/RootFolders/CollectionView.js (100%) rename {UI => src/UI}/AddSeries/RootFolders/ItemView.js (100%) rename {UI => src/UI}/AddSeries/RootFolders/ItemViewTemplate.html (100%) rename {UI => src/UI}/AddSeries/RootFolders/Layout.js (100%) rename {UI => src/UI}/AddSeries/RootFolders/LayoutTemplate.html (100%) rename {UI => src/UI}/AddSeries/RootFolders/Model.js (100%) rename {UI => src/UI}/AddSeries/RootFolders/RootFolderSelectionPartial.html (100%) rename {UI => src/UI}/AddSeries/RootFolders/StartingSeasonSelectionPartial.html (100%) rename {UI => src/UI}/AddSeries/SearchResultCollectionView.js (100%) rename {UI => src/UI}/AddSeries/SearchResultView.js (97%) rename {UI => src/UI}/AddSeries/SearchResultViewTemplate.html (100%) rename {UI => src/UI}/AddSeries/addSeries.less (100%) rename {UI => src/UI}/Calendar/CalendarLayout.js (100%) rename {UI => src/UI}/Calendar/CalendarLayoutTemplate.html (100%) rename {UI => src/UI}/Calendar/CalendarView.js (100%) rename {UI => src/UI}/Calendar/Collection.js (100%) rename {UI => src/UI}/Calendar/UpcomingCollection.js (100%) rename {UI => src/UI}/Calendar/UpcomingCollectionView.js (100%) rename {UI => src/UI}/Calendar/UpcomingItemView.js (100%) rename {UI => src/UI}/Calendar/UpcomingItemViewTemplate.html (100%) rename {UI => src/UI}/Calendar/calendar.less (100%) rename {UI => src/UI}/Cells/ApprovalStatusCell.js (100%) rename {UI => src/UI}/Cells/ApprovalStatusCellTemplate.html (100%) rename {UI => src/UI}/Cells/Edit/QualityCellEditor.js (100%) rename {UI => src/UI}/Cells/Edit/QualityCellEditorTemplate.html (100%) rename {UI => src/UI}/Cells/EpisodeActionsCell.js (100%) rename {UI => src/UI}/Cells/EpisodeActionsCellTemplate.html (100%) rename {UI => src/UI}/Cells/EpisodeNumberCell.js (100%) rename {UI => src/UI}/Cells/EpisodeProgressCell.js (100%) rename {UI => src/UI}/Cells/EpisodeProgressCellTemplate.html (100%) rename {UI => src/UI}/Cells/EpisodeStatusCell.js (100%) rename {UI => src/UI}/Cells/EpisodeTitleCell.js (100%) rename {UI => src/UI}/Cells/FileSizeCell.js (100%) rename {UI => src/UI}/Cells/Header/QualityHeaderCell.js (100%) rename {UI => src/UI}/Cells/IndexerCell.js (100%) rename {UI => src/UI}/Cells/NzbDroneCell.js (100%) rename {UI => src/UI}/Cells/QualityCell.js (100%) rename {UI => src/UI}/Cells/QualityCellTemplate.html (100%) rename {UI => src/UI}/Cells/QualityProfileCell.js (100%) rename {UI => src/UI}/Cells/RelativeDateCell.js (100%) rename {UI => src/UI}/Cells/SeriesActionsCell.js (100%) rename {UI => src/UI}/Cells/SeriesStatusCell.js (100%) rename {UI => src/UI}/Cells/SeriesTitleCell.js (100%) rename {UI => src/UI}/Cells/SeriesTitleTemplate.html (100%) rename {UI => src/UI}/Cells/TemplatedCell.js (100%) rename {UI => src/UI}/Cells/ToggleCell.js (100%) rename {UI => src/UI}/Cells/cells.less (100%) rename {UI => src/UI}/Commands/CommandCollection.js (100%) rename {UI => src/UI}/Commands/CommandController.js (100%) rename {UI => src/UI}/Commands/CommandMessengerCollectionView.js (100%) rename {UI => src/UI}/Commands/CommandMessengerItemView.js (100%) rename {UI => src/UI}/Commands/CommandModel.js (100%) rename {UI => src/UI}/Config.js (100%) rename {UI => src/UI}/Content/Backgrid/backgrid.less (100%) rename {UI => src/UI}/Content/Backgrid/filter.less (100%) rename {UI => src/UI}/Content/Backgrid/paginator.less (100%) rename {UI => src/UI}/Content/Bootstrap/accordion.less (100%) rename {UI => src/UI}/Content/Bootstrap/alerts.less (100%) rename {UI => src/UI}/Content/Bootstrap/bootstrap.less (100%) rename {UI => src/UI}/Content/Bootstrap/breadcrumbs.less (100%) rename {UI => src/UI}/Content/Bootstrap/button-groups.less (100%) rename {UI => src/UI}/Content/Bootstrap/buttons.less (100%) rename {UI => src/UI}/Content/Bootstrap/carousel.less (100%) rename {UI => src/UI}/Content/Bootstrap/close.less (100%) rename {UI => src/UI}/Content/Bootstrap/code.less (100%) rename {UI => src/UI}/Content/Bootstrap/component-animations.less (100%) rename {UI => src/UI}/Content/Bootstrap/dropdowns.less (100%) rename {UI => src/UI}/Content/Bootstrap/forms.less (100%) rename {UI => src/UI}/Content/Bootstrap/grid.less (100%) rename {UI => src/UI}/Content/Bootstrap/hero-unit.less (100%) rename {UI => src/UI}/Content/Bootstrap/labels-badges.less (100%) rename {UI => src/UI}/Content/Bootstrap/layouts.less (100%) rename {UI => src/UI}/Content/Bootstrap/media.less (100%) rename {UI => src/UI}/Content/Bootstrap/mixins.less (100%) rename {UI => src/UI}/Content/Bootstrap/modals.less (100%) rename {UI => src/UI}/Content/Bootstrap/navbar.less (100%) rename {UI => src/UI}/Content/Bootstrap/navs.less (100%) rename {UI => src/UI}/Content/Bootstrap/pager.less (100%) rename {UI => src/UI}/Content/Bootstrap/pagination.less (100%) rename {UI => src/UI}/Content/Bootstrap/popovers.less (100%) rename {UI => src/UI}/Content/Bootstrap/progress-bars.less (100%) rename {UI => src/UI}/Content/Bootstrap/reset.less (100%) rename {UI => src/UI}/Content/Bootstrap/scaffolding.less (100%) rename {UI => src/UI}/Content/Bootstrap/sprites.less (100%) rename {UI => src/UI}/Content/Bootstrap/tables.less (100%) rename {UI => src/UI}/Content/Bootstrap/thumbnails.less (100%) rename {UI => src/UI}/Content/Bootstrap/tooltip.less (100%) rename {UI => src/UI}/Content/Bootstrap/type.less (100%) rename {UI => src/UI}/Content/Bootstrap/utilities.less (100%) rename {UI => src/UI}/Content/Bootstrap/variables.less (100%) rename {UI => src/UI}/Content/Bootstrap/wells.less (100%) rename UI/Content/FontAwesome/fontawesome.otf => src/UI/Content/FontAwesome/FontAwesome.otf (100%) rename {UI => src/UI}/Content/FontAwesome/bootstrap.less (100%) rename {UI => src/UI}/Content/FontAwesome/core.less (100%) rename {UI => src/UI}/Content/FontAwesome/extras.less (100%) rename {UI => src/UI}/Content/FontAwesome/font-awesome-ie7.less (100%) rename {UI => src/UI}/Content/FontAwesome/font-awesome.less (100%) rename {UI => src/UI}/Content/FontAwesome/fontawesome-webfont.eot (100%) rename {UI => src/UI}/Content/FontAwesome/fontawesome-webfont.svg (100%) rename {UI => src/UI}/Content/FontAwesome/fontawesome-webfont.ttf (100%) rename {UI => src/UI}/Content/FontAwesome/fontawesome-webfont.woff (100%) rename {UI => src/UI}/Content/FontAwesome/icons.less (100%) rename {UI => src/UI}/Content/FontAwesome/mixins.less (100%) rename {UI => src/UI}/Content/FontAwesome/path.less (100%) rename {UI => src/UI}/Content/FontAwesome/variables.less (100%) rename {UI => src/UI}/Content/Images/404.png (100%) rename {UI => src/UI}/Content/Images/black_linen_v2.png (100%) rename {UI => src/UI}/Content/Images/logo.png (100%) rename {UI => src/UI}/Content/Images/pattern.png (100%) rename {UI => src/UI}/Content/Images/poster-dark.jpg (100%) rename {UI => src/UI}/Content/Images/touch/114.png (100%) rename {UI => src/UI}/Content/Images/touch/144.png (100%) rename {UI => src/UI}/Content/Images/touch/57.png (100%) rename {UI => src/UI}/Content/Images/touch/72.png (100%) rename {UI => src/UI}/Content/Messenger/messenger.css (100%) rename {UI => src/UI}/Content/Messenger/messenger.future.css (100%) rename {UI => src/UI}/Content/Overrides/bootstrap.less (100%) rename {UI => src/UI}/Content/Overrides/bootstrap.toggle-switch.less (100%) rename {UI => src/UI}/Content/Overrides/browser.less (100%) rename {UI => src/UI}/Content/bootstrap.toggle-switch.css (100%) rename {UI => src/UI}/Content/font.less (100%) rename UI/Content/fonts/OpenSans-Italic.eot => src/UI/Content/fonts/opensans-italic.eot (100%) rename UI/Content/fonts/OpenSans-Italic.ttf => src/UI/Content/fonts/opensans-italic.ttf (100%) rename UI/Content/fonts/OpenSans-Italic.woff => src/UI/Content/fonts/opensans-italic.woff (100%) rename UI/Content/fonts/OpenSans-Light.eot => src/UI/Content/fonts/opensans-light.eot (100%) rename UI/Content/fonts/OpenSans-Light.ttf => src/UI/Content/fonts/opensans-light.ttf (100%) rename UI/Content/fonts/OpenSans-Light.woff => src/UI/Content/fonts/opensans-light.woff (100%) rename UI/Content/fonts/OpenSans-LightItalic.eot => src/UI/Content/fonts/opensans-lightitalic.eot (100%) rename UI/Content/fonts/OpenSans-LightItalic.ttf => src/UI/Content/fonts/opensans-lightitalic.ttf (100%) rename UI/Content/fonts/OpenSans-LightItalic.woff => src/UI/Content/fonts/opensans-lightitalic.woff (100%) rename UI/Content/fonts/OpenSans-Regular.eot => src/UI/Content/fonts/opensans-regular.eot (100%) rename UI/Content/fonts/OpenSans-Regular.ttf => src/UI/Content/fonts/opensans-regular.ttf (100%) rename UI/Content/fonts/OpenSans-Regular.woff => src/UI/Content/fonts/opensans-regular.woff (100%) rename UI/Content/fonts/OpenSans-SemiBold.eot => src/UI/Content/fonts/opensans-semibold.eot (100%) rename UI/Content/fonts/OpenSans-Semibold.ttf => src/UI/Content/fonts/opensans-semibold.ttf (100%) rename UI/Content/fonts/OpenSans-SemiBold.woff => src/UI/Content/fonts/opensans-semibold.woff (100%) rename UI/Content/fonts/OpenSans-SemiboldItalic.eot => src/UI/Content/fonts/opensans-semibolditalic.eot (100%) rename UI/Content/fonts/OpenSans-SemiboldItalic.ttf => src/UI/Content/fonts/opensans-semibolditalic.ttf (100%) rename UI/Content/fonts/OpenSans-SemiboldItalic.woff => src/UI/Content/fonts/opensans-semibolditalic.woff (100%) rename {UI => src/UI}/Content/form.less (100%) rename {UI => src/UI}/Content/fullcalendar.css (100%) rename {UI => src/UI}/Content/icons.less (100%) rename {UI => src/UI}/Content/legend.less (100%) rename {UI => src/UI}/Content/menu.less (100%) rename {UI => src/UI}/Content/overrides.less (100%) rename {UI => src/UI}/Content/prefixer.less (100%) rename {UI => src/UI}/Content/spinner.less (100%) rename {UI => src/UI}/Content/theme.less (100%) rename {UI => src/UI}/Content/variables.less (100%) rename {UI => src/UI}/Controller.js (100%) rename {UI => src/UI}/Episode/EpisodeDetailsLayout.js (100%) rename {UI => src/UI}/Episode/EpisodeDetailsLayoutTemplate.html (100%) rename {UI => src/UI}/Episode/Search/ButtonsView.js (100%) rename {UI => src/UI}/Episode/Search/ButtonsViewTemplate.html (100%) rename {UI => src/UI}/Episode/Search/EpisodeSearchLayout.js (100%) rename {UI => src/UI}/Episode/Search/EpisodeSearchLayoutTemplate.html (100%) rename {UI => src/UI}/Episode/Search/ManualLayout.js (100%) rename {UI => src/UI}/Episode/Search/ManualLayoutTemplate.html (100%) rename {UI => src/UI}/Episode/Summary/EpisodeSummaryLayout.js (100%) rename {UI => src/UI}/Episode/Summary/EpisodeSummaryLayoutTemplate.html (100%) rename {UI => src/UI}/Episode/Summary/NoFileView.js (100%) rename {UI => src/UI}/Episode/Summary/NoFileViewTemplate.html (100%) rename {UI => src/UI}/Form/CheckboxTemplate.html (100%) rename {UI => src/UI}/Form/FormBuilder.js (100%) rename {UI => src/UI}/Form/FormHelpPartial.html (100%) rename {UI => src/UI}/Form/PasswordTemplate.html (100%) rename {UI => src/UI}/Form/SelectTemplate.html (100%) rename {UI => src/UI}/Form/TextboxTemplate.html (100%) rename {UI => src/UI}/Handlebars/Handlebars.Debug.js (100%) rename {UI => src/UI}/Handlebars/Helpers/DateTime.js (100%) rename {UI => src/UI}/Handlebars/Helpers/Episode.js (100%) rename {UI => src/UI}/Handlebars/Helpers/Html.js (100%) rename {UI => src/UI}/Handlebars/Helpers/Numbers.js (100%) rename {UI => src/UI}/Handlebars/Helpers/Quality.js (100%) rename {UI => src/UI}/Handlebars/Helpers/Series.js (100%) rename {UI => src/UI}/Handlebars/Helpers/Version.js (100%) rename {UI => src/UI}/Handlebars/backbone.marionette.templates.js (100%) rename {UI => src/UI}/History/Details/HistoryDetailsView.js (100%) rename {UI => src/UI}/History/Details/HistoryDetailsViewTemplate.html (100%) rename {UI => src/UI}/History/HistoryCollection.js (100%) rename {UI => src/UI}/History/HistoryLayout.js (100%) rename {UI => src/UI}/History/HistoryLayoutTemplate.html (100%) rename {UI => src/UI}/History/HistoryModel.js (100%) rename {UI => src/UI}/History/Queue/QueueCollection.js (100%) rename {UI => src/UI}/History/Queue/QueueLayout.js (100%) rename {UI => src/UI}/History/Queue/QueueLayoutTemplate.html (100%) rename {UI => src/UI}/History/Queue/QueueModel.js (100%) rename {UI => src/UI}/History/Queue/TimeleftCell.js (100%) rename {UI => src/UI}/History/Table/ControlsColumnTemplate.html (100%) rename {UI => src/UI}/History/Table/EventTypeCell.js (100%) rename {UI => src/UI}/History/Table/HistoryDetailsCell.js (100%) rename {UI => src/UI}/History/Table/HistoryTableLayout.js (100%) rename {UI => src/UI}/History/Table/HistoryTableLayoutTemplate.html (100%) rename {UI => src/UI}/Instrumentation/ErrorHandler.js (100%) rename {UI => src/UI}/Instrumentation/StringFormat.js (100%) rename {UI => src/UI}/JsLibraries/backbone.backgrid.filter.js (100%) rename {UI => src/UI}/JsLibraries/backbone.backgrid.js (100%) rename {UI => src/UI}/JsLibraries/backbone.backgrid.paginator.js (100%) rename {UI => src/UI}/JsLibraries/backbone.deep.model.js (100%) rename {UI => src/UI}/JsLibraries/backbone.js (100%) rename {UI => src/UI}/JsLibraries/backbone.marionette.js (100%) rename {UI => src/UI}/JsLibraries/backbone.modelbinder.js (100%) rename {UI => src/UI}/JsLibraries/backbone.pageable.js (100%) rename {UI => src/UI}/JsLibraries/backbone.shortcuts.js (100%) rename {UI => src/UI}/JsLibraries/backbone.validation.js (100%) rename {UI => src/UI}/JsLibraries/bootstrap.js (100%) rename {UI => src/UI}/JsLibraries/filesize.js (100%) rename {UI => src/UI}/JsLibraries/fullcalendar.js (100%) rename {UI => src/UI}/JsLibraries/handlebars.helpers.js (100%) rename {UI => src/UI}/JsLibraries/handlebars.runtime.js (100%) rename {UI => src/UI}/JsLibraries/jquery.backstretch.js (100%) rename {UI => src/UI}/JsLibraries/jquery.dotdotdot.js (100%) rename {UI => src/UI}/JsLibraries/jquery.js (100%) rename {UI => src/UI}/JsLibraries/jquery.knob.js (100%) rename {UI => src/UI}/JsLibraries/jquery.signalR.js (100%) rename {UI => src/UI}/JsLibraries/lodash.underscore.js (100%) rename {UI => src/UI}/JsLibraries/messenger.js (100%) rename {UI => src/UI}/JsLibraries/moment.js (100%) rename {UI => src/UI}/JsLibraries/require.js (100%) rename {UI => src/UI}/Missing/Collection.js (100%) rename {UI => src/UI}/Missing/ControlsColumnTemplate.html (100%) rename {UI => src/UI}/Missing/MissingLayout.js (100%) rename {UI => src/UI}/Missing/MissingLayoutTemplate.html (100%) rename {UI => src/UI}/Mixins/AsChangeTrackingModel.js (100%) rename {UI => src/UI}/Mixins/AsModelBoundView.js (100%) rename {UI => src/UI}/Mixins/AsNamedView.js (100%) rename {UI => src/UI}/Mixins/AsValidatedView.js (100%) rename {UI => src/UI}/Mixins/AutoComplete.js (100%) rename {UI => src/UI}/Mixins/backbone.marionette.region.mixin.js (100%) rename {UI => src/UI}/Mixins/backbone.signalr.mixin.js (100%) rename {UI => src/UI}/Mixins/jquery.ajax.js (100%) rename {UI => src/UI}/Mixins/underscore.mixin.deepExtend.js (100%) rename {UI => src/UI}/Navbar/NavbarTemplate.html (100%) rename {UI => src/UI}/Navbar/NavbarView.js (100%) rename {UI => src/UI}/Navbar/Search.js (100%) rename {UI => src/UI}/ProgressMessaging/ProgressMessageCollection.js (100%) rename {UI => src/UI}/Quality/QualityProfileCollection.js (100%) rename {UI => src/UI}/Quality/QualityProfileModel.js (100%) rename {UI => src/UI}/Quality/QualityProfileSelectionPartial.html (100%) rename {UI => src/UI}/Quality/QualitySizeCollection.js (100%) rename {UI => src/UI}/Quality/QualitySizeModel.js (100%) rename {UI => src/UI}/Release/Collection.js (100%) rename {UI => src/UI}/Release/DownloadReportCell.js (100%) rename {UI => src/UI}/Release/Layout.js (100%) rename {UI => src/UI}/Release/LayoutTemplate.html (100%) rename {UI => src/UI}/Release/Model.js (100%) rename {UI => src/UI}/Router.js (100%) rename {UI => src/UI}/SeasonPass/SeasonPassLayout.js (100%) rename {UI => src/UI}/SeasonPass/SeasonPassLayoutTemplate.html (100%) rename {UI => src/UI}/SeasonPass/SeriesCollectionView.js (100%) rename {UI => src/UI}/SeasonPass/SeriesLayout.js (100%) rename {UI => src/UI}/SeasonPass/SeriesLayoutTemplate.html (100%) rename {UI => src/UI}/Series/Delete/DeleteSeriesTemplate.html (100%) rename {UI => src/UI}/Series/Delete/DeleteSeriesView.js (100%) rename {UI => src/UI}/Series/Details/InfoView.js (100%) rename {UI => src/UI}/Series/Details/InfoViewTemplate.html (100%) rename {UI => src/UI}/Series/Details/SeasonCollectionView.js (100%) rename {UI => src/UI}/Series/Details/SeasonLayout.js (100%) rename {UI => src/UI}/Series/Details/SeasonLayoutTemplate.html (100%) rename {UI => src/UI}/Series/Details/SeriesDetailsLayout.js (100%) rename {UI => src/UI}/Series/Details/SeriesDetailsTemplate.html (100%) rename {UI => src/UI}/Series/Edit/EditSeriesTemplate.html (100%) rename {UI => src/UI}/Series/Edit/EditSeriesView.js (100%) rename {UI => src/UI}/Series/EpisodeCollection.js (100%) rename {UI => src/UI}/Series/EpisodeFileCollection.js (100%) rename {UI => src/UI}/Series/EpisodeFileModel.js (100%) rename {UI => src/UI}/Series/EpisodeModel.js (100%) rename {UI => src/UI}/Series/Index/EmptySeriesIndexView.js (100%) rename {UI => src/UI}/Series/Index/EmptyTemplate.html (100%) rename {UI => src/UI}/Series/Index/EmptyView.js (100%) rename {UI => src/UI}/Series/Index/EpisodeProgressPartial.html (100%) rename {UI => src/UI}/Series/Index/FooterModel.js (100%) rename {UI => src/UI}/Series/Index/FooterView.js (100%) rename {UI => src/UI}/Series/Index/FooterViewTemplate.html (100%) rename {UI => src/UI}/Series/Index/List/CollectionTemplate.html (100%) rename {UI => src/UI}/Series/Index/List/CollectionView.js (100%) rename {UI => src/UI}/Series/Index/List/ItemTemplate.html (100%) rename {UI => src/UI}/Series/Index/List/ItemView.js (100%) rename {UI => src/UI}/Series/Index/Posters/CollectionTemplate.html (100%) rename {UI => src/UI}/Series/Index/Posters/CollectionView.js (100%) rename {UI => src/UI}/Series/Index/Posters/ItemTemplate.html (100%) rename {UI => src/UI}/Series/Index/Posters/ItemView.js (100%) rename {UI => src/UI}/Series/Index/SeriesIndexLayout.js (100%) rename {UI => src/UI}/Series/Index/SeriesIndexLayoutTemplate.html (100%) rename {UI => src/UI}/Series/SeasonCollection.js (100%) rename {UI => src/UI}/Series/SeasonModel.js (100%) rename {UI => src/UI}/Series/SeriesCollection.js (100%) rename {UI => src/UI}/Series/SeriesModel.js (100%) rename {UI => src/UI}/Series/series.less (100%) rename {UI => src/UI}/ServerStatus.js (100%) rename {UI => src/UI}/Settings/DownloadClient/BlackholeView.js (100%) rename {UI => src/UI}/Settings/DownloadClient/BlackholeViewTemplate.html (100%) rename {UI => src/UI}/Settings/DownloadClient/Layout.js (100%) rename {UI => src/UI}/Settings/DownloadClient/LayoutTemplate.html (100%) rename {UI => src/UI}/Settings/DownloadClient/NzbgetView.js (100%) rename {UI => src/UI}/Settings/DownloadClient/NzbgetViewTemplate.html (100%) rename {UI => src/UI}/Settings/DownloadClient/PneumaticView.js (100%) rename {UI => src/UI}/Settings/DownloadClient/PneumaticViewTemplate.html (100%) rename {UI => src/UI}/Settings/DownloadClient/SabView.js (100%) rename {UI => src/UI}/Settings/DownloadClient/SabViewTemplate.html (100%) rename {UI => src/UI}/Settings/General/GeneralSettingsModel.js (100%) rename {UI => src/UI}/Settings/General/GeneralTemplate.html (100%) rename {UI => src/UI}/Settings/General/GeneralView.js (100%) rename {UI => src/UI}/Settings/Indexers/Collection.js (100%) rename {UI => src/UI}/Settings/Indexers/CollectionTemplate.html (100%) rename {UI => src/UI}/Settings/Indexers/CollectionView.js (100%) rename {UI => src/UI}/Settings/Indexers/DeleteTemplate.html (100%) rename {UI => src/UI}/Settings/Indexers/DeleteView.js (100%) rename {UI => src/UI}/Settings/Indexers/EditTemplate.html (100%) rename {UI => src/UI}/Settings/Indexers/EditView.js (100%) rename {UI => src/UI}/Settings/Indexers/IndexerLayout.js (100%) rename {UI => src/UI}/Settings/Indexers/IndexerLayoutTemplate.html (100%) rename {UI => src/UI}/Settings/Indexers/ItemTemplate.html (100%) rename {UI => src/UI}/Settings/Indexers/ItemView.js (100%) rename {UI => src/UI}/Settings/Indexers/Model.js (100%) rename {UI => src/UI}/Settings/Indexers/Options/IndexerOptionsView.js (100%) rename {UI => src/UI}/Settings/Indexers/Options/IndexerOptionsViewTemplate.html (100%) rename {UI => src/UI}/Settings/Indexers/indexers.less (100%) rename {UI => src/UI}/Settings/MediaManagement/FileManagement/FileManagementView.js (100%) rename {UI => src/UI}/Settings/MediaManagement/FileManagement/FileManagementViewTemplate.html (100%) rename {UI => src/UI}/Settings/MediaManagement/MediaManagementLayout.js (100%) rename {UI => src/UI}/Settings/MediaManagement/MediaManagementLayoutTemplate.html (100%) rename {UI => src/UI}/Settings/MediaManagement/Naming/Model.js (100%) rename {UI => src/UI}/Settings/MediaManagement/Naming/View.js (100%) rename {UI => src/UI}/Settings/MediaManagement/Naming/ViewTemplate.html (100%) rename {UI => src/UI}/Settings/MediaManagement/Sorting/View.js (100%) rename {UI => src/UI}/Settings/MediaManagement/Sorting/ViewTemplate.html (100%) rename {UI => src/UI}/Settings/Notifications/AddItemTemplate.html (100%) rename {UI => src/UI}/Settings/Notifications/AddItemView.js (100%) rename {UI => src/UI}/Settings/Notifications/AddTemplate.html (100%) rename {UI => src/UI}/Settings/Notifications/AddView.js (100%) rename {UI => src/UI}/Settings/Notifications/Collection.js (100%) rename {UI => src/UI}/Settings/Notifications/CollectionTemplate.html (100%) rename {UI => src/UI}/Settings/Notifications/CollectionView.js (100%) rename {UI => src/UI}/Settings/Notifications/DeleteTemplate.html (100%) rename {UI => src/UI}/Settings/Notifications/DeleteView.js (100%) rename {UI => src/UI}/Settings/Notifications/EditTemplate.html (100%) rename {UI => src/UI}/Settings/Notifications/EditView.js (100%) rename {UI => src/UI}/Settings/Notifications/ItemTemplate.html (100%) rename {UI => src/UI}/Settings/Notifications/ItemView.js (100%) rename {UI => src/UI}/Settings/Notifications/Model.js (100%) rename {UI => src/UI}/Settings/Notifications/SchemaModal.js (100%) rename {UI => src/UI}/Settings/Notifications/notifications.less (100%) rename {UI => src/UI}/Settings/Quality/Profile/AllowedLabeler.js (100%) rename {UI => src/UI}/Settings/Quality/Profile/DeleteTemplate.html (100%) rename {UI => src/UI}/Settings/Quality/Profile/DeleteView.js (100%) rename {UI => src/UI}/Settings/Quality/Profile/EditQualityProfileTemplate.html (100%) rename {UI => src/UI}/Settings/Quality/Profile/EditQualityProfileView.js (100%) rename {UI => src/UI}/Settings/Quality/Profile/QualityProfileCollectionTemplate.html (100%) rename {UI => src/UI}/Settings/Quality/Profile/QualityProfileCollectionView.js (100%) rename {UI => src/UI}/Settings/Quality/Profile/QualityProfileSchemaCollection.js (100%) rename {UI => src/UI}/Settings/Quality/Profile/QualityProfileTemplate.html (100%) rename {UI => src/UI}/Settings/Quality/Profile/QualityProfileView.js (100%) rename {UI => src/UI}/Settings/Quality/QualityLayout.js (100%) rename {UI => src/UI}/Settings/Quality/QualityLayoutTemplate.html (100%) rename {UI => src/UI}/Settings/Quality/Size/QualitySizeCollectionTemplate.html (100%) rename {UI => src/UI}/Settings/Quality/Size/QualitySizeCollectionView.js (100%) rename {UI => src/UI}/Settings/Quality/Size/QualitySizeTemplate.html (100%) rename {UI => src/UI}/Settings/Quality/Size/QualitySizeView.js (100%) rename {UI => src/UI}/Settings/Quality/quality.less (100%) rename {UI => src/UI}/Settings/SettingsLayout.js (100%) rename {UI => src/UI}/Settings/SettingsLayoutTemplate.html (100%) rename {UI => src/UI}/Settings/SettingsModel.js (100%) rename {UI => src/UI}/Settings/SettingsModelBase.js (100%) rename {UI => src/UI}/Settings/settings.less (100%) rename {UI => src/UI}/Shared/Footer/Template.html (100%) rename {UI => src/UI}/Shared/Footer/View.js (100%) rename {UI => src/UI}/Shared/FormatHelpers.js (100%) rename {UI => src/UI}/Shared/Grid/DateHeaderCell.js (100%) rename {UI => src/UI}/Shared/Grid/HeaderCell.js (100%) rename {UI => src/UI}/Shared/Grid/Pager.js (100%) rename {UI => src/UI}/Shared/Grid/PagerTemplate.html (100%) rename {UI => src/UI}/Shared/LoadingTemplate.html (100%) rename {UI => src/UI}/Shared/LoadingView.js (100%) rename {UI => src/UI}/Shared/Messenger.js (100%) rename {UI => src/UI}/Shared/Modal/Controller.js (100%) rename {UI => src/UI}/Shared/Modal/Region.js (100%) rename {UI => src/UI}/Shared/NotFoundTemplate.html (100%) rename {UI => src/UI}/Shared/NotFoundView.js (100%) rename {UI => src/UI}/Shared/SignalRBroadcaster.js (100%) rename {UI => src/UI}/Shared/Styles/card.less (100%) rename {UI => src/UI}/Shared/Styles/clickable.less (100%) rename {UI => src/UI}/Shared/Toolbar/Button/ButtonCollectionView.js (100%) rename {UI => src/UI}/Shared/Toolbar/Button/ButtonView.js (100%) rename {UI => src/UI}/Shared/Toolbar/ButtonCollection.js (100%) rename {UI => src/UI}/Shared/Toolbar/ButtonModel.js (100%) rename {UI => src/UI}/Shared/Toolbar/ButtonTemplate.html (100%) rename {UI => src/UI}/Shared/Toolbar/Radio/RadioButtonCollectionView.js (100%) rename {UI => src/UI}/Shared/Toolbar/Radio/RadioButtonView.js (100%) rename {UI => src/UI}/Shared/Toolbar/ToolbarLayout.js (100%) rename {UI => src/UI}/Shared/Toolbar/ToolbarLayoutTemplate.html (100%) rename {UI => src/UI}/System/About/AboutView.js (100%) rename {UI => src/UI}/System/About/AboutViewTemplate.html (100%) rename {UI => src/UI}/System/Logs/Files/ContentsModel.js (100%) rename {UI => src/UI}/System/Logs/Files/ContentsView.js (100%) rename {UI => src/UI}/System/Logs/Files/ContentsViewTemplate.html (100%) rename {UI => src/UI}/System/Logs/Files/FilenameCell.js (100%) rename {UI => src/UI}/System/Logs/Files/LogFileCollection.js (100%) rename {UI => src/UI}/System/Logs/Files/LogFileLayout.js (100%) rename {UI => src/UI}/System/Logs/Files/LogFileLayoutTemplate.html (100%) rename {UI => src/UI}/System/Logs/Files/LogFileModel.js (100%) rename {UI => src/UI}/System/Logs/Files/Row.js (100%) rename {UI => src/UI}/System/Logs/Logs.less (100%) rename {UI => src/UI}/System/Logs/LogsCollection.js (100%) rename {UI => src/UI}/System/Logs/LogsLayout.js (100%) rename {UI => src/UI}/System/Logs/LogsLayoutTemplate.html (100%) rename {UI => src/UI}/System/Logs/LogsModel.js (100%) rename {UI => src/UI}/System/Logs/Table/LogLevelCell.js (100%) rename {UI => src/UI}/System/Logs/Table/LogTimeCell.js (100%) rename {UI => src/UI}/System/Logs/Table/LogsTableLayout.js (100%) rename {UI => src/UI}/System/Logs/Table/LogsTableLayoutTemplate.html (100%) rename {UI => src/UI}/System/StatusModel.js (100%) rename {UI => src/UI}/System/SystemLayout.js (100%) rename {UI => src/UI}/System/SystemLayoutTemplate.html (100%) rename {UI => src/UI}/System/Update/UpdateCollection.js (100%) rename {UI => src/UI}/System/Update/UpdateCollectionView.js (100%) rename {UI => src/UI}/System/Update/UpdateItemView.js (100%) rename {UI => src/UI}/System/Update/UpdateItemViewTemplate.html (100%) rename {UI => src/UI}/System/Update/UpdateLayout.js (100%) rename {UI => src/UI}/System/Update/UpdateLayoutTemplate.html (100%) rename {UI => src/UI}/System/Update/UpdateModel.js (100%) rename {UI => src/UI}/System/Update/update.less (100%) rename {UI => src/UI}/app.js (100%) rename {UI => src/UI}/favicon.ico (100%) rename {UI => src/UI}/index.html (100%) rename {UI => src/UI}/jQuery/RouteBinder.js (100%) rename {UI => src/UI}/jQuery/ToTheTop.js (100%) rename {UI => src/UI}/jQuery/TooltipBinder.js (100%) rename {UI => src/UI}/jQuery/jquery.spin.js (100%) rename {UI => src/UI}/jQuery/jquery.validation.js (100%) rename {UI => src/UI}/polyfills.js (100%) diff --git a/Gruntfile.js b/Gruntfile.js index 3ce175cb2..e608d7630 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -1,9 +1,10 @@ module.exports = function (grunt) { 'use strict'; - var outputRoot = '_output/'; - var outputDir = outputRoot +'UI/'; - var srcContent = 'UI/Content/'; + var outputRoot = '_output/'; + var outputDir = outputRoot +'UI/'; + var srcRoot = 'src/UI/' + var srcContent = srcRoot + 'Content/'; var destContent = outputDir + 'Content/'; grunt.initConfig({ @@ -11,36 +12,36 @@ module.exports = function (grunt) { pkg: grunt.file.readJSON('package.json'), curl: { - 'UI/JsLibraries/backbone.js' : 'http://documentcloud.github.io/backbone/backbone.js', - 'UI/JsLibraries/backbone.marionette.js' : 'http://marionettejs.com/downloads/backbone.marionette.js', - 'UI/JsLibraries/backbone.modelbinder.js' : 'http://raw.github.com/theironcook/Backbone.ModelBinder/master/Backbone.ModelBinder.js', - 'UI/JsLibraries/backbone.shortcuts.js' : 'http://raw.github.com/bry4n/backbone-shortcuts/master/backbone.shortcuts.js', + 'src/UI/JsLibraries/backbone.js' : 'http://documentcloud.github.io/backbone/backbone.js', + 'src/UI/JsLibraries/backbone.marionette.js' : 'http://marionettejs.com/downloads/backbone.marionette.js', + 'src/UI/JsLibraries/backbone.modelbinder.js' : 'http://raw.github.com/theironcook/Backbone.ModelBinder/master/Backbone.ModelBinder.js', + 'src/UI/JsLibraries/backbone.shortcuts.js' : 'http://raw.github.com/bry4n/backbone-shortcuts/master/backbone.shortcuts.js', - 'UI/JsLibraries/backbone.pageable.js' : 'http://raw.github.com/wyuenho/backbone-pageable/master/lib/backbone-pageable.js', - 'UI/JsLibraries/backbone.backgrid.js' : 'http://raw.github.com/wyuenho/backgrid/master/lib/backgrid.js', - 'UI/JsLibraries/backbone.backgrid.paginator.js' : 'http://raw.github.com/wyuenho/backgrid/master/lib/extensions/paginator/backgrid-paginator.js', - 'UI/JsLibraries/backbone.backgrid.filter.js' : 'http://raw.github.com/wyuenho/backgrid/master/lib/extensions/filter/backgrid-filter.js', + 'src/UI/JsLibraries/backbone.pageable.js' : 'http://raw.github.com/wyuenho/backbone-pageable/master/lib/backbone-pageable.js', + 'src/UI/JsLibraries/backbone.backgrid.js' : 'http://raw.github.com/wyuenho/backgrid/master/lib/backgrid.js', + 'src/UI/JsLibraries/backbone.backgrid.paginator.js' : 'http://raw.github.com/wyuenho/backgrid/master/lib/extensions/paginator/backgrid-paginator.js', + 'src/UI/JsLibraries/backbone.backgrid.filter.js' : 'http://raw.github.com/wyuenho/backgrid/master/lib/extensions/filter/backgrid-filter.js', - 'UI/JsLibraries/backbone.validation.js' : 'https://raw.github.com/thedersen/backbone.validation/master/dist/backbone-validation.js', + 'src/UI/JsLibraries/backbone.validation.js' : 'https://raw.github.com/thedersen/backbone.validation/master/dist/backbone-validation.js', - 'UI/JsLibraries/handlebars.runtime.js' : 'http://raw.github.com/wycats/handlebars.js/master/dist/handlebars.runtime.js', - 'UI/JsLibraries/handlebars.helpers.js' : 'http://raw.github.com/danharper/Handlebars-Helpers/master/helpers.js', + 'src/UI/JsLibraries/handlebars.runtime.js' : 'http://raw.github.com/wycats/handlebars.js/master/dist/handlebars.runtime.js', + 'src/UI/JsLibraries/handlebars.helpers.js' : 'http://raw.github.com/danharper/Handlebars-Helpers/master/helpers.js', - 'UI/JsLibraries/jquery.js' : 'http://code.jquery.com/jquery.js', - 'UI/JsLibraries/jquery.backstretch.js' : 'http://raw.github.com/srobbin/jquery-backstretch/master/jquery.backstretch.js', - 'UI/JsLibraries/jquery.signalR.js' : 'http://raw.github.com/SignalR/SignalR/master/samples/Microsoft.AspNet.SignalR.Hosting.AspNet.Samples/Scripts/jquery.signalR.js', - 'UI/JsLibraries/jquery.knob.js' : 'http://raw.github.com/aterrien/jQuery-Knob/master/js/jquery.knob.js', + 'src/UI/JsLibraries/jquery.js' : 'http://code.jquery.com/jquery.js', + 'src/UI/JsLibraries/jquery.backstretch.js' : 'http://raw.github.com/srobbin/jquery-backstretch/master/jquery.backstretch.js', + 'src/UI/JsLibraries/jquery.signalR.js' : 'http://raw.github.com/SignalR/SignalR/master/samples/Microsoft.AspNet.SignalR.Hosting.AspNet.Samples/Scripts/jquery.signalR.js', + 'src/UI/JsLibraries/jquery.knob.js' : 'http://raw.github.com/aterrien/jQuery-Knob/master/js/jquery.knob.js', - 'UI/JsLibraries/require.js' : 'http://raw.github.com/jrburke/requirejs/master/require.js', - 'UI/JsLibraries/filesize.js' : 'http://cdn.filesizejs.com/filesize.js', - 'UI/JsLibraries/lodash.underscore.js' : 'http://raw.github.com/bestiejs/lodash/master/dist/lodash.underscore.js', + 'src/UI/JsLibraries/require.js' : 'http://raw.github.com/jrburke/requirejs/master/require.js', + 'src/UI/JsLibraries/filesize.js' : 'http://cdn.filesizejs.com/filesize.js', + 'src/UI/JsLibraries/lodash.underscore.js' : 'http://raw.github.com/bestiejs/lodash/master/dist/lodash.underscore.js', - 'UI/JsLibraries/messenger.js' : 'http://raw.github.com/HubSpot/messenger/master/build/js/messenger.js', - 'UI/Content/Messenger/messenger.css' : 'http://raw.github.com/HubSpot/messenger/master/build/css/messenger.css', - 'UI/Content/Messenger/messenger.future.css' : 'http://raw.github.com/HubSpot/messenger/master/build/css/messenger-theme-future.css', + 'src/UI/JsLibraries/messenger.js' : 'http://raw.github.com/HubSpot/messenger/master/build/js/messenger.js', + 'src/UI/Content/Messenger/messenger.css' : 'http://raw.github.com/HubSpot/messenger/master/build/css/messenger.css', + 'src/UI/Content/Messenger/messenger.future.css' : 'http://raw.github.com/HubSpot/messenger/master/build/css/messenger-theme-future.css', - 'UI/Content/bootstrap.toggle-switch.css' : 'http://raw.github.com/ghinda/css-toggle-switch/gh-pages/toggle-switch.css', - 'UI/Content/prefixer.less' : 'http://raw.github.com/JoelSutherland/LESS-Prefixer/master/prefixer.less' + 'src/UI/Content/bootstrap.toggle-switch.css' : 'http://raw.github.com/ghinda/css-toggle-switch/gh-pages/toggle-switch.css', + 'src/UI/Content/prefixer.less' : 'http://raw.github.com/JoelSutherland/LESS-Prefixer/master/prefixer.less' }, clean: { @@ -63,19 +64,20 @@ module.exports = function (grunt) { dest: destContent + 'bootstrap.css' }, general : { - expand :true, - src : [ - 'UI/Content/theme.less', - 'UI/Content/overrides.less', - 'UI/Series/series.less', - 'UI/AddSeries/addSeries.less', - 'UI/Calendar/calendar.less', - 'UI/Cells/cells.less', - 'UI/Settings/settings.less', - 'UI/System/Logs/logs.less', - 'UI/System/Update/update.less' + cwd : srcRoot, + expand : true, + src :[ + 'Content/theme.less', + 'Content/overrides.less', + 'Series/series.less', + 'AddSeries/addSeries.less', + 'Calendar/calendar.less', + 'Cells/cells.less', + 'Settings/settings.less', + 'System/Logs/logs.less', + 'System/Update/update.less' ], - dest : outputRoot, + dest : outputDir, ext: '.css' } }, @@ -88,49 +90,65 @@ module.exports = function (grunt) { amd : true, processName: function (fileName) { return fileName - .replace('UI/', '') + .replace(srcRoot, '') .replace('.html', '') .toLowerCase(); } }, files : { - src : ['UI/**/*Template.html','UI/**/*Partial.html'], + src : [ srcRoot + '**/*Template.html', srcRoot + '**/*Partial.html'], dest: outputDir + 'templates.js' } }, copy: { index : { - src : 'UI/*ndex.html', - dest: outputRoot + cwd : srcRoot, + expand: true, + src : '*ndex.html', + dest : outputDir }, scripts: { - src : 'UI/**/*.js', - dest: outputRoot + cwd : srcRoot, + expand: true, + src : '**/*.js', + dest : outputDir }, styles : { - src : 'UI/**/*.css', - dest: outputRoot + cwd : srcRoot, + expand: true, + src : '**/*.css', + dest : outputDir }, images : { - src : 'UI/**/*.png', - dest: outputRoot + cwd : srcRoot, + expand: true, + src : '**/*.png', + dest : outputDir }, jpg : { - src : 'UI/**/*.jpg', - dest: outputRoot + cwd : srcRoot, + expand: true, + src : '**/*.jpg', + dest : outputDir }, icon : { - src : 'UI/**/*.ico', - dest: outputRoot + cwd : srcRoot, + expand: true, + src : '**/*.ico', + dest : outputDir }, fontAwesome : { - src : 'UI/**/FontAwesome/*.*', - dest: outputRoot + cwd : srcRoot, + expand: true, + src : '**/FontAwesome/*.*', + dest : outputDir }, fonts : { - src : 'UI/**/fonts/*.*', - dest: outputRoot + cwd : srcRoot, + expand: true, + src : '**/fonts/*.*', + dest : outputDir } }, @@ -143,7 +161,7 @@ module.exports = function (grunt) { tasks: ['less:bootstrap','less:general'] }, generalLess: { - files: ['UI/**/*.less', '!**/Bootstrap/**', '!**/FontAwesome/**'], + files: [ srcRoot + '**/*.less', '!**/Bootstrap/**', '!**/FontAwesome/**'], tasks: ['less:general'] }, handlebars : { diff --git a/NzbDrone.Api/NzbDrone.Api.ncrunchproject b/NzbDrone.Api/NzbDrone.Api.ncrunchproject deleted file mode 100644 index 1a2228e7f..000000000 --- a/NzbDrone.Api/NzbDrone.Api.ncrunchproject +++ /dev/null @@ -1,22 +0,0 @@ - - false - true - false - false - false - false - false - false - true - true - false - true - true - 5000 - Debug - x86 - - x86 - STA - x86 - \ No newline at end of file diff --git a/NzbDrone.Common.Test/NzbDrone.Common.Test.ncrunchproject b/NzbDrone.Common.Test/NzbDrone.Common.Test.ncrunchproject deleted file mode 100644 index 21e25ddd5..000000000 --- a/NzbDrone.Common.Test/NzbDrone.Common.Test.ncrunchproject +++ /dev/null @@ -1,60 +0,0 @@ - - false - true - false - false - false - false - false - false - true - true - false - true - true - 5000 - Debug - x86 - - x86 - STA - x86 - - - NzbDrone.Common.Test.EnviromentProviderTest.ApplicationPath_should_find_root_in_current_folder - - - NzbDrone\.Common\.Test\.EventingTests\.ServiceNameFixture\..* - - - NzbDrone\.Common\.Test\.ServiceFactoryFixture\..* - - - NzbDrone.Common.Test.ProcessProviderTests.ToString_on_new_processInfo - - - NzbDrone.Common.Test.ProcessProviderTests.Should_be_able_to_start_process - - - NzbDrone.Common.Test.ProcessProviderTests.kill_all_should_kill_all_process_with_name - - - NzbDrone.Common.Test.ProcessProviderTests.GetProcessById_should_return_null_for_invalid_process(9999) - - - NzbDrone.Common.Test.ProcessProviderTests.GetProcessById_should_return_null_for_invalid_process(-1) - - - NzbDrone.Common.Test.ProcessProviderTests.GetProcessById_should_return_null_for_invalid_process(0) - - - NzbDrone\.Common\.Test\.ServiceProviderTests\..* - - - NzbDrone.Common.Test.DiskProviderTests.DiskProviderFixture.folder_should_return_correct_value_for_last_write - - - NzbDrone\.Common\.Test\.DiskProviderTests\.DiskProviderFixture\..* - - - \ No newline at end of file diff --git a/NzbDrone.Common/NzbDrone.Common.ncrunchproject b/NzbDrone.Common/NzbDrone.Common.ncrunchproject deleted file mode 100644 index 1a2228e7f..000000000 --- a/NzbDrone.Common/NzbDrone.Common.ncrunchproject +++ /dev/null @@ -1,22 +0,0 @@ - - false - true - false - false - false - false - false - false - true - true - false - true - true - 5000 - Debug - x86 - - x86 - STA - x86 - \ No newline at end of file diff --git a/NzbDrone.Core.Test/App_Data/Config.xml b/NzbDrone.Core.Test/App_Data/Config.xml deleted file mode 100644 index c4328bdeb..000000000 --- a/NzbDrone.Core.Test/App_Data/Config.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - 8989 - true - \ No newline at end of file diff --git a/NzbDrone.Core/NzbDrone.Core.ncrunchproject b/NzbDrone.Core/NzbDrone.Core.ncrunchproject deleted file mode 100644 index b36cf9e27..000000000 --- a/NzbDrone.Core/NzbDrone.Core.ncrunchproject +++ /dev/null @@ -1,23 +0,0 @@ - - false - true - false - false - false - false - false - false - true - true - false - true - true - 5000 - RELEASE - x86 - - x86 - STA - x86 - PostBuildEventDisabled - \ No newline at end of file diff --git a/NzbDrone.Test.Common/NzbDrone.Test.Common.ncrunchproject b/NzbDrone.Test.Common/NzbDrone.Test.Common.ncrunchproject deleted file mode 100644 index 1a2228e7f..000000000 --- a/NzbDrone.Test.Common/NzbDrone.Test.Common.ncrunchproject +++ /dev/null @@ -1,22 +0,0 @@ - - false - true - false - false - false - false - false - false - true - true - false - true - true - 5000 - Debug - x86 - - x86 - STA - x86 - \ No newline at end of file diff --git a/NzbDrone.Test.Dummy/NzbDrone.Test.Dummy.ncrunchproject b/NzbDrone.Test.Dummy/NzbDrone.Test.Dummy.ncrunchproject deleted file mode 100644 index 1a2228e7f..000000000 --- a/NzbDrone.Test.Dummy/NzbDrone.Test.Dummy.ncrunchproject +++ /dev/null @@ -1,22 +0,0 @@ - - false - true - false - false - false - false - false - false - true - true - false - true - true - 5000 - Debug - x86 - - x86 - STA - x86 - \ No newline at end of file diff --git a/NzbDrone.Update.Test/NzbDrone.Update.Test.ncrunchproject b/NzbDrone.Update.Test/NzbDrone.Update.Test.ncrunchproject deleted file mode 100644 index 1a2228e7f..000000000 --- a/NzbDrone.Update.Test/NzbDrone.Update.Test.ncrunchproject +++ /dev/null @@ -1,22 +0,0 @@ - - false - true - false - false - false - false - false - false - true - true - false - true - true - 5000 - Debug - x86 - - x86 - STA - x86 - \ No newline at end of file diff --git a/NzbDrone.Update/NzbDrone.Update.ncrunchproject b/NzbDrone.Update/NzbDrone.Update.ncrunchproject deleted file mode 100644 index 1a2228e7f..000000000 --- a/NzbDrone.Update/NzbDrone.Update.ncrunchproject +++ /dev/null @@ -1,22 +0,0 @@ - - false - true - false - false - false - false - false - false - true - true - false - true - true - 5000 - Debug - x86 - - x86 - STA - x86 - \ No newline at end of file diff --git a/NzbDrone.Wix/configuration.xml b/NzbDrone.Wix/configuration.xml deleted file mode 100644 index fdf4f44bf..000000000 --- a/NzbDrone.Wix/configuration.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/NzbDrone.Wix/dotNetInstaller.exe b/NzbDrone.Wix/dotNetInstaller.exe deleted file mode 100644 index a0dd60f8b3f3364034bf6f353f69cf5b6173d394..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1134592 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�Fv*ZRsx|!D7mxUhImdiD>}xbRq2@2o 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⪻SZ~trWwK|Q-RrlzB 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 |B?~ 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

  • yy$BF2b#es$(%%-W#@ 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�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 diff --git a/NzbDrone.Wix/nzbdrone.wix.build.bat b/NzbDrone.Wix/nzbdrone.wix.build.bat deleted file mode 100644 index f031916c2..000000000 --- a/NzbDrone.Wix/nzbdrone.wix.build.bat +++ /dev/null @@ -1,8 +0,0 @@ -rd _raw /s /q -rd _setup /s /q -xcopy ..\SyntikX.Client\bin\release\*.* _raw\ /S /V /I /F /R - -"C:\Program Files (x86)\WiX Toolset v3.6\bin\candle.exe" -nologo "syntik.wix.build.wxs" -out "_setup\SyntikX.Wix.wixobj" -ext WixNetFxExtension -ext WixUIExtension -"C:\Program Files (x86)\WiX Toolset v3.6\bin\light.exe" -nologo "_setup\SyntikX.Wix.wixobj" -out "_setup\SyntikX.msi" -ext WixNetFxExtension -ext WixUIExtension - -pause \ No newline at end of file diff --git a/NzbDrone.Wix/nzbdrone.wix.build.debug.bat b/NzbDrone.Wix/nzbdrone.wix.build.debug.bat deleted file mode 100644 index abf84ccaf..000000000 --- a/NzbDrone.Wix/nzbdrone.wix.build.debug.bat +++ /dev/null @@ -1,10 +0,0 @@ -rd _raw /s /q -rd _setup /s /q -xcopy ..\SyntikX.Client\bin\debug\*.* _raw\ /S /V /I /F /R - -SET BUILD_NUMBER=1.9.9.9 - -"C:\Program Files (x86)\WiX Toolset v3.6\bin\candle.exe" -nologo "syntik.wix.build.wxs" -out "_setup\SyntikX.Wix.wixobj" -ext WixNetFxExtension -ext WixUIExtension -"C:\Program Files (x86)\WiX Toolset v3.6\bin\light.exe" -nologo "_setup\SyntikX.Wix.wixobj" -out "_setup\SyntikX.Wix.msi" -ext WixNetFxExtension -ext WixUIExtension - -pause \ No newline at end of file diff --git a/NzbDrone.Wix/nzbdrone.wix.build.wxs b/NzbDrone.Wix/nzbdrone.wix.build.wxs deleted file mode 100644 index 36284be23..000000000 --- a/NzbDrone.Wix/nzbdrone.wix.build.wxs +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NETFRAMEWORK40FULL - - - - - - - - - \ No newline at end of file diff --git a/NzbDrone.ncrunchsolution b/NzbDrone.ncrunchsolution deleted file mode 100644 index 28e2de798..000000000 --- a/NzbDrone.ncrunchsolution +++ /dev/null @@ -1,13 +0,0 @@ - - 1 - True - true - true - UseDynamicAnalysis - Disabled - Disabled - Disabled - Run all tests automatically:BFRydWU=;Run all tests manually:BUZhbHNl;Run impacted tests automatically, others manually (experimental!):CklzSW1wYWN0ZWQ=;Run pinned tests automatically, others manually:CElzUGlubmVk;Fast:DlN0cnVjdHVyYWxOb2RlBQAAABNEb2VzTm90SGF2ZUNhdGVnb3J5D0ludGVncmF0aW9uVGVzdBNEb2VzTm90SGF2ZUNhdGVnb3J5BkRiVGVzdApJc0ltcGFjdGVkE0RvZXNOb3RIYXZlQ2F0ZWdvcnkORGlza0FjY2Vzc1Rlc3QISXNQaW5uZWQAAAAAAAAAAAAAAAABAAAA - - - \ No newline at end of file diff --git a/ServiceHelpers/ServiceInstall/ServiceInstall.ncrunchproject b/ServiceHelpers/ServiceInstall/ServiceInstall.ncrunchproject deleted file mode 100644 index b2eed192e..000000000 --- a/ServiceHelpers/ServiceInstall/ServiceInstall.ncrunchproject +++ /dev/null @@ -1,23 +0,0 @@ - - false - true - false - false - false - false - false - false - true - true - false - true - true - 5000 - Debug - x86 - - x86 - STA - x86 - PostBuildEventDisabled - \ No newline at end of file diff --git a/ServiceHelpers/ServiceUninstall/ServiceUninstall.ncrunchproject b/ServiceHelpers/ServiceUninstall/ServiceUninstall.ncrunchproject deleted file mode 100644 index b2eed192e..000000000 --- a/ServiceHelpers/ServiceUninstall/ServiceUninstall.ncrunchproject +++ /dev/null @@ -1,23 +0,0 @@ - - false - true - false - false - false - false - false - false - true - true - false - true - true - 5000 - Debug - x86 - - x86 - STA - x86 - PostBuildEventDisabled - \ No newline at end of file diff --git a/build.ps1 b/build.ps1 index f8bc5ad62..21934eff3 100644 --- a/build.ps1 +++ b/build.ps1 @@ -6,11 +6,9 @@ $testSearchPattern = '*.Test\bin\x86\Release' Function Build() { - $clean = $msbuild + " nzbdrone.sln /t:Clean /m" - $build = $msbuild + " nzbdrone.sln /p:Configuration=Release /p:Platform=x86 /t:Build /m" + $clean = $msbuild + " src\nzbdrone.sln /t:Clean /m" + $build = $msbuild + " src\nzbdrone.sln /p:Configuration=Release /p:Platform=x86 /t:Build /m" - - if(Test-Path $outputFolder) { Remove-Item -Recurse -Force $outputFolder -ErrorAction Continue @@ -72,7 +70,7 @@ Function PackageMono() get-childitem $outputFolderMono -File -Filter ServiceUninstall.* -Recurse | foreach ($_) {remove-item $_.fullname} get-childitem $outputFolderMono -File -Filter ServiceInstall.* -Recurse | foreach ($_) {remove-item $_.fullname} - Write-Host Removing native windows binaries Sqlite, MedianInfo + Write-Host Removing native windows binaries Sqlite, MediaInfo get-childitem $outputFolderMono -File -Filter sqlite3.* -Recurse | foreach ($_) {remove-item $_.fullname} get-childitem $outputFolderMono -File -Filter MediaInfo.* -Recurse | foreach ($_) {remove-item $_.fullname} @@ -85,8 +83,8 @@ Function PackageMono() Function AddJsonNet() { get-childitem $outputFolder -File -Filter Newtonsoft.Json.* -Recurse | foreach ($_) {remove-item $_.fullname} - Copy-Item .\packages\Newtonsoft.Json.5.*\lib\net35\*.dll -Destination $outputFolder - Copy-Item .\packages\Newtonsoft.Json.5.*\lib\net35\*.dll -Destination $outputFolder\NzbDrone.Update + Copy-Item .\src\packages\Newtonsoft.Json.5.*\lib\net35\*.dll -Destination $outputFolder + Copy-Item .\src\packages\Newtonsoft.Json.5.*\lib\net35\*.dll -Destination $outputFolder\NzbDrone.Update } Function PackageTests() @@ -103,9 +101,7 @@ Function PackageTests() Copy-Item -Recurse ($_.FullName + "\*") $testPackageFolder -ErrorAction Ignore } - .\.nuget\NuGet.exe install NUnit.Runners -Version 2.6.1 -Output $testPackageFolder - - + .\src\.nuget\NuGet.exe install NUnit.Runners -Version 2.6.1 -Output $testPackageFolder Copy-Item $outputFolder\*.dll -Destination $testPackageFolder -Force Copy-Item $outputFolder\*.pdb -Destination $testPackageFolder -Force @@ -141,4 +137,3 @@ Build RunGrunt PackageMono PackageTests - diff --git a/.nuget/NuGet.Config b/src/.nuget/NuGet.Config similarity index 100% rename from .nuget/NuGet.Config rename to src/.nuget/NuGet.Config diff --git a/.nuget/NuGet.exe b/src/.nuget/NuGet.exe similarity index 100% rename from .nuget/NuGet.exe rename to src/.nuget/NuGet.exe diff --git a/.nuget/NuGet.targets b/src/.nuget/NuGet.targets similarity index 100% rename from .nuget/NuGet.targets rename to src/.nuget/NuGet.targets diff --git a/Exceptron.Client/Configuration/ExceptronConfiguration.cs b/src/Exceptron.Client/Configuration/ExceptronConfiguration.cs similarity index 100% rename from Exceptron.Client/Configuration/ExceptronConfiguration.cs rename to src/Exceptron.Client/Configuration/ExceptronConfiguration.cs diff --git a/Exceptron.Client/ExceptionData.cs b/src/Exceptron.Client/ExceptionData.cs similarity index 100% rename from Exceptron.Client/ExceptionData.cs rename to src/Exceptron.Client/ExceptionData.cs diff --git a/Exceptron.Client/ExceptionSeverity.cs b/src/Exceptron.Client/ExceptionSeverity.cs similarity index 100% rename from Exceptron.Client/ExceptionSeverity.cs rename to src/Exceptron.Client/ExceptionSeverity.cs diff --git a/Exceptron.Client/Exceptron.Client.csproj b/src/Exceptron.Client/Exceptron.Client.csproj similarity index 97% rename from Exceptron.Client/Exceptron.Client.csproj rename to src/Exceptron.Client/Exceptron.Client.csproj index b74cdfd4f..a22db88f7 100644 --- a/Exceptron.Client/Exceptron.Client.csproj +++ b/src/Exceptron.Client/Exceptron.Client.csproj @@ -21,7 +21,7 @@ true - ..\_output\ + ..\..\_output\ DEBUG;TRACE full x86 @@ -29,7 +29,7 @@ MinimumRecommendedRules.ruleset - ..\_output\ + ..\..\_output\ TRACE diff --git a/Exceptron.Client/Exceptron.Client.nuspec b/src/Exceptron.Client/Exceptron.Client.nuspec similarity index 100% rename from Exceptron.Client/Exceptron.Client.nuspec rename to src/Exceptron.Client/Exceptron.Client.nuspec diff --git a/Exceptron.Client/ExceptronApiException.cs b/src/Exceptron.Client/ExceptronApiException.cs similarity index 100% rename from Exceptron.Client/ExceptronApiException.cs rename to src/Exceptron.Client/ExceptronApiException.cs diff --git a/Exceptron.Client/ExceptronClient.cs b/src/Exceptron.Client/ExceptronClient.cs similarity index 100% rename from Exceptron.Client/ExceptronClient.cs rename to src/Exceptron.Client/ExceptronClient.cs diff --git a/Exceptron.Client/IExceptronClient.cs b/src/Exceptron.Client/IExceptronClient.cs similarity index 100% rename from Exceptron.Client/IExceptronClient.cs rename to src/Exceptron.Client/IExceptronClient.cs diff --git a/Exceptron.Client/IRestClient.cs b/src/Exceptron.Client/IRestClient.cs similarity index 100% rename from Exceptron.Client/IRestClient.cs rename to src/Exceptron.Client/IRestClient.cs diff --git a/Exceptron.Client/Message/ExceptionReport.cs b/src/Exceptron.Client/Message/ExceptionReport.cs similarity index 100% rename from Exceptron.Client/Message/ExceptionReport.cs rename to src/Exceptron.Client/Message/ExceptionReport.cs diff --git a/Exceptron.Client/Message/ExceptionResponse.cs b/src/Exceptron.Client/Message/ExceptionResponse.cs similarity index 100% rename from Exceptron.Client/Message/ExceptionResponse.cs rename to src/Exceptron.Client/Message/ExceptionResponse.cs diff --git a/Exceptron.Client/Message/Frame.cs b/src/Exceptron.Client/Message/Frame.cs similarity index 100% rename from Exceptron.Client/Message/Frame.cs rename to src/Exceptron.Client/Message/Frame.cs diff --git a/Exceptron.Client/NuGet/web.config.transform b/src/Exceptron.Client/NuGet/web.config.transform similarity index 100% rename from Exceptron.Client/NuGet/web.config.transform rename to src/Exceptron.Client/NuGet/web.config.transform diff --git a/Exceptron.Client/Properties/AssemblyInfo.cs b/src/Exceptron.Client/Properties/AssemblyInfo.cs similarity index 100% rename from Exceptron.Client/Properties/AssemblyInfo.cs rename to src/Exceptron.Client/Properties/AssemblyInfo.cs diff --git a/Exceptron.Client/RestClient.cs b/src/Exceptron.Client/RestClient.cs similarity index 100% rename from Exceptron.Client/RestClient.cs rename to src/Exceptron.Client/RestClient.cs diff --git a/Exceptron.Client/fastJSON/Getters.cs b/src/Exceptron.Client/fastJSON/Getters.cs similarity index 100% rename from Exceptron.Client/fastJSON/Getters.cs rename to src/Exceptron.Client/fastJSON/Getters.cs diff --git a/Exceptron.Client/fastJSON/JSON.cs b/src/Exceptron.Client/fastJSON/JSON.cs similarity index 100% rename from Exceptron.Client/fastJSON/JSON.cs rename to src/Exceptron.Client/fastJSON/JSON.cs diff --git a/Exceptron.Client/fastJSON/JsonParser.cs b/src/Exceptron.Client/fastJSON/JsonParser.cs similarity index 100% rename from Exceptron.Client/fastJSON/JsonParser.cs rename to src/Exceptron.Client/fastJSON/JsonParser.cs diff --git a/Exceptron.Client/fastJSON/JsonSerializer.cs b/src/Exceptron.Client/fastJSON/JsonSerializer.cs similarity index 100% rename from Exceptron.Client/fastJSON/JsonSerializer.cs rename to src/Exceptron.Client/fastJSON/JsonSerializer.cs diff --git a/Exceptron.Client/fastJSON/SafeDictionary.cs b/src/Exceptron.Client/fastJSON/SafeDictionary.cs similarity index 100% rename from Exceptron.Client/fastJSON/SafeDictionary.cs rename to src/Exceptron.Client/fastJSON/SafeDictionary.cs diff --git a/Exceptron.Client/fastJSON/license.txt b/src/Exceptron.Client/fastJSON/license.txt similarity index 100% rename from Exceptron.Client/fastJSON/license.txt rename to src/Exceptron.Client/fastJSON/license.txt diff --git a/Libraries/Interop.NetFwTypeLib.dll b/src/Libraries/Interop.NetFwTypeLib.dll similarity index 100% rename from Libraries/Interop.NetFwTypeLib.dll rename to src/Libraries/Interop.NetFwTypeLib.dll diff --git a/Libraries/Manifest Tool/mt.exe b/src/Libraries/Manifest Tool/mt.exe similarity index 100% rename from Libraries/Manifest Tool/mt.exe rename to src/Libraries/Manifest Tool/mt.exe diff --git a/Libraries/Manifest Tool/mt.exe.config b/src/Libraries/Manifest Tool/mt.exe.config similarity index 100% rename from Libraries/Manifest Tool/mt.exe.config rename to src/Libraries/Manifest Tool/mt.exe.config diff --git a/Libraries/Sqlite/System.Data.SQLite.dll b/src/Libraries/Sqlite/System.Data.SQLite.dll similarity index 100% rename from Libraries/Sqlite/System.Data.SQLite.dll rename to src/Libraries/Sqlite/System.Data.SQLite.dll diff --git a/Libraries/Sqlite/System.Data.SQLite.xml b/src/Libraries/Sqlite/System.Data.SQLite.xml similarity index 100% rename from Libraries/Sqlite/System.Data.SQLite.xml rename to src/Libraries/Sqlite/System.Data.SQLite.xml diff --git a/Libraries/Sqlite/sqlite3.dll b/src/Libraries/Sqlite/sqlite3.dll similarity index 100% rename from Libraries/Sqlite/sqlite3.dll rename to src/Libraries/Sqlite/sqlite3.dll diff --git a/Marr.Data/Converters/BooleanIntConverter.cs b/src/Marr.Data/Converters/BooleanIntConverter.cs similarity index 100% rename from Marr.Data/Converters/BooleanIntConverter.cs rename to src/Marr.Data/Converters/BooleanIntConverter.cs diff --git a/Marr.Data/Converters/BooleanYNConverter.cs b/src/Marr.Data/Converters/BooleanYNConverter.cs similarity index 100% rename from Marr.Data/Converters/BooleanYNConverter.cs rename to src/Marr.Data/Converters/BooleanYNConverter.cs diff --git a/Marr.Data/Converters/CastConverter.cs b/src/Marr.Data/Converters/CastConverter.cs similarity index 100% rename from Marr.Data/Converters/CastConverter.cs rename to src/Marr.Data/Converters/CastConverter.cs diff --git a/Marr.Data/Converters/ConversionException.cs b/src/Marr.Data/Converters/ConversionException.cs similarity index 100% rename from Marr.Data/Converters/ConversionException.cs rename to src/Marr.Data/Converters/ConversionException.cs diff --git a/Marr.Data/Converters/ConverterContext.cs b/src/Marr.Data/Converters/ConverterContext.cs similarity index 100% rename from Marr.Data/Converters/ConverterContext.cs rename to src/Marr.Data/Converters/ConverterContext.cs diff --git a/Marr.Data/Converters/EnumIntConverter.cs b/src/Marr.Data/Converters/EnumIntConverter.cs similarity index 100% rename from Marr.Data/Converters/EnumIntConverter.cs rename to src/Marr.Data/Converters/EnumIntConverter.cs diff --git a/Marr.Data/Converters/EnumStringConverter.cs b/src/Marr.Data/Converters/EnumStringConverter.cs similarity index 100% rename from Marr.Data/Converters/EnumStringConverter.cs rename to src/Marr.Data/Converters/EnumStringConverter.cs diff --git a/Marr.Data/Converters/IConverter.cs b/src/Marr.Data/Converters/IConverter.cs similarity index 100% rename from Marr.Data/Converters/IConverter.cs rename to src/Marr.Data/Converters/IConverter.cs diff --git a/Marr.Data/DataHelper.cs b/src/Marr.Data/DataHelper.cs similarity index 100% rename from Marr.Data/DataHelper.cs rename to src/Marr.Data/DataHelper.cs diff --git a/Marr.Data/DataMapper.cs b/src/Marr.Data/DataMapper.cs similarity index 100% rename from Marr.Data/DataMapper.cs rename to src/Marr.Data/DataMapper.cs diff --git a/Marr.Data/DataMappingException.cs b/src/Marr.Data/DataMappingException.cs similarity index 100% rename from Marr.Data/DataMappingException.cs rename to src/Marr.Data/DataMappingException.cs diff --git a/Marr.Data/EntityGraph.cs b/src/Marr.Data/EntityGraph.cs similarity index 100% rename from Marr.Data/EntityGraph.cs rename to src/Marr.Data/EntityGraph.cs diff --git a/Marr.Data/EntityMerger.cs b/src/Marr.Data/EntityMerger.cs similarity index 100% rename from Marr.Data/EntityMerger.cs rename to src/Marr.Data/EntityMerger.cs diff --git a/Marr.Data/EntityReference.cs b/src/Marr.Data/EntityReference.cs similarity index 100% rename from Marr.Data/EntityReference.cs rename to src/Marr.Data/EntityReference.cs diff --git a/Marr.Data/ExtensionMethods.cs b/src/Marr.Data/ExtensionMethods.cs similarity index 100% rename from Marr.Data/ExtensionMethods.cs rename to src/Marr.Data/ExtensionMethods.cs diff --git a/Marr.Data/GroupingKeyCollection.cs b/src/Marr.Data/GroupingKeyCollection.cs similarity index 100% rename from Marr.Data/GroupingKeyCollection.cs rename to src/Marr.Data/GroupingKeyCollection.cs diff --git a/Marr.Data/IDataMapper.cs b/src/Marr.Data/IDataMapper.cs similarity index 100% rename from Marr.Data/IDataMapper.cs rename to src/Marr.Data/IDataMapper.cs diff --git a/Marr.Data/LazyLoaded.cs b/src/Marr.Data/LazyLoaded.cs similarity index 100% rename from Marr.Data/LazyLoaded.cs rename to src/Marr.Data/LazyLoaded.cs diff --git a/Marr.Data/MapRepository.cs b/src/Marr.Data/MapRepository.cs similarity index 100% rename from Marr.Data/MapRepository.cs rename to src/Marr.Data/MapRepository.cs diff --git a/Marr.Data/Mapping/ColumnAttribute.cs b/src/Marr.Data/Mapping/ColumnAttribute.cs similarity index 100% rename from Marr.Data/Mapping/ColumnAttribute.cs rename to src/Marr.Data/Mapping/ColumnAttribute.cs diff --git a/Marr.Data/Mapping/ColumnInfo.cs b/src/Marr.Data/Mapping/ColumnInfo.cs similarity index 100% rename from Marr.Data/Mapping/ColumnInfo.cs rename to src/Marr.Data/Mapping/ColumnInfo.cs diff --git a/Marr.Data/Mapping/ColumnMap.cs b/src/Marr.Data/Mapping/ColumnMap.cs similarity index 100% rename from Marr.Data/Mapping/ColumnMap.cs rename to src/Marr.Data/Mapping/ColumnMap.cs diff --git a/Marr.Data/Mapping/ColumnMapBuilder.cs b/src/Marr.Data/Mapping/ColumnMapBuilder.cs similarity index 100% rename from Marr.Data/Mapping/ColumnMapBuilder.cs rename to src/Marr.Data/Mapping/ColumnMapBuilder.cs diff --git a/Marr.Data/Mapping/ColumnMapCollection.cs b/src/Marr.Data/Mapping/ColumnMapCollection.cs similarity index 100% rename from Marr.Data/Mapping/ColumnMapCollection.cs rename to src/Marr.Data/Mapping/ColumnMapCollection.cs diff --git a/Marr.Data/Mapping/EnumConversionType.cs b/src/Marr.Data/Mapping/EnumConversionType.cs similarity index 100% rename from Marr.Data/Mapping/EnumConversionType.cs rename to src/Marr.Data/Mapping/EnumConversionType.cs diff --git a/Marr.Data/Mapping/FluentMappings.cs b/src/Marr.Data/Mapping/FluentMappings.cs similarity index 100% rename from Marr.Data/Mapping/FluentMappings.cs rename to src/Marr.Data/Mapping/FluentMappings.cs diff --git a/Marr.Data/Mapping/IColumnInfo.cs b/src/Marr.Data/Mapping/IColumnInfo.cs similarity index 100% rename from Marr.Data/Mapping/IColumnInfo.cs rename to src/Marr.Data/Mapping/IColumnInfo.cs diff --git a/Marr.Data/Mapping/IRelationshipInfo.cs b/src/Marr.Data/Mapping/IRelationshipInfo.cs similarity index 100% rename from Marr.Data/Mapping/IRelationshipInfo.cs rename to src/Marr.Data/Mapping/IRelationshipInfo.cs diff --git a/Marr.Data/Mapping/MapBuilder.cs b/src/Marr.Data/Mapping/MapBuilder.cs similarity index 100% rename from Marr.Data/Mapping/MapBuilder.cs rename to src/Marr.Data/Mapping/MapBuilder.cs diff --git a/Marr.Data/Mapping/MappingHelper.cs b/src/Marr.Data/Mapping/MappingHelper.cs similarity index 100% rename from Marr.Data/Mapping/MappingHelper.cs rename to src/Marr.Data/Mapping/MappingHelper.cs diff --git a/Marr.Data/Mapping/Relationship.cs b/src/Marr.Data/Mapping/Relationship.cs similarity index 100% rename from Marr.Data/Mapping/Relationship.cs rename to src/Marr.Data/Mapping/Relationship.cs diff --git a/Marr.Data/Mapping/RelationshipAttribute.cs b/src/Marr.Data/Mapping/RelationshipAttribute.cs similarity index 100% rename from Marr.Data/Mapping/RelationshipAttribute.cs rename to src/Marr.Data/Mapping/RelationshipAttribute.cs diff --git a/Marr.Data/Mapping/RelationshipBuilder.cs b/src/Marr.Data/Mapping/RelationshipBuilder.cs similarity index 100% rename from Marr.Data/Mapping/RelationshipBuilder.cs rename to src/Marr.Data/Mapping/RelationshipBuilder.cs diff --git a/Marr.Data/Mapping/RelationshipCollection.cs b/src/Marr.Data/Mapping/RelationshipCollection.cs similarity index 100% rename from Marr.Data/Mapping/RelationshipCollection.cs rename to src/Marr.Data/Mapping/RelationshipCollection.cs diff --git a/Marr.Data/Mapping/RelationshipInfo.cs b/src/Marr.Data/Mapping/RelationshipInfo.cs similarity index 100% rename from Marr.Data/Mapping/RelationshipInfo.cs rename to src/Marr.Data/Mapping/RelationshipInfo.cs diff --git a/Marr.Data/Mapping/Strategies/AttributeMapStrategy.cs b/src/Marr.Data/Mapping/Strategies/AttributeMapStrategy.cs similarity index 100% rename from Marr.Data/Mapping/Strategies/AttributeMapStrategy.cs rename to src/Marr.Data/Mapping/Strategies/AttributeMapStrategy.cs diff --git a/Marr.Data/Mapping/Strategies/ConventionMapStrategy.cs b/src/Marr.Data/Mapping/Strategies/ConventionMapStrategy.cs similarity index 100% rename from Marr.Data/Mapping/Strategies/ConventionMapStrategy.cs rename to src/Marr.Data/Mapping/Strategies/ConventionMapStrategy.cs diff --git a/Marr.Data/Mapping/Strategies/IMapStrategy.cs b/src/Marr.Data/Mapping/Strategies/IMapStrategy.cs similarity index 100% rename from Marr.Data/Mapping/Strategies/IMapStrategy.cs rename to src/Marr.Data/Mapping/Strategies/IMapStrategy.cs diff --git a/Marr.Data/Mapping/Strategies/PropertyMapStrategy.cs b/src/Marr.Data/Mapping/Strategies/PropertyMapStrategy.cs similarity index 100% rename from Marr.Data/Mapping/Strategies/PropertyMapStrategy.cs rename to src/Marr.Data/Mapping/Strategies/PropertyMapStrategy.cs diff --git a/Marr.Data/Mapping/Strategies/ReflectionMapStrategyBase.cs b/src/Marr.Data/Mapping/Strategies/ReflectionMapStrategyBase.cs similarity index 100% rename from Marr.Data/Mapping/Strategies/ReflectionMapStrategyBase.cs rename to src/Marr.Data/Mapping/Strategies/ReflectionMapStrategyBase.cs diff --git a/Marr.Data/Mapping/TableAttribute.cs b/src/Marr.Data/Mapping/TableAttribute.cs similarity index 100% rename from Marr.Data/Mapping/TableAttribute.cs rename to src/Marr.Data/Mapping/TableAttribute.cs diff --git a/Marr.Data/Mapping/TableBuilder.cs b/src/Marr.Data/Mapping/TableBuilder.cs similarity index 100% rename from Marr.Data/Mapping/TableBuilder.cs rename to src/Marr.Data/Mapping/TableBuilder.cs diff --git a/Marr.Data/Marr.Data.csproj b/src/Marr.Data/Marr.Data.csproj similarity index 98% rename from Marr.Data/Marr.Data.csproj rename to src/Marr.Data/Marr.Data.csproj index 9ae7c2082..b369b7085 100644 --- a/Marr.Data/Marr.Data.csproj +++ b/src/Marr.Data/Marr.Data.csproj @@ -23,7 +23,7 @@ true - ..\_output\ + ..\..\_output\ DEBUG;TRACE full x86 @@ -31,7 +31,7 @@ MinimumRecommendedRules.ruleset - ..\_output\ + ..\..\_output\ TRACE true pdbonly diff --git a/Marr.Data/Parameters/DbTypeBuilder.cs b/src/Marr.Data/Parameters/DbTypeBuilder.cs similarity index 100% rename from Marr.Data/Parameters/DbTypeBuilder.cs rename to src/Marr.Data/Parameters/DbTypeBuilder.cs diff --git a/Marr.Data/Parameters/IDbTypeBuilder.cs b/src/Marr.Data/Parameters/IDbTypeBuilder.cs similarity index 100% rename from Marr.Data/Parameters/IDbTypeBuilder.cs rename to src/Marr.Data/Parameters/IDbTypeBuilder.cs diff --git a/Marr.Data/Parameters/OleDbTypeBuilder.cs b/src/Marr.Data/Parameters/OleDbTypeBuilder.cs similarity index 100% rename from Marr.Data/Parameters/OleDbTypeBuilder.cs rename to src/Marr.Data/Parameters/OleDbTypeBuilder.cs diff --git a/Marr.Data/Parameters/ParameterChainMethods.cs b/src/Marr.Data/Parameters/ParameterChainMethods.cs similarity index 100% rename from Marr.Data/Parameters/ParameterChainMethods.cs rename to src/Marr.Data/Parameters/ParameterChainMethods.cs diff --git a/Marr.Data/Parameters/SqlDbTypeBuilder.cs b/src/Marr.Data/Parameters/SqlDbTypeBuilder.cs similarity index 100% rename from Marr.Data/Parameters/SqlDbTypeBuilder.cs rename to src/Marr.Data/Parameters/SqlDbTypeBuilder.cs diff --git a/Marr.Data/Properties/AssemblyInfo.cs b/src/Marr.Data/Properties/AssemblyInfo.cs similarity index 100% rename from Marr.Data/Properties/AssemblyInfo.cs rename to src/Marr.Data/Properties/AssemblyInfo.cs diff --git a/Marr.Data/QGen/DeleteQuery.cs b/src/Marr.Data/QGen/DeleteQuery.cs similarity index 100% rename from Marr.Data/QGen/DeleteQuery.cs rename to src/Marr.Data/QGen/DeleteQuery.cs diff --git a/Marr.Data/QGen/Dialects/Dialect.cs b/src/Marr.Data/QGen/Dialects/Dialect.cs similarity index 100% rename from Marr.Data/QGen/Dialects/Dialect.cs rename to src/Marr.Data/QGen/Dialects/Dialect.cs diff --git a/Marr.Data/QGen/Dialects/FirebirdDialect.cs b/src/Marr.Data/QGen/Dialects/FirebirdDialect.cs similarity index 100% rename from Marr.Data/QGen/Dialects/FirebirdDialect.cs rename to src/Marr.Data/QGen/Dialects/FirebirdDialect.cs diff --git a/Marr.Data/QGen/Dialects/OracleDialect.cs b/src/Marr.Data/QGen/Dialects/OracleDialect.cs similarity index 100% rename from Marr.Data/QGen/Dialects/OracleDialect.cs rename to src/Marr.Data/QGen/Dialects/OracleDialect.cs diff --git a/Marr.Data/QGen/Dialects/SqlServerCeDialect.cs b/src/Marr.Data/QGen/Dialects/SqlServerCeDialect.cs similarity index 100% rename from Marr.Data/QGen/Dialects/SqlServerCeDialect.cs rename to src/Marr.Data/QGen/Dialects/SqlServerCeDialect.cs diff --git a/Marr.Data/QGen/Dialects/SqlServerDialect.cs b/src/Marr.Data/QGen/Dialects/SqlServerDialect.cs similarity index 100% rename from Marr.Data/QGen/Dialects/SqlServerDialect.cs rename to src/Marr.Data/QGen/Dialects/SqlServerDialect.cs diff --git a/Marr.Data/QGen/Dialects/SqliteDialect.cs b/src/Marr.Data/QGen/Dialects/SqliteDialect.cs similarity index 100% rename from Marr.Data/QGen/Dialects/SqliteDialect.cs rename to src/Marr.Data/QGen/Dialects/SqliteDialect.cs diff --git a/Marr.Data/QGen/ExpressionVisitor.cs b/src/Marr.Data/QGen/ExpressionVisitor.cs similarity index 100% rename from Marr.Data/QGen/ExpressionVisitor.cs rename to src/Marr.Data/QGen/ExpressionVisitor.cs diff --git a/Marr.Data/QGen/IQuery.cs b/src/Marr.Data/QGen/IQuery.cs similarity index 100% rename from Marr.Data/QGen/IQuery.cs rename to src/Marr.Data/QGen/IQuery.cs diff --git a/Marr.Data/QGen/IQueryBuilder.cs b/src/Marr.Data/QGen/IQueryBuilder.cs similarity index 100% rename from Marr.Data/QGen/IQueryBuilder.cs rename to src/Marr.Data/QGen/IQueryBuilder.cs diff --git a/Marr.Data/QGen/InsertQuery.cs b/src/Marr.Data/QGen/InsertQuery.cs similarity index 100% rename from Marr.Data/QGen/InsertQuery.cs rename to src/Marr.Data/QGen/InsertQuery.cs diff --git a/Marr.Data/QGen/InsertQueryBuilder.cs b/src/Marr.Data/QGen/InsertQueryBuilder.cs similarity index 100% rename from Marr.Data/QGen/InsertQueryBuilder.cs rename to src/Marr.Data/QGen/InsertQueryBuilder.cs diff --git a/Marr.Data/QGen/JoinBuilder.cs b/src/Marr.Data/QGen/JoinBuilder.cs similarity index 100% rename from Marr.Data/QGen/JoinBuilder.cs rename to src/Marr.Data/QGen/JoinBuilder.cs diff --git a/Marr.Data/QGen/PagingQueryDecorator.cs b/src/Marr.Data/QGen/PagingQueryDecorator.cs similarity index 100% rename from Marr.Data/QGen/PagingQueryDecorator.cs rename to src/Marr.Data/QGen/PagingQueryDecorator.cs diff --git a/Marr.Data/QGen/QueryBuilder.cs b/src/Marr.Data/QGen/QueryBuilder.cs similarity index 100% rename from Marr.Data/QGen/QueryBuilder.cs rename to src/Marr.Data/QGen/QueryBuilder.cs diff --git a/Marr.Data/QGen/QueryFactory.cs b/src/Marr.Data/QGen/QueryFactory.cs similarity index 100% rename from Marr.Data/QGen/QueryFactory.cs rename to src/Marr.Data/QGen/QueryFactory.cs diff --git a/Marr.Data/QGen/QueryQueueItem.cs b/src/Marr.Data/QGen/QueryQueueItem.cs similarity index 100% rename from Marr.Data/QGen/QueryQueueItem.cs rename to src/Marr.Data/QGen/QueryQueueItem.cs diff --git a/Marr.Data/QGen/RowCountQueryDecorator.cs b/src/Marr.Data/QGen/RowCountQueryDecorator.cs similarity index 100% rename from Marr.Data/QGen/RowCountQueryDecorator.cs rename to src/Marr.Data/QGen/RowCountQueryDecorator.cs diff --git a/Marr.Data/QGen/SelectQuery.cs b/src/Marr.Data/QGen/SelectQuery.cs similarity index 100% rename from Marr.Data/QGen/SelectQuery.cs rename to src/Marr.Data/QGen/SelectQuery.cs diff --git a/Marr.Data/QGen/SortBuilder.cs b/src/Marr.Data/QGen/SortBuilder.cs similarity index 100% rename from Marr.Data/QGen/SortBuilder.cs rename to src/Marr.Data/QGen/SortBuilder.cs diff --git a/Marr.Data/QGen/SortColumn.cs b/src/Marr.Data/QGen/SortColumn.cs similarity index 100% rename from Marr.Data/QGen/SortColumn.cs rename to src/Marr.Data/QGen/SortColumn.cs diff --git a/Marr.Data/QGen/SqlitePagingQueryDecorator.cs b/src/Marr.Data/QGen/SqlitePagingQueryDecorator.cs similarity index 100% rename from Marr.Data/QGen/SqlitePagingQueryDecorator.cs rename to src/Marr.Data/QGen/SqlitePagingQueryDecorator.cs diff --git a/Marr.Data/QGen/SqliteRowCountQueryDecorator.cs b/src/Marr.Data/QGen/SqliteRowCountQueryDecorator.cs similarity index 100% rename from Marr.Data/QGen/SqliteRowCountQueryDecorator.cs rename to src/Marr.Data/QGen/SqliteRowCountQueryDecorator.cs diff --git a/Marr.Data/QGen/Table.cs b/src/Marr.Data/QGen/Table.cs similarity index 100% rename from Marr.Data/QGen/Table.cs rename to src/Marr.Data/QGen/Table.cs diff --git a/Marr.Data/QGen/TableCollection.cs b/src/Marr.Data/QGen/TableCollection.cs similarity index 100% rename from Marr.Data/QGen/TableCollection.cs rename to src/Marr.Data/QGen/TableCollection.cs diff --git a/Marr.Data/QGen/UpdateQuery.cs b/src/Marr.Data/QGen/UpdateQuery.cs similarity index 100% rename from Marr.Data/QGen/UpdateQuery.cs rename to src/Marr.Data/QGen/UpdateQuery.cs diff --git a/Marr.Data/QGen/UpdateQueryBuilder.cs b/src/Marr.Data/QGen/UpdateQueryBuilder.cs similarity index 100% rename from Marr.Data/QGen/UpdateQueryBuilder.cs rename to src/Marr.Data/QGen/UpdateQueryBuilder.cs diff --git a/Marr.Data/QGen/View.cs b/src/Marr.Data/QGen/View.cs similarity index 100% rename from Marr.Data/QGen/View.cs rename to src/Marr.Data/QGen/View.cs diff --git a/Marr.Data/QGen/WhereBuilder.cs b/src/Marr.Data/QGen/WhereBuilder.cs similarity index 100% rename from Marr.Data/QGen/WhereBuilder.cs rename to src/Marr.Data/QGen/WhereBuilder.cs diff --git a/Marr.Data/Reflection/IReflectionStrategy.cs b/src/Marr.Data/Reflection/IReflectionStrategy.cs similarity index 100% rename from Marr.Data/Reflection/IReflectionStrategy.cs rename to src/Marr.Data/Reflection/IReflectionStrategy.cs diff --git a/Marr.Data/Reflection/ReflectionHelper.cs b/src/Marr.Data/Reflection/ReflectionHelper.cs similarity index 100% rename from Marr.Data/Reflection/ReflectionHelper.cs rename to src/Marr.Data/Reflection/ReflectionHelper.cs diff --git a/Marr.Data/Reflection/SimpleReflectionStrategy.cs b/src/Marr.Data/Reflection/SimpleReflectionStrategy.cs similarity index 100% rename from Marr.Data/Reflection/SimpleReflectionStrategy.cs rename to src/Marr.Data/Reflection/SimpleReflectionStrategy.cs diff --git a/Marr.Data/SqlModesEnum.cs b/src/Marr.Data/SqlModesEnum.cs similarity index 100% rename from Marr.Data/SqlModesEnum.cs rename to src/Marr.Data/SqlModesEnum.cs diff --git a/Marr.Data/UnitOfWork.cs b/src/Marr.Data/UnitOfWork.cs similarity index 100% rename from Marr.Data/UnitOfWork.cs rename to src/Marr.Data/UnitOfWork.cs diff --git a/Marr.Data/UnitOfWorkSharedContext.cs b/src/Marr.Data/UnitOfWorkSharedContext.cs similarity index 100% rename from Marr.Data/UnitOfWorkSharedContext.cs rename to src/Marr.Data/UnitOfWorkSharedContext.cs diff --git a/NzbDrone.Api.Test/ClientSchemaTests/SchemaBuilderFixture.cs b/src/NzbDrone.Api.Test/ClientSchemaTests/SchemaBuilderFixture.cs similarity index 100% rename from NzbDrone.Api.Test/ClientSchemaTests/SchemaBuilderFixture.cs rename to src/NzbDrone.Api.Test/ClientSchemaTests/SchemaBuilderFixture.cs diff --git a/NzbDrone.Api.Test/DirectoryLookupServiceFixture.cs b/src/NzbDrone.Api.Test/DirectoryLookupServiceFixture.cs similarity index 100% rename from NzbDrone.Api.Test/DirectoryLookupServiceFixture.cs rename to src/NzbDrone.Api.Test/DirectoryLookupServiceFixture.cs diff --git a/NzbDrone.Api.Test/MappingTests/ResourceMappingFixture.cs b/src/NzbDrone.Api.Test/MappingTests/ResourceMappingFixture.cs similarity index 100% rename from NzbDrone.Api.Test/MappingTests/ResourceMappingFixture.cs rename to src/NzbDrone.Api.Test/MappingTests/ResourceMappingFixture.cs diff --git a/NzbDrone.Api.Test/NzbDrone.Api.Test.csproj b/src/NzbDrone.Api.Test/NzbDrone.Api.Test.csproj similarity index 100% rename from NzbDrone.Api.Test/NzbDrone.Api.Test.csproj rename to src/NzbDrone.Api.Test/NzbDrone.Api.Test.csproj diff --git a/NzbDrone.Api.Test/Properties/AssemblyInfo.cs b/src/NzbDrone.Api.Test/Properties/AssemblyInfo.cs similarity index 100% rename from NzbDrone.Api.Test/Properties/AssemblyInfo.cs rename to src/NzbDrone.Api.Test/Properties/AssemblyInfo.cs diff --git a/NzbDrone.Api.Test/packages.config b/src/NzbDrone.Api.Test/packages.config similarity index 100% rename from NzbDrone.Api.Test/packages.config rename to src/NzbDrone.Api.Test/packages.config diff --git a/NzbDrone.Api/Authentication/AuthenticationService.cs b/src/NzbDrone.Api/Authentication/AuthenticationService.cs similarity index 100% rename from NzbDrone.Api/Authentication/AuthenticationService.cs rename to src/NzbDrone.Api/Authentication/AuthenticationService.cs diff --git a/NzbDrone.Api/Authentication/EnableBasicAuthInNancy.cs b/src/NzbDrone.Api/Authentication/EnableBasicAuthInNancy.cs similarity index 100% rename from NzbDrone.Api/Authentication/EnableBasicAuthInNancy.cs rename to src/NzbDrone.Api/Authentication/EnableBasicAuthInNancy.cs diff --git a/NzbDrone.Api/Authentication/EnableStatelessAuthInNancy.cs b/src/NzbDrone.Api/Authentication/EnableStatelessAuthInNancy.cs similarity index 100% rename from NzbDrone.Api/Authentication/EnableStatelessAuthInNancy.cs rename to src/NzbDrone.Api/Authentication/EnableStatelessAuthInNancy.cs diff --git a/NzbDrone.Api/Authentication/NzbDroneUser.cs b/src/NzbDrone.Api/Authentication/NzbDroneUser.cs similarity index 100% rename from NzbDrone.Api/Authentication/NzbDroneUser.cs rename to src/NzbDrone.Api/Authentication/NzbDroneUser.cs diff --git a/NzbDrone.Api/Calendar/CalendarModule.cs b/src/NzbDrone.Api/Calendar/CalendarModule.cs similarity index 100% rename from NzbDrone.Api/Calendar/CalendarModule.cs rename to src/NzbDrone.Api/Calendar/CalendarModule.cs diff --git a/NzbDrone.Api/ClientSchema/Field.cs b/src/NzbDrone.Api/ClientSchema/Field.cs similarity index 100% rename from NzbDrone.Api/ClientSchema/Field.cs rename to src/NzbDrone.Api/ClientSchema/Field.cs diff --git a/NzbDrone.Api/ClientSchema/FieldDefinitionAttribute.cs b/src/NzbDrone.Api/ClientSchema/FieldDefinitionAttribute.cs similarity index 100% rename from NzbDrone.Api/ClientSchema/FieldDefinitionAttribute.cs rename to src/NzbDrone.Api/ClientSchema/FieldDefinitionAttribute.cs diff --git a/NzbDrone.Api/ClientSchema/SchemaBuilder.cs b/src/NzbDrone.Api/ClientSchema/SchemaBuilder.cs similarity index 100% rename from NzbDrone.Api/ClientSchema/SchemaBuilder.cs rename to src/NzbDrone.Api/ClientSchema/SchemaBuilder.cs diff --git a/NzbDrone.Api/ClientSchema/SchemaDeserializer.cs b/src/NzbDrone.Api/ClientSchema/SchemaDeserializer.cs similarity index 100% rename from NzbDrone.Api/ClientSchema/SchemaDeserializer.cs rename to src/NzbDrone.Api/ClientSchema/SchemaDeserializer.cs diff --git a/NzbDrone.Api/ClientSchema/SelectOption.cs b/src/NzbDrone.Api/ClientSchema/SelectOption.cs similarity index 100% rename from NzbDrone.Api/ClientSchema/SelectOption.cs rename to src/NzbDrone.Api/ClientSchema/SelectOption.cs diff --git a/NzbDrone.Api/Commands/CommandModule.cs b/src/NzbDrone.Api/Commands/CommandModule.cs similarity index 100% rename from NzbDrone.Api/Commands/CommandModule.cs rename to src/NzbDrone.Api/Commands/CommandModule.cs diff --git a/NzbDrone.Api/Commands/CommandResource.cs b/src/NzbDrone.Api/Commands/CommandResource.cs similarity index 100% rename from NzbDrone.Api/Commands/CommandResource.cs rename to src/NzbDrone.Api/Commands/CommandResource.cs diff --git a/NzbDrone.Api/Config/NamingConfigResource.cs b/src/NzbDrone.Api/Config/NamingConfigResource.cs similarity index 100% rename from NzbDrone.Api/Config/NamingConfigResource.cs rename to src/NzbDrone.Api/Config/NamingConfigResource.cs diff --git a/NzbDrone.Api/Config/NamingModule.cs b/src/NzbDrone.Api/Config/NamingModule.cs similarity index 100% rename from NzbDrone.Api/Config/NamingModule.cs rename to src/NzbDrone.Api/Config/NamingModule.cs diff --git a/NzbDrone.Api/Config/NamingSampleResource.cs b/src/NzbDrone.Api/Config/NamingSampleResource.cs similarity index 100% rename from NzbDrone.Api/Config/NamingSampleResource.cs rename to src/NzbDrone.Api/Config/NamingSampleResource.cs diff --git a/NzbDrone.Api/Config/SettingsModule.cs b/src/NzbDrone.Api/Config/SettingsModule.cs similarity index 100% rename from NzbDrone.Api/Config/SettingsModule.cs rename to src/NzbDrone.Api/Config/SettingsModule.cs diff --git a/NzbDrone.Api/Directories/DirectoryLookupService.cs b/src/NzbDrone.Api/Directories/DirectoryLookupService.cs similarity index 100% rename from NzbDrone.Api/Directories/DirectoryLookupService.cs rename to src/NzbDrone.Api/Directories/DirectoryLookupService.cs diff --git a/NzbDrone.Api/Directories/DirectoryModule.cs b/src/NzbDrone.Api/Directories/DirectoryModule.cs similarity index 100% rename from NzbDrone.Api/Directories/DirectoryModule.cs rename to src/NzbDrone.Api/Directories/DirectoryModule.cs diff --git a/NzbDrone.Api/EpisodeFiles/EpisodeFileModule.cs b/src/NzbDrone.Api/EpisodeFiles/EpisodeFileModule.cs similarity index 100% rename from NzbDrone.Api/EpisodeFiles/EpisodeFileModule.cs rename to src/NzbDrone.Api/EpisodeFiles/EpisodeFileModule.cs diff --git a/NzbDrone.Api/EpisodeFiles/EpisodeFileResource.cs b/src/NzbDrone.Api/EpisodeFiles/EpisodeFileResource.cs similarity index 100% rename from NzbDrone.Api/EpisodeFiles/EpisodeFileResource.cs rename to src/NzbDrone.Api/EpisodeFiles/EpisodeFileResource.cs diff --git a/NzbDrone.Api/Episodes/EpisodeModule.cs b/src/NzbDrone.Api/Episodes/EpisodeModule.cs similarity index 100% rename from NzbDrone.Api/Episodes/EpisodeModule.cs rename to src/NzbDrone.Api/Episodes/EpisodeModule.cs diff --git a/NzbDrone.Api/Episodes/EpisodeResource.cs b/src/NzbDrone.Api/Episodes/EpisodeResource.cs similarity index 100% rename from NzbDrone.Api/Episodes/EpisodeResource.cs rename to src/NzbDrone.Api/Episodes/EpisodeResource.cs diff --git a/NzbDrone.Api/ErrorManagement/ApiException.cs b/src/NzbDrone.Api/ErrorManagement/ApiException.cs similarity index 100% rename from NzbDrone.Api/ErrorManagement/ApiException.cs rename to src/NzbDrone.Api/ErrorManagement/ApiException.cs diff --git a/NzbDrone.Api/ErrorManagement/ErrorHandler.cs b/src/NzbDrone.Api/ErrorManagement/ErrorHandler.cs similarity index 100% rename from NzbDrone.Api/ErrorManagement/ErrorHandler.cs rename to src/NzbDrone.Api/ErrorManagement/ErrorHandler.cs diff --git a/NzbDrone.Api/ErrorManagement/ErrorModel.cs b/src/NzbDrone.Api/ErrorManagement/ErrorModel.cs similarity index 100% rename from NzbDrone.Api/ErrorManagement/ErrorModel.cs rename to src/NzbDrone.Api/ErrorManagement/ErrorModel.cs diff --git a/NzbDrone.Api/ErrorManagement/NzbDroneErrorPipeline.cs b/src/NzbDrone.Api/ErrorManagement/NzbDroneErrorPipeline.cs similarity index 100% rename from NzbDrone.Api/ErrorManagement/NzbDroneErrorPipeline.cs rename to src/NzbDrone.Api/ErrorManagement/NzbDroneErrorPipeline.cs diff --git a/NzbDrone.Api/Exceptions/InvalidApiKeyException.cs b/src/NzbDrone.Api/Exceptions/InvalidApiKeyException.cs similarity index 100% rename from NzbDrone.Api/Exceptions/InvalidApiKeyException.cs rename to src/NzbDrone.Api/Exceptions/InvalidApiKeyException.cs diff --git a/NzbDrone.Api/Extensions/LazyExtensions.cs b/src/NzbDrone.Api/Extensions/LazyExtensions.cs similarity index 100% rename from NzbDrone.Api/Extensions/LazyExtensions.cs rename to src/NzbDrone.Api/Extensions/LazyExtensions.cs diff --git a/NzbDrone.Api/Extensions/NancyJsonSerializer.cs b/src/NzbDrone.Api/Extensions/NancyJsonSerializer.cs similarity index 100% rename from NzbDrone.Api/Extensions/NancyJsonSerializer.cs rename to src/NzbDrone.Api/Extensions/NancyJsonSerializer.cs diff --git a/NzbDrone.Api/Extensions/Pipelines/CacheHeaderPipeline.cs b/src/NzbDrone.Api/Extensions/Pipelines/CacheHeaderPipeline.cs similarity index 100% rename from NzbDrone.Api/Extensions/Pipelines/CacheHeaderPipeline.cs rename to src/NzbDrone.Api/Extensions/Pipelines/CacheHeaderPipeline.cs diff --git a/NzbDrone.Api/Extensions/Pipelines/GZipPipeline.cs b/src/NzbDrone.Api/Extensions/Pipelines/GZipPipeline.cs similarity index 100% rename from NzbDrone.Api/Extensions/Pipelines/GZipPipeline.cs rename to src/NzbDrone.Api/Extensions/Pipelines/GZipPipeline.cs diff --git a/NzbDrone.Api/Extensions/Pipelines/IRegisterNancyPipeline.cs b/src/NzbDrone.Api/Extensions/Pipelines/IRegisterNancyPipeline.cs similarity index 100% rename from NzbDrone.Api/Extensions/Pipelines/IRegisterNancyPipeline.cs rename to src/NzbDrone.Api/Extensions/Pipelines/IRegisterNancyPipeline.cs diff --git a/NzbDrone.Api/Extensions/Pipelines/IfModifiedPipeline.cs b/src/NzbDrone.Api/Extensions/Pipelines/IfModifiedPipeline.cs similarity index 100% rename from NzbDrone.Api/Extensions/Pipelines/IfModifiedPipeline.cs rename to src/NzbDrone.Api/Extensions/Pipelines/IfModifiedPipeline.cs diff --git a/NzbDrone.Api/Extensions/ReqResExtensions.cs b/src/NzbDrone.Api/Extensions/ReqResExtensions.cs similarity index 100% rename from NzbDrone.Api/Extensions/ReqResExtensions.cs rename to src/NzbDrone.Api/Extensions/ReqResExtensions.cs diff --git a/NzbDrone.Api/Extensions/RequestExtensions.cs b/src/NzbDrone.Api/Extensions/RequestExtensions.cs similarity index 100% rename from NzbDrone.Api/Extensions/RequestExtensions.cs rename to src/NzbDrone.Api/Extensions/RequestExtensions.cs diff --git a/NzbDrone.Api/Frontend/IsCacheableSpecification.cs b/src/NzbDrone.Api/Frontend/IsCacheableSpecification.cs similarity index 100% rename from NzbDrone.Api/Frontend/IsCacheableSpecification.cs rename to src/NzbDrone.Api/Frontend/IsCacheableSpecification.cs diff --git a/NzbDrone.Api/Frontend/Mappers/IMapHttpRequestsToDisk.cs b/src/NzbDrone.Api/Frontend/Mappers/IMapHttpRequestsToDisk.cs similarity index 100% rename from NzbDrone.Api/Frontend/Mappers/IMapHttpRequestsToDisk.cs rename to src/NzbDrone.Api/Frontend/Mappers/IMapHttpRequestsToDisk.cs diff --git a/NzbDrone.Api/Frontend/Mappers/IndexHtmlMapper.cs b/src/NzbDrone.Api/Frontend/Mappers/IndexHtmlMapper.cs similarity index 100% rename from NzbDrone.Api/Frontend/Mappers/IndexHtmlMapper.cs rename to src/NzbDrone.Api/Frontend/Mappers/IndexHtmlMapper.cs diff --git a/NzbDrone.Api/Frontend/Mappers/LogFileMapper.cs b/src/NzbDrone.Api/Frontend/Mappers/LogFileMapper.cs similarity index 100% rename from NzbDrone.Api/Frontend/Mappers/LogFileMapper.cs rename to src/NzbDrone.Api/Frontend/Mappers/LogFileMapper.cs diff --git a/NzbDrone.Api/Frontend/Mappers/MediaCoverMapper.cs b/src/NzbDrone.Api/Frontend/Mappers/MediaCoverMapper.cs similarity index 100% rename from NzbDrone.Api/Frontend/Mappers/MediaCoverMapper.cs rename to src/NzbDrone.Api/Frontend/Mappers/MediaCoverMapper.cs diff --git a/NzbDrone.Api/Frontend/Mappers/StaticResourceMapper.cs b/src/NzbDrone.Api/Frontend/Mappers/StaticResourceMapper.cs similarity index 100% rename from NzbDrone.Api/Frontend/Mappers/StaticResourceMapper.cs rename to src/NzbDrone.Api/Frontend/Mappers/StaticResourceMapper.cs diff --git a/NzbDrone.Api/Frontend/Mappers/StaticResourceMapperBase.cs b/src/NzbDrone.Api/Frontend/Mappers/StaticResourceMapperBase.cs similarity index 100% rename from NzbDrone.Api/Frontend/Mappers/StaticResourceMapperBase.cs rename to src/NzbDrone.Api/Frontend/Mappers/StaticResourceMapperBase.cs diff --git a/NzbDrone.Api/Frontend/StaticResourceModule.cs b/src/NzbDrone.Api/Frontend/StaticResourceModule.cs similarity index 100% rename from NzbDrone.Api/Frontend/StaticResourceModule.cs rename to src/NzbDrone.Api/Frontend/StaticResourceModule.cs diff --git a/NzbDrone.Api/History/HistoryModule.cs b/src/NzbDrone.Api/History/HistoryModule.cs similarity index 100% rename from NzbDrone.Api/History/HistoryModule.cs rename to src/NzbDrone.Api/History/HistoryModule.cs diff --git a/NzbDrone.Api/History/HistoryResource.cs b/src/NzbDrone.Api/History/HistoryResource.cs similarity index 100% rename from NzbDrone.Api/History/HistoryResource.cs rename to src/NzbDrone.Api/History/HistoryResource.cs diff --git a/NzbDrone.Api/IndexerResource.cs b/src/NzbDrone.Api/IndexerResource.cs similarity index 100% rename from NzbDrone.Api/IndexerResource.cs rename to src/NzbDrone.Api/IndexerResource.cs diff --git a/NzbDrone.Api/Indexers/IndexerModule.cs b/src/NzbDrone.Api/Indexers/IndexerModule.cs similarity index 100% rename from NzbDrone.Api/Indexers/IndexerModule.cs rename to src/NzbDrone.Api/Indexers/IndexerModule.cs diff --git a/NzbDrone.Api/Indexers/IndexerResource.cs b/src/NzbDrone.Api/Indexers/IndexerResource.cs similarity index 100% rename from NzbDrone.Api/Indexers/IndexerResource.cs rename to src/NzbDrone.Api/Indexers/IndexerResource.cs diff --git a/NzbDrone.Api/Indexers/IndexerSchemaModule.cs b/src/NzbDrone.Api/Indexers/IndexerSchemaModule.cs similarity index 100% rename from NzbDrone.Api/Indexers/IndexerSchemaModule.cs rename to src/NzbDrone.Api/Indexers/IndexerSchemaModule.cs diff --git a/NzbDrone.Api/Indexers/ReleaseModule.cs b/src/NzbDrone.Api/Indexers/ReleaseModule.cs similarity index 100% rename from NzbDrone.Api/Indexers/ReleaseModule.cs rename to src/NzbDrone.Api/Indexers/ReleaseModule.cs diff --git a/NzbDrone.Api/Indexers/ReleaseResource.cs b/src/NzbDrone.Api/Indexers/ReleaseResource.cs similarity index 100% rename from NzbDrone.Api/Indexers/ReleaseResource.cs rename to src/NzbDrone.Api/Indexers/ReleaseResource.cs diff --git a/NzbDrone.Api/Logs/LogFileModule.cs b/src/NzbDrone.Api/Logs/LogFileModule.cs similarity index 100% rename from NzbDrone.Api/Logs/LogFileModule.cs rename to src/NzbDrone.Api/Logs/LogFileModule.cs diff --git a/NzbDrone.Api/Logs/LogFileResource.cs b/src/NzbDrone.Api/Logs/LogFileResource.cs similarity index 100% rename from NzbDrone.Api/Logs/LogFileResource.cs rename to src/NzbDrone.Api/Logs/LogFileResource.cs diff --git a/NzbDrone.Api/Logs/LogModule.cs b/src/NzbDrone.Api/Logs/LogModule.cs similarity index 100% rename from NzbDrone.Api/Logs/LogModule.cs rename to src/NzbDrone.Api/Logs/LogModule.cs diff --git a/NzbDrone.Api/Logs/LogResource.cs b/src/NzbDrone.Api/Logs/LogResource.cs similarity index 100% rename from NzbDrone.Api/Logs/LogResource.cs rename to src/NzbDrone.Api/Logs/LogResource.cs diff --git a/NzbDrone.Api/Mapping/CloneInjection.cs b/src/NzbDrone.Api/Mapping/CloneInjection.cs similarity index 100% rename from NzbDrone.Api/Mapping/CloneInjection.cs rename to src/NzbDrone.Api/Mapping/CloneInjection.cs diff --git a/NzbDrone.Api/Mapping/MappingValidation.cs b/src/NzbDrone.Api/Mapping/MappingValidation.cs similarity index 100% rename from NzbDrone.Api/Mapping/MappingValidation.cs rename to src/NzbDrone.Api/Mapping/MappingValidation.cs diff --git a/NzbDrone.Api/Mapping/ResourceMappingException.cs b/src/NzbDrone.Api/Mapping/ResourceMappingException.cs similarity index 100% rename from NzbDrone.Api/Mapping/ResourceMappingException.cs rename to src/NzbDrone.Api/Mapping/ResourceMappingException.cs diff --git a/NzbDrone.Api/Mapping/ValueInjectorExtensions.cs b/src/NzbDrone.Api/Mapping/ValueInjectorExtensions.cs similarity index 97% rename from NzbDrone.Api/Mapping/ValueInjectorExtensions.cs rename to src/NzbDrone.Api/Mapping/ValueInjectorExtensions.cs index ce21efaef..d8ac662f5 100644 --- a/NzbDrone.Api/Mapping/ValueInjectorExtensions.cs +++ b/src/NzbDrone.Api/Mapping/ValueInjectorExtensions.cs @@ -1,41 +1,41 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Linq; -using Omu.ValueInjecter; - -namespace NzbDrone.Api.Mapping -{ - public static class ValueInjectorExtensions - { - public static TTarget InjectTo(this object source) where TTarget : new() - { - var targetType = typeof(TTarget); - - if (targetType.IsGenericType && - targetType.GetGenericTypeDefinition() != null && - targetType.GetGenericTypeDefinition().GetInterfaces().Contains(typeof(IEnumerable)) && - source.GetType().IsGenericType && - source.GetType().GetGenericTypeDefinition() != null && - source.GetType().GetGenericTypeDefinition().GetInterfaces().Contains(typeof(IEnumerable))) - { - - var result = new TTarget(); - - var listSubType = targetType.GetGenericArguments()[0]; - var listType = typeof(List<>).MakeGenericType(listSubType); - var addMethod = listType.GetMethod("Add"); - - foreach (var sourceItem in (IEnumerable)source) - { - var e = Activator.CreateInstance(listSubType).InjectFrom(sourceItem); - addMethod.Invoke(result, new[] { e }); - } - - return result; - } - - return (TTarget)new TTarget().InjectFrom(source); - } - } +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using Omu.ValueInjecter; + +namespace NzbDrone.Api.Mapping +{ + public static class ValueInjectorExtensions + { + public static TTarget InjectTo(this object source) where TTarget : new() + { + var targetType = typeof(TTarget); + + if (targetType.IsGenericType && + targetType.GetGenericTypeDefinition() != null && + targetType.GetGenericTypeDefinition().GetInterfaces().Contains(typeof(IEnumerable)) && + source.GetType().IsGenericType && + source.GetType().GetGenericTypeDefinition() != null && + source.GetType().GetGenericTypeDefinition().GetInterfaces().Contains(typeof(IEnumerable))) + { + + var result = new TTarget(); + + var listSubType = targetType.GetGenericArguments()[0]; + var listType = typeof(List<>).MakeGenericType(listSubType); + var addMethod = listType.GetMethod("Add"); + + foreach (var sourceItem in (IEnumerable)source) + { + var e = Activator.CreateInstance(listSubType).InjectFrom(sourceItem); + addMethod.Invoke(result, new[] { e }); + } + + return result; + } + + return (TTarget)new TTarget().InjectFrom(source); + } + } } \ No newline at end of file diff --git a/NzbDrone.Api/Missing/MissingModule.cs b/src/NzbDrone.Api/Missing/MissingModule.cs similarity index 100% rename from NzbDrone.Api/Missing/MissingModule.cs rename to src/NzbDrone.Api/Missing/MissingModule.cs diff --git a/NzbDrone.Api/NancyBootstrapper.cs b/src/NzbDrone.Api/NancyBootstrapper.cs similarity index 100% rename from NzbDrone.Api/NancyBootstrapper.cs rename to src/NzbDrone.Api/NancyBootstrapper.cs diff --git a/NzbDrone.Api/Notifications/NotificationModule.cs b/src/NzbDrone.Api/Notifications/NotificationModule.cs similarity index 100% rename from NzbDrone.Api/Notifications/NotificationModule.cs rename to src/NzbDrone.Api/Notifications/NotificationModule.cs diff --git a/NzbDrone.Api/Notifications/NotificationResource.cs b/src/NzbDrone.Api/Notifications/NotificationResource.cs similarity index 100% rename from NzbDrone.Api/Notifications/NotificationResource.cs rename to src/NzbDrone.Api/Notifications/NotificationResource.cs diff --git a/NzbDrone.Api/Notifications/NotificationSchemaModule.cs b/src/NzbDrone.Api/Notifications/NotificationSchemaModule.cs similarity index 100% rename from NzbDrone.Api/Notifications/NotificationSchemaModule.cs rename to src/NzbDrone.Api/Notifications/NotificationSchemaModule.cs diff --git a/NzbDrone.Api/NzbDrone.Api.csproj b/src/NzbDrone.Api/NzbDrone.Api.csproj similarity index 99% rename from NzbDrone.Api/NzbDrone.Api.csproj rename to src/NzbDrone.Api/NzbDrone.Api.csproj index 88f133b26..7b885fe48 100644 --- a/NzbDrone.Api/NzbDrone.Api.csproj +++ b/src/NzbDrone.Api/NzbDrone.Api.csproj @@ -18,7 +18,7 @@ true - ..\_output\ + ..\..\_output\ DEBUG;TRACE full x86 @@ -26,7 +26,7 @@ MinimumRecommendedRules.ruleset - ..\_output\ + ..\..\_output\ TRACE true pdbonly diff --git a/NzbDrone.Api/NzbDroneApiModule.cs b/src/NzbDrone.Api/NzbDroneApiModule.cs similarity index 100% rename from NzbDrone.Api/NzbDroneApiModule.cs rename to src/NzbDrone.Api/NzbDroneApiModule.cs diff --git a/NzbDrone.Api/NzbDroneRestModule.cs b/src/NzbDrone.Api/NzbDroneRestModule.cs similarity index 100% rename from NzbDrone.Api/NzbDroneRestModule.cs rename to src/NzbDrone.Api/NzbDroneRestModule.cs diff --git a/NzbDrone.Api/NzbDroneRestModuleWithSignalR.cs b/src/NzbDrone.Api/NzbDroneRestModuleWithSignalR.cs similarity index 100% rename from NzbDrone.Api/NzbDroneRestModuleWithSignalR.cs rename to src/NzbDrone.Api/NzbDroneRestModuleWithSignalR.cs diff --git a/NzbDrone.Api/PagingResource.cs b/src/NzbDrone.Api/PagingResource.cs similarity index 100% rename from NzbDrone.Api/PagingResource.cs rename to src/NzbDrone.Api/PagingResource.cs diff --git a/NzbDrone.Api/Properties/AssemblyInfo.cs b/src/NzbDrone.Api/Properties/AssemblyInfo.cs similarity index 100% rename from NzbDrone.Api/Properties/AssemblyInfo.cs rename to src/NzbDrone.Api/Properties/AssemblyInfo.cs diff --git a/NzbDrone.Api/ProviderModuleBase.cs b/src/NzbDrone.Api/ProviderModuleBase.cs similarity index 100% rename from NzbDrone.Api/ProviderModuleBase.cs rename to src/NzbDrone.Api/ProviderModuleBase.cs diff --git a/NzbDrone.Api/Qualities/QualityProfileModule.cs b/src/NzbDrone.Api/Qualities/QualityProfileModule.cs similarity index 100% rename from NzbDrone.Api/Qualities/QualityProfileModule.cs rename to src/NzbDrone.Api/Qualities/QualityProfileModule.cs diff --git a/NzbDrone.Api/Qualities/QualityProfileResource.cs b/src/NzbDrone.Api/Qualities/QualityProfileResource.cs similarity index 100% rename from NzbDrone.Api/Qualities/QualityProfileResource.cs rename to src/NzbDrone.Api/Qualities/QualityProfileResource.cs diff --git a/NzbDrone.Api/Qualities/QualityProfileSchemaModule.cs b/src/NzbDrone.Api/Qualities/QualityProfileSchemaModule.cs similarity index 100% rename from NzbDrone.Api/Qualities/QualityProfileSchemaModule.cs rename to src/NzbDrone.Api/Qualities/QualityProfileSchemaModule.cs diff --git a/NzbDrone.Api/Qualities/QualitySizeModule.cs b/src/NzbDrone.Api/Qualities/QualitySizeModule.cs similarity index 100% rename from NzbDrone.Api/Qualities/QualitySizeModule.cs rename to src/NzbDrone.Api/Qualities/QualitySizeModule.cs diff --git a/NzbDrone.Api/Qualities/QualitySizeResource.cs b/src/NzbDrone.Api/Qualities/QualitySizeResource.cs similarity index 100% rename from NzbDrone.Api/Qualities/QualitySizeResource.cs rename to src/NzbDrone.Api/Qualities/QualitySizeResource.cs diff --git a/NzbDrone.Api/Queue/QueueModule.cs b/src/NzbDrone.Api/Queue/QueueModule.cs similarity index 100% rename from NzbDrone.Api/Queue/QueueModule.cs rename to src/NzbDrone.Api/Queue/QueueModule.cs diff --git a/NzbDrone.Api/Queue/QueueResource.cs b/src/NzbDrone.Api/Queue/QueueResource.cs similarity index 100% rename from NzbDrone.Api/Queue/QueueResource.cs rename to src/NzbDrone.Api/Queue/QueueResource.cs diff --git a/NzbDrone.Api/REST/BadRequestException.cs b/src/NzbDrone.Api/REST/BadRequestException.cs similarity index 100% rename from NzbDrone.Api/REST/BadRequestException.cs rename to src/NzbDrone.Api/REST/BadRequestException.cs diff --git a/NzbDrone.Api/REST/ResourceValidator.cs b/src/NzbDrone.Api/REST/ResourceValidator.cs similarity index 100% rename from NzbDrone.Api/REST/ResourceValidator.cs rename to src/NzbDrone.Api/REST/ResourceValidator.cs diff --git a/NzbDrone.Api/REST/RestModule.cs b/src/NzbDrone.Api/REST/RestModule.cs similarity index 100% rename from NzbDrone.Api/REST/RestModule.cs rename to src/NzbDrone.Api/REST/RestModule.cs diff --git a/NzbDrone.Api/REST/RestResource.cs b/src/NzbDrone.Api/REST/RestResource.cs similarity index 100% rename from NzbDrone.Api/REST/RestResource.cs rename to src/NzbDrone.Api/REST/RestResource.cs diff --git a/NzbDrone.Api/ResourceChangeMessage.cs b/src/NzbDrone.Api/ResourceChangeMessage.cs similarity index 100% rename from NzbDrone.Api/ResourceChangeMessage.cs rename to src/NzbDrone.Api/ResourceChangeMessage.cs diff --git a/NzbDrone.Api/RootFolders/RootFolderModule.cs b/src/NzbDrone.Api/RootFolders/RootFolderModule.cs similarity index 100% rename from NzbDrone.Api/RootFolders/RootFolderModule.cs rename to src/NzbDrone.Api/RootFolders/RootFolderModule.cs diff --git a/NzbDrone.Api/RootFolders/RootFolderResource.cs b/src/NzbDrone.Api/RootFolders/RootFolderResource.cs similarity index 100% rename from NzbDrone.Api/RootFolders/RootFolderResource.cs rename to src/NzbDrone.Api/RootFolders/RootFolderResource.cs diff --git a/NzbDrone.Api/Series/SeriesLookupModule.cs b/src/NzbDrone.Api/Series/SeriesLookupModule.cs similarity index 100% rename from NzbDrone.Api/Series/SeriesLookupModule.cs rename to src/NzbDrone.Api/Series/SeriesLookupModule.cs diff --git a/NzbDrone.Api/Series/SeriesModule.cs b/src/NzbDrone.Api/Series/SeriesModule.cs similarity index 100% rename from NzbDrone.Api/Series/SeriesModule.cs rename to src/NzbDrone.Api/Series/SeriesModule.cs diff --git a/NzbDrone.Api/Series/SeriesResource.cs b/src/NzbDrone.Api/Series/SeriesResource.cs similarity index 100% rename from NzbDrone.Api/Series/SeriesResource.cs rename to src/NzbDrone.Api/Series/SeriesResource.cs diff --git a/NzbDrone.Api/System/SystemModule.cs b/src/NzbDrone.Api/System/SystemModule.cs similarity index 100% rename from NzbDrone.Api/System/SystemModule.cs rename to src/NzbDrone.Api/System/SystemModule.cs diff --git a/NzbDrone.Api/TinyIoCNancyBootstrapper.cs b/src/NzbDrone.Api/TinyIoCNancyBootstrapper.cs similarity index 100% rename from NzbDrone.Api/TinyIoCNancyBootstrapper.cs rename to src/NzbDrone.Api/TinyIoCNancyBootstrapper.cs diff --git a/NzbDrone.Api/Update/UpdateModule.cs b/src/NzbDrone.Api/Update/UpdateModule.cs similarity index 100% rename from NzbDrone.Api/Update/UpdateModule.cs rename to src/NzbDrone.Api/Update/UpdateModule.cs diff --git a/NzbDrone.Api/Validation/PathValidator.cs b/src/NzbDrone.Api/Validation/PathValidator.cs similarity index 100% rename from NzbDrone.Api/Validation/PathValidator.cs rename to src/NzbDrone.Api/Validation/PathValidator.cs diff --git a/NzbDrone.Api/Validation/RuleBuilderExtensions.cs b/src/NzbDrone.Api/Validation/RuleBuilderExtensions.cs similarity index 100% rename from NzbDrone.Api/Validation/RuleBuilderExtensions.cs rename to src/NzbDrone.Api/Validation/RuleBuilderExtensions.cs diff --git a/NzbDrone.Api/packages.config b/src/NzbDrone.Api/packages.config similarity index 100% rename from NzbDrone.Api/packages.config rename to src/NzbDrone.Api/packages.config diff --git a/NzbDrone.App.Test/ContainerFixture.cs b/src/NzbDrone.App.Test/ContainerFixture.cs similarity index 100% rename from NzbDrone.App.Test/ContainerFixture.cs rename to src/NzbDrone.App.Test/ContainerFixture.cs diff --git a/NzbDrone.App.Test/License.txt b/src/NzbDrone.App.Test/License.txt similarity index 100% rename from NzbDrone.App.Test/License.txt rename to src/NzbDrone.App.Test/License.txt diff --git a/NzbDrone.App.Test/MonitoringProviderTest.cs b/src/NzbDrone.App.Test/MonitoringProviderTest.cs similarity index 100% rename from NzbDrone.App.Test/MonitoringProviderTest.cs rename to src/NzbDrone.App.Test/MonitoringProviderTest.cs diff --git a/NzbDrone.App.Test/NzbDrone.Host.Test.csproj b/src/NzbDrone.App.Test/NzbDrone.Host.Test.csproj similarity index 100% rename from NzbDrone.App.Test/NzbDrone.Host.Test.csproj rename to src/NzbDrone.App.Test/NzbDrone.Host.Test.csproj diff --git a/NzbDrone.App.Test/Properties/AssemblyInfo.cs b/src/NzbDrone.App.Test/Properties/AssemblyInfo.cs similarity index 100% rename from NzbDrone.App.Test/Properties/AssemblyInfo.cs rename to src/NzbDrone.App.Test/Properties/AssemblyInfo.cs diff --git a/NzbDrone.App.Test/RouterTest.cs b/src/NzbDrone.App.Test/RouterTest.cs similarity index 100% rename from NzbDrone.App.Test/RouterTest.cs rename to src/NzbDrone.App.Test/RouterTest.cs diff --git a/NzbDrone.App.Test/packages.config b/src/NzbDrone.App.Test/packages.config similarity index 100% rename from NzbDrone.App.Test/packages.config rename to src/NzbDrone.App.Test/packages.config diff --git a/NzbDrone.Common.Test/CacheTests/CachedFixture.cs b/src/NzbDrone.Common.Test/CacheTests/CachedFixture.cs similarity index 100% rename from NzbDrone.Common.Test/CacheTests/CachedFixture.cs rename to src/NzbDrone.Common.Test/CacheTests/CachedFixture.cs diff --git a/NzbDrone.Common.Test/CacheTests/CachedManagerFixture.cs b/src/NzbDrone.Common.Test/CacheTests/CachedManagerFixture.cs similarity index 100% rename from NzbDrone.Common.Test/CacheTests/CachedManagerFixture.cs rename to src/NzbDrone.Common.Test/CacheTests/CachedManagerFixture.cs diff --git a/NzbDrone.Common.Test/ConfigFileProviderTest.cs b/src/NzbDrone.Common.Test/ConfigFileProviderTest.cs similarity index 100% rename from NzbDrone.Common.Test/ConfigFileProviderTest.cs rename to src/NzbDrone.Common.Test/ConfigFileProviderTest.cs diff --git a/NzbDrone.Common.Test/DiskProviderTests/DiskProviderFixture.cs b/src/NzbDrone.Common.Test/DiskProviderTests/DiskProviderFixture.cs similarity index 100% rename from NzbDrone.Common.Test/DiskProviderTests/DiskProviderFixture.cs rename to src/NzbDrone.Common.Test/DiskProviderTests/DiskProviderFixture.cs diff --git a/NzbDrone.Common.Test/DiskProviderTests/FreeSpaceFixture.cs b/src/NzbDrone.Common.Test/DiskProviderTests/FreeSpaceFixture.cs similarity index 100% rename from NzbDrone.Common.Test/DiskProviderTests/FreeSpaceFixture.cs rename to src/NzbDrone.Common.Test/DiskProviderTests/FreeSpaceFixture.cs diff --git a/NzbDrone.Common.Test/DiskProviderTests/IsParentFixture.cs b/src/NzbDrone.Common.Test/DiskProviderTests/IsParentFixture.cs similarity index 100% rename from NzbDrone.Common.Test/DiskProviderTests/IsParentFixture.cs rename to src/NzbDrone.Common.Test/DiskProviderTests/IsParentFixture.cs diff --git a/NzbDrone.Common.Test/EnsureTest/PathExtensionFixture.cs b/src/NzbDrone.Common.Test/EnsureTest/PathExtensionFixture.cs similarity index 100% rename from NzbDrone.Common.Test/EnsureTest/PathExtensionFixture.cs rename to src/NzbDrone.Common.Test/EnsureTest/PathExtensionFixture.cs diff --git a/NzbDrone.Common.Test/EnvironmentProviderTest.cs b/src/NzbDrone.Common.Test/EnvironmentProviderTest.cs similarity index 100% rename from NzbDrone.Common.Test/EnvironmentProviderTest.cs rename to src/NzbDrone.Common.Test/EnvironmentProviderTest.cs diff --git a/NzbDrone.Common.Test/EnvironmentTests/EnvironmentProviderTest.cs b/src/NzbDrone.Common.Test/EnvironmentTests/EnvironmentProviderTest.cs similarity index 100% rename from NzbDrone.Common.Test/EnvironmentTests/EnvironmentProviderTest.cs rename to src/NzbDrone.Common.Test/EnvironmentTests/EnvironmentProviderTest.cs diff --git a/NzbDrone.Common.Test/EnvironmentTests/StartupArgumentsFixture.cs b/src/NzbDrone.Common.Test/EnvironmentTests/StartupArgumentsFixture.cs similarity index 100% rename from NzbDrone.Common.Test/EnvironmentTests/StartupArgumentsFixture.cs rename to src/NzbDrone.Common.Test/EnvironmentTests/StartupArgumentsFixture.cs diff --git a/NzbDrone.Common.Test/License.txt b/src/NzbDrone.Common.Test/License.txt similarity index 100% rename from NzbDrone.Common.Test/License.txt rename to src/NzbDrone.Common.Test/License.txt diff --git a/NzbDrone.Common.Test/NzbDrone.Common.Test.csproj b/src/NzbDrone.Common.Test/NzbDrone.Common.Test.csproj similarity index 100% rename from NzbDrone.Common.Test/NzbDrone.Common.Test.csproj rename to src/NzbDrone.Common.Test/NzbDrone.Common.Test.csproj diff --git a/NzbDrone.Common.Test/PathExtensionFixture.cs b/src/NzbDrone.Common.Test/PathExtensionFixture.cs similarity index 100% rename from NzbDrone.Common.Test/PathExtensionFixture.cs rename to src/NzbDrone.Common.Test/PathExtensionFixture.cs diff --git a/NzbDrone.Common.Test/ProcessProviderTests.cs b/src/NzbDrone.Common.Test/ProcessProviderTests.cs similarity index 100% rename from NzbDrone.Common.Test/ProcessProviderTests.cs rename to src/NzbDrone.Common.Test/ProcessProviderTests.cs diff --git a/NzbDrone.Common.Test/ReflectionExtensions.cs b/src/NzbDrone.Common.Test/ReflectionExtensions.cs similarity index 100% rename from NzbDrone.Common.Test/ReflectionExtensions.cs rename to src/NzbDrone.Common.Test/ReflectionExtensions.cs diff --git a/NzbDrone.Common.Test/ReflectionTests/ReflectionExtensionFixture.cs b/src/NzbDrone.Common.Test/ReflectionTests/ReflectionExtensionFixture.cs similarity index 96% rename from NzbDrone.Common.Test/ReflectionTests/ReflectionExtensionFixture.cs rename to src/NzbDrone.Common.Test/ReflectionTests/ReflectionExtensionFixture.cs index 4576b24ac..3e6c3fab9 100644 --- a/NzbDrone.Common.Test/ReflectionTests/ReflectionExtensionFixture.cs +++ b/src/NzbDrone.Common.Test/ReflectionTests/ReflectionExtensionFixture.cs @@ -1,31 +1,31 @@ -using System.Reflection; -using FluentAssertions; -using NUnit.Framework; -using NzbDrone.Common.Reflection; -using NzbDrone.Core.Datastore; -using NzbDrone.Test.Common; - -namespace NzbDrone.Common.Test.ReflectionTests -{ - public class ReflectionExtensionFixture : TestBase - { - [Test] - public void should_get_properties_from_models() - { - var models = Assembly.Load("NzbDrone.Core").ImplementationsOf(); - - foreach (var model in models) - { - model.GetSimpleProperties().Should().NotBeEmpty(); - } - } - - [Test] - public void should_be_able_to_get_implementations() - { - var models = Assembly.Load("NzbDrone.Core").ImplementationsOf(); - - models.Should().NotBeEmpty(); - } - } +using System.Reflection; +using FluentAssertions; +using NUnit.Framework; +using NzbDrone.Common.Reflection; +using NzbDrone.Core.Datastore; +using NzbDrone.Test.Common; + +namespace NzbDrone.Common.Test.ReflectionTests +{ + public class ReflectionExtensionFixture : TestBase + { + [Test] + public void should_get_properties_from_models() + { + var models = Assembly.Load("NzbDrone.Core").ImplementationsOf(); + + foreach (var model in models) + { + model.GetSimpleProperties().Should().NotBeEmpty(); + } + } + + [Test] + public void should_be_able_to_get_implementations() + { + var models = Assembly.Load("NzbDrone.Core").ImplementationsOf(); + + models.Should().NotBeEmpty(); + } + } } \ No newline at end of file diff --git a/NzbDrone.Common.Test/ServiceFactoryFixture.cs b/src/NzbDrone.Common.Test/ServiceFactoryFixture.cs similarity index 100% rename from NzbDrone.Common.Test/ServiceFactoryFixture.cs rename to src/NzbDrone.Common.Test/ServiceFactoryFixture.cs diff --git a/NzbDrone.Common.Test/ServiceProviderTests.cs b/src/NzbDrone.Common.Test/ServiceProviderTests.cs similarity index 100% rename from NzbDrone.Common.Test/ServiceProviderTests.cs rename to src/NzbDrone.Common.Test/ServiceProviderTests.cs diff --git a/NzbDrone.Common.Test/WebClientTests.cs b/src/NzbDrone.Common.Test/WebClientTests.cs similarity index 100% rename from NzbDrone.Common.Test/WebClientTests.cs rename to src/NzbDrone.Common.Test/WebClientTests.cs diff --git a/NzbDrone.Common.Test/packages.config b/src/NzbDrone.Common.Test/packages.config similarity index 100% rename from NzbDrone.Common.Test/packages.config rename to src/NzbDrone.Common.Test/packages.config diff --git a/NzbDrone.Common/ArchiveProvider.cs b/src/NzbDrone.Common/ArchiveProvider.cs similarity index 100% rename from NzbDrone.Common/ArchiveProvider.cs rename to src/NzbDrone.Common/ArchiveProvider.cs diff --git a/NzbDrone.Common/Cache/CacheManger.cs b/src/NzbDrone.Common/Cache/CacheManger.cs similarity index 100% rename from NzbDrone.Common/Cache/CacheManger.cs rename to src/NzbDrone.Common/Cache/CacheManger.cs diff --git a/NzbDrone.Common/Cache/Cached.cs b/src/NzbDrone.Common/Cache/Cached.cs similarity index 100% rename from NzbDrone.Common/Cache/Cached.cs rename to src/NzbDrone.Common/Cache/Cached.cs diff --git a/NzbDrone.Common/Cache/ICached.cs b/src/NzbDrone.Common/Cache/ICached.cs similarity index 100% rename from NzbDrone.Common/Cache/ICached.cs rename to src/NzbDrone.Common/Cache/ICached.cs diff --git a/NzbDrone.Common/Composition/Container.cs b/src/NzbDrone.Common/Composition/Container.cs similarity index 100% rename from NzbDrone.Common/Composition/Container.cs rename to src/NzbDrone.Common/Composition/Container.cs diff --git a/NzbDrone.Common/Composition/ContainerBuilderBase.cs b/src/NzbDrone.Common/Composition/ContainerBuilderBase.cs similarity index 100% rename from NzbDrone.Common/Composition/ContainerBuilderBase.cs rename to src/NzbDrone.Common/Composition/ContainerBuilderBase.cs diff --git a/NzbDrone.Common/Composition/IContainer.cs b/src/NzbDrone.Common/Composition/IContainer.cs similarity index 100% rename from NzbDrone.Common/Composition/IContainer.cs rename to src/NzbDrone.Common/Composition/IContainer.cs diff --git a/NzbDrone.Common/ConsoleService.cs b/src/NzbDrone.Common/ConsoleService.cs similarity index 100% rename from NzbDrone.Common/ConsoleService.cs rename to src/NzbDrone.Common/ConsoleService.cs diff --git a/NzbDrone.Common/DateTimeExtensions.cs b/src/NzbDrone.Common/DateTimeExtensions.cs similarity index 100% rename from NzbDrone.Common/DateTimeExtensions.cs rename to src/NzbDrone.Common/DateTimeExtensions.cs diff --git a/NzbDrone.Common/DiskProvider.cs b/src/NzbDrone.Common/DiskProvider.cs similarity index 100% rename from NzbDrone.Common/DiskProvider.cs rename to src/NzbDrone.Common/DiskProvider.cs diff --git a/NzbDrone.Common/EnsureThat/Ensure.cs b/src/NzbDrone.Common/EnsureThat/Ensure.cs similarity index 100% rename from NzbDrone.Common/EnsureThat/Ensure.cs rename to src/NzbDrone.Common/EnsureThat/Ensure.cs diff --git a/NzbDrone.Common/EnsureThat/EnsureBoolExtensions.cs b/src/NzbDrone.Common/EnsureThat/EnsureBoolExtensions.cs similarity index 100% rename from NzbDrone.Common/EnsureThat/EnsureBoolExtensions.cs rename to src/NzbDrone.Common/EnsureThat/EnsureBoolExtensions.cs diff --git a/NzbDrone.Common/EnsureThat/EnsureCollectionExtensions.cs b/src/NzbDrone.Common/EnsureThat/EnsureCollectionExtensions.cs similarity index 100% rename from NzbDrone.Common/EnsureThat/EnsureCollectionExtensions.cs rename to src/NzbDrone.Common/EnsureThat/EnsureCollectionExtensions.cs diff --git a/NzbDrone.Common/EnsureThat/EnsureDateTimeExtensions.cs b/src/NzbDrone.Common/EnsureThat/EnsureDateTimeExtensions.cs similarity index 100% rename from NzbDrone.Common/EnsureThat/EnsureDateTimeExtensions.cs rename to src/NzbDrone.Common/EnsureThat/EnsureDateTimeExtensions.cs diff --git a/NzbDrone.Common/EnsureThat/EnsureDecimalExtensions.cs b/src/NzbDrone.Common/EnsureThat/EnsureDecimalExtensions.cs similarity index 100% rename from NzbDrone.Common/EnsureThat/EnsureDecimalExtensions.cs rename to src/NzbDrone.Common/EnsureThat/EnsureDecimalExtensions.cs diff --git a/NzbDrone.Common/EnsureThat/EnsureDoubleExtensions.cs b/src/NzbDrone.Common/EnsureThat/EnsureDoubleExtensions.cs similarity index 100% rename from NzbDrone.Common/EnsureThat/EnsureDoubleExtensions.cs rename to src/NzbDrone.Common/EnsureThat/EnsureDoubleExtensions.cs diff --git a/NzbDrone.Common/EnsureThat/EnsureGuidExtensions.cs b/src/NzbDrone.Common/EnsureThat/EnsureGuidExtensions.cs similarity index 100% rename from NzbDrone.Common/EnsureThat/EnsureGuidExtensions.cs rename to src/NzbDrone.Common/EnsureThat/EnsureGuidExtensions.cs diff --git a/NzbDrone.Common/EnsureThat/EnsureIntExtensions.cs b/src/NzbDrone.Common/EnsureThat/EnsureIntExtensions.cs similarity index 100% rename from NzbDrone.Common/EnsureThat/EnsureIntExtensions.cs rename to src/NzbDrone.Common/EnsureThat/EnsureIntExtensions.cs diff --git a/NzbDrone.Common/EnsureThat/EnsureLongExtensions.cs b/src/NzbDrone.Common/EnsureThat/EnsureLongExtensions.cs similarity index 100% rename from NzbDrone.Common/EnsureThat/EnsureLongExtensions.cs rename to src/NzbDrone.Common/EnsureThat/EnsureLongExtensions.cs diff --git a/NzbDrone.Common/EnsureThat/EnsureNullableValueTypeExtensions.cs b/src/NzbDrone.Common/EnsureThat/EnsureNullableValueTypeExtensions.cs similarity index 100% rename from NzbDrone.Common/EnsureThat/EnsureNullableValueTypeExtensions.cs rename to src/NzbDrone.Common/EnsureThat/EnsureNullableValueTypeExtensions.cs diff --git a/NzbDrone.Common/EnsureThat/EnsureObjectExtensions.cs b/src/NzbDrone.Common/EnsureThat/EnsureObjectExtensions.cs similarity index 100% rename from NzbDrone.Common/EnsureThat/EnsureObjectExtensions.cs rename to src/NzbDrone.Common/EnsureThat/EnsureObjectExtensions.cs diff --git a/NzbDrone.Common/EnsureThat/EnsureShortExtensions.cs b/src/NzbDrone.Common/EnsureThat/EnsureShortExtensions.cs similarity index 100% rename from NzbDrone.Common/EnsureThat/EnsureShortExtensions.cs rename to src/NzbDrone.Common/EnsureThat/EnsureShortExtensions.cs diff --git a/NzbDrone.Common/EnsureThat/EnsureStringExtensions.cs b/src/NzbDrone.Common/EnsureThat/EnsureStringExtensions.cs similarity index 100% rename from NzbDrone.Common/EnsureThat/EnsureStringExtensions.cs rename to src/NzbDrone.Common/EnsureThat/EnsureStringExtensions.cs diff --git a/NzbDrone.Common/EnsureThat/EnsureTypeExtensions.cs b/src/NzbDrone.Common/EnsureThat/EnsureTypeExtensions.cs similarity index 100% rename from NzbDrone.Common/EnsureThat/EnsureTypeExtensions.cs rename to src/NzbDrone.Common/EnsureThat/EnsureTypeExtensions.cs diff --git a/NzbDrone.Common/EnsureThat/ExceptionFactory.cs b/src/NzbDrone.Common/EnsureThat/ExceptionFactory.cs similarity index 100% rename from NzbDrone.Common/EnsureThat/ExceptionFactory.cs rename to src/NzbDrone.Common/EnsureThat/ExceptionFactory.cs diff --git a/NzbDrone.Common/EnsureThat/ExpressionExtensions.cs b/src/NzbDrone.Common/EnsureThat/ExpressionExtensions.cs similarity index 100% rename from NzbDrone.Common/EnsureThat/ExpressionExtensions.cs rename to src/NzbDrone.Common/EnsureThat/ExpressionExtensions.cs diff --git a/NzbDrone.Common/EnsureThat/Param.cs b/src/NzbDrone.Common/EnsureThat/Param.cs similarity index 100% rename from NzbDrone.Common/EnsureThat/Param.cs rename to src/NzbDrone.Common/EnsureThat/Param.cs diff --git a/NzbDrone.Common/EnsureThat/Resources/ExceptionMessages.Designer.cs b/src/NzbDrone.Common/EnsureThat/Resources/ExceptionMessages.Designer.cs similarity index 100% rename from NzbDrone.Common/EnsureThat/Resources/ExceptionMessages.Designer.cs rename to src/NzbDrone.Common/EnsureThat/Resources/ExceptionMessages.Designer.cs diff --git a/NzbDrone.Common/EnsureThat/Resources/ExceptionMessages.resx b/src/NzbDrone.Common/EnsureThat/Resources/ExceptionMessages.resx similarity index 100% rename from NzbDrone.Common/EnsureThat/Resources/ExceptionMessages.resx rename to src/NzbDrone.Common/EnsureThat/Resources/ExceptionMessages.resx diff --git a/NzbDrone.Common/EnsureThat/TypeParam.cs b/src/NzbDrone.Common/EnsureThat/TypeParam.cs similarity index 100% rename from NzbDrone.Common/EnsureThat/TypeParam.cs rename to src/NzbDrone.Common/EnsureThat/TypeParam.cs diff --git a/NzbDrone.Common/EnvironmentInfo/AppFolderInfo.cs b/src/NzbDrone.Common/EnvironmentInfo/AppFolderInfo.cs similarity index 100% rename from NzbDrone.Common/EnvironmentInfo/AppFolderInfo.cs rename to src/NzbDrone.Common/EnvironmentInfo/AppFolderInfo.cs diff --git a/NzbDrone.Common/EnvironmentInfo/BuildInfo.cs b/src/NzbDrone.Common/EnvironmentInfo/BuildInfo.cs similarity index 100% rename from NzbDrone.Common/EnvironmentInfo/BuildInfo.cs rename to src/NzbDrone.Common/EnvironmentInfo/BuildInfo.cs diff --git a/NzbDrone.Common/EnvironmentInfo/OsInfo.cs b/src/NzbDrone.Common/EnvironmentInfo/OsInfo.cs similarity index 100% rename from NzbDrone.Common/EnvironmentInfo/OsInfo.cs rename to src/NzbDrone.Common/EnvironmentInfo/OsInfo.cs diff --git a/NzbDrone.Common/EnvironmentInfo/RuntimeInfo.cs b/src/NzbDrone.Common/EnvironmentInfo/RuntimeInfo.cs similarity index 100% rename from NzbDrone.Common/EnvironmentInfo/RuntimeInfo.cs rename to src/NzbDrone.Common/EnvironmentInfo/RuntimeInfo.cs diff --git a/NzbDrone.Common/EnvironmentInfo/StartupArguments.cs b/src/NzbDrone.Common/EnvironmentInfo/StartupArguments.cs similarity index 100% rename from NzbDrone.Common/EnvironmentInfo/StartupArguments.cs rename to src/NzbDrone.Common/EnvironmentInfo/StartupArguments.cs diff --git a/NzbDrone.Common/Exceptions/NzbDroneException.cs b/src/NzbDrone.Common/Exceptions/NzbDroneException.cs similarity index 100% rename from NzbDrone.Common/Exceptions/NzbDroneException.cs rename to src/NzbDrone.Common/Exceptions/NzbDroneException.cs diff --git a/NzbDrone.Common/Expansive/CircularReferenceException.cs b/src/NzbDrone.Common/Expansive/CircularReferenceException.cs similarity index 100% rename from NzbDrone.Common/Expansive/CircularReferenceException.cs rename to src/NzbDrone.Common/Expansive/CircularReferenceException.cs diff --git a/NzbDrone.Common/Expansive/Expansive.cs b/src/NzbDrone.Common/Expansive/Expansive.cs similarity index 100% rename from NzbDrone.Common/Expansive/Expansive.cs rename to src/NzbDrone.Common/Expansive/Expansive.cs diff --git a/NzbDrone.Common/Expansive/PatternStyle.cs b/src/NzbDrone.Common/Expansive/PatternStyle.cs similarity index 100% rename from NzbDrone.Common/Expansive/PatternStyle.cs rename to src/NzbDrone.Common/Expansive/PatternStyle.cs diff --git a/NzbDrone.Common/Expansive/Tree.cs b/src/NzbDrone.Common/Expansive/Tree.cs similarity index 100% rename from NzbDrone.Common/Expansive/Tree.cs rename to src/NzbDrone.Common/Expansive/Tree.cs diff --git a/NzbDrone.Common/Expansive/TreeNode.cs b/src/NzbDrone.Common/Expansive/TreeNode.cs similarity index 100% rename from NzbDrone.Common/Expansive/TreeNode.cs rename to src/NzbDrone.Common/Expansive/TreeNode.cs diff --git a/NzbDrone.Common/Expansive/TreeNodeList.cs b/src/NzbDrone.Common/Expansive/TreeNodeList.cs similarity index 100% rename from NzbDrone.Common/Expansive/TreeNodeList.cs rename to src/NzbDrone.Common/Expansive/TreeNodeList.cs diff --git a/NzbDrone.Common/Expansive/license.txt b/src/NzbDrone.Common/Expansive/license.txt similarity index 100% rename from NzbDrone.Common/Expansive/license.txt rename to src/NzbDrone.Common/Expansive/license.txt diff --git a/NzbDrone.Common/HashUtil.cs b/src/NzbDrone.Common/HashUtil.cs similarity index 100% rename from NzbDrone.Common/HashUtil.cs rename to src/NzbDrone.Common/HashUtil.cs diff --git a/NzbDrone.Common/HttpProvider.cs b/src/NzbDrone.Common/HttpProvider.cs similarity index 100% rename from NzbDrone.Common/HttpProvider.cs rename to src/NzbDrone.Common/HttpProvider.cs diff --git a/NzbDrone.Common/IEnumerableExtensions.cs b/src/NzbDrone.Common/IEnumerableExtensions.cs similarity index 100% rename from NzbDrone.Common/IEnumerableExtensions.cs rename to src/NzbDrone.Common/IEnumerableExtensions.cs diff --git a/NzbDrone.Common/Instrumentation/ExceptronTarget.cs b/src/NzbDrone.Common/Instrumentation/ExceptronTarget.cs similarity index 100% rename from NzbDrone.Common/Instrumentation/ExceptronTarget.cs rename to src/NzbDrone.Common/Instrumentation/ExceptronTarget.cs diff --git a/NzbDrone.Common/Instrumentation/GlobalExceptionHandlers.cs b/src/NzbDrone.Common/Instrumentation/GlobalExceptionHandlers.cs similarity index 100% rename from NzbDrone.Common/Instrumentation/GlobalExceptionHandlers.cs rename to src/NzbDrone.Common/Instrumentation/GlobalExceptionHandlers.cs diff --git a/NzbDrone.Common/Instrumentation/LogEventExtensions.cs b/src/NzbDrone.Common/Instrumentation/LogEventExtensions.cs similarity index 96% rename from NzbDrone.Common/Instrumentation/LogEventExtensions.cs rename to src/NzbDrone.Common/Instrumentation/LogEventExtensions.cs index 373aa9201..6b1ab2e84 100644 --- a/NzbDrone.Common/Instrumentation/LogEventExtensions.cs +++ b/src/NzbDrone.Common/Instrumentation/LogEventExtensions.cs @@ -1,39 +1,39 @@ -using System; -using NLog; -using NzbDrone.Common.Serializer; - -namespace NzbDrone.Common.Instrumentation -{ - public static class LogEventExtensions - { - public static string GetHash(this LogEventInfo logEvent) - { - var stackString = logEvent.StackTrace.ToJson(); - var hashSeed = String.Concat(logEvent.LoggerName, logEvent.Exception.GetType().ToString(), stackString, logEvent.Level); - return HashUtil.CalculateCrc(hashSeed); - } - - public static string GetFormattedMessage(this LogEventInfo logEvent) - { - var message = logEvent.FormattedMessage; - - if (logEvent.Exception != null) - { - if (logEvent.Exception != null) - { - if (String.IsNullOrWhiteSpace(message)) - { - message = logEvent.Exception.Message; - } - else - { - message += ": " + logEvent.Exception.Message; - } - } - - } - - return message; - } - } +using System; +using NLog; +using NzbDrone.Common.Serializer; + +namespace NzbDrone.Common.Instrumentation +{ + public static class LogEventExtensions + { + public static string GetHash(this LogEventInfo logEvent) + { + var stackString = logEvent.StackTrace.ToJson(); + var hashSeed = String.Concat(logEvent.LoggerName, logEvent.Exception.GetType().ToString(), stackString, logEvent.Level); + return HashUtil.CalculateCrc(hashSeed); + } + + public static string GetFormattedMessage(this LogEventInfo logEvent) + { + var message = logEvent.FormattedMessage; + + if (logEvent.Exception != null) + { + if (logEvent.Exception != null) + { + if (String.IsNullOrWhiteSpace(message)) + { + message = logEvent.Exception.Message; + } + else + { + message += ": " + logEvent.Exception.Message; + } + } + + } + + return message; + } + } } \ No newline at end of file diff --git a/NzbDrone.Common/Instrumentation/LogTargets.cs b/src/NzbDrone.Common/Instrumentation/LogTargets.cs similarity index 100% rename from NzbDrone.Common/Instrumentation/LogTargets.cs rename to src/NzbDrone.Common/Instrumentation/LogTargets.cs diff --git a/NzbDrone.Common/Instrumentation/LogglyTarget.cs b/src/NzbDrone.Common/Instrumentation/LogglyTarget.cs similarity index 96% rename from NzbDrone.Common/Instrumentation/LogglyTarget.cs rename to src/NzbDrone.Common/Instrumentation/LogglyTarget.cs index 8f2817581..ae246eb41 100644 --- a/NzbDrone.Common/Instrumentation/LogglyTarget.cs +++ b/src/NzbDrone.Common/Instrumentation/LogglyTarget.cs @@ -1,63 +1,63 @@ -using System.Collections.Generic; -using NLog; -using NLog.Layouts; -using NLog.Targets; -using NzbDrone.Common.EnvironmentInfo; -using NzbDrone.Common.Serializer; -using Logger = Loggly.Logger; - -namespace NzbDrone.Common.Instrumentation -{ - public class LogglyTarget : TargetWithLayout - { - private Logger _logger; - - public LogglyTarget() - { - Layout = new SimpleLayout("${callsite:className=false:fileName=false:includeSourcePath=false:methodName=true}"); - - } - - protected override void InitializeTarget() - { - string apiKey = string.Empty; - - if (RuntimeInfo.IsProduction) - { - apiKey = "4c4ecb69-d1b9-4e2a-b54b-b0c4cc143a95"; - } - else - { - apiKey = "d344a321-b107-45c4-a548-77138f446510"; - } - - _logger = new Logger(apiKey); - } - - - protected override void Write(LogEventInfo logEvent) - { - var dictionary = new Dictionary(); - - if (logEvent.Exception != null) - { - dictionary.Add("ex", logEvent.Exception.ToString()); - dictionary.Add("extyp", logEvent.Exception.GetType().Name); - dictionary.Add("hash", logEvent.GetHash()); - - foreach (var key in logEvent.Exception.Data.Keys) - { - dictionary.Add(key.ToString(), logEvent.Exception.Data[key]); - } - } - - dictionary.Add("logger", logEvent.LoggerName); - dictionary.Add("method", Layout.Render(logEvent)); - dictionary.Add("level", logEvent.Level.Name); - dictionary.Add("message", logEvent.GetFormattedMessage()); - dictionary.Add("ver", BuildInfo.Version.ToString()); - - _logger.Log(dictionary.ToJson()); - } - } +using System.Collections.Generic; +using NLog; +using NLog.Layouts; +using NLog.Targets; +using NzbDrone.Common.EnvironmentInfo; +using NzbDrone.Common.Serializer; +using Logger = Loggly.Logger; + +namespace NzbDrone.Common.Instrumentation +{ + public class LogglyTarget : TargetWithLayout + { + private Logger _logger; + + public LogglyTarget() + { + Layout = new SimpleLayout("${callsite:className=false:fileName=false:includeSourcePath=false:methodName=true}"); + + } + + protected override void InitializeTarget() + { + string apiKey = string.Empty; + + if (RuntimeInfo.IsProduction) + { + apiKey = "4c4ecb69-d1b9-4e2a-b54b-b0c4cc143a95"; + } + else + { + apiKey = "d344a321-b107-45c4-a548-77138f446510"; + } + + _logger = new Logger(apiKey); + } + + + protected override void Write(LogEventInfo logEvent) + { + var dictionary = new Dictionary(); + + if (logEvent.Exception != null) + { + dictionary.Add("ex", logEvent.Exception.ToString()); + dictionary.Add("extyp", logEvent.Exception.GetType().Name); + dictionary.Add("hash", logEvent.GetHash()); + + foreach (var key in logEvent.Exception.Data.Keys) + { + dictionary.Add(key.ToString(), logEvent.Exception.Data[key]); + } + } + + dictionary.Add("logger", logEvent.LoggerName); + dictionary.Add("method", Layout.Render(logEvent)); + dictionary.Add("level", logEvent.Level.Name); + dictionary.Add("message", logEvent.GetFormattedMessage()); + dictionary.Add("ver", BuildInfo.Version.ToString()); + + _logger.Log(dictionary.ToJson()); + } + } } \ No newline at end of file diff --git a/NzbDrone.Common/Instrumentation/NzbDroneLogger.cs b/src/NzbDrone.Common/Instrumentation/NzbDroneLogger.cs similarity index 100% rename from NzbDrone.Common/Instrumentation/NzbDroneLogger.cs rename to src/NzbDrone.Common/Instrumentation/NzbDroneLogger.cs diff --git a/NzbDrone.Common/Instrumentation/VersionLayoutRenderer.cs b/src/NzbDrone.Common/Instrumentation/VersionLayoutRenderer.cs similarity index 100% rename from NzbDrone.Common/Instrumentation/VersionLayoutRenderer.cs rename to src/NzbDrone.Common/Instrumentation/VersionLayoutRenderer.cs diff --git a/NzbDrone.Common/Messaging/IEvent.cs b/src/NzbDrone.Common/Messaging/IEvent.cs similarity index 100% rename from NzbDrone.Common/Messaging/IEvent.cs rename to src/NzbDrone.Common/Messaging/IEvent.cs diff --git a/NzbDrone.Common/Messaging/IMessage.cs b/src/NzbDrone.Common/Messaging/IMessage.cs similarity index 100% rename from NzbDrone.Common/Messaging/IMessage.cs rename to src/NzbDrone.Common/Messaging/IMessage.cs diff --git a/NzbDrone.Common/Model/ProcessInfo.cs b/src/NzbDrone.Common/Model/ProcessInfo.cs similarity index 100% rename from NzbDrone.Common/Model/ProcessInfo.cs rename to src/NzbDrone.Common/Model/ProcessInfo.cs diff --git a/NzbDrone.Common/NzbDrone.Common.csproj b/src/NzbDrone.Common/NzbDrone.Common.csproj similarity index 98% rename from NzbDrone.Common/NzbDrone.Common.csproj rename to src/NzbDrone.Common/NzbDrone.Common.csproj index 91c71c005..869176ecb 100644 --- a/NzbDrone.Common/NzbDrone.Common.csproj +++ b/src/NzbDrone.Common/NzbDrone.Common.csproj @@ -19,7 +19,7 @@ true - ..\_output\ + ..\..\_output\ DEBUG;TRACE full x86 @@ -27,7 +27,7 @@ MinimumRecommendedRules.ruleset - ..\_output\ + ..\..\_output\ TRACE true pdbonly diff --git a/NzbDrone.Common/PathEqualityComparer.cs b/src/NzbDrone.Common/PathEqualityComparer.cs similarity index 100% rename from NzbDrone.Common/PathEqualityComparer.cs rename to src/NzbDrone.Common/PathEqualityComparer.cs diff --git a/NzbDrone.Common/PathExtensions.cs b/src/NzbDrone.Common/PathExtensions.cs similarity index 100% rename from NzbDrone.Common/PathExtensions.cs rename to src/NzbDrone.Common/PathExtensions.cs diff --git a/NzbDrone.Common/Processes/ProcessOutput.cs b/src/NzbDrone.Common/Processes/ProcessOutput.cs similarity index 100% rename from NzbDrone.Common/Processes/ProcessOutput.cs rename to src/NzbDrone.Common/Processes/ProcessOutput.cs diff --git a/NzbDrone.Common/Processes/ProcessProvider.cs b/src/NzbDrone.Common/Processes/ProcessProvider.cs similarity index 100% rename from NzbDrone.Common/Processes/ProcessProvider.cs rename to src/NzbDrone.Common/Processes/ProcessProvider.cs diff --git a/NzbDrone.Common/Properties/AssemblyInfo.cs b/src/NzbDrone.Common/Properties/AssemblyInfo.cs similarity index 100% rename from NzbDrone.Common/Properties/AssemblyInfo.cs rename to src/NzbDrone.Common/Properties/AssemblyInfo.cs diff --git a/NzbDrone.Common/Properties/SharedAssemblyInfo.cs b/src/NzbDrone.Common/Properties/SharedAssemblyInfo.cs similarity index 100% rename from NzbDrone.Common/Properties/SharedAssemblyInfo.cs rename to src/NzbDrone.Common/Properties/SharedAssemblyInfo.cs diff --git a/NzbDrone.Common/Reflection/ReflectionExtensions.cs b/src/NzbDrone.Common/Reflection/ReflectionExtensions.cs similarity index 100% rename from NzbDrone.Common/Reflection/ReflectionExtensions.cs rename to src/NzbDrone.Common/Reflection/ReflectionExtensions.cs diff --git a/NzbDrone.Common/Security/IgnoreCertErrorPolicy.cs b/src/NzbDrone.Common/Security/IgnoreCertErrorPolicy.cs similarity index 100% rename from NzbDrone.Common/Security/IgnoreCertErrorPolicy.cs rename to src/NzbDrone.Common/Security/IgnoreCertErrorPolicy.cs diff --git a/NzbDrone.Common/Serializer/IntConverter.cs b/src/NzbDrone.Common/Serializer/IntConverter.cs similarity index 100% rename from NzbDrone.Common/Serializer/IntConverter.cs rename to src/NzbDrone.Common/Serializer/IntConverter.cs diff --git a/NzbDrone.Common/Serializer/Json.cs b/src/NzbDrone.Common/Serializer/Json.cs similarity index 100% rename from NzbDrone.Common/Serializer/Json.cs rename to src/NzbDrone.Common/Serializer/Json.cs diff --git a/NzbDrone.Common/ServiceFactory.cs b/src/NzbDrone.Common/ServiceFactory.cs similarity index 100% rename from NzbDrone.Common/ServiceFactory.cs rename to src/NzbDrone.Common/ServiceFactory.cs diff --git a/NzbDrone.Common/ServiceProvider.cs b/src/NzbDrone.Common/ServiceProvider.cs similarity index 100% rename from NzbDrone.Common/ServiceProvider.cs rename to src/NzbDrone.Common/ServiceProvider.cs diff --git a/NzbDrone.Common/Services.cs b/src/NzbDrone.Common/Services.cs similarity index 100% rename from NzbDrone.Common/Services.cs rename to src/NzbDrone.Common/Services.cs diff --git a/NzbDrone.Common/StringExtensions.cs b/src/NzbDrone.Common/StringExtensions.cs similarity index 100% rename from NzbDrone.Common/StringExtensions.cs rename to src/NzbDrone.Common/StringExtensions.cs diff --git a/NzbDrone.Common/TPL/LimitedConcurrencyLevelTaskScheduler.cs b/src/NzbDrone.Common/TPL/LimitedConcurrencyLevelTaskScheduler.cs similarity index 100% rename from NzbDrone.Common/TPL/LimitedConcurrencyLevelTaskScheduler.cs rename to src/NzbDrone.Common/TPL/LimitedConcurrencyLevelTaskScheduler.cs diff --git a/NzbDrone.Common/TPL/TaskExtensions.cs b/src/NzbDrone.Common/TPL/TaskExtensions.cs similarity index 100% rename from NzbDrone.Common/TPL/TaskExtensions.cs rename to src/NzbDrone.Common/TPL/TaskExtensions.cs diff --git a/NzbDrone.Common/TinyIoC.cs b/src/NzbDrone.Common/TinyIoC.cs similarity index 100% rename from NzbDrone.Common/TinyIoC.cs rename to src/NzbDrone.Common/TinyIoC.cs diff --git a/NzbDrone.Common/TryParseExtension.cs b/src/NzbDrone.Common/TryParseExtension.cs similarity index 100% rename from NzbDrone.Common/TryParseExtension.cs rename to src/NzbDrone.Common/TryParseExtension.cs diff --git a/NzbDrone.Common/packages.config b/src/NzbDrone.Common/packages.config similarity index 100% rename from NzbDrone.Common/packages.config rename to src/NzbDrone.Common/packages.config diff --git a/NzbDrone.Console/ConsoleAlerts.cs b/src/NzbDrone.Console/ConsoleAlerts.cs similarity index 100% rename from NzbDrone.Console/ConsoleAlerts.cs rename to src/NzbDrone.Console/ConsoleAlerts.cs diff --git a/NzbDrone.Console/ConsoleApp.cs b/src/NzbDrone.Console/ConsoleApp.cs similarity index 100% rename from NzbDrone.Console/ConsoleApp.cs rename to src/NzbDrone.Console/ConsoleApp.cs diff --git a/NzbDrone.Console/NzbDrone.Console.csproj b/src/NzbDrone.Console/NzbDrone.Console.csproj similarity index 98% rename from NzbDrone.Console/NzbDrone.Console.csproj rename to src/NzbDrone.Console/NzbDrone.Console.csproj index cec173fe1..f4351791a 100644 --- a/NzbDrone.Console/NzbDrone.Console.csproj +++ b/src/NzbDrone.Console/NzbDrone.Console.csproj @@ -37,7 +37,7 @@ true full false - ..\_output\ + ..\..\_output\ DEBUG;TRACE prompt 4 @@ -48,7 +48,7 @@ x86 pdbonly true - ..\_output\ + ..\..\_output\ TRACE prompt 4 diff --git a/NzbDrone.Console/Properties/AssemblyInfo.cs b/src/NzbDrone.Console/Properties/AssemblyInfo.cs similarity index 100% rename from NzbDrone.Console/Properties/AssemblyInfo.cs rename to src/NzbDrone.Console/Properties/AssemblyInfo.cs diff --git a/NzbDrone.Console/packages.config b/src/NzbDrone.Console/packages.config similarity index 100% rename from NzbDrone.Console/packages.config rename to src/NzbDrone.Console/packages.config diff --git a/NzbDrone.Core.Test/Configuration/ConfigCachingFixture.cs b/src/NzbDrone.Core.Test/Configuration/ConfigCachingFixture.cs similarity index 100% rename from NzbDrone.Core.Test/Configuration/ConfigCachingFixture.cs rename to src/NzbDrone.Core.Test/Configuration/ConfigCachingFixture.cs diff --git a/NzbDrone.Core.Test/Configuration/ConfigServiceFixture.cs b/src/NzbDrone.Core.Test/Configuration/ConfigServiceFixture.cs similarity index 100% rename from NzbDrone.Core.Test/Configuration/ConfigServiceFixture.cs rename to src/NzbDrone.Core.Test/Configuration/ConfigServiceFixture.cs diff --git a/NzbDrone.Core.Test/DataAugmentationFixture/Scene/SceneMappingProxyFixture.cs b/src/NzbDrone.Core.Test/DataAugmentationFixture/Scene/SceneMappingProxyFixture.cs similarity index 100% rename from NzbDrone.Core.Test/DataAugmentationFixture/Scene/SceneMappingProxyFixture.cs rename to src/NzbDrone.Core.Test/DataAugmentationFixture/Scene/SceneMappingProxyFixture.cs diff --git a/NzbDrone.Core.Test/DataAugmentationFixture/Scene/SceneMappingServiceFixture.cs b/src/NzbDrone.Core.Test/DataAugmentationFixture/Scene/SceneMappingServiceFixture.cs similarity index 100% rename from NzbDrone.Core.Test/DataAugmentationFixture/Scene/SceneMappingServiceFixture.cs rename to src/NzbDrone.Core.Test/DataAugmentationFixture/Scene/SceneMappingServiceFixture.cs diff --git a/NzbDrone.Core.Test/Datastore/BasicRepositoryFixture.cs b/src/NzbDrone.Core.Test/Datastore/BasicRepositoryFixture.cs similarity index 100% rename from NzbDrone.Core.Test/Datastore/BasicRepositoryFixture.cs rename to src/NzbDrone.Core.Test/Datastore/BasicRepositoryFixture.cs diff --git a/NzbDrone.Core.Test/Datastore/Converters/ProviderSettingConverterFixture.cs b/src/NzbDrone.Core.Test/Datastore/Converters/ProviderSettingConverterFixture.cs similarity index 100% rename from NzbDrone.Core.Test/Datastore/Converters/ProviderSettingConverterFixture.cs rename to src/NzbDrone.Core.Test/Datastore/Converters/ProviderSettingConverterFixture.cs diff --git a/NzbDrone.Core.Test/Datastore/DatabaseRelationshipFixture.cs b/src/NzbDrone.Core.Test/Datastore/DatabaseRelationshipFixture.cs similarity index 100% rename from NzbDrone.Core.Test/Datastore/DatabaseRelationshipFixture.cs rename to src/NzbDrone.Core.Test/Datastore/DatabaseRelationshipFixture.cs diff --git a/NzbDrone.Core.Test/Datastore/MappingExtentionFixture.cs b/src/NzbDrone.Core.Test/Datastore/MappingExtentionFixture.cs similarity index 100% rename from NzbDrone.Core.Test/Datastore/MappingExtentionFixture.cs rename to src/NzbDrone.Core.Test/Datastore/MappingExtentionFixture.cs diff --git a/NzbDrone.Core.Test/Datastore/ObjectDatabaseFixture.cs b/src/NzbDrone.Core.Test/Datastore/ObjectDatabaseFixture.cs similarity index 100% rename from NzbDrone.Core.Test/Datastore/ObjectDatabaseFixture.cs rename to src/NzbDrone.Core.Test/Datastore/ObjectDatabaseFixture.cs diff --git a/NzbDrone.Core.Test/Datastore/PagingSpecExtenstionsTests/PagingOffsetFixture.cs b/src/NzbDrone.Core.Test/Datastore/PagingSpecExtenstionsTests/PagingOffsetFixture.cs similarity index 100% rename from NzbDrone.Core.Test/Datastore/PagingSpecExtenstionsTests/PagingOffsetFixture.cs rename to src/NzbDrone.Core.Test/Datastore/PagingSpecExtenstionsTests/PagingOffsetFixture.cs diff --git a/NzbDrone.Core.Test/Datastore/PagingSpecExtenstionsTests/ToSortDirectionFixture.cs b/src/NzbDrone.Core.Test/Datastore/PagingSpecExtenstionsTests/ToSortDirectionFixture.cs similarity index 100% rename from NzbDrone.Core.Test/Datastore/PagingSpecExtenstionsTests/ToSortDirectionFixture.cs rename to src/NzbDrone.Core.Test/Datastore/PagingSpecExtenstionsTests/ToSortDirectionFixture.cs diff --git a/NzbDrone.Core.Test/Datastore/ReflectionStrategyFixture/Benchmarks.cs b/src/NzbDrone.Core.Test/Datastore/ReflectionStrategyFixture/Benchmarks.cs similarity index 100% rename from NzbDrone.Core.Test/Datastore/ReflectionStrategyFixture/Benchmarks.cs rename to src/NzbDrone.Core.Test/Datastore/ReflectionStrategyFixture/Benchmarks.cs diff --git a/NzbDrone.Core.Test/Datastore/SQLiteMigrationHelperTests/AlterFixture.cs b/src/NzbDrone.Core.Test/Datastore/SQLiteMigrationHelperTests/AlterFixture.cs similarity index 100% rename from NzbDrone.Core.Test/Datastore/SQLiteMigrationHelperTests/AlterFixture.cs rename to src/NzbDrone.Core.Test/Datastore/SQLiteMigrationHelperTests/AlterFixture.cs diff --git a/NzbDrone.Core.Test/Datastore/SQLiteMigrationHelperTests/DuplicateFixture.cs b/src/NzbDrone.Core.Test/Datastore/SQLiteMigrationHelperTests/DuplicateFixture.cs similarity index 100% rename from NzbDrone.Core.Test/Datastore/SQLiteMigrationHelperTests/DuplicateFixture.cs rename to src/NzbDrone.Core.Test/Datastore/SQLiteMigrationHelperTests/DuplicateFixture.cs diff --git a/NzbDrone.Core.Test/DecisionEngineTests/AcceptableSizeSpecificationFixture.cs b/src/NzbDrone.Core.Test/DecisionEngineTests/AcceptableSizeSpecificationFixture.cs similarity index 100% rename from NzbDrone.Core.Test/DecisionEngineTests/AcceptableSizeSpecificationFixture.cs rename to src/NzbDrone.Core.Test/DecisionEngineTests/AcceptableSizeSpecificationFixture.cs diff --git a/NzbDrone.Core.Test/DecisionEngineTests/CutoffSpecificationFixture.cs b/src/NzbDrone.Core.Test/DecisionEngineTests/CutoffSpecificationFixture.cs similarity index 100% rename from NzbDrone.Core.Test/DecisionEngineTests/CutoffSpecificationFixture.cs rename to src/NzbDrone.Core.Test/DecisionEngineTests/CutoffSpecificationFixture.cs diff --git a/NzbDrone.Core.Test/DecisionEngineTests/DownloadDecisionMakerFixture.cs b/src/NzbDrone.Core.Test/DecisionEngineTests/DownloadDecisionMakerFixture.cs similarity index 100% rename from NzbDrone.Core.Test/DecisionEngineTests/DownloadDecisionMakerFixture.cs rename to src/NzbDrone.Core.Test/DecisionEngineTests/DownloadDecisionMakerFixture.cs diff --git a/NzbDrone.Core.Test/DecisionEngineTests/LanguageSpecificationFixture.cs b/src/NzbDrone.Core.Test/DecisionEngineTests/LanguageSpecificationFixture.cs similarity index 100% rename from NzbDrone.Core.Test/DecisionEngineTests/LanguageSpecificationFixture.cs rename to src/NzbDrone.Core.Test/DecisionEngineTests/LanguageSpecificationFixture.cs diff --git a/NzbDrone.Core.Test/DecisionEngineTests/MonitoredEpisodeSpecificationFixture.cs b/src/NzbDrone.Core.Test/DecisionEngineTests/MonitoredEpisodeSpecificationFixture.cs similarity index 100% rename from NzbDrone.Core.Test/DecisionEngineTests/MonitoredEpisodeSpecificationFixture.cs rename to src/NzbDrone.Core.Test/DecisionEngineTests/MonitoredEpisodeSpecificationFixture.cs diff --git a/NzbDrone.Core.Test/DecisionEngineTests/NotRestrictedReleaseSpecificationFixture.cs b/src/NzbDrone.Core.Test/DecisionEngineTests/NotRestrictedReleaseSpecificationFixture.cs similarity index 100% rename from NzbDrone.Core.Test/DecisionEngineTests/NotRestrictedReleaseSpecificationFixture.cs rename to src/NzbDrone.Core.Test/DecisionEngineTests/NotRestrictedReleaseSpecificationFixture.cs diff --git a/NzbDrone.Core.Test/DecisionEngineTests/QualityAllowedByProfileSpecificationFixture.cs b/src/NzbDrone.Core.Test/DecisionEngineTests/QualityAllowedByProfileSpecificationFixture.cs similarity index 100% rename from NzbDrone.Core.Test/DecisionEngineTests/QualityAllowedByProfileSpecificationFixture.cs rename to src/NzbDrone.Core.Test/DecisionEngineTests/QualityAllowedByProfileSpecificationFixture.cs diff --git a/NzbDrone.Core.Test/DecisionEngineTests/QualityUpgradeSpecificationFixture.cs b/src/NzbDrone.Core.Test/DecisionEngineTests/QualityUpgradeSpecificationFixture.cs similarity index 100% rename from NzbDrone.Core.Test/DecisionEngineTests/QualityUpgradeSpecificationFixture.cs rename to src/NzbDrone.Core.Test/DecisionEngineTests/QualityUpgradeSpecificationFixture.cs diff --git a/NzbDrone.Core.Test/DecisionEngineTests/RetentionSpecificationFixture.cs b/src/NzbDrone.Core.Test/DecisionEngineTests/RetentionSpecificationFixture.cs similarity index 100% rename from NzbDrone.Core.Test/DecisionEngineTests/RetentionSpecificationFixture.cs rename to src/NzbDrone.Core.Test/DecisionEngineTests/RetentionSpecificationFixture.cs diff --git a/NzbDrone.Core.Test/DecisionEngineTests/RssSync/ProperSpecificationFixture.cs b/src/NzbDrone.Core.Test/DecisionEngineTests/RssSync/ProperSpecificationFixture.cs similarity index 100% rename from NzbDrone.Core.Test/DecisionEngineTests/RssSync/ProperSpecificationFixture.cs rename to src/NzbDrone.Core.Test/DecisionEngineTests/RssSync/ProperSpecificationFixture.cs diff --git a/NzbDrone.Core.Test/DecisionEngineTests/UpgradeDiskSpecificationFixture.cs b/src/NzbDrone.Core.Test/DecisionEngineTests/UpgradeDiskSpecificationFixture.cs similarity index 100% rename from NzbDrone.Core.Test/DecisionEngineTests/UpgradeDiskSpecificationFixture.cs rename to src/NzbDrone.Core.Test/DecisionEngineTests/UpgradeDiskSpecificationFixture.cs diff --git a/NzbDrone.Core.Test/DecisionEngineTests/UpgradeHistorySpecificationFixture.cs b/src/NzbDrone.Core.Test/DecisionEngineTests/UpgradeHistorySpecificationFixture.cs similarity index 100% rename from NzbDrone.Core.Test/DecisionEngineTests/UpgradeHistorySpecificationFixture.cs rename to src/NzbDrone.Core.Test/DecisionEngineTests/UpgradeHistorySpecificationFixture.cs diff --git a/NzbDrone.Core.Test/Download/DownloadApprovedReportsTests/DownloadApprovedFixture.cs b/src/NzbDrone.Core.Test/Download/DownloadApprovedReportsTests/DownloadApprovedFixture.cs similarity index 100% rename from NzbDrone.Core.Test/Download/DownloadApprovedReportsTests/DownloadApprovedFixture.cs rename to src/NzbDrone.Core.Test/Download/DownloadApprovedReportsTests/DownloadApprovedFixture.cs diff --git a/NzbDrone.Core.Test/Download/DownloadApprovedReportsTests/GetQualifiedReportsFixture.cs b/src/NzbDrone.Core.Test/Download/DownloadApprovedReportsTests/GetQualifiedReportsFixture.cs similarity index 100% rename from NzbDrone.Core.Test/Download/DownloadApprovedReportsTests/GetQualifiedReportsFixture.cs rename to src/NzbDrone.Core.Test/Download/DownloadApprovedReportsTests/GetQualifiedReportsFixture.cs diff --git a/NzbDrone.Core.Test/Download/DownloadClientTests/BlackholeProviderFixture.cs b/src/NzbDrone.Core.Test/Download/DownloadClientTests/BlackholeProviderFixture.cs similarity index 100% rename from NzbDrone.Core.Test/Download/DownloadClientTests/BlackholeProviderFixture.cs rename to src/NzbDrone.Core.Test/Download/DownloadClientTests/BlackholeProviderFixture.cs diff --git a/NzbDrone.Core.Test/Download/DownloadClientTests/NzbgetProviderTests/DownloadNzbFixture.cs b/src/NzbDrone.Core.Test/Download/DownloadClientTests/NzbgetProviderTests/DownloadNzbFixture.cs similarity index 100% rename from NzbDrone.Core.Test/Download/DownloadClientTests/NzbgetProviderTests/DownloadNzbFixture.cs rename to src/NzbDrone.Core.Test/Download/DownloadClientTests/NzbgetProviderTests/DownloadNzbFixture.cs diff --git a/NzbDrone.Core.Test/Download/DownloadClientTests/NzbgetProviderTests/QueueFixture.cs b/src/NzbDrone.Core.Test/Download/DownloadClientTests/NzbgetProviderTests/QueueFixture.cs similarity index 100% rename from NzbDrone.Core.Test/Download/DownloadClientTests/NzbgetProviderTests/QueueFixture.cs rename to src/NzbDrone.Core.Test/Download/DownloadClientTests/NzbgetProviderTests/QueueFixture.cs diff --git a/NzbDrone.Core.Test/Download/DownloadClientTests/PneumaticProviderFixture.cs b/src/NzbDrone.Core.Test/Download/DownloadClientTests/PneumaticProviderFixture.cs similarity index 100% rename from NzbDrone.Core.Test/Download/DownloadClientTests/PneumaticProviderFixture.cs rename to src/NzbDrone.Core.Test/Download/DownloadClientTests/PneumaticProviderFixture.cs diff --git a/NzbDrone.Core.Test/Download/DownloadClientTests/SabProviderTests/QueueFixture.cs b/src/NzbDrone.Core.Test/Download/DownloadClientTests/SabProviderTests/QueueFixture.cs similarity index 100% rename from NzbDrone.Core.Test/Download/DownloadClientTests/SabProviderTests/QueueFixture.cs rename to src/NzbDrone.Core.Test/Download/DownloadClientTests/SabProviderTests/QueueFixture.cs diff --git a/NzbDrone.Core.Test/Download/DownloadClientTests/SabProviderTests/SabProviderFixture.cs b/src/NzbDrone.Core.Test/Download/DownloadClientTests/SabProviderTests/SabProviderFixture.cs similarity index 100% rename from NzbDrone.Core.Test/Download/DownloadClientTests/SabProviderTests/SabProviderFixture.cs rename to src/NzbDrone.Core.Test/Download/DownloadClientTests/SabProviderTests/SabProviderFixture.cs diff --git a/NzbDrone.Core.Test/Download/DownloadServiceFixture.cs b/src/NzbDrone.Core.Test/Download/DownloadServiceFixture.cs similarity index 100% rename from NzbDrone.Core.Test/Download/DownloadServiceFixture.cs rename to src/NzbDrone.Core.Test/Download/DownloadServiceFixture.cs diff --git a/NzbDrone.Core.Test/EpisodeParseResultTest.cs b/src/NzbDrone.Core.Test/EpisodeParseResultTest.cs similarity index 100% rename from NzbDrone.Core.Test/EpisodeParseResultTest.cs rename to src/NzbDrone.Core.Test/EpisodeParseResultTest.cs diff --git a/NzbDrone.Core.Test/Files/Categories_json.txt b/src/NzbDrone.Core.Test/Files/Categories_json.txt similarity index 100% rename from NzbDrone.Core.Test/Files/Categories_json.txt rename to src/NzbDrone.Core.Test/Files/Categories_json.txt diff --git a/NzbDrone.Core.Test/Files/History.txt b/src/NzbDrone.Core.Test/Files/History.txt similarity index 100% rename from NzbDrone.Core.Test/Files/History.txt rename to src/NzbDrone.Core.Test/Files/History.txt diff --git a/NzbDrone.Core.Test/Files/HistoryEmpty.txt b/src/NzbDrone.Core.Test/Files/HistoryEmpty.txt similarity index 100% rename from NzbDrone.Core.Test/Files/HistoryEmpty.txt rename to src/NzbDrone.Core.Test/Files/HistoryEmpty.txt diff --git a/NzbDrone.Core.Test/Files/Indexers/Newznab/unauthorized.xml b/src/NzbDrone.Core.Test/Files/Indexers/Newznab/unauthorized.xml similarity index 100% rename from NzbDrone.Core.Test/Files/Indexers/Newznab/unauthorized.xml rename to src/NzbDrone.Core.Test/Files/Indexers/Newznab/unauthorized.xml diff --git a/NzbDrone.Core.Test/Files/JsonError.txt b/src/NzbDrone.Core.Test/Files/JsonError.txt similarity index 100% rename from NzbDrone.Core.Test/Files/JsonError.txt rename to src/NzbDrone.Core.Test/Files/JsonError.txt diff --git a/NzbDrone.Core.Test/Files/LongOverview.txt b/src/NzbDrone.Core.Test/Files/LongOverview.txt similarity index 100% rename from NzbDrone.Core.Test/Files/LongOverview.txt rename to src/NzbDrone.Core.Test/Files/LongOverview.txt diff --git a/NzbDrone.Core.Test/Files/Media/H264_sample.mp4 b/src/NzbDrone.Core.Test/Files/Media/H264_sample.mp4 similarity index 100% rename from NzbDrone.Core.Test/Files/Media/H264_sample.mp4 rename to src/NzbDrone.Core.Test/Files/Media/H264_sample.mp4 diff --git a/NzbDrone.Core.Test/Files/Nzbget/JsonError.txt b/src/NzbDrone.Core.Test/Files/Nzbget/JsonError.txt similarity index 100% rename from NzbDrone.Core.Test/Files/Nzbget/JsonError.txt rename to src/NzbDrone.Core.Test/Files/Nzbget/JsonError.txt diff --git a/NzbDrone.Core.Test/Files/Nzbget/Queue.txt b/src/NzbDrone.Core.Test/Files/Nzbget/Queue.txt similarity index 100% rename from NzbDrone.Core.Test/Files/Nzbget/Queue.txt rename to src/NzbDrone.Core.Test/Files/Nzbget/Queue.txt diff --git a/NzbDrone.Core.Test/Files/Nzbget/Queue_empty.txt b/src/NzbDrone.Core.Test/Files/Nzbget/Queue_empty.txt similarity index 100% rename from NzbDrone.Core.Test/Files/Nzbget/Queue_empty.txt rename to src/NzbDrone.Core.Test/Files/Nzbget/Queue_empty.txt diff --git a/NzbDrone.Core.Test/Files/Queue.txt b/src/NzbDrone.Core.Test/Files/Queue.txt similarity index 100% rename from NzbDrone.Core.Test/Files/Queue.txt rename to src/NzbDrone.Core.Test/Files/Queue.txt diff --git a/NzbDrone.Core.Test/Files/QueueEmpty.txt b/src/NzbDrone.Core.Test/Files/QueueEmpty.txt similarity index 100% rename from NzbDrone.Core.Test/Files/QueueEmpty.txt rename to src/NzbDrone.Core.Test/Files/QueueEmpty.txt diff --git a/NzbDrone.Core.Test/Files/QueueUnknownPriority.txt b/src/NzbDrone.Core.Test/Files/QueueUnknownPriority.txt similarity index 100% rename from NzbDrone.Core.Test/Files/QueueUnknownPriority.txt rename to src/NzbDrone.Core.Test/Files/QueueUnknownPriority.txt diff --git a/NzbDrone.Core.Test/Files/RSS/SizeParsing/newznab.xml b/src/NzbDrone.Core.Test/Files/RSS/SizeParsing/newznab.xml similarity index 100% rename from NzbDrone.Core.Test/Files/RSS/SizeParsing/newznab.xml rename to src/NzbDrone.Core.Test/Files/RSS/SizeParsing/newznab.xml diff --git a/NzbDrone.Core.Test/Files/RSS/SizeParsing/nzbclub.xml b/src/NzbDrone.Core.Test/Files/RSS/SizeParsing/nzbclub.xml similarity index 100% rename from NzbDrone.Core.Test/Files/RSS/SizeParsing/nzbclub.xml rename to src/NzbDrone.Core.Test/Files/RSS/SizeParsing/nzbclub.xml diff --git a/NzbDrone.Core.Test/Files/RSS/SizeParsing/nzbindex.xml b/src/NzbDrone.Core.Test/Files/RSS/SizeParsing/nzbindex.xml similarity index 100% rename from NzbDrone.Core.Test/Files/RSS/SizeParsing/nzbindex.xml rename to src/NzbDrone.Core.Test/Files/RSS/SizeParsing/nzbindex.xml diff --git a/NzbDrone.Core.Test/Files/RSS/SizeParsing/nzbsrus.xml b/src/NzbDrone.Core.Test/Files/RSS/SizeParsing/nzbsrus.xml similarity index 100% rename from NzbDrone.Core.Test/Files/RSS/SizeParsing/nzbsrus.xml rename to src/NzbDrone.Core.Test/Files/RSS/SizeParsing/nzbsrus.xml diff --git a/NzbDrone.Core.Test/Files/RSS/SizeParsing/omgwtfnzbs.xml b/src/NzbDrone.Core.Test/Files/RSS/SizeParsing/omgwtfnzbs.xml similarity index 100% rename from NzbDrone.Core.Test/Files/RSS/SizeParsing/omgwtfnzbs.xml rename to src/NzbDrone.Core.Test/Files/RSS/SizeParsing/omgwtfnzbs.xml diff --git a/NzbDrone.Core.Test/Files/RSS/filesharingtalk.xml b/src/NzbDrone.Core.Test/Files/RSS/filesharingtalk.xml similarity index 100% rename from NzbDrone.Core.Test/Files/RSS/filesharingtalk.xml rename to src/NzbDrone.Core.Test/Files/RSS/filesharingtalk.xml diff --git a/NzbDrone.Core.Test/Files/RSS/newznab.xml b/src/NzbDrone.Core.Test/Files/RSS/newznab.xml similarity index 100% rename from NzbDrone.Core.Test/Files/RSS/newznab.xml rename to src/NzbDrone.Core.Test/Files/RSS/newznab.xml diff --git a/NzbDrone.Core.Test/Files/RSS/nzbclub.xml b/src/NzbDrone.Core.Test/Files/RSS/nzbclub.xml similarity index 100% rename from NzbDrone.Core.Test/Files/RSS/nzbclub.xml rename to src/NzbDrone.Core.Test/Files/RSS/nzbclub.xml diff --git a/NzbDrone.Core.Test/Files/RSS/nzbindex.xml b/src/NzbDrone.Core.Test/Files/RSS/nzbindex.xml similarity index 100% rename from NzbDrone.Core.Test/Files/RSS/nzbindex.xml rename to src/NzbDrone.Core.Test/Files/RSS/nzbindex.xml diff --git a/NzbDrone.Core.Test/Files/RSS/nzbsrus.xml b/src/NzbDrone.Core.Test/Files/RSS/nzbsrus.xml similarity index 100% rename from NzbDrone.Core.Test/Files/RSS/nzbsrus.xml rename to src/NzbDrone.Core.Test/Files/RSS/nzbsrus.xml diff --git a/NzbDrone.Core.Test/Files/RSS/omgwtfnzbs.xml b/src/NzbDrone.Core.Test/Files/RSS/omgwtfnzbs.xml similarity index 100% rename from NzbDrone.Core.Test/Files/RSS/omgwtfnzbs.xml rename to src/NzbDrone.Core.Test/Files/RSS/omgwtfnzbs.xml diff --git a/NzbDrone.Core.Test/Files/RSS/wombles.xml b/src/NzbDrone.Core.Test/Files/RSS/wombles.xml similarity index 100% rename from NzbDrone.Core.Test/Files/RSS/wombles.xml rename to src/NzbDrone.Core.Test/Files/RSS/wombles.xml diff --git a/NzbDrone.Core.Test/Files/SceneMappings.json b/src/NzbDrone.Core.Test/Files/SceneMappings.json similarity index 100% rename from NzbDrone.Core.Test/Files/SceneMappings.json rename to src/NzbDrone.Core.Test/Files/SceneMappings.json diff --git a/NzbDrone.Core.Test/Files/TestArchive.zip b/src/NzbDrone.Core.Test/Files/TestArchive.zip similarity index 100% rename from NzbDrone.Core.Test/Files/TestArchive.zip rename to src/NzbDrone.Core.Test/Files/TestArchive.zip diff --git a/NzbDrone.Core.Test/Files/Xem/Failure.txt b/src/NzbDrone.Core.Test/Files/Xem/Failure.txt similarity index 100% rename from NzbDrone.Core.Test/Files/Xem/Failure.txt rename to src/NzbDrone.Core.Test/Files/Xem/Failure.txt diff --git a/NzbDrone.Core.Test/Files/Xem/Ids.txt b/src/NzbDrone.Core.Test/Files/Xem/Ids.txt similarity index 100% rename from NzbDrone.Core.Test/Files/Xem/Ids.txt rename to src/NzbDrone.Core.Test/Files/Xem/Ids.txt diff --git a/NzbDrone.Core.Test/Files/Xem/Mappings.txt b/src/NzbDrone.Core.Test/Files/Xem/Mappings.txt similarity index 100% rename from NzbDrone.Core.Test/Files/Xem/Mappings.txt rename to src/NzbDrone.Core.Test/Files/Xem/Mappings.txt diff --git a/NzbDrone.Core.Test/Files/Xem/Names.txt b/src/NzbDrone.Core.Test/Files/Xem/Names.txt similarity index 100% rename from NzbDrone.Core.Test/Files/Xem/Names.txt rename to src/NzbDrone.Core.Test/Files/Xem/Names.txt diff --git a/NzbDrone.Core.Test/FluentTest.cs b/src/NzbDrone.Core.Test/FluentTest.cs similarity index 100% rename from NzbDrone.Core.Test/FluentTest.cs rename to src/NzbDrone.Core.Test/FluentTest.cs diff --git a/NzbDrone.Core.Test/Framework/CoreTest.cs b/src/NzbDrone.Core.Test/Framework/CoreTest.cs similarity index 100% rename from NzbDrone.Core.Test/Framework/CoreTest.cs rename to src/NzbDrone.Core.Test/Framework/CoreTest.cs diff --git a/NzbDrone.Core.Test/Framework/DbTest.cs b/src/NzbDrone.Core.Test/Framework/DbTest.cs similarity index 100% rename from NzbDrone.Core.Test/Framework/DbTest.cs rename to src/NzbDrone.Core.Test/Framework/DbTest.cs diff --git a/NzbDrone.Core.Test/Framework/NBuilderExtensions.cs b/src/NzbDrone.Core.Test/Framework/NBuilderExtensions.cs similarity index 100% rename from NzbDrone.Core.Test/Framework/NBuilderExtensions.cs rename to src/NzbDrone.Core.Test/Framework/NBuilderExtensions.cs diff --git a/NzbDrone.Core.Test/Framework/TestBaseTests.cs b/src/NzbDrone.Core.Test/Framework/TestBaseTests.cs similarity index 100% rename from NzbDrone.Core.Test/Framework/TestBaseTests.cs rename to src/NzbDrone.Core.Test/Framework/TestBaseTests.cs diff --git a/NzbDrone.Core.Test/Framework/TestDbHelper.cs b/src/NzbDrone.Core.Test/Framework/TestDbHelper.cs similarity index 100% rename from NzbDrone.Core.Test/Framework/TestDbHelper.cs rename to src/NzbDrone.Core.Test/Framework/TestDbHelper.cs diff --git a/NzbDrone.Core.Test/HistoryTests/HistoryRepositoryFixture.cs b/src/NzbDrone.Core.Test/HistoryTests/HistoryRepositoryFixture.cs similarity index 100% rename from NzbDrone.Core.Test/HistoryTests/HistoryRepositoryFixture.cs rename to src/NzbDrone.Core.Test/HistoryTests/HistoryRepositoryFixture.cs diff --git a/NzbDrone.Core.Test/Housekeeping/Housekeepers/CleanupOrphanedEpisodesFixture.cs b/src/NzbDrone.Core.Test/Housekeeping/Housekeepers/CleanupOrphanedEpisodesFixture.cs similarity index 100% rename from NzbDrone.Core.Test/Housekeeping/Housekeepers/CleanupOrphanedEpisodesFixture.cs rename to src/NzbDrone.Core.Test/Housekeeping/Housekeepers/CleanupOrphanedEpisodesFixture.cs diff --git a/NzbDrone.Core.Test/Housekeeping/Housekeepers/CleanupOrphanedHistoryItemsFixture.cs b/src/NzbDrone.Core.Test/Housekeeping/Housekeepers/CleanupOrphanedHistoryItemsFixture.cs similarity index 100% rename from NzbDrone.Core.Test/Housekeeping/Housekeepers/CleanupOrphanedHistoryItemsFixture.cs rename to src/NzbDrone.Core.Test/Housekeeping/Housekeepers/CleanupOrphanedHistoryItemsFixture.cs diff --git a/NzbDrone.Core.Test/IndexerSearchTests/FetchAndParseRssServiceFixture.cs b/src/NzbDrone.Core.Test/IndexerSearchTests/FetchAndParseRssServiceFixture.cs similarity index 100% rename from NzbDrone.Core.Test/IndexerSearchTests/FetchAndParseRssServiceFixture.cs rename to src/NzbDrone.Core.Test/IndexerSearchTests/FetchAndParseRssServiceFixture.cs diff --git a/NzbDrone.Core.Test/IndexerSearchTests/SearchDefinitionFixture.cs b/src/NzbDrone.Core.Test/IndexerSearchTests/SearchDefinitionFixture.cs similarity index 100% rename from NzbDrone.Core.Test/IndexerSearchTests/SearchDefinitionFixture.cs rename to src/NzbDrone.Core.Test/IndexerSearchTests/SearchDefinitionFixture.cs diff --git a/NzbDrone.Core.Test/IndexerTests/BasicRssParserFixture.cs b/src/NzbDrone.Core.Test/IndexerTests/BasicRssParserFixture.cs similarity index 100% rename from NzbDrone.Core.Test/IndexerTests/BasicRssParserFixture.cs rename to src/NzbDrone.Core.Test/IndexerTests/BasicRssParserFixture.cs diff --git a/NzbDrone.Core.Test/IndexerTests/FetchAndParseRssServiceFixture.cs b/src/NzbDrone.Core.Test/IndexerTests/FetchAndParseRssServiceFixture.cs similarity index 100% rename from NzbDrone.Core.Test/IndexerTests/FetchAndParseRssServiceFixture.cs rename to src/NzbDrone.Core.Test/IndexerTests/FetchAndParseRssServiceFixture.cs diff --git a/NzbDrone.Core.Test/IndexerTests/IndexerServiceFixture.cs b/src/NzbDrone.Core.Test/IndexerTests/IndexerServiceFixture.cs similarity index 100% rename from NzbDrone.Core.Test/IndexerTests/IndexerServiceFixture.cs rename to src/NzbDrone.Core.Test/IndexerTests/IndexerServiceFixture.cs diff --git a/NzbDrone.Core.Test/IndexerTests/IntegrationTests/IndexerIntegrationTests.cs b/src/NzbDrone.Core.Test/IndexerTests/IntegrationTests/IndexerIntegrationTests.cs similarity index 100% rename from NzbDrone.Core.Test/IndexerTests/IntegrationTests/IndexerIntegrationTests.cs rename to src/NzbDrone.Core.Test/IndexerTests/IntegrationTests/IndexerIntegrationTests.cs diff --git a/NzbDrone.Core.Test/IndexerTests/XElementExtensionsFixture.cs b/src/NzbDrone.Core.Test/IndexerTests/XElementExtensionsFixture.cs similarity index 100% rename from NzbDrone.Core.Test/IndexerTests/XElementExtensionsFixture.cs rename to src/NzbDrone.Core.Test/IndexerTests/XElementExtensionsFixture.cs diff --git a/NzbDrone.Core.Test/InstrumentationTests/DatabaseTargetFixture.cs b/src/NzbDrone.Core.Test/InstrumentationTests/DatabaseTargetFixture.cs similarity index 100% rename from NzbDrone.Core.Test/InstrumentationTests/DatabaseTargetFixture.cs rename to src/NzbDrone.Core.Test/InstrumentationTests/DatabaseTargetFixture.cs diff --git a/NzbDrone.Core.Test/JobTests/JobRepositoryFixture.cs b/src/NzbDrone.Core.Test/JobTests/JobRepositoryFixture.cs similarity index 100% rename from NzbDrone.Core.Test/JobTests/JobRepositoryFixture.cs rename to src/NzbDrone.Core.Test/JobTests/JobRepositoryFixture.cs diff --git a/NzbDrone.Core.Test/JobTests/TestJobs.cs b/src/NzbDrone.Core.Test/JobTests/TestJobs.cs similarity index 100% rename from NzbDrone.Core.Test/JobTests/TestJobs.cs rename to src/NzbDrone.Core.Test/JobTests/TestJobs.cs diff --git a/NzbDrone.Core.Test/MediaCoverTests/CoverExistsSpecificationFixture.cs b/src/NzbDrone.Core.Test/MediaCoverTests/CoverExistsSpecificationFixture.cs similarity index 96% rename from NzbDrone.Core.Test/MediaCoverTests/CoverExistsSpecificationFixture.cs rename to src/NzbDrone.Core.Test/MediaCoverTests/CoverExistsSpecificationFixture.cs index 0667832f4..b720e5516 100644 --- a/NzbDrone.Core.Test/MediaCoverTests/CoverExistsSpecificationFixture.cs +++ b/src/NzbDrone.Core.Test/MediaCoverTests/CoverExistsSpecificationFixture.cs @@ -1,75 +1,75 @@ -using System.Collections.Generic; -using FluentAssertions; -using Moq; -using NUnit.Framework; -using NzbDrone.Common; -using NzbDrone.Core.MediaCover; -using NzbDrone.Core.Test.Framework; -using NzbDrone.Test.Common; - -namespace NzbDrone.Core.Test.MediaCoverTests -{ - [TestFixture] - public class CoverAlreadyExistsSpecificationFixture : CoreTest - { - private Dictionary _headers; - - [SetUp] - public void Setup() - { - _headers = new Dictionary(); - Mocker.GetMock().Setup(c => c.GetFileSize(It.IsAny())).Returns(100); - Mocker.GetMock().Setup(c => c.GetHeader(It.IsAny())).Returns(_headers); - - } - - - private void GivenFileExistsOnDisk() - { - Mocker.GetMock().Setup(c => c.FileExists(It.IsAny())).Returns(true); - } - - - private void GivenExistingFileSize(long bytes) - { - GivenFileExistsOnDisk(); - Mocker.GetMock().Setup(c => c.GetFileSize(It.IsAny())).Returns(bytes); - - } - - - [Test] - public void should_return_false_if_file_not_exists() - { - Subject.AlreadyExists("http://url", "c:\\file.exe").Should().BeFalse(); - } - - [Test] - public void should_return_false_if_file_exists_but_diffrent_size() - { - GivenExistingFileSize(100); - _headers.Add(HttpProvider.CONTENT_LENGTH_HEADER, "200"); - - Subject.AlreadyExists("http://url", "c:\\file.exe").Should().BeFalse(); - } - - - [Test] - public void should_return_ture_if_file_exists_and_same_size() - { - GivenExistingFileSize(100); - _headers.Add(HttpProvider.CONTENT_LENGTH_HEADER, "100"); - - Subject.AlreadyExists("http://url", "c:\\file.exe").Should().BeTrue(); - } - - [Test] - public void should_return_true_if_there_is_no_size_header_and_file_exist() - { - GivenExistingFileSize(100); - Subject.AlreadyExists("http://url", "c:\\file.exe").Should().BeFalse(); - - ExceptionVerification.ExpectedWarns(1); - } - } +using System.Collections.Generic; +using FluentAssertions; +using Moq; +using NUnit.Framework; +using NzbDrone.Common; +using NzbDrone.Core.MediaCover; +using NzbDrone.Core.Test.Framework; +using NzbDrone.Test.Common; + +namespace NzbDrone.Core.Test.MediaCoverTests +{ + [TestFixture] + public class CoverAlreadyExistsSpecificationFixture : CoreTest + { + private Dictionary _headers; + + [SetUp] + public void Setup() + { + _headers = new Dictionary(); + Mocker.GetMock().Setup(c => c.GetFileSize(It.IsAny())).Returns(100); + Mocker.GetMock().Setup(c => c.GetHeader(It.IsAny())).Returns(_headers); + + } + + + private void GivenFileExistsOnDisk() + { + Mocker.GetMock().Setup(c => c.FileExists(It.IsAny())).Returns(true); + } + + + private void GivenExistingFileSize(long bytes) + { + GivenFileExistsOnDisk(); + Mocker.GetMock().Setup(c => c.GetFileSize(It.IsAny())).Returns(bytes); + + } + + + [Test] + public void should_return_false_if_file_not_exists() + { + Subject.AlreadyExists("http://url", "c:\\file.exe").Should().BeFalse(); + } + + [Test] + public void should_return_false_if_file_exists_but_diffrent_size() + { + GivenExistingFileSize(100); + _headers.Add(HttpProvider.CONTENT_LENGTH_HEADER, "200"); + + Subject.AlreadyExists("http://url", "c:\\file.exe").Should().BeFalse(); + } + + + [Test] + public void should_return_ture_if_file_exists_and_same_size() + { + GivenExistingFileSize(100); + _headers.Add(HttpProvider.CONTENT_LENGTH_HEADER, "100"); + + Subject.AlreadyExists("http://url", "c:\\file.exe").Should().BeTrue(); + } + + [Test] + public void should_return_true_if_there_is_no_size_header_and_file_exist() + { + GivenExistingFileSize(100); + Subject.AlreadyExists("http://url", "c:\\file.exe").Should().BeFalse(); + + ExceptionVerification.ExpectedWarns(1); + } + } } \ No newline at end of file diff --git a/NzbDrone.Core.Test/MediaCoverTests/MediaCoverServiceFixture.cs b/src/NzbDrone.Core.Test/MediaCoverTests/MediaCoverServiceFixture.cs similarity index 100% rename from NzbDrone.Core.Test/MediaCoverTests/MediaCoverServiceFixture.cs rename to src/NzbDrone.Core.Test/MediaCoverTests/MediaCoverServiceFixture.cs diff --git a/NzbDrone.Core.Test/MediaFiles/DownloadedEpisodesImportServiceFixture.cs b/src/NzbDrone.Core.Test/MediaFiles/DownloadedEpisodesImportServiceFixture.cs similarity index 100% rename from NzbDrone.Core.Test/MediaFiles/DownloadedEpisodesImportServiceFixture.cs rename to src/NzbDrone.Core.Test/MediaFiles/DownloadedEpisodesImportServiceFixture.cs diff --git a/NzbDrone.Core.Test/MediaFiles/EpisodeImport/ImportDecisionMakerFixture.cs b/src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/ImportDecisionMakerFixture.cs similarity index 100% rename from NzbDrone.Core.Test/MediaFiles/EpisodeImport/ImportDecisionMakerFixture.cs rename to src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/ImportDecisionMakerFixture.cs diff --git a/NzbDrone.Core.Test/MediaFiles/EpisodeImport/Specifications/FreeSpaceSpecificationFixture.cs b/src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/Specifications/FreeSpaceSpecificationFixture.cs similarity index 100% rename from NzbDrone.Core.Test/MediaFiles/EpisodeImport/Specifications/FreeSpaceSpecificationFixture.cs rename to src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/Specifications/FreeSpaceSpecificationFixture.cs diff --git a/NzbDrone.Core.Test/MediaFiles/EpisodeImport/Specifications/NotInUseSpecificationFixture.cs b/src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/Specifications/NotInUseSpecificationFixture.cs similarity index 100% rename from NzbDrone.Core.Test/MediaFiles/EpisodeImport/Specifications/NotInUseSpecificationFixture.cs rename to src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/Specifications/NotInUseSpecificationFixture.cs diff --git a/NzbDrone.Core.Test/MediaFiles/EpisodeImport/Specifications/NotSampleSpecificationFixture.cs b/src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/Specifications/NotSampleSpecificationFixture.cs similarity index 100% rename from NzbDrone.Core.Test/MediaFiles/EpisodeImport/Specifications/NotSampleSpecificationFixture.cs rename to src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/Specifications/NotSampleSpecificationFixture.cs diff --git a/NzbDrone.Core.Test/MediaFiles/EpisodeImport/Specifications/NotUnpackingSpecificationFixture.cs b/src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/Specifications/NotUnpackingSpecificationFixture.cs similarity index 100% rename from NzbDrone.Core.Test/MediaFiles/EpisodeImport/Specifications/NotUnpackingSpecificationFixture.cs rename to src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/Specifications/NotUnpackingSpecificationFixture.cs diff --git a/NzbDrone.Core.Test/MediaFiles/EpisodeImport/Specifications/UpgradeSpecificationFixture.cs b/src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/Specifications/UpgradeSpecificationFixture.cs similarity index 100% rename from NzbDrone.Core.Test/MediaFiles/EpisodeImport/Specifications/UpgradeSpecificationFixture.cs rename to src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/Specifications/UpgradeSpecificationFixture.cs diff --git a/NzbDrone.Core.Test/MediaFiles/ImportApprovedEpisodesFixture.cs b/src/NzbDrone.Core.Test/MediaFiles/ImportApprovedEpisodesFixture.cs similarity index 100% rename from NzbDrone.Core.Test/MediaFiles/ImportApprovedEpisodesFixture.cs rename to src/NzbDrone.Core.Test/MediaFiles/ImportApprovedEpisodesFixture.cs diff --git a/NzbDrone.Core.Test/MediaFiles/MediaFileRepositoryFixture.cs b/src/NzbDrone.Core.Test/MediaFiles/MediaFileRepositoryFixture.cs similarity index 100% rename from NzbDrone.Core.Test/MediaFiles/MediaFileRepositoryFixture.cs rename to src/NzbDrone.Core.Test/MediaFiles/MediaFileRepositoryFixture.cs diff --git a/NzbDrone.Core.Test/MediaFiles/MediaFileServiceTest.cs b/src/NzbDrone.Core.Test/MediaFiles/MediaFileServiceTest.cs similarity index 100% rename from NzbDrone.Core.Test/MediaFiles/MediaFileServiceTest.cs rename to src/NzbDrone.Core.Test/MediaFiles/MediaFileServiceTest.cs diff --git a/NzbDrone.Core.Test/MediaFiles/MediaFileTableCleanupServiceFixture.cs b/src/NzbDrone.Core.Test/MediaFiles/MediaFileTableCleanupServiceFixture.cs similarity index 100% rename from NzbDrone.Core.Test/MediaFiles/MediaFileTableCleanupServiceFixture.cs rename to src/NzbDrone.Core.Test/MediaFiles/MediaFileTableCleanupServiceFixture.cs diff --git a/NzbDrone.Core.Test/MediaFiles/MediaInfo/VideoFileInfoReaderFixture.cs b/src/NzbDrone.Core.Test/MediaFiles/MediaInfo/VideoFileInfoReaderFixture.cs similarity index 100% rename from NzbDrone.Core.Test/MediaFiles/MediaInfo/VideoFileInfoReaderFixture.cs rename to src/NzbDrone.Core.Test/MediaFiles/MediaInfo/VideoFileInfoReaderFixture.cs diff --git a/NzbDrone.Core.Test/MediaFiles/RenameEpisodeFileServiceFixture.cs b/src/NzbDrone.Core.Test/MediaFiles/RenameEpisodeFileServiceFixture.cs similarity index 100% rename from NzbDrone.Core.Test/MediaFiles/RenameEpisodeFileServiceFixture.cs rename to src/NzbDrone.Core.Test/MediaFiles/RenameEpisodeFileServiceFixture.cs diff --git a/NzbDrone.Core.Test/MediaFiles/UpgradeMediaFileServiceFixture.cs b/src/NzbDrone.Core.Test/MediaFiles/UpgradeMediaFileServiceFixture.cs similarity index 100% rename from NzbDrone.Core.Test/MediaFiles/UpgradeMediaFileServiceFixture.cs rename to src/NzbDrone.Core.Test/MediaFiles/UpgradeMediaFileServiceFixture.cs diff --git a/NzbDrone.Core.Test/Messaging/Commands/CommandEqualityComparerFixture.cs b/src/NzbDrone.Core.Test/Messaging/Commands/CommandEqualityComparerFixture.cs similarity index 100% rename from NzbDrone.Core.Test/Messaging/Commands/CommandEqualityComparerFixture.cs rename to src/NzbDrone.Core.Test/Messaging/Commands/CommandEqualityComparerFixture.cs diff --git a/NzbDrone.Core.Test/Messaging/Commands/CommandExecutorFixture.cs b/src/NzbDrone.Core.Test/Messaging/Commands/CommandExecutorFixture.cs similarity index 100% rename from NzbDrone.Core.Test/Messaging/Commands/CommandExecutorFixture.cs rename to src/NzbDrone.Core.Test/Messaging/Commands/CommandExecutorFixture.cs diff --git a/NzbDrone.Core.Test/Messaging/Commands/CommandFixture.cs b/src/NzbDrone.Core.Test/Messaging/Commands/CommandFixture.cs similarity index 100% rename from NzbDrone.Core.Test/Messaging/Commands/CommandFixture.cs rename to src/NzbDrone.Core.Test/Messaging/Commands/CommandFixture.cs diff --git a/NzbDrone.Core.Test/Messaging/Events/EventAggregatorFixture.cs b/src/NzbDrone.Core.Test/Messaging/Events/EventAggregatorFixture.cs similarity index 100% rename from NzbDrone.Core.Test/Messaging/Events/EventAggregatorFixture.cs rename to src/NzbDrone.Core.Test/Messaging/Events/EventAggregatorFixture.cs diff --git a/NzbDrone.Core.Test/MetadataSourceTests/TraktProxyFixture.cs b/src/NzbDrone.Core.Test/MetadataSourceTests/TraktProxyFixture.cs similarity index 100% rename from NzbDrone.Core.Test/MetadataSourceTests/TraktProxyFixture.cs rename to src/NzbDrone.Core.Test/MetadataSourceTests/TraktProxyFixture.cs diff --git a/NzbDrone.Core.Test/NotificationTests/GrowlProviderTest.cs b/src/NzbDrone.Core.Test/NotificationTests/GrowlProviderTest.cs similarity index 100% rename from NzbDrone.Core.Test/NotificationTests/GrowlProviderTest.cs rename to src/NzbDrone.Core.Test/NotificationTests/GrowlProviderTest.cs diff --git a/NzbDrone.Core.Test/NotificationTests/NotificationServiceFixture.cs b/src/NzbDrone.Core.Test/NotificationTests/NotificationServiceFixture.cs similarity index 100% rename from NzbDrone.Core.Test/NotificationTests/NotificationServiceFixture.cs rename to src/NzbDrone.Core.Test/NotificationTests/NotificationServiceFixture.cs diff --git a/NzbDrone.Core.Test/NotificationTests/PlexProviderTest.cs b/src/NzbDrone.Core.Test/NotificationTests/PlexProviderTest.cs similarity index 100% rename from NzbDrone.Core.Test/NotificationTests/PlexProviderTest.cs rename to src/NzbDrone.Core.Test/NotificationTests/PlexProviderTest.cs diff --git a/NzbDrone.Core.Test/NotificationTests/ProwlProviderTest.cs b/src/NzbDrone.Core.Test/NotificationTests/ProwlProviderTest.cs similarity index 100% rename from NzbDrone.Core.Test/NotificationTests/ProwlProviderTest.cs rename to src/NzbDrone.Core.Test/NotificationTests/ProwlProviderTest.cs diff --git a/NzbDrone.Core.Test/NotificationTests/Xbmc/GetJsonVersionFixture.cs b/src/NzbDrone.Core.Test/NotificationTests/Xbmc/GetJsonVersionFixture.cs similarity index 100% rename from NzbDrone.Core.Test/NotificationTests/Xbmc/GetJsonVersionFixture.cs rename to src/NzbDrone.Core.Test/NotificationTests/Xbmc/GetJsonVersionFixture.cs diff --git a/NzbDrone.Core.Test/NotificationTests/Xbmc/Http/ActivePlayersFixture.cs b/src/NzbDrone.Core.Test/NotificationTests/Xbmc/Http/ActivePlayersFixture.cs similarity index 100% rename from NzbDrone.Core.Test/NotificationTests/Xbmc/Http/ActivePlayersFixture.cs rename to src/NzbDrone.Core.Test/NotificationTests/Xbmc/Http/ActivePlayersFixture.cs diff --git a/NzbDrone.Core.Test/NotificationTests/Xbmc/Http/CheckForErrorFixture.cs b/src/NzbDrone.Core.Test/NotificationTests/Xbmc/Http/CheckForErrorFixture.cs similarity index 100% rename from NzbDrone.Core.Test/NotificationTests/Xbmc/Http/CheckForErrorFixture.cs rename to src/NzbDrone.Core.Test/NotificationTests/Xbmc/Http/CheckForErrorFixture.cs diff --git a/NzbDrone.Core.Test/NotificationTests/Xbmc/Http/GetSeriesPathFixture.cs b/src/NzbDrone.Core.Test/NotificationTests/Xbmc/Http/GetSeriesPathFixture.cs similarity index 100% rename from NzbDrone.Core.Test/NotificationTests/Xbmc/Http/GetSeriesPathFixture.cs rename to src/NzbDrone.Core.Test/NotificationTests/Xbmc/Http/GetSeriesPathFixture.cs diff --git a/NzbDrone.Core.Test/NotificationTests/Xbmc/Http/UpdateFixture.cs b/src/NzbDrone.Core.Test/NotificationTests/Xbmc/Http/UpdateFixture.cs similarity index 100% rename from NzbDrone.Core.Test/NotificationTests/Xbmc/Http/UpdateFixture.cs rename to src/NzbDrone.Core.Test/NotificationTests/Xbmc/Http/UpdateFixture.cs diff --git a/NzbDrone.Core.Test/NotificationTests/Xbmc/Json/ActivePlayersFixture.cs b/src/NzbDrone.Core.Test/NotificationTests/Xbmc/Json/ActivePlayersFixture.cs similarity index 100% rename from NzbDrone.Core.Test/NotificationTests/Xbmc/Json/ActivePlayersFixture.cs rename to src/NzbDrone.Core.Test/NotificationTests/Xbmc/Json/ActivePlayersFixture.cs diff --git a/NzbDrone.Core.Test/NotificationTests/Xbmc/Json/CheckForErrorFixture.cs b/src/NzbDrone.Core.Test/NotificationTests/Xbmc/Json/CheckForErrorFixture.cs similarity index 100% rename from NzbDrone.Core.Test/NotificationTests/Xbmc/Json/CheckForErrorFixture.cs rename to src/NzbDrone.Core.Test/NotificationTests/Xbmc/Json/CheckForErrorFixture.cs diff --git a/NzbDrone.Core.Test/NotificationTests/Xbmc/Json/GetSeriesPathFixture.cs b/src/NzbDrone.Core.Test/NotificationTests/Xbmc/Json/GetSeriesPathFixture.cs similarity index 100% rename from NzbDrone.Core.Test/NotificationTests/Xbmc/Json/GetSeriesPathFixture.cs rename to src/NzbDrone.Core.Test/NotificationTests/Xbmc/Json/GetSeriesPathFixture.cs diff --git a/NzbDrone.Core.Test/NotificationTests/Xbmc/Json/UpdateFixture.cs b/src/NzbDrone.Core.Test/NotificationTests/Xbmc/Json/UpdateFixture.cs similarity index 100% rename from NzbDrone.Core.Test/NotificationTests/Xbmc/Json/UpdateFixture.cs rename to src/NzbDrone.Core.Test/NotificationTests/Xbmc/Json/UpdateFixture.cs diff --git a/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj b/src/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj similarity index 100% rename from NzbDrone.Core.Test/NzbDrone.Core.Test.csproj rename to src/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj diff --git a/NzbDrone.Core.Test/OrganizerTests/BuildFilePathFixture.cs b/src/NzbDrone.Core.Test/OrganizerTests/BuildFilePathFixture.cs similarity index 100% rename from NzbDrone.Core.Test/OrganizerTests/BuildFilePathFixture.cs rename to src/NzbDrone.Core.Test/OrganizerTests/BuildFilePathFixture.cs diff --git a/NzbDrone.Core.Test/OrganizerTests/GetNewFilenameFixture.cs b/src/NzbDrone.Core.Test/OrganizerTests/GetNewFilenameFixture.cs similarity index 100% rename from NzbDrone.Core.Test/OrganizerTests/GetNewFilenameFixture.cs rename to src/NzbDrone.Core.Test/OrganizerTests/GetNewFilenameFixture.cs diff --git a/NzbDrone.Core.Test/ParserTests/ParserFixture.cs b/src/NzbDrone.Core.Test/ParserTests/ParserFixture.cs similarity index 100% rename from NzbDrone.Core.Test/ParserTests/ParserFixture.cs rename to src/NzbDrone.Core.Test/ParserTests/ParserFixture.cs diff --git a/NzbDrone.Core.Test/ParserTests/ParsingServiceTests/GetEpisodesFixture.cs b/src/NzbDrone.Core.Test/ParserTests/ParsingServiceTests/GetEpisodesFixture.cs similarity index 100% rename from NzbDrone.Core.Test/ParserTests/ParsingServiceTests/GetEpisodesFixture.cs rename to src/NzbDrone.Core.Test/ParserTests/ParsingServiceTests/GetEpisodesFixture.cs diff --git a/NzbDrone.Core.Test/ParserTests/ParsingServiceTests/MapFixture.cs b/src/NzbDrone.Core.Test/ParserTests/ParsingServiceTests/MapFixture.cs similarity index 100% rename from NzbDrone.Core.Test/ParserTests/ParsingServiceTests/MapFixture.cs rename to src/NzbDrone.Core.Test/ParserTests/ParsingServiceTests/MapFixture.cs diff --git a/NzbDrone.Core.Test/ParserTests/QualityParserFixture.cs b/src/NzbDrone.Core.Test/ParserTests/QualityParserFixture.cs similarity index 100% rename from NzbDrone.Core.Test/ParserTests/QualityParserFixture.cs rename to src/NzbDrone.Core.Test/ParserTests/QualityParserFixture.cs diff --git a/NzbDrone.Core.Test/Properties/AssemblyInfo.cs b/src/NzbDrone.Core.Test/Properties/AssemblyInfo.cs similarity index 100% rename from NzbDrone.Core.Test/Properties/AssemblyInfo.cs rename to src/NzbDrone.Core.Test/Properties/AssemblyInfo.cs diff --git a/NzbDrone.Core.Test/ProviderTests/DiskProviderTests/ArchiveProviderFixture.cs b/src/NzbDrone.Core.Test/ProviderTests/DiskProviderTests/ArchiveProviderFixture.cs similarity index 100% rename from NzbDrone.Core.Test/ProviderTests/DiskProviderTests/ArchiveProviderFixture.cs rename to src/NzbDrone.Core.Test/ProviderTests/DiskProviderTests/ArchiveProviderFixture.cs diff --git a/NzbDrone.Core.Test/ProviderTests/DiskProviderTests/FreeDiskSpaceFixture.cs b/src/NzbDrone.Core.Test/ProviderTests/DiskProviderTests/FreeDiskSpaceFixture.cs similarity index 100% rename from NzbDrone.Core.Test/ProviderTests/DiskProviderTests/FreeDiskSpaceFixture.cs rename to src/NzbDrone.Core.Test/ProviderTests/DiskProviderTests/FreeDiskSpaceFixture.cs diff --git a/NzbDrone.Core.Test/ProviderTests/DiskScanProviderTests/GetVideoFilesFixture.cs b/src/NzbDrone.Core.Test/ProviderTests/DiskScanProviderTests/GetVideoFilesFixture.cs similarity index 100% rename from NzbDrone.Core.Test/ProviderTests/DiskScanProviderTests/GetVideoFilesFixture.cs rename to src/NzbDrone.Core.Test/ProviderTests/DiskScanProviderTests/GetVideoFilesFixture.cs diff --git a/NzbDrone.Core.Test/ProviderTests/RecycleBinProviderTests/CleanupFixture.cs b/src/NzbDrone.Core.Test/ProviderTests/RecycleBinProviderTests/CleanupFixture.cs similarity index 100% rename from NzbDrone.Core.Test/ProviderTests/RecycleBinProviderTests/CleanupFixture.cs rename to src/NzbDrone.Core.Test/ProviderTests/RecycleBinProviderTests/CleanupFixture.cs diff --git a/NzbDrone.Core.Test/ProviderTests/RecycleBinProviderTests/DeleteDirectoryFixture.cs b/src/NzbDrone.Core.Test/ProviderTests/RecycleBinProviderTests/DeleteDirectoryFixture.cs similarity index 100% rename from NzbDrone.Core.Test/ProviderTests/RecycleBinProviderTests/DeleteDirectoryFixture.cs rename to src/NzbDrone.Core.Test/ProviderTests/RecycleBinProviderTests/DeleteDirectoryFixture.cs diff --git a/NzbDrone.Core.Test/ProviderTests/RecycleBinProviderTests/DeleteFileFixture.cs b/src/NzbDrone.Core.Test/ProviderTests/RecycleBinProviderTests/DeleteFileFixture.cs similarity index 100% rename from NzbDrone.Core.Test/ProviderTests/RecycleBinProviderTests/DeleteFileFixture.cs rename to src/NzbDrone.Core.Test/ProviderTests/RecycleBinProviderTests/DeleteFileFixture.cs diff --git a/NzbDrone.Core.Test/ProviderTests/RecycleBinProviderTests/EmptyFixture.cs b/src/NzbDrone.Core.Test/ProviderTests/RecycleBinProviderTests/EmptyFixture.cs similarity index 100% rename from NzbDrone.Core.Test/ProviderTests/RecycleBinProviderTests/EmptyFixture.cs rename to src/NzbDrone.Core.Test/ProviderTests/RecycleBinProviderTests/EmptyFixture.cs diff --git a/NzbDrone.Core.Test/Providers/XemProxyFixture.cs b/src/NzbDrone.Core.Test/Providers/XemProxyFixture.cs similarity index 100% rename from NzbDrone.Core.Test/Providers/XemProxyFixture.cs rename to src/NzbDrone.Core.Test/Providers/XemProxyFixture.cs diff --git a/NzbDrone.Core.Test/Qualities/QualityFixture.cs b/src/NzbDrone.Core.Test/Qualities/QualityFixture.cs similarity index 100% rename from NzbDrone.Core.Test/Qualities/QualityFixture.cs rename to src/NzbDrone.Core.Test/Qualities/QualityFixture.cs diff --git a/NzbDrone.Core.Test/Qualities/QualityProfileRepositoryFixture.cs b/src/NzbDrone.Core.Test/Qualities/QualityProfileRepositoryFixture.cs similarity index 100% rename from NzbDrone.Core.Test/Qualities/QualityProfileRepositoryFixture.cs rename to src/NzbDrone.Core.Test/Qualities/QualityProfileRepositoryFixture.cs diff --git a/NzbDrone.Core.Test/Qualities/QualityProfileServiceFixture.cs b/src/NzbDrone.Core.Test/Qualities/QualityProfileServiceFixture.cs similarity index 100% rename from NzbDrone.Core.Test/Qualities/QualityProfileServiceFixture.cs rename to src/NzbDrone.Core.Test/Qualities/QualityProfileServiceFixture.cs diff --git a/NzbDrone.Core.Test/Qualities/QualitySizeRepositoryFixture.cs b/src/NzbDrone.Core.Test/Qualities/QualitySizeRepositoryFixture.cs similarity index 100% rename from NzbDrone.Core.Test/Qualities/QualitySizeRepositoryFixture.cs rename to src/NzbDrone.Core.Test/Qualities/QualitySizeRepositoryFixture.cs diff --git a/NzbDrone.Core.Test/Qualities/QualitySizeServiceFixture.cs b/src/NzbDrone.Core.Test/Qualities/QualitySizeServiceFixture.cs similarity index 100% rename from NzbDrone.Core.Test/Qualities/QualitySizeServiceFixture.cs rename to src/NzbDrone.Core.Test/Qualities/QualitySizeServiceFixture.cs diff --git a/NzbDrone.Core.Test/RootFolderTests/FreeSpaceOnDrivesFixture.cs b/src/NzbDrone.Core.Test/RootFolderTests/FreeSpaceOnDrivesFixture.cs similarity index 100% rename from NzbDrone.Core.Test/RootFolderTests/FreeSpaceOnDrivesFixture.cs rename to src/NzbDrone.Core.Test/RootFolderTests/FreeSpaceOnDrivesFixture.cs diff --git a/NzbDrone.Core.Test/RootFolderTests/RootFolderServiceFixture.cs b/src/NzbDrone.Core.Test/RootFolderTests/RootFolderServiceFixture.cs similarity index 100% rename from NzbDrone.Core.Test/RootFolderTests/RootFolderServiceFixture.cs rename to src/NzbDrone.Core.Test/RootFolderTests/RootFolderServiceFixture.cs diff --git a/NzbDrone.Core.Test/SeriesStatsTests/SeriesStatisticsFixture.cs b/src/NzbDrone.Core.Test/SeriesStatsTests/SeriesStatisticsFixture.cs similarity index 100% rename from NzbDrone.Core.Test/SeriesStatsTests/SeriesStatisticsFixture.cs rename to src/NzbDrone.Core.Test/SeriesStatsTests/SeriesStatisticsFixture.cs diff --git a/NzbDrone.Core.Test/ThingiProvider/ProviderBaseFixture.cs b/src/NzbDrone.Core.Test/ThingiProvider/ProviderBaseFixture.cs similarity index 100% rename from NzbDrone.Core.Test/ThingiProvider/ProviderBaseFixture.cs rename to src/NzbDrone.Core.Test/ThingiProvider/ProviderBaseFixture.cs diff --git a/NzbDrone.Core.Test/ThingiProviderTests/NullConfigFixture.cs b/src/NzbDrone.Core.Test/ThingiProviderTests/NullConfigFixture.cs similarity index 100% rename from NzbDrone.Core.Test/ThingiProviderTests/NullConfigFixture.cs rename to src/NzbDrone.Core.Test/ThingiProviderTests/NullConfigFixture.cs diff --git a/NzbDrone.Core.Test/TvTests/EpisodeProviderTests/EpisodeProviderTest.cs b/src/NzbDrone.Core.Test/TvTests/EpisodeProviderTests/EpisodeProviderTest.cs similarity index 100% rename from NzbDrone.Core.Test/TvTests/EpisodeProviderTests/EpisodeProviderTest.cs rename to src/NzbDrone.Core.Test/TvTests/EpisodeProviderTests/EpisodeProviderTest.cs diff --git a/NzbDrone.Core.Test/TvTests/EpisodeProviderTests/EpisodeProviderTest_GetEpisodesByParseResult.cs b/src/NzbDrone.Core.Test/TvTests/EpisodeProviderTests/EpisodeProviderTest_GetEpisodesByParseResult.cs similarity index 100% rename from NzbDrone.Core.Test/TvTests/EpisodeProviderTests/EpisodeProviderTest_GetEpisodesByParseResult.cs rename to src/NzbDrone.Core.Test/TvTests/EpisodeProviderTests/EpisodeProviderTest_GetEpisodesByParseResult.cs diff --git a/NzbDrone.Core.Test/TvTests/EpisodeProviderTests/HandleEpisodeFileDeletedFixture.cs b/src/NzbDrone.Core.Test/TvTests/EpisodeProviderTests/HandleEpisodeFileDeletedFixture.cs similarity index 100% rename from NzbDrone.Core.Test/TvTests/EpisodeProviderTests/HandleEpisodeFileDeletedFixture.cs rename to src/NzbDrone.Core.Test/TvTests/EpisodeProviderTests/HandleEpisodeFileDeletedFixture.cs diff --git a/NzbDrone.Core.Test/TvTests/EpisodeRepositoryTests/EpisodesBetweenDatesFixture.cs b/src/NzbDrone.Core.Test/TvTests/EpisodeRepositoryTests/EpisodesBetweenDatesFixture.cs similarity index 100% rename from NzbDrone.Core.Test/TvTests/EpisodeRepositoryTests/EpisodesBetweenDatesFixture.cs rename to src/NzbDrone.Core.Test/TvTests/EpisodeRepositoryTests/EpisodesBetweenDatesFixture.cs diff --git a/NzbDrone.Core.Test/TvTests/EpisodeRepositoryTests/EpisodesRepositoryReadFixture.cs b/src/NzbDrone.Core.Test/TvTests/EpisodeRepositoryTests/EpisodesRepositoryReadFixture.cs similarity index 100% rename from NzbDrone.Core.Test/TvTests/EpisodeRepositoryTests/EpisodesRepositoryReadFixture.cs rename to src/NzbDrone.Core.Test/TvTests/EpisodeRepositoryTests/EpisodesRepositoryReadFixture.cs diff --git a/NzbDrone.Core.Test/TvTests/EpisodeRepositoryTests/EpisodesWithoutFilesFixture.cs b/src/NzbDrone.Core.Test/TvTests/EpisodeRepositoryTests/EpisodesWithoutFilesFixture.cs similarity index 100% rename from NzbDrone.Core.Test/TvTests/EpisodeRepositoryTests/EpisodesWithoutFilesFixture.cs rename to src/NzbDrone.Core.Test/TvTests/EpisodeRepositoryTests/EpisodesWithoutFilesFixture.cs diff --git a/NzbDrone.Core.Test/TvTests/EpisodeRepositoryTests/FindEpisodeFixture.cs b/src/NzbDrone.Core.Test/TvTests/EpisodeRepositoryTests/FindEpisodeFixture.cs similarity index 100% rename from NzbDrone.Core.Test/TvTests/EpisodeRepositoryTests/FindEpisodeFixture.cs rename to src/NzbDrone.Core.Test/TvTests/EpisodeRepositoryTests/FindEpisodeFixture.cs diff --git a/NzbDrone.Core.Test/TvTests/QualityModelFixture.cs b/src/NzbDrone.Core.Test/TvTests/QualityModelFixture.cs similarity index 100% rename from NzbDrone.Core.Test/TvTests/QualityModelFixture.cs rename to src/NzbDrone.Core.Test/TvTests/QualityModelFixture.cs diff --git a/NzbDrone.Core.Test/TvTests/RefreshEpisodeServiceFixture.cs b/src/NzbDrone.Core.Test/TvTests/RefreshEpisodeServiceFixture.cs similarity index 100% rename from NzbDrone.Core.Test/TvTests/RefreshEpisodeServiceFixture.cs rename to src/NzbDrone.Core.Test/TvTests/RefreshEpisodeServiceFixture.cs diff --git a/NzbDrone.Core.Test/TvTests/SeriesRepositoryTests/QualityProfileRepositoryFixture.cs b/src/NzbDrone.Core.Test/TvTests/SeriesRepositoryTests/QualityProfileRepositoryFixture.cs similarity index 100% rename from NzbDrone.Core.Test/TvTests/SeriesRepositoryTests/QualityProfileRepositoryFixture.cs rename to src/NzbDrone.Core.Test/TvTests/SeriesRepositoryTests/QualityProfileRepositoryFixture.cs diff --git a/NzbDrone.Core.Test/TvTests/SeriesServiceTests/AddSeriesFixture.cs b/src/NzbDrone.Core.Test/TvTests/SeriesServiceTests/AddSeriesFixture.cs similarity index 100% rename from NzbDrone.Core.Test/TvTests/SeriesServiceTests/AddSeriesFixture.cs rename to src/NzbDrone.Core.Test/TvTests/SeriesServiceTests/AddSeriesFixture.cs diff --git a/NzbDrone.Core.Test/TvTests/SeriesServiceTests/UpdateSeriesFixture.cs b/src/NzbDrone.Core.Test/TvTests/SeriesServiceTests/UpdateSeriesFixture.cs similarity index 100% rename from NzbDrone.Core.Test/TvTests/SeriesServiceTests/UpdateSeriesFixture.cs rename to src/NzbDrone.Core.Test/TvTests/SeriesServiceTests/UpdateSeriesFixture.cs diff --git a/NzbDrone.Core.Test/UpdateTests/UpdatePackageProviderFixture.cs b/src/NzbDrone.Core.Test/UpdateTests/UpdatePackageProviderFixture.cs similarity index 100% rename from NzbDrone.Core.Test/UpdateTests/UpdatePackageProviderFixture.cs rename to src/NzbDrone.Core.Test/UpdateTests/UpdatePackageProviderFixture.cs diff --git a/NzbDrone.Core.Test/UpdateTests/UpdateServiceFixture.cs b/src/NzbDrone.Core.Test/UpdateTests/UpdateServiceFixture.cs similarity index 100% rename from NzbDrone.Core.Test/UpdateTests/UpdateServiceFixture.cs rename to src/NzbDrone.Core.Test/UpdateTests/UpdateServiceFixture.cs diff --git a/NzbDrone.Core.Test/XbmcVersionTests.cs b/src/NzbDrone.Core.Test/XbmcVersionTests.cs similarity index 100% rename from NzbDrone.Core.Test/XbmcVersionTests.cs rename to src/NzbDrone.Core.Test/XbmcVersionTests.cs diff --git a/NzbDrone.Core.Test/packages.config b/src/NzbDrone.Core.Test/packages.config similarity index 100% rename from NzbDrone.Core.Test/packages.config rename to src/NzbDrone.Core.Test/packages.config diff --git a/NzbDrone.Core/Annotations/FieldDefinitionAttribute.cs b/src/NzbDrone.Core/Annotations/FieldDefinitionAttribute.cs similarity index 100% rename from NzbDrone.Core/Annotations/FieldDefinitionAttribute.cs rename to src/NzbDrone.Core/Annotations/FieldDefinitionAttribute.cs diff --git a/NzbDrone.Core/App.config b/src/NzbDrone.Core/App.config similarity index 100% rename from NzbDrone.Core/App.config rename to src/NzbDrone.Core/App.config diff --git a/NzbDrone.Core/Configuration/Config.cs b/src/NzbDrone.Core/Configuration/Config.cs similarity index 100% rename from NzbDrone.Core/Configuration/Config.cs rename to src/NzbDrone.Core/Configuration/Config.cs diff --git a/NzbDrone.Core/Configuration/ConfigFileProvider.cs b/src/NzbDrone.Core/Configuration/ConfigFileProvider.cs similarity index 100% rename from NzbDrone.Core/Configuration/ConfigFileProvider.cs rename to src/NzbDrone.Core/Configuration/ConfigFileProvider.cs diff --git a/NzbDrone.Core/Configuration/ConfigRepository.cs b/src/NzbDrone.Core/Configuration/ConfigRepository.cs similarity index 100% rename from NzbDrone.Core/Configuration/ConfigRepository.cs rename to src/NzbDrone.Core/Configuration/ConfigRepository.cs diff --git a/NzbDrone.Core/Configuration/ConfigService.cs b/src/NzbDrone.Core/Configuration/ConfigService.cs similarity index 100% rename from NzbDrone.Core/Configuration/ConfigService.cs rename to src/NzbDrone.Core/Configuration/ConfigService.cs diff --git a/NzbDrone.Core/Configuration/Events/ConfigFileSavedEvent.cs b/src/NzbDrone.Core/Configuration/Events/ConfigFileSavedEvent.cs similarity index 100% rename from NzbDrone.Core/Configuration/Events/ConfigFileSavedEvent.cs rename to src/NzbDrone.Core/Configuration/Events/ConfigFileSavedEvent.cs diff --git a/NzbDrone.Core/Configuration/Events/ConfigSavedEvent.cs b/src/NzbDrone.Core/Configuration/Events/ConfigSavedEvent.cs similarity index 100% rename from NzbDrone.Core/Configuration/Events/ConfigSavedEvent.cs rename to src/NzbDrone.Core/Configuration/Events/ConfigSavedEvent.cs diff --git a/NzbDrone.Core/Configuration/IConfigService.cs b/src/NzbDrone.Core/Configuration/IConfigService.cs similarity index 100% rename from NzbDrone.Core/Configuration/IConfigService.cs rename to src/NzbDrone.Core/Configuration/IConfigService.cs diff --git a/NzbDrone.Core/Configuration/InvalidConfigFileException.cs b/src/NzbDrone.Core/Configuration/InvalidConfigFileException.cs similarity index 100% rename from NzbDrone.Core/Configuration/InvalidConfigFileException.cs rename to src/NzbDrone.Core/Configuration/InvalidConfigFileException.cs diff --git a/NzbDrone.Core/DataAugmentation/DailySeries/DailySeriesDataProxy.cs b/src/NzbDrone.Core/DataAugmentation/DailySeries/DailySeriesDataProxy.cs similarity index 100% rename from NzbDrone.Core/DataAugmentation/DailySeries/DailySeriesDataProxy.cs rename to src/NzbDrone.Core/DataAugmentation/DailySeries/DailySeriesDataProxy.cs diff --git a/NzbDrone.Core/DataAugmentation/DailySeries/DailySeriesService.cs b/src/NzbDrone.Core/DataAugmentation/DailySeries/DailySeriesService.cs similarity index 100% rename from NzbDrone.Core/DataAugmentation/DailySeries/DailySeriesService.cs rename to src/NzbDrone.Core/DataAugmentation/DailySeries/DailySeriesService.cs diff --git a/NzbDrone.Core/DataAugmentation/Scene/SceneMapping.cs b/src/NzbDrone.Core/DataAugmentation/Scene/SceneMapping.cs similarity index 100% rename from NzbDrone.Core/DataAugmentation/Scene/SceneMapping.cs rename to src/NzbDrone.Core/DataAugmentation/Scene/SceneMapping.cs diff --git a/NzbDrone.Core/DataAugmentation/Scene/SceneMappingProxy.cs b/src/NzbDrone.Core/DataAugmentation/Scene/SceneMappingProxy.cs similarity index 100% rename from NzbDrone.Core/DataAugmentation/Scene/SceneMappingProxy.cs rename to src/NzbDrone.Core/DataAugmentation/Scene/SceneMappingProxy.cs diff --git a/NzbDrone.Core/DataAugmentation/Scene/SceneMappingRepository.cs b/src/NzbDrone.Core/DataAugmentation/Scene/SceneMappingRepository.cs similarity index 100% rename from NzbDrone.Core/DataAugmentation/Scene/SceneMappingRepository.cs rename to src/NzbDrone.Core/DataAugmentation/Scene/SceneMappingRepository.cs diff --git a/NzbDrone.Core/DataAugmentation/Scene/SceneMappingService.cs b/src/NzbDrone.Core/DataAugmentation/Scene/SceneMappingService.cs similarity index 100% rename from NzbDrone.Core/DataAugmentation/Scene/SceneMappingService.cs rename to src/NzbDrone.Core/DataAugmentation/Scene/SceneMappingService.cs diff --git a/NzbDrone.Core/DataAugmentation/Scene/UpdateSceneMappingCommand.cs b/src/NzbDrone.Core/DataAugmentation/Scene/UpdateSceneMappingCommand.cs similarity index 100% rename from NzbDrone.Core/DataAugmentation/Scene/UpdateSceneMappingCommand.cs rename to src/NzbDrone.Core/DataAugmentation/Scene/UpdateSceneMappingCommand.cs diff --git a/NzbDrone.Core/DataAugmentation/Xem/Model/XemResult.cs b/src/NzbDrone.Core/DataAugmentation/Xem/Model/XemResult.cs similarity index 100% rename from NzbDrone.Core/DataAugmentation/Xem/Model/XemResult.cs rename to src/NzbDrone.Core/DataAugmentation/Xem/Model/XemResult.cs diff --git a/NzbDrone.Core/DataAugmentation/Xem/Model/XemSceneTvdbMapping.cs b/src/NzbDrone.Core/DataAugmentation/Xem/Model/XemSceneTvdbMapping.cs similarity index 100% rename from NzbDrone.Core/DataAugmentation/Xem/Model/XemSceneTvdbMapping.cs rename to src/NzbDrone.Core/DataAugmentation/Xem/Model/XemSceneTvdbMapping.cs diff --git a/NzbDrone.Core/DataAugmentation/Xem/Model/XemValues.cs b/src/NzbDrone.Core/DataAugmentation/Xem/Model/XemValues.cs similarity index 100% rename from NzbDrone.Core/DataAugmentation/Xem/Model/XemValues.cs rename to src/NzbDrone.Core/DataAugmentation/Xem/Model/XemValues.cs diff --git a/NzbDrone.Core/DataAugmentation/Xem/UpdateXemMappingsCommand.cs b/src/NzbDrone.Core/DataAugmentation/Xem/UpdateXemMappingsCommand.cs similarity index 100% rename from NzbDrone.Core/DataAugmentation/Xem/UpdateXemMappingsCommand.cs rename to src/NzbDrone.Core/DataAugmentation/Xem/UpdateXemMappingsCommand.cs diff --git a/NzbDrone.Core/DataAugmentation/Xem/XemProxy.cs b/src/NzbDrone.Core/DataAugmentation/Xem/XemProxy.cs similarity index 100% rename from NzbDrone.Core/DataAugmentation/Xem/XemProxy.cs rename to src/NzbDrone.Core/DataAugmentation/Xem/XemProxy.cs diff --git a/NzbDrone.Core/DataAugmentation/Xem/XemService.cs b/src/NzbDrone.Core/DataAugmentation/Xem/XemService.cs similarity index 100% rename from NzbDrone.Core/DataAugmentation/Xem/XemService.cs rename to src/NzbDrone.Core/DataAugmentation/Xem/XemService.cs diff --git a/NzbDrone.Core/Datastore/BasicRepository.cs b/src/NzbDrone.Core/Datastore/BasicRepository.cs similarity index 100% rename from NzbDrone.Core/Datastore/BasicRepository.cs rename to src/NzbDrone.Core/Datastore/BasicRepository.cs diff --git a/NzbDrone.Core/Datastore/ConnectionStringFactory.cs b/src/NzbDrone.Core/Datastore/ConnectionStringFactory.cs similarity index 100% rename from NzbDrone.Core/Datastore/ConnectionStringFactory.cs rename to src/NzbDrone.Core/Datastore/ConnectionStringFactory.cs diff --git a/NzbDrone.Core/Datastore/Converters/BooleanIntConverter.cs b/src/NzbDrone.Core/Datastore/Converters/BooleanIntConverter.cs similarity index 100% rename from NzbDrone.Core/Datastore/Converters/BooleanIntConverter.cs rename to src/NzbDrone.Core/Datastore/Converters/BooleanIntConverter.cs diff --git a/NzbDrone.Core/Datastore/Converters/EmbeddedDocumentConverter.cs b/src/NzbDrone.Core/Datastore/Converters/EmbeddedDocumentConverter.cs similarity index 100% rename from NzbDrone.Core/Datastore/Converters/EmbeddedDocumentConverter.cs rename to src/NzbDrone.Core/Datastore/Converters/EmbeddedDocumentConverter.cs diff --git a/NzbDrone.Core/Datastore/Converters/EnumIntConverter.cs b/src/NzbDrone.Core/Datastore/Converters/EnumIntConverter.cs similarity index 100% rename from NzbDrone.Core/Datastore/Converters/EnumIntConverter.cs rename to src/NzbDrone.Core/Datastore/Converters/EnumIntConverter.cs diff --git a/NzbDrone.Core/Datastore/Converters/Int32Converter.cs b/src/NzbDrone.Core/Datastore/Converters/Int32Converter.cs similarity index 100% rename from NzbDrone.Core/Datastore/Converters/Int32Converter.cs rename to src/NzbDrone.Core/Datastore/Converters/Int32Converter.cs diff --git a/NzbDrone.Core/Datastore/Converters/ProviderSettingConverter.cs b/src/NzbDrone.Core/Datastore/Converters/ProviderSettingConverter.cs similarity index 100% rename from NzbDrone.Core/Datastore/Converters/ProviderSettingConverter.cs rename to src/NzbDrone.Core/Datastore/Converters/ProviderSettingConverter.cs diff --git a/NzbDrone.Core/Datastore/Converters/QualityIntConverter.cs b/src/NzbDrone.Core/Datastore/Converters/QualityIntConverter.cs similarity index 100% rename from NzbDrone.Core/Datastore/Converters/QualityIntConverter.cs rename to src/NzbDrone.Core/Datastore/Converters/QualityIntConverter.cs diff --git a/NzbDrone.Core/Datastore/Converters/UtcConverter.cs b/src/NzbDrone.Core/Datastore/Converters/UtcConverter.cs similarity index 100% rename from NzbDrone.Core/Datastore/Converters/UtcConverter.cs rename to src/NzbDrone.Core/Datastore/Converters/UtcConverter.cs diff --git a/NzbDrone.Core/Datastore/Database.cs b/src/NzbDrone.Core/Datastore/Database.cs similarity index 100% rename from NzbDrone.Core/Datastore/Database.cs rename to src/NzbDrone.Core/Datastore/Database.cs diff --git a/NzbDrone.Core/Datastore/DbFactory.cs b/src/NzbDrone.Core/Datastore/DbFactory.cs similarity index 100% rename from NzbDrone.Core/Datastore/DbFactory.cs rename to src/NzbDrone.Core/Datastore/DbFactory.cs diff --git a/NzbDrone.Core/Datastore/Events/ModelEvent.cs b/src/NzbDrone.Core/Datastore/Events/ModelEvent.cs similarity index 100% rename from NzbDrone.Core/Datastore/Events/ModelEvent.cs rename to src/NzbDrone.Core/Datastore/Events/ModelEvent.cs diff --git a/NzbDrone.Core/Datastore/IEmbeddedDocument.cs b/src/NzbDrone.Core/Datastore/IEmbeddedDocument.cs similarity index 100% rename from NzbDrone.Core/Datastore/IEmbeddedDocument.cs rename to src/NzbDrone.Core/Datastore/IEmbeddedDocument.cs diff --git a/NzbDrone.Core/Datastore/LazyList.cs b/src/NzbDrone.Core/Datastore/LazyList.cs similarity index 100% rename from NzbDrone.Core/Datastore/LazyList.cs rename to src/NzbDrone.Core/Datastore/LazyList.cs diff --git a/NzbDrone.Core/Datastore/MappingExtensions.cs b/src/NzbDrone.Core/Datastore/MappingExtensions.cs similarity index 97% rename from NzbDrone.Core/Datastore/MappingExtensions.cs rename to src/NzbDrone.Core/Datastore/MappingExtensions.cs index bbaf838f2..509d81bca 100644 --- a/NzbDrone.Core/Datastore/MappingExtensions.cs +++ b/src/NzbDrone.Core/Datastore/MappingExtensions.cs @@ -1,61 +1,61 @@ -using System; -using System.Reflection; -using Marr.Data; -using Marr.Data.Mapping; -using NzbDrone.Common.Reflection; - -namespace NzbDrone.Core.Datastore -{ - public static class MappingExtensions - { - - public static ColumnMapBuilder MapResultSet(this FluentMappings.MappingsFluentEntity mapBuilder) where T : ResultSet, new() - { - return mapBuilder - .Columns - .AutoMapPropertiesWhere(IsMappableProperty); - } - - - public static ColumnMapBuilder RegisterModel(this FluentMappings.MappingsFluentEntity mapBuilder, string tableName = null) where T : ModelBase, new() - { - return mapBuilder.Table.MapTable(tableName) - .Columns - .AutoMapPropertiesWhere(IsMappableProperty) - .PrefixAltNames(String.Format("{0}_", typeof(T).Name)) - .For(c => c.Id) - .SetPrimaryKey() - .SetReturnValue() - .SetAutoIncrement(); - } - - public static RelationshipBuilder AutoMapChildModels(this ColumnMapBuilder mapBuilder) - { - return mapBuilder.Relationships.AutoMapPropertiesWhere(m => - m.MemberType == MemberTypes.Property && - typeof(ModelBase).IsAssignableFrom(((PropertyInfo) m).PropertyType)); - } - - public static bool IsMappableProperty(MemberInfo memberInfo) - { - var propertyInfo = memberInfo as PropertyInfo; - - if (propertyInfo == null) return false; - - - if (!propertyInfo.IsReadable() || !propertyInfo.IsWritable()) - { - return false; - } - - if (propertyInfo.PropertyType.IsSimpleType() || MapRepository.Instance.TypeConverters.ContainsKey(propertyInfo.PropertyType)) - { - return true; - } - - return false; - } - - - } +using System; +using System.Reflection; +using Marr.Data; +using Marr.Data.Mapping; +using NzbDrone.Common.Reflection; + +namespace NzbDrone.Core.Datastore +{ + public static class MappingExtensions + { + + public static ColumnMapBuilder MapResultSet(this FluentMappings.MappingsFluentEntity mapBuilder) where T : ResultSet, new() + { + return mapBuilder + .Columns + .AutoMapPropertiesWhere(IsMappableProperty); + } + + + public static ColumnMapBuilder RegisterModel(this FluentMappings.MappingsFluentEntity mapBuilder, string tableName = null) where T : ModelBase, new() + { + return mapBuilder.Table.MapTable(tableName) + .Columns + .AutoMapPropertiesWhere(IsMappableProperty) + .PrefixAltNames(String.Format("{0}_", typeof(T).Name)) + .For(c => c.Id) + .SetPrimaryKey() + .SetReturnValue() + .SetAutoIncrement(); + } + + public static RelationshipBuilder AutoMapChildModels(this ColumnMapBuilder mapBuilder) + { + return mapBuilder.Relationships.AutoMapPropertiesWhere(m => + m.MemberType == MemberTypes.Property && + typeof(ModelBase).IsAssignableFrom(((PropertyInfo) m).PropertyType)); + } + + public static bool IsMappableProperty(MemberInfo memberInfo) + { + var propertyInfo = memberInfo as PropertyInfo; + + if (propertyInfo == null) return false; + + + if (!propertyInfo.IsReadable() || !propertyInfo.IsWritable()) + { + return false; + } + + if (propertyInfo.PropertyType.IsSimpleType() || MapRepository.Instance.TypeConverters.ContainsKey(propertyInfo.PropertyType)) + { + return true; + } + + return false; + } + + + } } \ No newline at end of file diff --git a/NzbDrone.Core/Datastore/Migration/001_InitialSetup.cs b/src/NzbDrone.Core/Datastore/Migration/001_InitialSetup.cs similarity index 100% rename from NzbDrone.Core/Datastore/Migration/001_InitialSetup.cs rename to src/NzbDrone.Core/Datastore/Migration/001_InitialSetup.cs diff --git a/NzbDrone.Core/Datastore/Migration/002_Remove_tvrage_imdb_unique_constraint.cs b/src/NzbDrone.Core/Datastore/Migration/002_Remove_tvrage_imdb_unique_constraint.cs similarity index 100% rename from NzbDrone.Core/Datastore/Migration/002_Remove_tvrage_imdb_unique_constraint.cs rename to src/NzbDrone.Core/Datastore/Migration/002_Remove_tvrage_imdb_unique_constraint.cs diff --git a/NzbDrone.Core/Datastore/Migration/003_remove_clean_title_from_scene_mapping.cs b/src/NzbDrone.Core/Datastore/Migration/003_remove_clean_title_from_scene_mapping.cs similarity index 100% rename from NzbDrone.Core/Datastore/Migration/003_remove_clean_title_from_scene_mapping.cs rename to src/NzbDrone.Core/Datastore/Migration/003_remove_clean_title_from_scene_mapping.cs diff --git a/NzbDrone.Core/Datastore/Migration/004_updated_history.cs b/src/NzbDrone.Core/Datastore/Migration/004_updated_history.cs similarity index 100% rename from NzbDrone.Core/Datastore/Migration/004_updated_history.cs rename to src/NzbDrone.Core/Datastore/Migration/004_updated_history.cs diff --git a/NzbDrone.Core/Datastore/Migration/005_added_eventtype_to_history.cs b/src/NzbDrone.Core/Datastore/Migration/005_added_eventtype_to_history.cs similarity index 100% rename from NzbDrone.Core/Datastore/Migration/005_added_eventtype_to_history.cs rename to src/NzbDrone.Core/Datastore/Migration/005_added_eventtype_to_history.cs diff --git a/NzbDrone.Core/Datastore/Migration/006_add_index_to_log_time.cs b/src/NzbDrone.Core/Datastore/Migration/006_add_index_to_log_time.cs similarity index 100% rename from NzbDrone.Core/Datastore/Migration/006_add_index_to_log_time.cs rename to src/NzbDrone.Core/Datastore/Migration/006_add_index_to_log_time.cs diff --git a/NzbDrone.Core/Datastore/Migration/007_add_renameEpisodes_to_naming.cs b/src/NzbDrone.Core/Datastore/Migration/007_add_renameEpisodes_to_naming.cs similarity index 100% rename from NzbDrone.Core/Datastore/Migration/007_add_renameEpisodes_to_naming.cs rename to src/NzbDrone.Core/Datastore/Migration/007_add_renameEpisodes_to_naming.cs diff --git a/NzbDrone.Core/Datastore/Migration/008_remove_backlog.cs b/src/NzbDrone.Core/Datastore/Migration/008_remove_backlog.cs similarity index 100% rename from NzbDrone.Core/Datastore/Migration/008_remove_backlog.cs rename to src/NzbDrone.Core/Datastore/Migration/008_remove_backlog.cs diff --git a/NzbDrone.Core/Datastore/Migration/009_fix_renameEpisodes.cs b/src/NzbDrone.Core/Datastore/Migration/009_fix_renameEpisodes.cs similarity index 100% rename from NzbDrone.Core/Datastore/Migration/009_fix_renameEpisodes.cs rename to src/NzbDrone.Core/Datastore/Migration/009_fix_renameEpisodes.cs diff --git a/NzbDrone.Core/Datastore/Migration/010_add_monitored.cs b/src/NzbDrone.Core/Datastore/Migration/010_add_monitored.cs similarity index 100% rename from NzbDrone.Core/Datastore/Migration/010_add_monitored.cs rename to src/NzbDrone.Core/Datastore/Migration/010_add_monitored.cs diff --git a/NzbDrone.Core/Datastore/Migration/011_remove_ignored.cs b/src/NzbDrone.Core/Datastore/Migration/011_remove_ignored.cs similarity index 100% rename from NzbDrone.Core/Datastore/Migration/011_remove_ignored.cs rename to src/NzbDrone.Core/Datastore/Migration/011_remove_ignored.cs diff --git a/NzbDrone.Core/Datastore/Migration/012_remove_custom_start_date.cs b/src/NzbDrone.Core/Datastore/Migration/012_remove_custom_start_date.cs similarity index 100% rename from NzbDrone.Core/Datastore/Migration/012_remove_custom_start_date.cs rename to src/NzbDrone.Core/Datastore/Migration/012_remove_custom_start_date.cs diff --git a/NzbDrone.Core/Datastore/Migration/013_add_air_date_utc.cs b/src/NzbDrone.Core/Datastore/Migration/013_add_air_date_utc.cs similarity index 100% rename from NzbDrone.Core/Datastore/Migration/013_add_air_date_utc.cs rename to src/NzbDrone.Core/Datastore/Migration/013_add_air_date_utc.cs diff --git a/NzbDrone.Core/Datastore/Migration/014_drop_air_date.cs b/src/NzbDrone.Core/Datastore/Migration/014_drop_air_date.cs similarity index 100% rename from NzbDrone.Core/Datastore/Migration/014_drop_air_date.cs rename to src/NzbDrone.Core/Datastore/Migration/014_drop_air_date.cs diff --git a/NzbDrone.Core/Datastore/Migration/015_add_air_date_as_string.cs b/src/NzbDrone.Core/Datastore/Migration/015_add_air_date_as_string.cs similarity index 100% rename from NzbDrone.Core/Datastore/Migration/015_add_air_date_as_string.cs rename to src/NzbDrone.Core/Datastore/Migration/015_add_air_date_as_string.cs diff --git a/NzbDrone.Core/Datastore/Migration/016_updated_imported_history_item.cs b/src/NzbDrone.Core/Datastore/Migration/016_updated_imported_history_item.cs similarity index 100% rename from NzbDrone.Core/Datastore/Migration/016_updated_imported_history_item.cs rename to src/NzbDrone.Core/Datastore/Migration/016_updated_imported_history_item.cs diff --git a/NzbDrone.Core/Datastore/Migration/017_reset_scene_names.cs b/src/NzbDrone.Core/Datastore/Migration/017_reset_scene_names.cs similarity index 100% rename from NzbDrone.Core/Datastore/Migration/017_reset_scene_names.cs rename to src/NzbDrone.Core/Datastore/Migration/017_reset_scene_names.cs diff --git a/NzbDrone.Core/Datastore/Migration/018_remove_duplicates.cs b/src/NzbDrone.Core/Datastore/Migration/018_remove_duplicates.cs similarity index 100% rename from NzbDrone.Core/Datastore/Migration/018_remove_duplicates.cs rename to src/NzbDrone.Core/Datastore/Migration/018_remove_duplicates.cs diff --git a/NzbDrone.Core/Datastore/Migration/019_restore_unique_constraints.cs b/src/NzbDrone.Core/Datastore/Migration/019_restore_unique_constraints.cs similarity index 100% rename from NzbDrone.Core/Datastore/Migration/019_restore_unique_constraints.cs rename to src/NzbDrone.Core/Datastore/Migration/019_restore_unique_constraints.cs diff --git a/NzbDrone.Core/Datastore/Migration/020_add_year_and_seasons_to_series.cs b/src/NzbDrone.Core/Datastore/Migration/020_add_year_and_seasons_to_series.cs similarity index 100% rename from NzbDrone.Core/Datastore/Migration/020_add_year_and_seasons_to_series.cs rename to src/NzbDrone.Core/Datastore/Migration/020_add_year_and_seasons_to_series.cs diff --git a/NzbDrone.Core/Datastore/Migration/021_drop_seasons_table.cs b/src/NzbDrone.Core/Datastore/Migration/021_drop_seasons_table.cs similarity index 100% rename from NzbDrone.Core/Datastore/Migration/021_drop_seasons_table.cs rename to src/NzbDrone.Core/Datastore/Migration/021_drop_seasons_table.cs diff --git a/NzbDrone.Core/Datastore/Migration/022_move_notification_to_generic_provider.cs b/src/NzbDrone.Core/Datastore/Migration/022_move_notification_to_generic_provider.cs similarity index 100% rename from NzbDrone.Core/Datastore/Migration/022_move_notification_to_generic_provider.cs rename to src/NzbDrone.Core/Datastore/Migration/022_move_notification_to_generic_provider.cs diff --git a/NzbDrone.Core/Datastore/Migration/023_add_config_contract_to_indexers.cs b/src/NzbDrone.Core/Datastore/Migration/023_add_config_contract_to_indexers.cs similarity index 100% rename from NzbDrone.Core/Datastore/Migration/023_add_config_contract_to_indexers.cs rename to src/NzbDrone.Core/Datastore/Migration/023_add_config_contract_to_indexers.cs diff --git a/NzbDrone.Core/Datastore/Migration/Framework/MigrationContext.cs b/src/NzbDrone.Core/Datastore/Migration/Framework/MigrationContext.cs similarity index 100% rename from NzbDrone.Core/Datastore/Migration/Framework/MigrationContext.cs rename to src/NzbDrone.Core/Datastore/Migration/Framework/MigrationContext.cs diff --git a/NzbDrone.Core/Datastore/Migration/Framework/MigrationController.cs b/src/NzbDrone.Core/Datastore/Migration/Framework/MigrationController.cs similarity index 100% rename from NzbDrone.Core/Datastore/Migration/Framework/MigrationController.cs rename to src/NzbDrone.Core/Datastore/Migration/Framework/MigrationController.cs diff --git a/NzbDrone.Core/Datastore/Migration/Framework/MigrationExtension.cs b/src/NzbDrone.Core/Datastore/Migration/Framework/MigrationExtension.cs similarity index 100% rename from NzbDrone.Core/Datastore/Migration/Framework/MigrationExtension.cs rename to src/NzbDrone.Core/Datastore/Migration/Framework/MigrationExtension.cs diff --git a/NzbDrone.Core/Datastore/Migration/Framework/MigrationLogger.cs b/src/NzbDrone.Core/Datastore/Migration/Framework/MigrationLogger.cs similarity index 100% rename from NzbDrone.Core/Datastore/Migration/Framework/MigrationLogger.cs rename to src/NzbDrone.Core/Datastore/Migration/Framework/MigrationLogger.cs diff --git a/NzbDrone.Core/Datastore/Migration/Framework/MigrationOptions.cs b/src/NzbDrone.Core/Datastore/Migration/Framework/MigrationOptions.cs similarity index 100% rename from NzbDrone.Core/Datastore/Migration/Framework/MigrationOptions.cs rename to src/NzbDrone.Core/Datastore/Migration/Framework/MigrationOptions.cs diff --git a/NzbDrone.Core/Datastore/Migration/Framework/NzbDroneMigrationBase.cs b/src/NzbDrone.Core/Datastore/Migration/Framework/NzbDroneMigrationBase.cs similarity index 100% rename from NzbDrone.Core/Datastore/Migration/Framework/NzbDroneMigrationBase.cs rename to src/NzbDrone.Core/Datastore/Migration/Framework/NzbDroneMigrationBase.cs diff --git a/NzbDrone.Core/Datastore/Migration/Framework/SQLiteColumn.cs b/src/NzbDrone.Core/Datastore/Migration/Framework/SQLiteColumn.cs similarity index 100% rename from NzbDrone.Core/Datastore/Migration/Framework/SQLiteColumn.cs rename to src/NzbDrone.Core/Datastore/Migration/Framework/SQLiteColumn.cs diff --git a/NzbDrone.Core/Datastore/Migration/Framework/SQLiteIndex.cs b/src/NzbDrone.Core/Datastore/Migration/Framework/SQLiteIndex.cs similarity index 100% rename from NzbDrone.Core/Datastore/Migration/Framework/SQLiteIndex.cs rename to src/NzbDrone.Core/Datastore/Migration/Framework/SQLiteIndex.cs diff --git a/NzbDrone.Core/Datastore/Migration/Framework/SQLiteMigrationHelper (vaio's conflicted copy 2013-09-04).cs b/src/NzbDrone.Core/Datastore/Migration/Framework/SQLiteMigrationHelper (vaio's conflicted copy 2013-09-04).cs similarity index 100% rename from NzbDrone.Core/Datastore/Migration/Framework/SQLiteMigrationHelper (vaio's conflicted copy 2013-09-04).cs rename to src/NzbDrone.Core/Datastore/Migration/Framework/SQLiteMigrationHelper (vaio's conflicted copy 2013-09-04).cs diff --git a/NzbDrone.Core/Datastore/Migration/Framework/SQLiteMigrationHelper.cs b/src/NzbDrone.Core/Datastore/Migration/Framework/SQLiteMigrationHelper.cs similarity index 100% rename from NzbDrone.Core/Datastore/Migration/Framework/SQLiteMigrationHelper.cs rename to src/NzbDrone.Core/Datastore/Migration/Framework/SQLiteMigrationHelper.cs diff --git a/NzbDrone.Core/Datastore/Migration/Framework/SqliteAlter.cs b/src/NzbDrone.Core/Datastore/Migration/Framework/SqliteAlter.cs similarity index 100% rename from NzbDrone.Core/Datastore/Migration/Framework/SqliteAlter.cs rename to src/NzbDrone.Core/Datastore/Migration/Framework/SqliteAlter.cs diff --git a/NzbDrone.Core/Datastore/MigrationType.cs b/src/NzbDrone.Core/Datastore/MigrationType.cs similarity index 100% rename from NzbDrone.Core/Datastore/MigrationType.cs rename to src/NzbDrone.Core/Datastore/MigrationType.cs diff --git a/NzbDrone.Core/Datastore/ModelBase.cs b/src/NzbDrone.Core/Datastore/ModelBase.cs similarity index 100% rename from NzbDrone.Core/Datastore/ModelBase.cs rename to src/NzbDrone.Core/Datastore/ModelBase.cs diff --git a/NzbDrone.Core/Datastore/ModelNotFoundException.cs b/src/NzbDrone.Core/Datastore/ModelNotFoundException.cs similarity index 100% rename from NzbDrone.Core/Datastore/ModelNotFoundException.cs rename to src/NzbDrone.Core/Datastore/ModelNotFoundException.cs diff --git a/NzbDrone.Core/Datastore/PagingSpec.cs b/src/NzbDrone.Core/Datastore/PagingSpec.cs similarity index 100% rename from NzbDrone.Core/Datastore/PagingSpec.cs rename to src/NzbDrone.Core/Datastore/PagingSpec.cs diff --git a/NzbDrone.Core/Datastore/PagingSpecExtensions.cs b/src/NzbDrone.Core/Datastore/PagingSpecExtensions.cs similarity index 100% rename from NzbDrone.Core/Datastore/PagingSpecExtensions.cs rename to src/NzbDrone.Core/Datastore/PagingSpecExtensions.cs diff --git a/NzbDrone.Core/Datastore/RelationshipExtensions.cs b/src/NzbDrone.Core/Datastore/RelationshipExtensions.cs similarity index 100% rename from NzbDrone.Core/Datastore/RelationshipExtensions.cs rename to src/NzbDrone.Core/Datastore/RelationshipExtensions.cs diff --git a/NzbDrone.Core/Datastore/ResultSet.cs b/src/NzbDrone.Core/Datastore/ResultSet.cs similarity index 100% rename from NzbDrone.Core/Datastore/ResultSet.cs rename to src/NzbDrone.Core/Datastore/ResultSet.cs diff --git a/NzbDrone.Core/Datastore/TableMapping.cs b/src/NzbDrone.Core/Datastore/TableMapping.cs similarity index 100% rename from NzbDrone.Core/Datastore/TableMapping.cs rename to src/NzbDrone.Core/Datastore/TableMapping.cs diff --git a/NzbDrone.Core/DecisionEngine/DownloadDecisionMaker.cs b/src/NzbDrone.Core/DecisionEngine/DownloadDecisionMaker.cs similarity index 100% rename from NzbDrone.Core/DecisionEngine/DownloadDecisionMaker.cs rename to src/NzbDrone.Core/DecisionEngine/DownloadDecisionMaker.cs diff --git a/NzbDrone.Core/DecisionEngine/IDecisionEngineSpecification.cs b/src/NzbDrone.Core/DecisionEngine/IDecisionEngineSpecification.cs similarity index 100% rename from NzbDrone.Core/DecisionEngine/IDecisionEngineSpecification.cs rename to src/NzbDrone.Core/DecisionEngine/IDecisionEngineSpecification.cs diff --git a/NzbDrone.Core/DecisionEngine/IRejectWithReason.cs b/src/NzbDrone.Core/DecisionEngine/IRejectWithReason.cs similarity index 100% rename from NzbDrone.Core/DecisionEngine/IRejectWithReason.cs rename to src/NzbDrone.Core/DecisionEngine/IRejectWithReason.cs diff --git a/NzbDrone.Core/DecisionEngine/QualityUpgradableSpecification.cs b/src/NzbDrone.Core/DecisionEngine/QualityUpgradableSpecification.cs similarity index 100% rename from NzbDrone.Core/DecisionEngine/QualityUpgradableSpecification.cs rename to src/NzbDrone.Core/DecisionEngine/QualityUpgradableSpecification.cs diff --git a/NzbDrone.Core/DecisionEngine/Specifications/AcceptableSizeSpecification.cs b/src/NzbDrone.Core/DecisionEngine/Specifications/AcceptableSizeSpecification.cs similarity index 100% rename from NzbDrone.Core/DecisionEngine/Specifications/AcceptableSizeSpecification.cs rename to src/NzbDrone.Core/DecisionEngine/Specifications/AcceptableSizeSpecification.cs diff --git a/NzbDrone.Core/DecisionEngine/Specifications/CutoffSpecification.cs b/src/NzbDrone.Core/DecisionEngine/Specifications/CutoffSpecification.cs similarity index 100% rename from NzbDrone.Core/DecisionEngine/Specifications/CutoffSpecification.cs rename to src/NzbDrone.Core/DecisionEngine/Specifications/CutoffSpecification.cs diff --git a/NzbDrone.Core/DecisionEngine/Specifications/DownloadDecision.cs b/src/NzbDrone.Core/DecisionEngine/Specifications/DownloadDecision.cs similarity index 100% rename from NzbDrone.Core/DecisionEngine/Specifications/DownloadDecision.cs rename to src/NzbDrone.Core/DecisionEngine/Specifications/DownloadDecision.cs diff --git a/NzbDrone.Core/DecisionEngine/Specifications/LanguageSpecification.cs b/src/NzbDrone.Core/DecisionEngine/Specifications/LanguageSpecification.cs similarity index 100% rename from NzbDrone.Core/DecisionEngine/Specifications/LanguageSpecification.cs rename to src/NzbDrone.Core/DecisionEngine/Specifications/LanguageSpecification.cs diff --git a/NzbDrone.Core/DecisionEngine/Specifications/NotInQueueSpecification.cs b/src/NzbDrone.Core/DecisionEngine/Specifications/NotInQueueSpecification.cs similarity index 100% rename from NzbDrone.Core/DecisionEngine/Specifications/NotInQueueSpecification.cs rename to src/NzbDrone.Core/DecisionEngine/Specifications/NotInQueueSpecification.cs diff --git a/NzbDrone.Core/DecisionEngine/Specifications/NotRestrictedReleaseSpecification.cs b/src/NzbDrone.Core/DecisionEngine/Specifications/NotRestrictedReleaseSpecification.cs similarity index 100% rename from NzbDrone.Core/DecisionEngine/Specifications/NotRestrictedReleaseSpecification.cs rename to src/NzbDrone.Core/DecisionEngine/Specifications/NotRestrictedReleaseSpecification.cs diff --git a/NzbDrone.Core/DecisionEngine/Specifications/NotSampleSpecification.cs b/src/NzbDrone.Core/DecisionEngine/Specifications/NotSampleSpecification.cs similarity index 100% rename from NzbDrone.Core/DecisionEngine/Specifications/NotSampleSpecification.cs rename to src/NzbDrone.Core/DecisionEngine/Specifications/NotSampleSpecification.cs diff --git a/NzbDrone.Core/DecisionEngine/Specifications/QualityAllowedByProfileSpecification.cs b/src/NzbDrone.Core/DecisionEngine/Specifications/QualityAllowedByProfileSpecification.cs similarity index 100% rename from NzbDrone.Core/DecisionEngine/Specifications/QualityAllowedByProfileSpecification.cs rename to src/NzbDrone.Core/DecisionEngine/Specifications/QualityAllowedByProfileSpecification.cs diff --git a/NzbDrone.Core/DecisionEngine/Specifications/RetentionSpecification.cs b/src/NzbDrone.Core/DecisionEngine/Specifications/RetentionSpecification.cs similarity index 100% rename from NzbDrone.Core/DecisionEngine/Specifications/RetentionSpecification.cs rename to src/NzbDrone.Core/DecisionEngine/Specifications/RetentionSpecification.cs diff --git a/NzbDrone.Core/DecisionEngine/Specifications/RssSync/MonitoredEpisodeSpecification.cs b/src/NzbDrone.Core/DecisionEngine/Specifications/RssSync/MonitoredEpisodeSpecification.cs similarity index 100% rename from NzbDrone.Core/DecisionEngine/Specifications/RssSync/MonitoredEpisodeSpecification.cs rename to src/NzbDrone.Core/DecisionEngine/Specifications/RssSync/MonitoredEpisodeSpecification.cs diff --git a/NzbDrone.Core/DecisionEngine/Specifications/RssSync/ProperSpecification.cs b/src/NzbDrone.Core/DecisionEngine/Specifications/RssSync/ProperSpecification.cs similarity index 100% rename from NzbDrone.Core/DecisionEngine/Specifications/RssSync/ProperSpecification.cs rename to src/NzbDrone.Core/DecisionEngine/Specifications/RssSync/ProperSpecification.cs diff --git a/NzbDrone.Core/DecisionEngine/Specifications/RssSync/UpgradeHistorySpecification.cs b/src/NzbDrone.Core/DecisionEngine/Specifications/RssSync/UpgradeHistorySpecification.cs similarity index 100% rename from NzbDrone.Core/DecisionEngine/Specifications/RssSync/UpgradeHistorySpecification.cs rename to src/NzbDrone.Core/DecisionEngine/Specifications/RssSync/UpgradeHistorySpecification.cs diff --git a/NzbDrone.Core/DecisionEngine/Specifications/Search/DailyEpisodeMatchSpecification.cs b/src/NzbDrone.Core/DecisionEngine/Specifications/Search/DailyEpisodeMatchSpecification.cs similarity index 100% rename from NzbDrone.Core/DecisionEngine/Specifications/Search/DailyEpisodeMatchSpecification.cs rename to src/NzbDrone.Core/DecisionEngine/Specifications/Search/DailyEpisodeMatchSpecification.cs diff --git a/NzbDrone.Core/DecisionEngine/Specifications/Search/SeasonMatchSpecification.cs b/src/NzbDrone.Core/DecisionEngine/Specifications/Search/SeasonMatchSpecification.cs similarity index 100% rename from NzbDrone.Core/DecisionEngine/Specifications/Search/SeasonMatchSpecification.cs rename to src/NzbDrone.Core/DecisionEngine/Specifications/Search/SeasonMatchSpecification.cs diff --git a/NzbDrone.Core/DecisionEngine/Specifications/Search/SingleEpisodeMatchSpecification.cs b/src/NzbDrone.Core/DecisionEngine/Specifications/Search/SingleEpisodeMatchSpecification.cs similarity index 100% rename from NzbDrone.Core/DecisionEngine/Specifications/Search/SingleEpisodeMatchSpecification.cs rename to src/NzbDrone.Core/DecisionEngine/Specifications/Search/SingleEpisodeMatchSpecification.cs diff --git a/NzbDrone.Core/DecisionEngine/Specifications/Search/SingleEpisodeSearchMatchSpecification.cs b/src/NzbDrone.Core/DecisionEngine/Specifications/Search/SingleEpisodeSearchMatchSpecification.cs similarity index 100% rename from NzbDrone.Core/DecisionEngine/Specifications/Search/SingleEpisodeSearchMatchSpecification.cs rename to src/NzbDrone.Core/DecisionEngine/Specifications/Search/SingleEpisodeSearchMatchSpecification.cs diff --git a/NzbDrone.Core/DecisionEngine/Specifications/UpgradeDiskSpecification.cs b/src/NzbDrone.Core/DecisionEngine/Specifications/UpgradeDiskSpecification.cs similarity index 100% rename from NzbDrone.Core/DecisionEngine/Specifications/UpgradeDiskSpecification.cs rename to src/NzbDrone.Core/DecisionEngine/Specifications/UpgradeDiskSpecification.cs diff --git a/NzbDrone.Core/Download/Clients/BlackholeProvider.cs b/src/NzbDrone.Core/Download/Clients/BlackholeProvider.cs similarity index 100% rename from NzbDrone.Core/Download/Clients/BlackholeProvider.cs rename to src/NzbDrone.Core/Download/Clients/BlackholeProvider.cs diff --git a/NzbDrone.Core/Download/Clients/Nzbget/EnqueueResponse.cs b/src/NzbDrone.Core/Download/Clients/Nzbget/EnqueueResponse.cs similarity index 100% rename from NzbDrone.Core/Download/Clients/Nzbget/EnqueueResponse.cs rename to src/NzbDrone.Core/Download/Clients/Nzbget/EnqueueResponse.cs diff --git a/NzbDrone.Core/Download/Clients/Nzbget/ErrorModel.cs b/src/NzbDrone.Core/Download/Clients/Nzbget/ErrorModel.cs similarity index 100% rename from NzbDrone.Core/Download/Clients/Nzbget/ErrorModel.cs rename to src/NzbDrone.Core/Download/Clients/Nzbget/ErrorModel.cs diff --git a/NzbDrone.Core/Download/Clients/Nzbget/JsonError.cs b/src/NzbDrone.Core/Download/Clients/Nzbget/JsonError.cs similarity index 100% rename from NzbDrone.Core/Download/Clients/Nzbget/JsonError.cs rename to src/NzbDrone.Core/Download/Clients/Nzbget/JsonError.cs diff --git a/NzbDrone.Core/Download/Clients/Nzbget/JsonRequest.cs b/src/NzbDrone.Core/Download/Clients/Nzbget/JsonRequest.cs similarity index 100% rename from NzbDrone.Core/Download/Clients/Nzbget/JsonRequest.cs rename to src/NzbDrone.Core/Download/Clients/Nzbget/JsonRequest.cs diff --git a/NzbDrone.Core/Download/Clients/Nzbget/NzbGetQueue.cs b/src/NzbDrone.Core/Download/Clients/Nzbget/NzbGetQueue.cs similarity index 100% rename from NzbDrone.Core/Download/Clients/Nzbget/NzbGetQueue.cs rename to src/NzbDrone.Core/Download/Clients/Nzbget/NzbGetQueue.cs diff --git a/NzbDrone.Core/Download/Clients/Nzbget/NzbGetQueueItem.cs b/src/NzbDrone.Core/Download/Clients/Nzbget/NzbGetQueueItem.cs similarity index 100% rename from NzbDrone.Core/Download/Clients/Nzbget/NzbGetQueueItem.cs rename to src/NzbDrone.Core/Download/Clients/Nzbget/NzbGetQueueItem.cs diff --git a/NzbDrone.Core/Download/Clients/Nzbget/NzbgetClient.cs b/src/NzbDrone.Core/Download/Clients/Nzbget/NzbgetClient.cs similarity index 100% rename from NzbDrone.Core/Download/Clients/Nzbget/NzbgetClient.cs rename to src/NzbDrone.Core/Download/Clients/Nzbget/NzbgetClient.cs diff --git a/NzbDrone.Core/Download/Clients/Nzbget/PriorityType.cs b/src/NzbDrone.Core/Download/Clients/Nzbget/PriorityType.cs similarity index 100% rename from NzbDrone.Core/Download/Clients/Nzbget/PriorityType.cs rename to src/NzbDrone.Core/Download/Clients/Nzbget/PriorityType.cs diff --git a/NzbDrone.Core/Download/Clients/Nzbget/VersionModel.cs b/src/NzbDrone.Core/Download/Clients/Nzbget/VersionModel.cs similarity index 100% rename from NzbDrone.Core/Download/Clients/Nzbget/VersionModel.cs rename to src/NzbDrone.Core/Download/Clients/Nzbget/VersionModel.cs diff --git a/NzbDrone.Core/Download/Clients/PneumaticClient.cs b/src/NzbDrone.Core/Download/Clients/PneumaticClient.cs similarity index 100% rename from NzbDrone.Core/Download/Clients/PneumaticClient.cs rename to src/NzbDrone.Core/Download/Clients/PneumaticClient.cs diff --git a/NzbDrone.Core/Download/Clients/Sabnzbd/ConnectionInfoModel.cs b/src/NzbDrone.Core/Download/Clients/Sabnzbd/ConnectionInfoModel.cs similarity index 100% rename from NzbDrone.Core/Download/Clients/Sabnzbd/ConnectionInfoModel.cs rename to src/NzbDrone.Core/Download/Clients/Sabnzbd/ConnectionInfoModel.cs diff --git a/NzbDrone.Core/Download/Clients/Sabnzbd/JsonConverters/SabnzbdPriorityTypeConverter.cs b/src/NzbDrone.Core/Download/Clients/Sabnzbd/JsonConverters/SabnzbdPriorityTypeConverter.cs similarity index 100% rename from NzbDrone.Core/Download/Clients/Sabnzbd/JsonConverters/SabnzbdPriorityTypeConverter.cs rename to src/NzbDrone.Core/Download/Clients/Sabnzbd/JsonConverters/SabnzbdPriorityTypeConverter.cs diff --git a/NzbDrone.Core/Download/Clients/Sabnzbd/JsonConverters/SabnzbdQueueTimeConverter.cs b/src/NzbDrone.Core/Download/Clients/Sabnzbd/JsonConverters/SabnzbdQueueTimeConverter.cs similarity index 100% rename from NzbDrone.Core/Download/Clients/Sabnzbd/JsonConverters/SabnzbdQueueTimeConverter.cs rename to src/NzbDrone.Core/Download/Clients/Sabnzbd/JsonConverters/SabnzbdQueueTimeConverter.cs diff --git a/NzbDrone.Core/Download/Clients/Sabnzbd/SabAddResponse.cs b/src/NzbDrone.Core/Download/Clients/Sabnzbd/SabAddResponse.cs similarity index 100% rename from NzbDrone.Core/Download/Clients/Sabnzbd/SabAddResponse.cs rename to src/NzbDrone.Core/Download/Clients/Sabnzbd/SabAddResponse.cs diff --git a/NzbDrone.Core/Download/Clients/Sabnzbd/SabAutoConfigureService.cs b/src/NzbDrone.Core/Download/Clients/Sabnzbd/SabAutoConfigureService.cs similarity index 100% rename from NzbDrone.Core/Download/Clients/Sabnzbd/SabAutoConfigureService.cs rename to src/NzbDrone.Core/Download/Clients/Sabnzbd/SabAutoConfigureService.cs diff --git a/NzbDrone.Core/Download/Clients/Sabnzbd/SabCategoryModel.cs b/src/NzbDrone.Core/Download/Clients/Sabnzbd/SabCategoryModel.cs similarity index 100% rename from NzbDrone.Core/Download/Clients/Sabnzbd/SabCategoryModel.cs rename to src/NzbDrone.Core/Download/Clients/Sabnzbd/SabCategoryModel.cs diff --git a/NzbDrone.Core/Download/Clients/Sabnzbd/SabHistory.cs b/src/NzbDrone.Core/Download/Clients/Sabnzbd/SabHistory.cs similarity index 100% rename from NzbDrone.Core/Download/Clients/Sabnzbd/SabHistory.cs rename to src/NzbDrone.Core/Download/Clients/Sabnzbd/SabHistory.cs diff --git a/NzbDrone.Core/Download/Clients/Sabnzbd/SabHistoryItem.cs b/src/NzbDrone.Core/Download/Clients/Sabnzbd/SabHistoryItem.cs similarity index 100% rename from NzbDrone.Core/Download/Clients/Sabnzbd/SabHistoryItem.cs rename to src/NzbDrone.Core/Download/Clients/Sabnzbd/SabHistoryItem.cs diff --git a/NzbDrone.Core/Download/Clients/Sabnzbd/SabJsonError.cs b/src/NzbDrone.Core/Download/Clients/Sabnzbd/SabJsonError.cs similarity index 100% rename from NzbDrone.Core/Download/Clients/Sabnzbd/SabJsonError.cs rename to src/NzbDrone.Core/Download/Clients/Sabnzbd/SabJsonError.cs diff --git a/NzbDrone.Core/Download/Clients/Sabnzbd/SabModel.cs b/src/NzbDrone.Core/Download/Clients/Sabnzbd/SabModel.cs similarity index 100% rename from NzbDrone.Core/Download/Clients/Sabnzbd/SabModel.cs rename to src/NzbDrone.Core/Download/Clients/Sabnzbd/SabModel.cs diff --git a/NzbDrone.Core/Download/Clients/Sabnzbd/SabPriorityType.cs b/src/NzbDrone.Core/Download/Clients/Sabnzbd/SabPriorityType.cs similarity index 100% rename from NzbDrone.Core/Download/Clients/Sabnzbd/SabPriorityType.cs rename to src/NzbDrone.Core/Download/Clients/Sabnzbd/SabPriorityType.cs diff --git a/NzbDrone.Core/Download/Clients/Sabnzbd/SabQueue.cs b/src/NzbDrone.Core/Download/Clients/Sabnzbd/SabQueue.cs similarity index 100% rename from NzbDrone.Core/Download/Clients/Sabnzbd/SabQueue.cs rename to src/NzbDrone.Core/Download/Clients/Sabnzbd/SabQueue.cs diff --git a/NzbDrone.Core/Download/Clients/Sabnzbd/SabQueueItem.cs b/src/NzbDrone.Core/Download/Clients/Sabnzbd/SabQueueItem.cs similarity index 100% rename from NzbDrone.Core/Download/Clients/Sabnzbd/SabQueueItem.cs rename to src/NzbDrone.Core/Download/Clients/Sabnzbd/SabQueueItem.cs diff --git a/NzbDrone.Core/Download/Clients/Sabnzbd/SabVersionModel.cs b/src/NzbDrone.Core/Download/Clients/Sabnzbd/SabVersionModel.cs similarity index 100% rename from NzbDrone.Core/Download/Clients/Sabnzbd/SabVersionModel.cs rename to src/NzbDrone.Core/Download/Clients/Sabnzbd/SabVersionModel.cs diff --git a/NzbDrone.Core/Download/Clients/Sabnzbd/SabnzbdClient.cs b/src/NzbDrone.Core/Download/Clients/Sabnzbd/SabnzbdClient.cs similarity index 100% rename from NzbDrone.Core/Download/Clients/Sabnzbd/SabnzbdClient.cs rename to src/NzbDrone.Core/Download/Clients/Sabnzbd/SabnzbdClient.cs diff --git a/NzbDrone.Core/Download/DownloadApprovedReports.cs b/src/NzbDrone.Core/Download/DownloadApprovedReports.cs similarity index 100% rename from NzbDrone.Core/Download/DownloadApprovedReports.cs rename to src/NzbDrone.Core/Download/DownloadApprovedReports.cs diff --git a/NzbDrone.Core/Download/DownloadClientProvider.cs b/src/NzbDrone.Core/Download/DownloadClientProvider.cs similarity index 100% rename from NzbDrone.Core/Download/DownloadClientProvider.cs rename to src/NzbDrone.Core/Download/DownloadClientProvider.cs diff --git a/NzbDrone.Core/Download/DownloadClientType.cs b/src/NzbDrone.Core/Download/DownloadClientType.cs similarity index 100% rename from NzbDrone.Core/Download/DownloadClientType.cs rename to src/NzbDrone.Core/Download/DownloadClientType.cs diff --git a/NzbDrone.Core/Download/DownloadService.cs b/src/NzbDrone.Core/Download/DownloadService.cs similarity index 100% rename from NzbDrone.Core/Download/DownloadService.cs rename to src/NzbDrone.Core/Download/DownloadService.cs diff --git a/NzbDrone.Core/Download/EpisodeGrabbedEvent.cs b/src/NzbDrone.Core/Download/EpisodeGrabbedEvent.cs similarity index 100% rename from NzbDrone.Core/Download/EpisodeGrabbedEvent.cs rename to src/NzbDrone.Core/Download/EpisodeGrabbedEvent.cs diff --git a/NzbDrone.Core/Download/IDownloadClient.cs b/src/NzbDrone.Core/Download/IDownloadClient.cs similarity index 100% rename from NzbDrone.Core/Download/IDownloadClient.cs rename to src/NzbDrone.Core/Download/IDownloadClient.cs diff --git a/NzbDrone.Core/Download/QueueItem.cs b/src/NzbDrone.Core/Download/QueueItem.cs similarity index 100% rename from NzbDrone.Core/Download/QueueItem.cs rename to src/NzbDrone.Core/Download/QueueItem.cs diff --git a/NzbDrone.Core/Exceptions/BadRequestException.cs b/src/NzbDrone.Core/Exceptions/BadRequestException.cs similarity index 100% rename from NzbDrone.Core/Exceptions/BadRequestException.cs rename to src/NzbDrone.Core/Exceptions/BadRequestException.cs diff --git a/NzbDrone.Core/Exceptions/DownstreamException.cs b/src/NzbDrone.Core/Exceptions/DownstreamException.cs similarity index 100% rename from NzbDrone.Core/Exceptions/DownstreamException.cs rename to src/NzbDrone.Core/Exceptions/DownstreamException.cs diff --git a/NzbDrone.Core/Exceptions/NzbDroneClientException.cs b/src/NzbDrone.Core/Exceptions/NzbDroneClientException.cs similarity index 100% rename from NzbDrone.Core/Exceptions/NzbDroneClientException.cs rename to src/NzbDrone.Core/Exceptions/NzbDroneClientException.cs diff --git a/NzbDrone.Core/Exceptions/StatusCodeToExceptions.cs b/src/NzbDrone.Core/Exceptions/StatusCodeToExceptions.cs similarity index 100% rename from NzbDrone.Core/Exceptions/StatusCodeToExceptions.cs rename to src/NzbDrone.Core/Exceptions/StatusCodeToExceptions.cs diff --git a/NzbDrone.Core/Fluent.cs b/src/NzbDrone.Core/Fluent.cs similarity index 100% rename from NzbDrone.Core/Fluent.cs rename to src/NzbDrone.Core/Fluent.cs diff --git a/NzbDrone.Core/History/History.cs b/src/NzbDrone.Core/History/History.cs similarity index 100% rename from NzbDrone.Core/History/History.cs rename to src/NzbDrone.Core/History/History.cs diff --git a/NzbDrone.Core/History/HistoryRepository.cs b/src/NzbDrone.Core/History/HistoryRepository.cs similarity index 100% rename from NzbDrone.Core/History/HistoryRepository.cs rename to src/NzbDrone.Core/History/HistoryRepository.cs diff --git a/NzbDrone.Core/History/HistoryService.cs b/src/NzbDrone.Core/History/HistoryService.cs similarity index 100% rename from NzbDrone.Core/History/HistoryService.cs rename to src/NzbDrone.Core/History/HistoryService.cs diff --git a/NzbDrone.Core/Housekeeping/Housekeepers/CleanupOrphanedEpisodes.cs b/src/NzbDrone.Core/Housekeeping/Housekeepers/CleanupOrphanedEpisodes.cs similarity index 100% rename from NzbDrone.Core/Housekeeping/Housekeepers/CleanupOrphanedEpisodes.cs rename to src/NzbDrone.Core/Housekeeping/Housekeepers/CleanupOrphanedEpisodes.cs diff --git a/NzbDrone.Core/Housekeeping/Housekeepers/CleanupOrphanedHistoryItems.cs b/src/NzbDrone.Core/Housekeeping/Housekeepers/CleanupOrphanedHistoryItems.cs similarity index 100% rename from NzbDrone.Core/Housekeeping/Housekeepers/CleanupOrphanedHistoryItems.cs rename to src/NzbDrone.Core/Housekeeping/Housekeepers/CleanupOrphanedHistoryItems.cs diff --git a/NzbDrone.Core/Housekeeping/HousekeepingCommand.cs b/src/NzbDrone.Core/Housekeeping/HousekeepingCommand.cs similarity index 100% rename from NzbDrone.Core/Housekeeping/HousekeepingCommand.cs rename to src/NzbDrone.Core/Housekeeping/HousekeepingCommand.cs diff --git a/NzbDrone.Core/Housekeeping/HousekeepingService.cs b/src/NzbDrone.Core/Housekeeping/HousekeepingService.cs similarity index 100% rename from NzbDrone.Core/Housekeeping/HousekeepingService.cs rename to src/NzbDrone.Core/Housekeeping/HousekeepingService.cs diff --git a/NzbDrone.Core/Housekeeping/IHousekeepingTask.cs b/src/NzbDrone.Core/Housekeeping/IHousekeepingTask.cs similarity index 100% rename from NzbDrone.Core/Housekeeping/IHousekeepingTask.cs rename to src/NzbDrone.Core/Housekeeping/IHousekeepingTask.cs diff --git a/NzbDrone.Core/IndexerSearch/Definitions/DailyEpisodeSearchCriteria.cs b/src/NzbDrone.Core/IndexerSearch/Definitions/DailyEpisodeSearchCriteria.cs similarity index 100% rename from NzbDrone.Core/IndexerSearch/Definitions/DailyEpisodeSearchCriteria.cs rename to src/NzbDrone.Core/IndexerSearch/Definitions/DailyEpisodeSearchCriteria.cs diff --git a/NzbDrone.Core/IndexerSearch/Definitions/SearchCriteriaBase.cs b/src/NzbDrone.Core/IndexerSearch/Definitions/SearchCriteriaBase.cs similarity index 100% rename from NzbDrone.Core/IndexerSearch/Definitions/SearchCriteriaBase.cs rename to src/NzbDrone.Core/IndexerSearch/Definitions/SearchCriteriaBase.cs diff --git a/NzbDrone.Core/IndexerSearch/Definitions/SeasonSearchCriteria.cs b/src/NzbDrone.Core/IndexerSearch/Definitions/SeasonSearchCriteria.cs similarity index 100% rename from NzbDrone.Core/IndexerSearch/Definitions/SeasonSearchCriteria.cs rename to src/NzbDrone.Core/IndexerSearch/Definitions/SeasonSearchCriteria.cs diff --git a/NzbDrone.Core/IndexerSearch/Definitions/SingleEpisodeSearchCriteria.cs b/src/NzbDrone.Core/IndexerSearch/Definitions/SingleEpisodeSearchCriteria.cs similarity index 100% rename from NzbDrone.Core/IndexerSearch/Definitions/SingleEpisodeSearchCriteria.cs rename to src/NzbDrone.Core/IndexerSearch/Definitions/SingleEpisodeSearchCriteria.cs diff --git a/NzbDrone.Core/IndexerSearch/EpisodeSearchCommand.cs b/src/NzbDrone.Core/IndexerSearch/EpisodeSearchCommand.cs similarity index 100% rename from NzbDrone.Core/IndexerSearch/EpisodeSearchCommand.cs rename to src/NzbDrone.Core/IndexerSearch/EpisodeSearchCommand.cs diff --git a/NzbDrone.Core/IndexerSearch/EpisodeSearchService.cs b/src/NzbDrone.Core/IndexerSearch/EpisodeSearchService.cs similarity index 100% rename from NzbDrone.Core/IndexerSearch/EpisodeSearchService.cs rename to src/NzbDrone.Core/IndexerSearch/EpisodeSearchService.cs diff --git a/NzbDrone.Core/IndexerSearch/NzbSearchService.cs b/src/NzbDrone.Core/IndexerSearch/NzbSearchService.cs similarity index 100% rename from NzbDrone.Core/IndexerSearch/NzbSearchService.cs rename to src/NzbDrone.Core/IndexerSearch/NzbSearchService.cs diff --git a/NzbDrone.Core/IndexerSearch/SearchAndDownloadService.cs b/src/NzbDrone.Core/IndexerSearch/SearchAndDownloadService.cs similarity index 100% rename from NzbDrone.Core/IndexerSearch/SearchAndDownloadService.cs rename to src/NzbDrone.Core/IndexerSearch/SearchAndDownloadService.cs diff --git a/NzbDrone.Core/IndexerSearch/SeasonSearchCommand.cs b/src/NzbDrone.Core/IndexerSearch/SeasonSearchCommand.cs similarity index 100% rename from NzbDrone.Core/IndexerSearch/SeasonSearchCommand.cs rename to src/NzbDrone.Core/IndexerSearch/SeasonSearchCommand.cs diff --git a/NzbDrone.Core/IndexerSearch/SeasonSearchService.cs b/src/NzbDrone.Core/IndexerSearch/SeasonSearchService.cs similarity index 100% rename from NzbDrone.Core/IndexerSearch/SeasonSearchService.cs rename to src/NzbDrone.Core/IndexerSearch/SeasonSearchService.cs diff --git a/NzbDrone.Core/IndexerSearch/SeriesSearchCommand.cs b/src/NzbDrone.Core/IndexerSearch/SeriesSearchCommand.cs similarity index 100% rename from NzbDrone.Core/IndexerSearch/SeriesSearchCommand.cs rename to src/NzbDrone.Core/IndexerSearch/SeriesSearchCommand.cs diff --git a/NzbDrone.Core/IndexerSearch/SeriesSearchService.cs b/src/NzbDrone.Core/IndexerSearch/SeriesSearchService.cs similarity index 100% rename from NzbDrone.Core/IndexerSearch/SeriesSearchService.cs rename to src/NzbDrone.Core/IndexerSearch/SeriesSearchService.cs diff --git a/NzbDrone.Core/Indexers/BasicTorrentRssParser.cs b/src/NzbDrone.Core/Indexers/BasicTorrentRssParser.cs similarity index 100% rename from NzbDrone.Core/Indexers/BasicTorrentRssParser.cs rename to src/NzbDrone.Core/Indexers/BasicTorrentRssParser.cs diff --git a/NzbDrone.Core/Indexers/DownloadProtocols.cs b/src/NzbDrone.Core/Indexers/DownloadProtocols.cs similarity index 100% rename from NzbDrone.Core/Indexers/DownloadProtocols.cs rename to src/NzbDrone.Core/Indexers/DownloadProtocols.cs diff --git a/NzbDrone.Core/Indexers/Exceptions/ApiKeyException.cs b/src/NzbDrone.Core/Indexers/Exceptions/ApiKeyException.cs similarity index 100% rename from NzbDrone.Core/Indexers/Exceptions/ApiKeyException.cs rename to src/NzbDrone.Core/Indexers/Exceptions/ApiKeyException.cs diff --git a/NzbDrone.Core/Indexers/Eztv/Eztv.cs b/src/NzbDrone.Core/Indexers/Eztv/Eztv.cs similarity index 100% rename from NzbDrone.Core/Indexers/Eztv/Eztv.cs rename to src/NzbDrone.Core/Indexers/Eztv/Eztv.cs diff --git a/NzbDrone.Core/Indexers/FetchAndParseRssService.cs b/src/NzbDrone.Core/Indexers/FetchAndParseRssService.cs similarity index 100% rename from NzbDrone.Core/Indexers/FetchAndParseRssService.cs rename to src/NzbDrone.Core/Indexers/FetchAndParseRssService.cs diff --git a/NzbDrone.Core/Indexers/IIndexer.cs b/src/NzbDrone.Core/Indexers/IIndexer.cs similarity index 100% rename from NzbDrone.Core/Indexers/IIndexer.cs rename to src/NzbDrone.Core/Indexers/IIndexer.cs diff --git a/NzbDrone.Core/Indexers/IParseFeed.cs b/src/NzbDrone.Core/Indexers/IParseFeed.cs similarity index 100% rename from NzbDrone.Core/Indexers/IParseFeed.cs rename to src/NzbDrone.Core/Indexers/IParseFeed.cs diff --git a/NzbDrone.Core/Indexers/IndexerBase.cs b/src/NzbDrone.Core/Indexers/IndexerBase.cs similarity index 100% rename from NzbDrone.Core/Indexers/IndexerBase.cs rename to src/NzbDrone.Core/Indexers/IndexerBase.cs diff --git a/NzbDrone.Core/Indexers/IndexerDefinition.cs b/src/NzbDrone.Core/Indexers/IndexerDefinition.cs similarity index 100% rename from NzbDrone.Core/Indexers/IndexerDefinition.cs rename to src/NzbDrone.Core/Indexers/IndexerDefinition.cs diff --git a/NzbDrone.Core/Indexers/IndexerFactory.cs b/src/NzbDrone.Core/Indexers/IndexerFactory.cs similarity index 100% rename from NzbDrone.Core/Indexers/IndexerFactory.cs rename to src/NzbDrone.Core/Indexers/IndexerFactory.cs diff --git a/NzbDrone.Core/Indexers/IndexerFetchService.cs b/src/NzbDrone.Core/Indexers/IndexerFetchService.cs similarity index 100% rename from NzbDrone.Core/Indexers/IndexerFetchService.cs rename to src/NzbDrone.Core/Indexers/IndexerFetchService.cs diff --git a/NzbDrone.Core/Indexers/IndexerRepository.cs b/src/NzbDrone.Core/Indexers/IndexerRepository.cs similarity index 100% rename from NzbDrone.Core/Indexers/IndexerRepository.cs rename to src/NzbDrone.Core/Indexers/IndexerRepository.cs diff --git a/NzbDrone.Core/Indexers/IndexerSettingUpdatedEvent.cs b/src/NzbDrone.Core/Indexers/IndexerSettingUpdatedEvent.cs similarity index 100% rename from NzbDrone.Core/Indexers/IndexerSettingUpdatedEvent.cs rename to src/NzbDrone.Core/Indexers/IndexerSettingUpdatedEvent.cs diff --git a/NzbDrone.Core/Indexers/Newznab/Newznab.cs b/src/NzbDrone.Core/Indexers/Newznab/Newznab.cs similarity index 100% rename from NzbDrone.Core/Indexers/Newznab/Newznab.cs rename to src/NzbDrone.Core/Indexers/Newznab/Newznab.cs diff --git a/NzbDrone.Core/Indexers/Newznab/NewznabException.cs b/src/NzbDrone.Core/Indexers/Newznab/NewznabException.cs similarity index 100% rename from NzbDrone.Core/Indexers/Newznab/NewznabException.cs rename to src/NzbDrone.Core/Indexers/Newznab/NewznabException.cs diff --git a/NzbDrone.Core/Indexers/Newznab/NewznabParser.cs b/src/NzbDrone.Core/Indexers/Newznab/NewznabParser.cs similarity index 100% rename from NzbDrone.Core/Indexers/Newznab/NewznabParser.cs rename to src/NzbDrone.Core/Indexers/Newznab/NewznabParser.cs diff --git a/NzbDrone.Core/Indexers/Newznab/NewznabPreProcessor.cs b/src/NzbDrone.Core/Indexers/Newznab/NewznabPreProcessor.cs similarity index 100% rename from NzbDrone.Core/Indexers/Newznab/NewznabPreProcessor.cs rename to src/NzbDrone.Core/Indexers/Newznab/NewznabPreProcessor.cs diff --git a/NzbDrone.Core/Indexers/Newznab/NewznabSettings.cs b/src/NzbDrone.Core/Indexers/Newznab/NewznabSettings.cs similarity index 100% rename from NzbDrone.Core/Indexers/Newznab/NewznabSettings.cs rename to src/NzbDrone.Core/Indexers/Newznab/NewznabSettings.cs diff --git a/NzbDrone.Core/Indexers/Newznab/SizeParsingException.cs b/src/NzbDrone.Core/Indexers/Newznab/SizeParsingException.cs similarity index 100% rename from NzbDrone.Core/Indexers/Newznab/SizeParsingException.cs rename to src/NzbDrone.Core/Indexers/Newznab/SizeParsingException.cs diff --git a/NzbDrone.Core/Indexers/NewznabTestService.cs b/src/NzbDrone.Core/Indexers/NewznabTestService.cs similarity index 100% rename from NzbDrone.Core/Indexers/NewznabTestService.cs rename to src/NzbDrone.Core/Indexers/NewznabTestService.cs diff --git a/NzbDrone.Core/Indexers/Omgwtfnzbs/Omgwtfnzbs.cs b/src/NzbDrone.Core/Indexers/Omgwtfnzbs/Omgwtfnzbs.cs similarity index 100% rename from NzbDrone.Core/Indexers/Omgwtfnzbs/Omgwtfnzbs.cs rename to src/NzbDrone.Core/Indexers/Omgwtfnzbs/Omgwtfnzbs.cs diff --git a/NzbDrone.Core/Indexers/Omgwtfnzbs/OmgwtfnzbsParser.cs b/src/NzbDrone.Core/Indexers/Omgwtfnzbs/OmgwtfnzbsParser.cs similarity index 100% rename from NzbDrone.Core/Indexers/Omgwtfnzbs/OmgwtfnzbsParser.cs rename to src/NzbDrone.Core/Indexers/Omgwtfnzbs/OmgwtfnzbsParser.cs diff --git a/NzbDrone.Core/Indexers/Omgwtfnzbs/OmgwtfnzbsSettings.cs b/src/NzbDrone.Core/Indexers/Omgwtfnzbs/OmgwtfnzbsSettings.cs similarity index 100% rename from NzbDrone.Core/Indexers/Omgwtfnzbs/OmgwtfnzbsSettings.cs rename to src/NzbDrone.Core/Indexers/Omgwtfnzbs/OmgwtfnzbsSettings.cs diff --git a/NzbDrone.Core/Indexers/RssParserBase.cs b/src/NzbDrone.Core/Indexers/RssParserBase.cs similarity index 100% rename from NzbDrone.Core/Indexers/RssParserBase.cs rename to src/NzbDrone.Core/Indexers/RssParserBase.cs diff --git a/NzbDrone.Core/Indexers/RssSyncCommand.cs b/src/NzbDrone.Core/Indexers/RssSyncCommand.cs similarity index 100% rename from NzbDrone.Core/Indexers/RssSyncCommand.cs rename to src/NzbDrone.Core/Indexers/RssSyncCommand.cs diff --git a/NzbDrone.Core/Indexers/RssSyncService.cs b/src/NzbDrone.Core/Indexers/RssSyncService.cs similarity index 100% rename from NzbDrone.Core/Indexers/RssSyncService.cs rename to src/NzbDrone.Core/Indexers/RssSyncService.cs diff --git a/NzbDrone.Core/Indexers/Wombles/Wombles.cs b/src/NzbDrone.Core/Indexers/Wombles/Wombles.cs similarity index 100% rename from NzbDrone.Core/Indexers/Wombles/Wombles.cs rename to src/NzbDrone.Core/Indexers/Wombles/Wombles.cs diff --git a/NzbDrone.Core/Indexers/Wombles/WomblesParser.cs b/src/NzbDrone.Core/Indexers/Wombles/WomblesParser.cs similarity index 100% rename from NzbDrone.Core/Indexers/Wombles/WomblesParser.cs rename to src/NzbDrone.Core/Indexers/Wombles/WomblesParser.cs diff --git a/NzbDrone.Core/Indexers/XElementExtensions.cs b/src/NzbDrone.Core/Indexers/XElementExtensions.cs similarity index 100% rename from NzbDrone.Core/Indexers/XElementExtensions.cs rename to src/NzbDrone.Core/Indexers/XElementExtensions.cs diff --git a/NzbDrone.Core/Instrumentation/Commands/ClearLogCommand.cs b/src/NzbDrone.Core/Instrumentation/Commands/ClearLogCommand.cs similarity index 100% rename from NzbDrone.Core/Instrumentation/Commands/ClearLogCommand.cs rename to src/NzbDrone.Core/Instrumentation/Commands/ClearLogCommand.cs diff --git a/NzbDrone.Core/Instrumentation/Commands/DeleteLogFilesCommand.cs b/src/NzbDrone.Core/Instrumentation/Commands/DeleteLogFilesCommand.cs similarity index 100% rename from NzbDrone.Core/Instrumentation/Commands/DeleteLogFilesCommand.cs rename to src/NzbDrone.Core/Instrumentation/Commands/DeleteLogFilesCommand.cs diff --git a/NzbDrone.Core/Instrumentation/Commands/TrimLogCommand.cs b/src/NzbDrone.Core/Instrumentation/Commands/TrimLogCommand.cs similarity index 100% rename from NzbDrone.Core/Instrumentation/Commands/TrimLogCommand.cs rename to src/NzbDrone.Core/Instrumentation/Commands/TrimLogCommand.cs diff --git a/NzbDrone.Core/Instrumentation/DatabaseTarget.cs b/src/NzbDrone.Core/Instrumentation/DatabaseTarget.cs similarity index 100% rename from NzbDrone.Core/Instrumentation/DatabaseTarget.cs rename to src/NzbDrone.Core/Instrumentation/DatabaseTarget.cs diff --git a/NzbDrone.Core/Instrumentation/DeleteLogFilesService.cs b/src/NzbDrone.Core/Instrumentation/DeleteLogFilesService.cs similarity index 100% rename from NzbDrone.Core/Instrumentation/DeleteLogFilesService.cs rename to src/NzbDrone.Core/Instrumentation/DeleteLogFilesService.cs diff --git a/NzbDrone.Core/Instrumentation/Log.cs b/src/NzbDrone.Core/Instrumentation/Log.cs similarity index 100% rename from NzbDrone.Core/Instrumentation/Log.cs rename to src/NzbDrone.Core/Instrumentation/Log.cs diff --git a/NzbDrone.Core/Instrumentation/LogRepository.cs b/src/NzbDrone.Core/Instrumentation/LogRepository.cs similarity index 100% rename from NzbDrone.Core/Instrumentation/LogRepository.cs rename to src/NzbDrone.Core/Instrumentation/LogRepository.cs diff --git a/NzbDrone.Core/Instrumentation/LogService.cs b/src/NzbDrone.Core/Instrumentation/LogService.cs similarity index 100% rename from NzbDrone.Core/Instrumentation/LogService.cs rename to src/NzbDrone.Core/Instrumentation/LogService.cs diff --git a/NzbDrone.Core/Instrumentation/LoggerExtensions.cs b/src/NzbDrone.Core/Instrumentation/LoggerExtensions.cs similarity index 100% rename from NzbDrone.Core/Instrumentation/LoggerExtensions.cs rename to src/NzbDrone.Core/Instrumentation/LoggerExtensions.cs diff --git a/NzbDrone.Core/Instrumentation/SetLoggingLevel.cs b/src/NzbDrone.Core/Instrumentation/SetLoggingLevel.cs similarity index 100% rename from NzbDrone.Core/Instrumentation/SetLoggingLevel.cs rename to src/NzbDrone.Core/Instrumentation/SetLoggingLevel.cs diff --git a/NzbDrone.Core/Jobs/JobRepository.cs b/src/NzbDrone.Core/Jobs/JobRepository.cs similarity index 100% rename from NzbDrone.Core/Jobs/JobRepository.cs rename to src/NzbDrone.Core/Jobs/JobRepository.cs diff --git a/NzbDrone.Core/Jobs/ScheduledTask.cs b/src/NzbDrone.Core/Jobs/ScheduledTask.cs similarity index 100% rename from NzbDrone.Core/Jobs/ScheduledTask.cs rename to src/NzbDrone.Core/Jobs/ScheduledTask.cs diff --git a/NzbDrone.Core/Jobs/Scheduler.cs b/src/NzbDrone.Core/Jobs/Scheduler.cs similarity index 100% rename from NzbDrone.Core/Jobs/Scheduler.cs rename to src/NzbDrone.Core/Jobs/Scheduler.cs diff --git a/NzbDrone.Core/Jobs/TaskManager.cs b/src/NzbDrone.Core/Jobs/TaskManager.cs similarity index 100% rename from NzbDrone.Core/Jobs/TaskManager.cs rename to src/NzbDrone.Core/Jobs/TaskManager.cs diff --git a/NzbDrone.Core/Lifecycle/ApplicationShutdownRequested.cs b/src/NzbDrone.Core/Lifecycle/ApplicationShutdownRequested.cs similarity index 100% rename from NzbDrone.Core/Lifecycle/ApplicationShutdownRequested.cs rename to src/NzbDrone.Core/Lifecycle/ApplicationShutdownRequested.cs diff --git a/NzbDrone.Core/Lifecycle/ApplicationStartedEvent.cs b/src/NzbDrone.Core/Lifecycle/ApplicationStartedEvent.cs similarity index 100% rename from NzbDrone.Core/Lifecycle/ApplicationStartedEvent.cs rename to src/NzbDrone.Core/Lifecycle/ApplicationStartedEvent.cs diff --git a/NzbDrone.Core/MediaCover/CoverAlreadyExistsSpecification.cs b/src/NzbDrone.Core/MediaCover/CoverAlreadyExistsSpecification.cs similarity index 96% rename from NzbDrone.Core/MediaCover/CoverAlreadyExistsSpecification.cs rename to src/NzbDrone.Core/MediaCover/CoverAlreadyExistsSpecification.cs index 5ab40e2f2..587df4392 100644 --- a/NzbDrone.Core/MediaCover/CoverAlreadyExistsSpecification.cs +++ b/src/NzbDrone.Core/MediaCover/CoverAlreadyExistsSpecification.cs @@ -1,50 +1,50 @@ -using NLog; -using NzbDrone.Common; -using NzbDrone.Common.Serializer; - -namespace NzbDrone.Core.MediaCover -{ - public interface ICoverExistsSpecification - { - bool AlreadyExists(string url, string path); - } - - public class CoverAlreadyExistsSpecification : ICoverExistsSpecification - { - private readonly IDiskProvider _diskProvider; - private readonly IHttpProvider _httpProvider; - private readonly Logger _logger; - - public CoverAlreadyExistsSpecification(IDiskProvider diskProvider, IHttpProvider httpProvider, Logger logger) - { - _diskProvider = diskProvider; - _httpProvider = httpProvider; - _logger = logger; - } - - public bool AlreadyExists(string url, string path) - { - if (!_diskProvider.FileExists(path)) - { - return false; - } - - var headers = _httpProvider.GetHeader(url); - - string sizeString; - - if (headers.TryGetValue(HttpProvider.CONTENT_LENGTH_HEADER, out sizeString)) - { - int size; - int.TryParse(sizeString, out size); - var fileSize = _diskProvider.GetFileSize(path); - - return fileSize == size; - } - - _logger.Warn("Couldn't find content-length header {0}", headers.ToJson()); - - return false; - } - } +using NLog; +using NzbDrone.Common; +using NzbDrone.Common.Serializer; + +namespace NzbDrone.Core.MediaCover +{ + public interface ICoverExistsSpecification + { + bool AlreadyExists(string url, string path); + } + + public class CoverAlreadyExistsSpecification : ICoverExistsSpecification + { + private readonly IDiskProvider _diskProvider; + private readonly IHttpProvider _httpProvider; + private readonly Logger _logger; + + public CoverAlreadyExistsSpecification(IDiskProvider diskProvider, IHttpProvider httpProvider, Logger logger) + { + _diskProvider = diskProvider; + _httpProvider = httpProvider; + _logger = logger; + } + + public bool AlreadyExists(string url, string path) + { + if (!_diskProvider.FileExists(path)) + { + return false; + } + + var headers = _httpProvider.GetHeader(url); + + string sizeString; + + if (headers.TryGetValue(HttpProvider.CONTENT_LENGTH_HEADER, out sizeString)) + { + int size; + int.TryParse(sizeString, out size); + var fileSize = _diskProvider.GetFileSize(path); + + return fileSize == size; + } + + _logger.Warn("Couldn't find content-length header {0}", headers.ToJson()); + + return false; + } + } } \ No newline at end of file diff --git a/NzbDrone.Core/MediaCover/MediaCover.cs b/src/NzbDrone.Core/MediaCover/MediaCover.cs similarity index 100% rename from NzbDrone.Core/MediaCover/MediaCover.cs rename to src/NzbDrone.Core/MediaCover/MediaCover.cs diff --git a/NzbDrone.Core/MediaCover/MediaCoverService.cs b/src/NzbDrone.Core/MediaCover/MediaCoverService.cs similarity index 100% rename from NzbDrone.Core/MediaCover/MediaCoverService.cs rename to src/NzbDrone.Core/MediaCover/MediaCoverService.cs diff --git a/NzbDrone.Core/MediaFiles/Commands/BackendCommandAttribute.cs b/src/NzbDrone.Core/MediaFiles/Commands/BackendCommandAttribute.cs similarity index 100% rename from NzbDrone.Core/MediaFiles/Commands/BackendCommandAttribute.cs rename to src/NzbDrone.Core/MediaFiles/Commands/BackendCommandAttribute.cs diff --git a/NzbDrone.Core/MediaFiles/Commands/CleanMediaFileDb.cs b/src/NzbDrone.Core/MediaFiles/Commands/CleanMediaFileDb.cs similarity index 100% rename from NzbDrone.Core/MediaFiles/Commands/CleanMediaFileDb.cs rename to src/NzbDrone.Core/MediaFiles/Commands/CleanMediaFileDb.cs diff --git a/NzbDrone.Core/MediaFiles/Commands/CleanUpRecycleBinCommand.cs b/src/NzbDrone.Core/MediaFiles/Commands/CleanUpRecycleBinCommand.cs similarity index 100% rename from NzbDrone.Core/MediaFiles/Commands/CleanUpRecycleBinCommand.cs rename to src/NzbDrone.Core/MediaFiles/Commands/CleanUpRecycleBinCommand.cs diff --git a/NzbDrone.Core/MediaFiles/Commands/DownloadedEpisodesScanCommand.cs b/src/NzbDrone.Core/MediaFiles/Commands/DownloadedEpisodesScanCommand.cs similarity index 100% rename from NzbDrone.Core/MediaFiles/Commands/DownloadedEpisodesScanCommand.cs rename to src/NzbDrone.Core/MediaFiles/Commands/DownloadedEpisodesScanCommand.cs diff --git a/NzbDrone.Core/MediaFiles/Commands/RenameSeasonCommand.cs b/src/NzbDrone.Core/MediaFiles/Commands/RenameSeasonCommand.cs similarity index 100% rename from NzbDrone.Core/MediaFiles/Commands/RenameSeasonCommand.cs rename to src/NzbDrone.Core/MediaFiles/Commands/RenameSeasonCommand.cs diff --git a/NzbDrone.Core/MediaFiles/Commands/RenameSeriesCommand.cs b/src/NzbDrone.Core/MediaFiles/Commands/RenameSeriesCommand.cs similarity index 100% rename from NzbDrone.Core/MediaFiles/Commands/RenameSeriesCommand.cs rename to src/NzbDrone.Core/MediaFiles/Commands/RenameSeriesCommand.cs diff --git a/NzbDrone.Core/MediaFiles/DiskScanService.cs b/src/NzbDrone.Core/MediaFiles/DiskScanService.cs similarity index 100% rename from NzbDrone.Core/MediaFiles/DiskScanService.cs rename to src/NzbDrone.Core/MediaFiles/DiskScanService.cs diff --git a/NzbDrone.Core/MediaFiles/DownloadedEpisodesImportService.cs b/src/NzbDrone.Core/MediaFiles/DownloadedEpisodesImportService.cs similarity index 100% rename from NzbDrone.Core/MediaFiles/DownloadedEpisodesImportService.cs rename to src/NzbDrone.Core/MediaFiles/DownloadedEpisodesImportService.cs diff --git a/NzbDrone.Core/MediaFiles/EpisodeFile.cs b/src/NzbDrone.Core/MediaFiles/EpisodeFile.cs similarity index 100% rename from NzbDrone.Core/MediaFiles/EpisodeFile.cs rename to src/NzbDrone.Core/MediaFiles/EpisodeFile.cs diff --git a/NzbDrone.Core/MediaFiles/EpisodeFileMovingService.cs b/src/NzbDrone.Core/MediaFiles/EpisodeFileMovingService.cs similarity index 100% rename from NzbDrone.Core/MediaFiles/EpisodeFileMovingService.cs rename to src/NzbDrone.Core/MediaFiles/EpisodeFileMovingService.cs diff --git a/NzbDrone.Core/MediaFiles/EpisodeImport/IImportDecisionEngineSpecification.cs b/src/NzbDrone.Core/MediaFiles/EpisodeImport/IImportDecisionEngineSpecification.cs similarity index 100% rename from NzbDrone.Core/MediaFiles/EpisodeImport/IImportDecisionEngineSpecification.cs rename to src/NzbDrone.Core/MediaFiles/EpisodeImport/IImportDecisionEngineSpecification.cs diff --git a/NzbDrone.Core/MediaFiles/EpisodeImport/ImportApprovedEpisodes.cs b/src/NzbDrone.Core/MediaFiles/EpisodeImport/ImportApprovedEpisodes.cs similarity index 100% rename from NzbDrone.Core/MediaFiles/EpisodeImport/ImportApprovedEpisodes.cs rename to src/NzbDrone.Core/MediaFiles/EpisodeImport/ImportApprovedEpisodes.cs diff --git a/NzbDrone.Core/MediaFiles/EpisodeImport/ImportDecision.cs b/src/NzbDrone.Core/MediaFiles/EpisodeImport/ImportDecision.cs similarity index 100% rename from NzbDrone.Core/MediaFiles/EpisodeImport/ImportDecision.cs rename to src/NzbDrone.Core/MediaFiles/EpisodeImport/ImportDecision.cs diff --git a/NzbDrone.Core/MediaFiles/EpisodeImport/ImportDecisionMaker.cs b/src/NzbDrone.Core/MediaFiles/EpisodeImport/ImportDecisionMaker.cs similarity index 100% rename from NzbDrone.Core/MediaFiles/EpisodeImport/ImportDecisionMaker.cs rename to src/NzbDrone.Core/MediaFiles/EpisodeImport/ImportDecisionMaker.cs diff --git a/NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/FreeSpaceSpecification.cs b/src/NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/FreeSpaceSpecification.cs similarity index 100% rename from NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/FreeSpaceSpecification.cs rename to src/NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/FreeSpaceSpecification.cs diff --git a/NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/NotInUseSpecification.cs b/src/NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/NotInUseSpecification.cs similarity index 100% rename from NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/NotInUseSpecification.cs rename to src/NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/NotInUseSpecification.cs diff --git a/NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/NotSampleSpecification.cs b/src/NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/NotSampleSpecification.cs similarity index 100% rename from NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/NotSampleSpecification.cs rename to src/NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/NotSampleSpecification.cs diff --git a/NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/NotUnpackingSpecification.cs b/src/NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/NotUnpackingSpecification.cs similarity index 100% rename from NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/NotUnpackingSpecification.cs rename to src/NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/NotUnpackingSpecification.cs diff --git a/NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/UpgradeSpecification.cs b/src/NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/UpgradeSpecification.cs similarity index 100% rename from NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/UpgradeSpecification.cs rename to src/NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/UpgradeSpecification.cs diff --git a/NzbDrone.Core/MediaFiles/Events/EpisodeDownloadedEvent.cs b/src/NzbDrone.Core/MediaFiles/Events/EpisodeDownloadedEvent.cs similarity index 100% rename from NzbDrone.Core/MediaFiles/Events/EpisodeDownloadedEvent.cs rename to src/NzbDrone.Core/MediaFiles/Events/EpisodeDownloadedEvent.cs diff --git a/NzbDrone.Core/MediaFiles/Events/EpisodeFileAddedEvent.cs b/src/NzbDrone.Core/MediaFiles/Events/EpisodeFileAddedEvent.cs similarity index 100% rename from NzbDrone.Core/MediaFiles/Events/EpisodeFileAddedEvent.cs rename to src/NzbDrone.Core/MediaFiles/Events/EpisodeFileAddedEvent.cs diff --git a/NzbDrone.Core/MediaFiles/Events/EpisodeFileDeletedEvent.cs b/src/NzbDrone.Core/MediaFiles/Events/EpisodeFileDeletedEvent.cs similarity index 100% rename from NzbDrone.Core/MediaFiles/Events/EpisodeFileDeletedEvent.cs rename to src/NzbDrone.Core/MediaFiles/Events/EpisodeFileDeletedEvent.cs diff --git a/NzbDrone.Core/MediaFiles/Events/EpisodeImportedEvent.cs b/src/NzbDrone.Core/MediaFiles/Events/EpisodeImportedEvent.cs similarity index 100% rename from NzbDrone.Core/MediaFiles/Events/EpisodeImportedEvent.cs rename to src/NzbDrone.Core/MediaFiles/Events/EpisodeImportedEvent.cs diff --git a/NzbDrone.Core/MediaFiles/Events/SeriesRenamedEvent.cs b/src/NzbDrone.Core/MediaFiles/Events/SeriesRenamedEvent.cs similarity index 100% rename from NzbDrone.Core/MediaFiles/Events/SeriesRenamedEvent.cs rename to src/NzbDrone.Core/MediaFiles/Events/SeriesRenamedEvent.cs diff --git a/NzbDrone.Core/MediaFiles/MediaFileExtensions.cs b/src/NzbDrone.Core/MediaFiles/MediaFileExtensions.cs similarity index 100% rename from NzbDrone.Core/MediaFiles/MediaFileExtensions.cs rename to src/NzbDrone.Core/MediaFiles/MediaFileExtensions.cs diff --git a/NzbDrone.Core/MediaFiles/MediaFileRepository.cs b/src/NzbDrone.Core/MediaFiles/MediaFileRepository.cs similarity index 100% rename from NzbDrone.Core/MediaFiles/MediaFileRepository.cs rename to src/NzbDrone.Core/MediaFiles/MediaFileRepository.cs diff --git a/NzbDrone.Core/MediaFiles/MediaFileService.cs b/src/NzbDrone.Core/MediaFiles/MediaFileService.cs similarity index 100% rename from NzbDrone.Core/MediaFiles/MediaFileService.cs rename to src/NzbDrone.Core/MediaFiles/MediaFileService.cs diff --git a/NzbDrone.Core/MediaFiles/MediaFileTableCleanupService.cs b/src/NzbDrone.Core/MediaFiles/MediaFileTableCleanupService.cs similarity index 100% rename from NzbDrone.Core/MediaFiles/MediaFileTableCleanupService.cs rename to src/NzbDrone.Core/MediaFiles/MediaFileTableCleanupService.cs diff --git a/NzbDrone.Core/MediaFiles/MediaInfo/MediaInfoModel.cs b/src/NzbDrone.Core/MediaFiles/MediaInfo/MediaInfoModel.cs similarity index 100% rename from NzbDrone.Core/MediaFiles/MediaInfo/MediaInfoModel.cs rename to src/NzbDrone.Core/MediaFiles/MediaInfo/MediaInfoModel.cs diff --git a/NzbDrone.Core/MediaFiles/MediaInfo/VideoFileInfoReader.cs b/src/NzbDrone.Core/MediaFiles/MediaInfo/VideoFileInfoReader.cs similarity index 100% rename from NzbDrone.Core/MediaFiles/MediaInfo/VideoFileInfoReader.cs rename to src/NzbDrone.Core/MediaFiles/MediaInfo/VideoFileInfoReader.cs diff --git a/NzbDrone.Core/MediaFiles/RecycleBinProvider.cs b/src/NzbDrone.Core/MediaFiles/RecycleBinProvider.cs similarity index 100% rename from NzbDrone.Core/MediaFiles/RecycleBinProvider.cs rename to src/NzbDrone.Core/MediaFiles/RecycleBinProvider.cs diff --git a/NzbDrone.Core/MediaFiles/RenameEpisodeFileService.cs b/src/NzbDrone.Core/MediaFiles/RenameEpisodeFileService.cs similarity index 100% rename from NzbDrone.Core/MediaFiles/RenameEpisodeFileService.cs rename to src/NzbDrone.Core/MediaFiles/RenameEpisodeFileService.cs diff --git a/NzbDrone.Core/MediaFiles/SameFilenameException.cs b/src/NzbDrone.Core/MediaFiles/SameFilenameException.cs similarity index 100% rename from NzbDrone.Core/MediaFiles/SameFilenameException.cs rename to src/NzbDrone.Core/MediaFiles/SameFilenameException.cs diff --git a/NzbDrone.Core/MediaFiles/UpgradeMediaFileService.cs b/src/NzbDrone.Core/MediaFiles/UpgradeMediaFileService.cs similarity index 100% rename from NzbDrone.Core/MediaFiles/UpgradeMediaFileService.cs rename to src/NzbDrone.Core/MediaFiles/UpgradeMediaFileService.cs diff --git a/NzbDrone.Core/MediaInfo.dll b/src/NzbDrone.Core/MediaInfo.dll similarity index 100% rename from NzbDrone.Core/MediaInfo.dll rename to src/NzbDrone.Core/MediaInfo.dll diff --git a/NzbDrone.Core/Messaging/Commands/BackendCommandAttribute.cs b/src/NzbDrone.Core/Messaging/Commands/BackendCommandAttribute.cs similarity index 100% rename from NzbDrone.Core/Messaging/Commands/BackendCommandAttribute.cs rename to src/NzbDrone.Core/Messaging/Commands/BackendCommandAttribute.cs diff --git a/NzbDrone.Core/Messaging/Commands/Command.cs b/src/NzbDrone.Core/Messaging/Commands/Command.cs similarity index 100% rename from NzbDrone.Core/Messaging/Commands/Command.cs rename to src/NzbDrone.Core/Messaging/Commands/Command.cs diff --git a/NzbDrone.Core/Messaging/Commands/CommandEqualityComparer.cs b/src/NzbDrone.Core/Messaging/Commands/CommandEqualityComparer.cs similarity index 100% rename from NzbDrone.Core/Messaging/Commands/CommandEqualityComparer.cs rename to src/NzbDrone.Core/Messaging/Commands/CommandEqualityComparer.cs diff --git a/NzbDrone.Core/Messaging/Commands/CommandExecutor.cs b/src/NzbDrone.Core/Messaging/Commands/CommandExecutor.cs similarity index 100% rename from NzbDrone.Core/Messaging/Commands/CommandExecutor.cs rename to src/NzbDrone.Core/Messaging/Commands/CommandExecutor.cs diff --git a/NzbDrone.Core/Messaging/Commands/ICommandExecutor.cs b/src/NzbDrone.Core/Messaging/Commands/ICommandExecutor.cs similarity index 100% rename from NzbDrone.Core/Messaging/Commands/ICommandExecutor.cs rename to src/NzbDrone.Core/Messaging/Commands/ICommandExecutor.cs diff --git a/NzbDrone.Core/Messaging/Commands/IExecute.cs b/src/NzbDrone.Core/Messaging/Commands/IExecute.cs similarity index 100% rename from NzbDrone.Core/Messaging/Commands/IExecute.cs rename to src/NzbDrone.Core/Messaging/Commands/IExecute.cs diff --git a/NzbDrone.Core/Messaging/Commands/TestCommand.cs b/src/NzbDrone.Core/Messaging/Commands/TestCommand.cs similarity index 100% rename from NzbDrone.Core/Messaging/Commands/TestCommand.cs rename to src/NzbDrone.Core/Messaging/Commands/TestCommand.cs diff --git a/NzbDrone.Core/Messaging/Commands/TestCommandExecutor.cs b/src/NzbDrone.Core/Messaging/Commands/TestCommandExecutor.cs similarity index 100% rename from NzbDrone.Core/Messaging/Commands/TestCommandExecutor.cs rename to src/NzbDrone.Core/Messaging/Commands/TestCommandExecutor.cs diff --git a/NzbDrone.Core/Messaging/Commands/Tracking/CommandStatus.cs b/src/NzbDrone.Core/Messaging/Commands/Tracking/CommandStatus.cs similarity index 100% rename from NzbDrone.Core/Messaging/Commands/Tracking/CommandStatus.cs rename to src/NzbDrone.Core/Messaging/Commands/Tracking/CommandStatus.cs diff --git a/NzbDrone.Core/Messaging/Commands/Tracking/CommandTrackingService.cs b/src/NzbDrone.Core/Messaging/Commands/Tracking/CommandTrackingService.cs similarity index 100% rename from NzbDrone.Core/Messaging/Commands/Tracking/CommandTrackingService.cs rename to src/NzbDrone.Core/Messaging/Commands/Tracking/CommandTrackingService.cs diff --git a/NzbDrone.Core/Messaging/Commands/Tracking/ExistingCommand.cs b/src/NzbDrone.Core/Messaging/Commands/Tracking/ExistingCommand.cs similarity index 100% rename from NzbDrone.Core/Messaging/Commands/Tracking/ExistingCommand.cs rename to src/NzbDrone.Core/Messaging/Commands/Tracking/ExistingCommand.cs diff --git a/NzbDrone.Core/Messaging/Commands/Tracking/TrackedCommandCleanupCommand.cs b/src/NzbDrone.Core/Messaging/Commands/Tracking/TrackedCommandCleanupCommand.cs similarity index 100% rename from NzbDrone.Core/Messaging/Commands/Tracking/TrackedCommandCleanupCommand.cs rename to src/NzbDrone.Core/Messaging/Commands/Tracking/TrackedCommandCleanupCommand.cs diff --git a/NzbDrone.Core/Messaging/Events/CommandCreatedEvent.cs b/src/NzbDrone.Core/Messaging/Events/CommandCreatedEvent.cs similarity index 100% rename from NzbDrone.Core/Messaging/Events/CommandCreatedEvent.cs rename to src/NzbDrone.Core/Messaging/Events/CommandCreatedEvent.cs diff --git a/NzbDrone.Core/Messaging/Events/CommandExecutedEvent.cs b/src/NzbDrone.Core/Messaging/Events/CommandExecutedEvent.cs similarity index 100% rename from NzbDrone.Core/Messaging/Events/CommandExecutedEvent.cs rename to src/NzbDrone.Core/Messaging/Events/CommandExecutedEvent.cs diff --git a/NzbDrone.Core/Messaging/Events/EventAggregator.cs b/src/NzbDrone.Core/Messaging/Events/EventAggregator.cs similarity index 100% rename from NzbDrone.Core/Messaging/Events/EventAggregator.cs rename to src/NzbDrone.Core/Messaging/Events/EventAggregator.cs diff --git a/NzbDrone.Core/Messaging/Events/IEventAggregator.cs b/src/NzbDrone.Core/Messaging/Events/IEventAggregator.cs similarity index 100% rename from NzbDrone.Core/Messaging/Events/IEventAggregator.cs rename to src/NzbDrone.Core/Messaging/Events/IEventAggregator.cs diff --git a/NzbDrone.Core/Messaging/Events/IHandle.cs b/src/NzbDrone.Core/Messaging/Events/IHandle.cs similarity index 100% rename from NzbDrone.Core/Messaging/Events/IHandle.cs rename to src/NzbDrone.Core/Messaging/Events/IHandle.cs diff --git a/NzbDrone.Core/Messaging/IProcessMessage.cs b/src/NzbDrone.Core/Messaging/IProcessMessage.cs similarity index 100% rename from NzbDrone.Core/Messaging/IProcessMessage.cs rename to src/NzbDrone.Core/Messaging/IProcessMessage.cs diff --git a/NzbDrone.Core/MetadataSource/IProvideSeriesInfo.cs b/src/NzbDrone.Core/MetadataSource/IProvideSeriesInfo.cs similarity index 100% rename from NzbDrone.Core/MetadataSource/IProvideSeriesInfo.cs rename to src/NzbDrone.Core/MetadataSource/IProvideSeriesInfo.cs diff --git a/NzbDrone.Core/MetadataSource/ISearchForNewSeries.cs b/src/NzbDrone.Core/MetadataSource/ISearchForNewSeries.cs similarity index 100% rename from NzbDrone.Core/MetadataSource/ISearchForNewSeries.cs rename to src/NzbDrone.Core/MetadataSource/ISearchForNewSeries.cs diff --git a/NzbDrone.Core/MetadataSource/Trakt/Episode.cs b/src/NzbDrone.Core/MetadataSource/Trakt/Episode.cs similarity index 100% rename from NzbDrone.Core/MetadataSource/Trakt/Episode.cs rename to src/NzbDrone.Core/MetadataSource/Trakt/Episode.cs diff --git a/NzbDrone.Core/MetadataSource/Trakt/FullShow.cs b/src/NzbDrone.Core/MetadataSource/Trakt/FullShow.cs similarity index 100% rename from NzbDrone.Core/MetadataSource/Trakt/FullShow.cs rename to src/NzbDrone.Core/MetadataSource/Trakt/FullShow.cs diff --git a/NzbDrone.Core/MetadataSource/Trakt/Images.cs b/src/NzbDrone.Core/MetadataSource/Trakt/Images.cs similarity index 100% rename from NzbDrone.Core/MetadataSource/Trakt/Images.cs rename to src/NzbDrone.Core/MetadataSource/Trakt/Images.cs diff --git a/NzbDrone.Core/MetadataSource/Trakt/Season.cs b/src/NzbDrone.Core/MetadataSource/Trakt/Season.cs similarity index 100% rename from NzbDrone.Core/MetadataSource/Trakt/Season.cs rename to src/NzbDrone.Core/MetadataSource/Trakt/Season.cs diff --git a/NzbDrone.Core/MetadataSource/Trakt/TraktException.cs b/src/NzbDrone.Core/MetadataSource/Trakt/TraktException.cs similarity index 100% rename from NzbDrone.Core/MetadataSource/Trakt/TraktException.cs rename to src/NzbDrone.Core/MetadataSource/Trakt/TraktException.cs diff --git a/NzbDrone.Core/MetadataSource/TraktProxy.cs b/src/NzbDrone.Core/MetadataSource/TraktProxy.cs similarity index 100% rename from NzbDrone.Core/MetadataSource/TraktProxy.cs rename to src/NzbDrone.Core/MetadataSource/TraktProxy.cs diff --git a/NzbDrone.Core/Notifications/Email/Email.cs b/src/NzbDrone.Core/Notifications/Email/Email.cs similarity index 100% rename from NzbDrone.Core/Notifications/Email/Email.cs rename to src/NzbDrone.Core/Notifications/Email/Email.cs diff --git a/NzbDrone.Core/Notifications/Email/EmailService.cs b/src/NzbDrone.Core/Notifications/Email/EmailService.cs similarity index 100% rename from NzbDrone.Core/Notifications/Email/EmailService.cs rename to src/NzbDrone.Core/Notifications/Email/EmailService.cs diff --git a/NzbDrone.Core/Notifications/Email/EmailSettings.cs b/src/NzbDrone.Core/Notifications/Email/EmailSettings.cs similarity index 100% rename from NzbDrone.Core/Notifications/Email/EmailSettings.cs rename to src/NzbDrone.Core/Notifications/Email/EmailSettings.cs diff --git a/NzbDrone.Core/Notifications/Email/TestEmailCommand.cs b/src/NzbDrone.Core/Notifications/Email/TestEmailCommand.cs similarity index 100% rename from NzbDrone.Core/Notifications/Email/TestEmailCommand.cs rename to src/NzbDrone.Core/Notifications/Email/TestEmailCommand.cs diff --git a/NzbDrone.Core/Notifications/Growl/Growl.cs b/src/NzbDrone.Core/Notifications/Growl/Growl.cs similarity index 100% rename from NzbDrone.Core/Notifications/Growl/Growl.cs rename to src/NzbDrone.Core/Notifications/Growl/Growl.cs diff --git a/NzbDrone.Core/Notifications/Growl/GrowlService.cs b/src/NzbDrone.Core/Notifications/Growl/GrowlService.cs similarity index 100% rename from NzbDrone.Core/Notifications/Growl/GrowlService.cs rename to src/NzbDrone.Core/Notifications/Growl/GrowlService.cs diff --git a/NzbDrone.Core/Notifications/Growl/GrowlSettings.cs b/src/NzbDrone.Core/Notifications/Growl/GrowlSettings.cs similarity index 100% rename from NzbDrone.Core/Notifications/Growl/GrowlSettings.cs rename to src/NzbDrone.Core/Notifications/Growl/GrowlSettings.cs diff --git a/NzbDrone.Core/Notifications/Growl/TestGrowlCommand.cs b/src/NzbDrone.Core/Notifications/Growl/TestGrowlCommand.cs similarity index 100% rename from NzbDrone.Core/Notifications/Growl/TestGrowlCommand.cs rename to src/NzbDrone.Core/Notifications/Growl/TestGrowlCommand.cs diff --git a/NzbDrone.Core/Notifications/INotification.cs b/src/NzbDrone.Core/Notifications/INotification.cs similarity index 100% rename from NzbDrone.Core/Notifications/INotification.cs rename to src/NzbDrone.Core/Notifications/INotification.cs diff --git a/NzbDrone.Core/Notifications/Notification.cs b/src/NzbDrone.Core/Notifications/Notification.cs similarity index 100% rename from NzbDrone.Core/Notifications/Notification.cs rename to src/NzbDrone.Core/Notifications/Notification.cs diff --git a/NzbDrone.Core/Notifications/NotificationBase.cs b/src/NzbDrone.Core/Notifications/NotificationBase.cs similarity index 100% rename from NzbDrone.Core/Notifications/NotificationBase.cs rename to src/NzbDrone.Core/Notifications/NotificationBase.cs diff --git a/NzbDrone.Core/Notifications/NotificationDefinition.cs b/src/NzbDrone.Core/Notifications/NotificationDefinition.cs similarity index 100% rename from NzbDrone.Core/Notifications/NotificationDefinition.cs rename to src/NzbDrone.Core/Notifications/NotificationDefinition.cs diff --git a/NzbDrone.Core/Notifications/NotificationRepository.cs b/src/NzbDrone.Core/Notifications/NotificationRepository.cs similarity index 100% rename from NzbDrone.Core/Notifications/NotificationRepository.cs rename to src/NzbDrone.Core/Notifications/NotificationRepository.cs diff --git a/NzbDrone.Core/Notifications/NotificationService.cs b/src/NzbDrone.Core/Notifications/NotificationService.cs similarity index 100% rename from NzbDrone.Core/Notifications/NotificationService.cs rename to src/NzbDrone.Core/Notifications/NotificationService.cs diff --git a/NzbDrone.Core/Notifications/NotificationSettingsProvider.cs b/src/NzbDrone.Core/Notifications/NotificationSettingsProvider.cs similarity index 100% rename from NzbDrone.Core/Notifications/NotificationSettingsProvider.cs rename to src/NzbDrone.Core/Notifications/NotificationSettingsProvider.cs diff --git a/NzbDrone.Core/Notifications/NotifyMyAndroid/NotifyMyAndroid.cs b/src/NzbDrone.Core/Notifications/NotifyMyAndroid/NotifyMyAndroid.cs similarity index 100% rename from NzbDrone.Core/Notifications/NotifyMyAndroid/NotifyMyAndroid.cs rename to src/NzbDrone.Core/Notifications/NotifyMyAndroid/NotifyMyAndroid.cs diff --git a/NzbDrone.Core/Notifications/NotifyMyAndroid/NotifyMyAndroidPriority.cs b/src/NzbDrone.Core/Notifications/NotifyMyAndroid/NotifyMyAndroidPriority.cs similarity index 100% rename from NzbDrone.Core/Notifications/NotifyMyAndroid/NotifyMyAndroidPriority.cs rename to src/NzbDrone.Core/Notifications/NotifyMyAndroid/NotifyMyAndroidPriority.cs diff --git a/NzbDrone.Core/Notifications/NotifyMyAndroid/NotifyMyAndroidProxy.cs b/src/NzbDrone.Core/Notifications/NotifyMyAndroid/NotifyMyAndroidProxy.cs similarity index 100% rename from NzbDrone.Core/Notifications/NotifyMyAndroid/NotifyMyAndroidProxy.cs rename to src/NzbDrone.Core/Notifications/NotifyMyAndroid/NotifyMyAndroidProxy.cs diff --git a/NzbDrone.Core/Notifications/NotifyMyAndroid/NotifyMyAndroidSettings.cs b/src/NzbDrone.Core/Notifications/NotifyMyAndroid/NotifyMyAndroidSettings.cs similarity index 100% rename from NzbDrone.Core/Notifications/NotifyMyAndroid/NotifyMyAndroidSettings.cs rename to src/NzbDrone.Core/Notifications/NotifyMyAndroid/NotifyMyAndroidSettings.cs diff --git a/NzbDrone.Core/Notifications/NotifyMyAndroid/TestNotifyMyAndroidCommand.cs b/src/NzbDrone.Core/Notifications/NotifyMyAndroid/TestNotifyMyAndroidCommand.cs similarity index 100% rename from NzbDrone.Core/Notifications/NotifyMyAndroid/TestNotifyMyAndroidCommand.cs rename to src/NzbDrone.Core/Notifications/NotifyMyAndroid/TestNotifyMyAndroidCommand.cs diff --git a/NzbDrone.Core/Notifications/Plex/PlexClient.cs b/src/NzbDrone.Core/Notifications/Plex/PlexClient.cs similarity index 100% rename from NzbDrone.Core/Notifications/Plex/PlexClient.cs rename to src/NzbDrone.Core/Notifications/Plex/PlexClient.cs diff --git a/NzbDrone.Core/Notifications/Plex/PlexClientSettings.cs b/src/NzbDrone.Core/Notifications/Plex/PlexClientSettings.cs similarity index 100% rename from NzbDrone.Core/Notifications/Plex/PlexClientSettings.cs rename to src/NzbDrone.Core/Notifications/Plex/PlexClientSettings.cs diff --git a/NzbDrone.Core/Notifications/Plex/PlexServer.cs b/src/NzbDrone.Core/Notifications/Plex/PlexServer.cs similarity index 100% rename from NzbDrone.Core/Notifications/Plex/PlexServer.cs rename to src/NzbDrone.Core/Notifications/Plex/PlexServer.cs diff --git a/NzbDrone.Core/Notifications/Plex/PlexServerSettings.cs b/src/NzbDrone.Core/Notifications/Plex/PlexServerSettings.cs similarity index 100% rename from NzbDrone.Core/Notifications/Plex/PlexServerSettings.cs rename to src/NzbDrone.Core/Notifications/Plex/PlexServerSettings.cs diff --git a/NzbDrone.Core/Notifications/Plex/PlexService.cs b/src/NzbDrone.Core/Notifications/Plex/PlexService.cs similarity index 100% rename from NzbDrone.Core/Notifications/Plex/PlexService.cs rename to src/NzbDrone.Core/Notifications/Plex/PlexService.cs diff --git a/NzbDrone.Core/Notifications/Plex/TestPlexClientCommand.cs b/src/NzbDrone.Core/Notifications/Plex/TestPlexClientCommand.cs similarity index 100% rename from NzbDrone.Core/Notifications/Plex/TestPlexClientCommand.cs rename to src/NzbDrone.Core/Notifications/Plex/TestPlexClientCommand.cs diff --git a/NzbDrone.Core/Notifications/Plex/TestPlexServerCommand.cs b/src/NzbDrone.Core/Notifications/Plex/TestPlexServerCommand.cs similarity index 100% rename from NzbDrone.Core/Notifications/Plex/TestPlexServerCommand.cs rename to src/NzbDrone.Core/Notifications/Plex/TestPlexServerCommand.cs diff --git a/NzbDrone.Core/Notifications/Prowl/InvalidApiKeyException.cs b/src/NzbDrone.Core/Notifications/Prowl/InvalidApiKeyException.cs similarity index 100% rename from NzbDrone.Core/Notifications/Prowl/InvalidApiKeyException.cs rename to src/NzbDrone.Core/Notifications/Prowl/InvalidApiKeyException.cs diff --git a/NzbDrone.Core/Notifications/Prowl/Prowl.cs b/src/NzbDrone.Core/Notifications/Prowl/Prowl.cs similarity index 100% rename from NzbDrone.Core/Notifications/Prowl/Prowl.cs rename to src/NzbDrone.Core/Notifications/Prowl/Prowl.cs diff --git a/NzbDrone.Core/Notifications/Prowl/ProwlPriority.cs b/src/NzbDrone.Core/Notifications/Prowl/ProwlPriority.cs similarity index 100% rename from NzbDrone.Core/Notifications/Prowl/ProwlPriority.cs rename to src/NzbDrone.Core/Notifications/Prowl/ProwlPriority.cs diff --git a/NzbDrone.Core/Notifications/Prowl/ProwlService.cs b/src/NzbDrone.Core/Notifications/Prowl/ProwlService.cs similarity index 100% rename from NzbDrone.Core/Notifications/Prowl/ProwlService.cs rename to src/NzbDrone.Core/Notifications/Prowl/ProwlService.cs diff --git a/NzbDrone.Core/Notifications/Prowl/ProwlSettings.cs b/src/NzbDrone.Core/Notifications/Prowl/ProwlSettings.cs similarity index 100% rename from NzbDrone.Core/Notifications/Prowl/ProwlSettings.cs rename to src/NzbDrone.Core/Notifications/Prowl/ProwlSettings.cs diff --git a/NzbDrone.Core/Notifications/Prowl/TestProwlCommand.cs b/src/NzbDrone.Core/Notifications/Prowl/TestProwlCommand.cs similarity index 100% rename from NzbDrone.Core/Notifications/Prowl/TestProwlCommand.cs rename to src/NzbDrone.Core/Notifications/Prowl/TestProwlCommand.cs diff --git a/NzbDrone.Core/Notifications/PushBullet/PushBullet.cs b/src/NzbDrone.Core/Notifications/PushBullet/PushBullet.cs similarity index 100% rename from NzbDrone.Core/Notifications/PushBullet/PushBullet.cs rename to src/NzbDrone.Core/Notifications/PushBullet/PushBullet.cs diff --git a/NzbDrone.Core/Notifications/PushBullet/PushBulletProxy.cs b/src/NzbDrone.Core/Notifications/PushBullet/PushBulletProxy.cs similarity index 100% rename from NzbDrone.Core/Notifications/PushBullet/PushBulletProxy.cs rename to src/NzbDrone.Core/Notifications/PushBullet/PushBulletProxy.cs diff --git a/NzbDrone.Core/Notifications/PushBullet/PushBulletSettings.cs b/src/NzbDrone.Core/Notifications/PushBullet/PushBulletSettings.cs similarity index 100% rename from NzbDrone.Core/Notifications/PushBullet/PushBulletSettings.cs rename to src/NzbDrone.Core/Notifications/PushBullet/PushBulletSettings.cs diff --git a/NzbDrone.Core/Notifications/PushBullet/TestPushBulletCommand.cs b/src/NzbDrone.Core/Notifications/PushBullet/TestPushBulletCommand.cs similarity index 100% rename from NzbDrone.Core/Notifications/PushBullet/TestPushBulletCommand.cs rename to src/NzbDrone.Core/Notifications/PushBullet/TestPushBulletCommand.cs diff --git a/NzbDrone.Core/Notifications/Pushover/InvalidResponseException.cs b/src/NzbDrone.Core/Notifications/Pushover/InvalidResponseException.cs similarity index 100% rename from NzbDrone.Core/Notifications/Pushover/InvalidResponseException.cs rename to src/NzbDrone.Core/Notifications/Pushover/InvalidResponseException.cs diff --git a/NzbDrone.Core/Notifications/Pushover/Pushover.cs b/src/NzbDrone.Core/Notifications/Pushover/Pushover.cs similarity index 100% rename from NzbDrone.Core/Notifications/Pushover/Pushover.cs rename to src/NzbDrone.Core/Notifications/Pushover/Pushover.cs diff --git a/NzbDrone.Core/Notifications/Pushover/PushoverPriority.cs b/src/NzbDrone.Core/Notifications/Pushover/PushoverPriority.cs similarity index 100% rename from NzbDrone.Core/Notifications/Pushover/PushoverPriority.cs rename to src/NzbDrone.Core/Notifications/Pushover/PushoverPriority.cs diff --git a/NzbDrone.Core/Notifications/Pushover/PushoverService.cs b/src/NzbDrone.Core/Notifications/Pushover/PushoverService.cs similarity index 100% rename from NzbDrone.Core/Notifications/Pushover/PushoverService.cs rename to src/NzbDrone.Core/Notifications/Pushover/PushoverService.cs diff --git a/NzbDrone.Core/Notifications/Pushover/PushoverSettings.cs b/src/NzbDrone.Core/Notifications/Pushover/PushoverSettings.cs similarity index 100% rename from NzbDrone.Core/Notifications/Pushover/PushoverSettings.cs rename to src/NzbDrone.Core/Notifications/Pushover/PushoverSettings.cs diff --git a/NzbDrone.Core/Notifications/Pushover/TestPushoverCommand.cs b/src/NzbDrone.Core/Notifications/Pushover/TestPushoverCommand.cs similarity index 100% rename from NzbDrone.Core/Notifications/Pushover/TestPushoverCommand.cs rename to src/NzbDrone.Core/Notifications/Pushover/TestPushoverCommand.cs diff --git a/NzbDrone.Core/Notifications/Xbmc/HttpApiProvider.cs b/src/NzbDrone.Core/Notifications/Xbmc/HttpApiProvider.cs similarity index 100% rename from NzbDrone.Core/Notifications/Xbmc/HttpApiProvider.cs rename to src/NzbDrone.Core/Notifications/Xbmc/HttpApiProvider.cs diff --git a/NzbDrone.Core/Notifications/Xbmc/IApiProvider.cs b/src/NzbDrone.Core/Notifications/Xbmc/IApiProvider.cs similarity index 100% rename from NzbDrone.Core/Notifications/Xbmc/IApiProvider.cs rename to src/NzbDrone.Core/Notifications/Xbmc/IApiProvider.cs diff --git a/NzbDrone.Core/Notifications/Xbmc/InvalidXbmcVersionException.cs b/src/NzbDrone.Core/Notifications/Xbmc/InvalidXbmcVersionException.cs similarity index 100% rename from NzbDrone.Core/Notifications/Xbmc/InvalidXbmcVersionException.cs rename to src/NzbDrone.Core/Notifications/Xbmc/InvalidXbmcVersionException.cs diff --git a/NzbDrone.Core/Notifications/Xbmc/JsonApiProvider.cs b/src/NzbDrone.Core/Notifications/Xbmc/JsonApiProvider.cs similarity index 100% rename from NzbDrone.Core/Notifications/Xbmc/JsonApiProvider.cs rename to src/NzbDrone.Core/Notifications/Xbmc/JsonApiProvider.cs diff --git a/NzbDrone.Core/Notifications/Xbmc/Model/ActivePlayer.cs b/src/NzbDrone.Core/Notifications/Xbmc/Model/ActivePlayer.cs similarity index 100% rename from NzbDrone.Core/Notifications/Xbmc/Model/ActivePlayer.cs rename to src/NzbDrone.Core/Notifications/Xbmc/Model/ActivePlayer.cs diff --git a/NzbDrone.Core/Notifications/Xbmc/Model/ActivePlayersDharmaResult.cs b/src/NzbDrone.Core/Notifications/Xbmc/Model/ActivePlayersDharmaResult.cs similarity index 100% rename from NzbDrone.Core/Notifications/Xbmc/Model/ActivePlayersDharmaResult.cs rename to src/NzbDrone.Core/Notifications/Xbmc/Model/ActivePlayersDharmaResult.cs diff --git a/NzbDrone.Core/Notifications/Xbmc/Model/ActivePlayersEdenResult.cs b/src/NzbDrone.Core/Notifications/Xbmc/Model/ActivePlayersEdenResult.cs similarity index 100% rename from NzbDrone.Core/Notifications/Xbmc/Model/ActivePlayersEdenResult.cs rename to src/NzbDrone.Core/Notifications/Xbmc/Model/ActivePlayersEdenResult.cs diff --git a/NzbDrone.Core/Notifications/Xbmc/Model/ErrorResult.cs b/src/NzbDrone.Core/Notifications/Xbmc/Model/ErrorResult.cs similarity index 100% rename from NzbDrone.Core/Notifications/Xbmc/Model/ErrorResult.cs rename to src/NzbDrone.Core/Notifications/Xbmc/Model/ErrorResult.cs diff --git a/NzbDrone.Core/Notifications/Xbmc/Model/TvShow.cs b/src/NzbDrone.Core/Notifications/Xbmc/Model/TvShow.cs similarity index 100% rename from NzbDrone.Core/Notifications/Xbmc/Model/TvShow.cs rename to src/NzbDrone.Core/Notifications/Xbmc/Model/TvShow.cs diff --git a/NzbDrone.Core/Notifications/Xbmc/Model/TvShowResponse.cs b/src/NzbDrone.Core/Notifications/Xbmc/Model/TvShowResponse.cs similarity index 100% rename from NzbDrone.Core/Notifications/Xbmc/Model/TvShowResponse.cs rename to src/NzbDrone.Core/Notifications/Xbmc/Model/TvShowResponse.cs diff --git a/NzbDrone.Core/Notifications/Xbmc/Model/TvShowResult.cs b/src/NzbDrone.Core/Notifications/Xbmc/Model/TvShowResult.cs similarity index 100% rename from NzbDrone.Core/Notifications/Xbmc/Model/TvShowResult.cs rename to src/NzbDrone.Core/Notifications/Xbmc/Model/TvShowResult.cs diff --git a/NzbDrone.Core/Notifications/Xbmc/Model/VersionResult.cs b/src/NzbDrone.Core/Notifications/Xbmc/Model/VersionResult.cs similarity index 100% rename from NzbDrone.Core/Notifications/Xbmc/Model/VersionResult.cs rename to src/NzbDrone.Core/Notifications/Xbmc/Model/VersionResult.cs diff --git a/NzbDrone.Core/Notifications/Xbmc/Model/XbmcJsonResult.cs b/src/NzbDrone.Core/Notifications/Xbmc/Model/XbmcJsonResult.cs similarity index 100% rename from NzbDrone.Core/Notifications/Xbmc/Model/XbmcJsonResult.cs rename to src/NzbDrone.Core/Notifications/Xbmc/Model/XbmcJsonResult.cs diff --git a/NzbDrone.Core/Notifications/Xbmc/Model/XbmcVersion.cs b/src/NzbDrone.Core/Notifications/Xbmc/Model/XbmcVersion.cs similarity index 100% rename from NzbDrone.Core/Notifications/Xbmc/Model/XbmcVersion.cs rename to src/NzbDrone.Core/Notifications/Xbmc/Model/XbmcVersion.cs diff --git a/NzbDrone.Core/Notifications/Xbmc/TestXbmcCommand.cs b/src/NzbDrone.Core/Notifications/Xbmc/TestXbmcCommand.cs similarity index 100% rename from NzbDrone.Core/Notifications/Xbmc/TestXbmcCommand.cs rename to src/NzbDrone.Core/Notifications/Xbmc/TestXbmcCommand.cs diff --git a/NzbDrone.Core/Notifications/Xbmc/Xbmc.cs b/src/NzbDrone.Core/Notifications/Xbmc/Xbmc.cs similarity index 100% rename from NzbDrone.Core/Notifications/Xbmc/Xbmc.cs rename to src/NzbDrone.Core/Notifications/Xbmc/Xbmc.cs diff --git a/NzbDrone.Core/Notifications/Xbmc/XbmcService.cs b/src/NzbDrone.Core/Notifications/Xbmc/XbmcService.cs similarity index 100% rename from NzbDrone.Core/Notifications/Xbmc/XbmcService.cs rename to src/NzbDrone.Core/Notifications/Xbmc/XbmcService.cs diff --git a/NzbDrone.Core/Notifications/Xbmc/XbmcSettings.cs b/src/NzbDrone.Core/Notifications/Xbmc/XbmcSettings.cs similarity index 100% rename from NzbDrone.Core/Notifications/Xbmc/XbmcSettings.cs rename to src/NzbDrone.Core/Notifications/Xbmc/XbmcSettings.cs diff --git a/NzbDrone.Core/NzbDrone.Core.csproj b/src/NzbDrone.Core/NzbDrone.Core.csproj similarity index 99% rename from NzbDrone.Core/NzbDrone.Core.csproj rename to src/NzbDrone.Core/NzbDrone.Core.csproj index 766536d42..7afcb1bb1 100644 --- a/NzbDrone.Core/NzbDrone.Core.csproj +++ b/src/NzbDrone.Core/NzbDrone.Core.csproj @@ -37,7 +37,7 @@ true full false - ..\_output\ + ..\..\_output\ DEBUG;TRACE prompt 4 @@ -46,7 +46,7 @@ x86 pdbonly true - ..\_output\ + ..\..\_output\ TRACE prompt 4 diff --git a/NzbDrone.Core/Organizer/EpisodeSortingType.cs b/src/NzbDrone.Core/Organizer/EpisodeSortingType.cs similarity index 100% rename from NzbDrone.Core/Organizer/EpisodeSortingType.cs rename to src/NzbDrone.Core/Organizer/EpisodeSortingType.cs diff --git a/NzbDrone.Core/Organizer/FileNameBuilder.cs b/src/NzbDrone.Core/Organizer/FileNameBuilder.cs similarity index 100% rename from NzbDrone.Core/Organizer/FileNameBuilder.cs rename to src/NzbDrone.Core/Organizer/FileNameBuilder.cs diff --git a/NzbDrone.Core/Organizer/NamingConfig.cs b/src/NzbDrone.Core/Organizer/NamingConfig.cs similarity index 100% rename from NzbDrone.Core/Organizer/NamingConfig.cs rename to src/NzbDrone.Core/Organizer/NamingConfig.cs diff --git a/NzbDrone.Core/Parser/Language.cs b/src/NzbDrone.Core/Parser/Language.cs similarity index 100% rename from NzbDrone.Core/Parser/Language.cs rename to src/NzbDrone.Core/Parser/Language.cs diff --git a/NzbDrone.Core/Parser/Model/LocalEpisode.cs b/src/NzbDrone.Core/Parser/Model/LocalEpisode.cs similarity index 100% rename from NzbDrone.Core/Parser/Model/LocalEpisode.cs rename to src/NzbDrone.Core/Parser/Model/LocalEpisode.cs diff --git a/NzbDrone.Core/Parser/Model/ParsedEpisodeInfo.cs b/src/NzbDrone.Core/Parser/Model/ParsedEpisodeInfo.cs similarity index 100% rename from NzbDrone.Core/Parser/Model/ParsedEpisodeInfo.cs rename to src/NzbDrone.Core/Parser/Model/ParsedEpisodeInfo.cs diff --git a/NzbDrone.Core/Parser/Model/ReleaseInfo.cs b/src/NzbDrone.Core/Parser/Model/ReleaseInfo.cs similarity index 100% rename from NzbDrone.Core/Parser/Model/ReleaseInfo.cs rename to src/NzbDrone.Core/Parser/Model/ReleaseInfo.cs diff --git a/NzbDrone.Core/Parser/Model/RemoteEpisode.cs b/src/NzbDrone.Core/Parser/Model/RemoteEpisode.cs similarity index 100% rename from NzbDrone.Core/Parser/Model/RemoteEpisode.cs rename to src/NzbDrone.Core/Parser/Model/RemoteEpisode.cs diff --git a/NzbDrone.Core/Parser/Model/TorrentInfo.cs b/src/NzbDrone.Core/Parser/Model/TorrentInfo.cs similarity index 100% rename from NzbDrone.Core/Parser/Model/TorrentInfo.cs rename to src/NzbDrone.Core/Parser/Model/TorrentInfo.cs diff --git a/NzbDrone.Core/Parser/Parser.cs b/src/NzbDrone.Core/Parser/Parser.cs similarity index 100% rename from NzbDrone.Core/Parser/Parser.cs rename to src/NzbDrone.Core/Parser/Parser.cs diff --git a/NzbDrone.Core/Parser/ParsingService.cs b/src/NzbDrone.Core/Parser/ParsingService.cs similarity index 100% rename from NzbDrone.Core/Parser/ParsingService.cs rename to src/NzbDrone.Core/Parser/ParsingService.cs diff --git a/NzbDrone.Core/Parser/QualityParser.cs b/src/NzbDrone.Core/Parser/QualityParser.cs similarity index 100% rename from NzbDrone.Core/Parser/QualityParser.cs rename to src/NzbDrone.Core/Parser/QualityParser.cs diff --git a/NzbDrone.Core/progressmessaging/CommandUpdatedEvent.cs b/src/NzbDrone.Core/ProgressMessaging/CommandUpdatedEvent.cs similarity index 100% rename from NzbDrone.Core/progressmessaging/CommandUpdatedEvent.cs rename to src/NzbDrone.Core/ProgressMessaging/CommandUpdatedEvent.cs diff --git a/NzbDrone.Core/ProgressMessaging/ProgressMessageTarget.cs b/src/NzbDrone.Core/ProgressMessaging/ProgressMessageTarget.cs similarity index 100% rename from NzbDrone.Core/ProgressMessaging/ProgressMessageTarget.cs rename to src/NzbDrone.Core/ProgressMessaging/ProgressMessageTarget.cs diff --git a/NzbDrone.Core/Properties/AnalysisRules.ruleset b/src/NzbDrone.Core/Properties/AnalysisRules.ruleset similarity index 100% rename from NzbDrone.Core/Properties/AnalysisRules.ruleset rename to src/NzbDrone.Core/Properties/AnalysisRules.ruleset diff --git a/NzbDrone.Core/Properties/AssemblyInfo.cs b/src/NzbDrone.Core/Properties/AssemblyInfo.cs similarity index 100% rename from NzbDrone.Core/Properties/AssemblyInfo.cs rename to src/NzbDrone.Core/Properties/AssemblyInfo.cs diff --git a/NzbDrone.Core/Qualities/Quality.cs b/src/NzbDrone.Core/Qualities/Quality.cs similarity index 100% rename from NzbDrone.Core/Qualities/Quality.cs rename to src/NzbDrone.Core/Qualities/Quality.cs diff --git a/NzbDrone.Core/Qualities/QualityProfile.cs b/src/NzbDrone.Core/Qualities/QualityProfile.cs similarity index 100% rename from NzbDrone.Core/Qualities/QualityProfile.cs rename to src/NzbDrone.Core/Qualities/QualityProfile.cs diff --git a/NzbDrone.Core/Qualities/QualityProfileInUseException.cs b/src/NzbDrone.Core/Qualities/QualityProfileInUseException.cs similarity index 100% rename from NzbDrone.Core/Qualities/QualityProfileInUseException.cs rename to src/NzbDrone.Core/Qualities/QualityProfileInUseException.cs diff --git a/NzbDrone.Core/Qualities/QualityProfileRepository.cs b/src/NzbDrone.Core/Qualities/QualityProfileRepository.cs similarity index 100% rename from NzbDrone.Core/Qualities/QualityProfileRepository.cs rename to src/NzbDrone.Core/Qualities/QualityProfileRepository.cs diff --git a/NzbDrone.Core/Qualities/QualityProfileService.cs b/src/NzbDrone.Core/Qualities/QualityProfileService.cs similarity index 100% rename from NzbDrone.Core/Qualities/QualityProfileService.cs rename to src/NzbDrone.Core/Qualities/QualityProfileService.cs diff --git a/NzbDrone.Core/Qualities/QualitySize.cs b/src/NzbDrone.Core/Qualities/QualitySize.cs similarity index 100% rename from NzbDrone.Core/Qualities/QualitySize.cs rename to src/NzbDrone.Core/Qualities/QualitySize.cs diff --git a/NzbDrone.Core/Qualities/QualitySizeRepository.cs b/src/NzbDrone.Core/Qualities/QualitySizeRepository.cs similarity index 100% rename from NzbDrone.Core/Qualities/QualitySizeRepository.cs rename to src/NzbDrone.Core/Qualities/QualitySizeRepository.cs diff --git a/NzbDrone.Core/Qualities/QualitySizeService.cs b/src/NzbDrone.Core/Qualities/QualitySizeService.cs similarity index 100% rename from NzbDrone.Core/Qualities/QualitySizeService.cs rename to src/NzbDrone.Core/Qualities/QualitySizeService.cs diff --git a/NzbDrone.Core/Queue/Queue.cs b/src/NzbDrone.Core/Queue/Queue.cs similarity index 100% rename from NzbDrone.Core/Queue/Queue.cs rename to src/NzbDrone.Core/Queue/Queue.cs diff --git a/NzbDrone.Core/Queue/QueueScheduler.cs b/src/NzbDrone.Core/Queue/QueueScheduler.cs similarity index 100% rename from NzbDrone.Core/Queue/QueueScheduler.cs rename to src/NzbDrone.Core/Queue/QueueScheduler.cs diff --git a/NzbDrone.Core/Queue/QueueService.cs b/src/NzbDrone.Core/Queue/QueueService.cs similarity index 100% rename from NzbDrone.Core/Queue/QueueService.cs rename to src/NzbDrone.Core/Queue/QueueService.cs diff --git a/NzbDrone.Core/Queue/UpdateQueueEvent.cs b/src/NzbDrone.Core/Queue/UpdateQueueEvent.cs similarity index 100% rename from NzbDrone.Core/Queue/UpdateQueueEvent.cs rename to src/NzbDrone.Core/Queue/UpdateQueueEvent.cs diff --git a/NzbDrone.Core/Rest/RestException.cs b/src/NzbDrone.Core/Rest/RestException.cs similarity index 100% rename from NzbDrone.Core/Rest/RestException.cs rename to src/NzbDrone.Core/Rest/RestException.cs diff --git a/NzbDrone.Core/Rest/RestSharpExtensions.cs b/src/NzbDrone.Core/Rest/RestSharpExtensions.cs similarity index 100% rename from NzbDrone.Core/Rest/RestSharpExtensions.cs rename to src/NzbDrone.Core/Rest/RestSharpExtensions.cs diff --git a/NzbDrone.Core/RootFolders/RootFolder.cs b/src/NzbDrone.Core/RootFolders/RootFolder.cs similarity index 100% rename from NzbDrone.Core/RootFolders/RootFolder.cs rename to src/NzbDrone.Core/RootFolders/RootFolder.cs diff --git a/NzbDrone.Core/RootFolders/RootFolderService.cs b/src/NzbDrone.Core/RootFolders/RootFolderService.cs similarity index 100% rename from NzbDrone.Core/RootFolders/RootFolderService.cs rename to src/NzbDrone.Core/RootFolders/RootFolderService.cs diff --git a/NzbDrone.Core/RootFolders/UnmappedFolder.cs b/src/NzbDrone.Core/RootFolders/UnmappedFolder.cs similarity index 100% rename from NzbDrone.Core/RootFolders/UnmappedFolder.cs rename to src/NzbDrone.Core/RootFolders/UnmappedFolder.cs diff --git a/NzbDrone.Core/SeriesStats/SeriesStatistics.cs b/src/NzbDrone.Core/SeriesStats/SeriesStatistics.cs similarity index 100% rename from NzbDrone.Core/SeriesStats/SeriesStatistics.cs rename to src/NzbDrone.Core/SeriesStats/SeriesStatistics.cs diff --git a/NzbDrone.Core/SeriesStats/SeriesStatisticsRepository.cs b/src/NzbDrone.Core/SeriesStats/SeriesStatisticsRepository.cs similarity index 100% rename from NzbDrone.Core/SeriesStats/SeriesStatisticsRepository.cs rename to src/NzbDrone.Core/SeriesStats/SeriesStatisticsRepository.cs diff --git a/NzbDrone.Core/SeriesStats/SeriesStatisticsService.cs b/src/NzbDrone.Core/SeriesStats/SeriesStatisticsService.cs similarity index 100% rename from NzbDrone.Core/SeriesStats/SeriesStatisticsService.cs rename to src/NzbDrone.Core/SeriesStats/SeriesStatisticsService.cs diff --git a/NzbDrone.Core/ThingiProvider/ConfigContractNotFoundException.cs b/src/NzbDrone.Core/ThingiProvider/ConfigContractNotFoundException.cs similarity index 100% rename from NzbDrone.Core/ThingiProvider/ConfigContractNotFoundException.cs rename to src/NzbDrone.Core/ThingiProvider/ConfigContractNotFoundException.cs diff --git a/NzbDrone.Core/ThingiProvider/IProvider.cs b/src/NzbDrone.Core/ThingiProvider/IProvider.cs similarity index 100% rename from NzbDrone.Core/ThingiProvider/IProvider.cs rename to src/NzbDrone.Core/ThingiProvider/IProvider.cs diff --git a/NzbDrone.Core/ThingiProvider/IProviderConfig.cs b/src/NzbDrone.Core/ThingiProvider/IProviderConfig.cs similarity index 100% rename from NzbDrone.Core/ThingiProvider/IProviderConfig.cs rename to src/NzbDrone.Core/ThingiProvider/IProviderConfig.cs diff --git a/NzbDrone.Core/ThingiProvider/IProviderFactory.cs b/src/NzbDrone.Core/ThingiProvider/IProviderFactory.cs similarity index 100% rename from NzbDrone.Core/ThingiProvider/IProviderFactory.cs rename to src/NzbDrone.Core/ThingiProvider/IProviderFactory.cs diff --git a/NzbDrone.Core/ThingiProvider/IProviderRepository.cs b/src/NzbDrone.Core/ThingiProvider/IProviderRepository.cs similarity index 100% rename from NzbDrone.Core/ThingiProvider/IProviderRepository.cs rename to src/NzbDrone.Core/ThingiProvider/IProviderRepository.cs diff --git a/NzbDrone.Core/ThingiProvider/NullConfig.cs b/src/NzbDrone.Core/ThingiProvider/NullConfig.cs similarity index 100% rename from NzbDrone.Core/ThingiProvider/NullConfig.cs rename to src/NzbDrone.Core/ThingiProvider/NullConfig.cs diff --git a/NzbDrone.Core/ThingiProvider/ProviderDefinition.cs b/src/NzbDrone.Core/ThingiProvider/ProviderDefinition.cs similarity index 100% rename from NzbDrone.Core/ThingiProvider/ProviderDefinition.cs rename to src/NzbDrone.Core/ThingiProvider/ProviderDefinition.cs diff --git a/NzbDrone.Core/ThingiProvider/ProviderFactory.cs b/src/NzbDrone.Core/ThingiProvider/ProviderFactory.cs similarity index 100% rename from NzbDrone.Core/ThingiProvider/ProviderFactory.cs rename to src/NzbDrone.Core/ThingiProvider/ProviderFactory.cs diff --git a/NzbDrone.Core/ThingiProvider/ProviderRepository.cs b/src/NzbDrone.Core/ThingiProvider/ProviderRepository.cs similarity index 100% rename from NzbDrone.Core/ThingiProvider/ProviderRepository.cs rename to src/NzbDrone.Core/ThingiProvider/ProviderRepository.cs diff --git a/NzbDrone.Core/Tv/Commands/RefreshSeriesCommand.cs b/src/NzbDrone.Core/Tv/Commands/RefreshSeriesCommand.cs similarity index 100% rename from NzbDrone.Core/Tv/Commands/RefreshSeriesCommand.cs rename to src/NzbDrone.Core/Tv/Commands/RefreshSeriesCommand.cs diff --git a/NzbDrone.Core/Tv/Episode.cs b/src/NzbDrone.Core/Tv/Episode.cs similarity index 100% rename from NzbDrone.Core/Tv/Episode.cs rename to src/NzbDrone.Core/Tv/Episode.cs diff --git a/NzbDrone.Core/Tv/EpisodeRepository.cs b/src/NzbDrone.Core/Tv/EpisodeRepository.cs similarity index 97% rename from NzbDrone.Core/Tv/EpisodeRepository.cs rename to src/NzbDrone.Core/Tv/EpisodeRepository.cs index 3a9ade8d9..57d8acbc1 100644 --- a/NzbDrone.Core/Tv/EpisodeRepository.cs +++ b/src/NzbDrone.Core/Tv/EpisodeRepository.cs @@ -1,139 +1,139 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using Marr.Data.QGen; -using NzbDrone.Core.Datastore; -using NzbDrone.Core.Messaging.Events; - - -namespace NzbDrone.Core.Tv -{ - public interface IEpisodeRepository : IBasicRepository - { - Episode Find(int seriesId, int season, int episodeNumber); - Episode Get(int seriesId, DateTime date); - Episode Find(int seriesId, DateTime date); - List GetEpisodes(int seriesId); - List GetEpisodes(int seriesId, int seasonNumber); - List GetEpisodeByFileId(int fileId); - PagingSpec EpisodesWithoutFiles(PagingSpec pagingSpec, bool includeSpecials); - Episode FindEpisodeBySceneNumbering(int seriesId, int seasonNumber, int episodeNumber); - List EpisodesBetweenDates(DateTime startDate, DateTime endDate); - void SetMonitoredFlat(Episode episode, bool monitored); - void SetMonitoredBySeason(int seriesId, int seasonNumber, bool monitored); - void SetFileId(int episodeId, int fileId); - } - - public class EpisodeRepository : BasicRepository, IEpisodeRepository - { - private readonly IDatabase _database; - - public EpisodeRepository(IDatabase database, IEventAggregator eventAggregator) - : base(database, eventAggregator) - { - _database = database; - } - - public Episode Find(int seriesId, int season, int episodeNumber) - { - return Query.SingleOrDefault(s => s.SeriesId == seriesId && s.SeasonNumber == season && s.EpisodeNumber == episodeNumber); - } - - public Episode Get(int seriesId, DateTime date) - { - return Query.Single(s => s.SeriesId == seriesId && s.AirDate == date.ToString(Episode.AIR_DATE_FORMAT)); - } - - public Episode Find(int seriesId, DateTime date) - { - return Query.SingleOrDefault(s => s.SeriesId == seriesId && s.AirDate == date.ToString(Episode.AIR_DATE_FORMAT)); - } - - public List GetEpisodes(int seriesId) - { - return Query.Where(s => s.SeriesId == seriesId).ToList(); - } - - public List GetEpisodes(int seriesId, int seasonNumber) - { - return Query.Where(s => s.SeriesId == seriesId && s.SeasonNumber == seasonNumber).ToList(); - } - - public List GetEpisodeByFileId(int fileId) - { - return Query.Where(e => e.EpisodeFileId == fileId).ToList(); - } - - public PagingSpec EpisodesWithoutFiles(PagingSpec pagingSpec, bool includeSpecials) - { - var currentTime = DateTime.UtcNow; - var startingSeasonNumber = 1; - - if (includeSpecials) - { - startingSeasonNumber = 0; - } - - pagingSpec.Records = GetEpisodesWithoutFilesQuery(pagingSpec, currentTime, startingSeasonNumber).ToList(); - pagingSpec.TotalRecords = GetEpisodesWithoutFilesQuery(pagingSpec, currentTime, startingSeasonNumber).GetRowCount(); - - return pagingSpec; - } - - public Episode FindEpisodeBySceneNumbering(int seriesId, int seasonNumber, int episodeNumber) - { - return Query.SingleOrDefault(s => s.SeriesId == seriesId && s.SceneSeasonNumber == seasonNumber && s.SceneEpisodeNumber == episodeNumber); - } - - - public List EpisodesBetweenDates(DateTime startDate, DateTime endDate) - { - return Query.Join(JoinType.Inner, e => e.Series, (e, s) => e.SeriesId == s.Id) - .Where(e => e.AirDateUtc >= startDate) - .AndWhere(e => e.AirDateUtc <= endDate) - .AndWhere(e => e.Monitored) - .AndWhere(e => e.Series.Monitored) - .ToList(); - } - - public void SetMonitoredFlat(Episode episode, bool monitored) - { - episode.Monitored = monitored; - SetFields(episode, p => p.Monitored); - } - - public void SetMonitoredBySeason(int seriesId, int seasonNumber, bool monitored) - { - var mapper = _database.GetDataMapper(); - - mapper.AddParameter("seriesId", seriesId); - mapper.AddParameter("seasonNumber", seasonNumber); - mapper.AddParameter("monitored", monitored); - - const string sql = "UPDATE Episodes " + - "SET Monitored = @monitored " + - "WHERE SeriesId = @seriesId " + - "AND SeasonNumber = @seasonNumber"; - - mapper.ExecuteNonQuery(sql); - } - - public void SetFileId(int episodeId, int fileId) - { - SetFields(new Episode { Id = episodeId, EpisodeFileId = fileId }, episode => episode.EpisodeFileId); - } - - private SortBuilder GetEpisodesWithoutFilesQuery(PagingSpec pagingSpec, DateTime currentTime, int startingSeasonNumber) - { - return Query.Join(JoinType.Inner, e => e.Series, (e, s) => e.SeriesId == s.Id) - .Where(e => e.EpisodeFileId == 0) - .AndWhere(e => e.SeasonNumber >= startingSeasonNumber) - .AndWhere(e => e.AirDateUtc <= currentTime) - .AndWhere(e => e.Monitored) - .AndWhere(e => e.Series.Monitored) - .OrderBy(pagingSpec.OrderByClause(), pagingSpec.ToSortDirection()) - .Skip(pagingSpec.PagingOffset()) - .Take(pagingSpec.PageSize); - } - } -} +using System; +using System.Collections.Generic; +using System.Linq; +using Marr.Data.QGen; +using NzbDrone.Core.Datastore; +using NzbDrone.Core.Messaging.Events; + + +namespace NzbDrone.Core.Tv +{ + public interface IEpisodeRepository : IBasicRepository + { + Episode Find(int seriesId, int season, int episodeNumber); + Episode Get(int seriesId, DateTime date); + Episode Find(int seriesId, DateTime date); + List GetEpisodes(int seriesId); + List GetEpisodes(int seriesId, int seasonNumber); + List GetEpisodeByFileId(int fileId); + PagingSpec EpisodesWithoutFiles(PagingSpec pagingSpec, bool includeSpecials); + Episode FindEpisodeBySceneNumbering(int seriesId, int seasonNumber, int episodeNumber); + List EpisodesBetweenDates(DateTime startDate, DateTime endDate); + void SetMonitoredFlat(Episode episode, bool monitored); + void SetMonitoredBySeason(int seriesId, int seasonNumber, bool monitored); + void SetFileId(int episodeId, int fileId); + } + + public class EpisodeRepository : BasicRepository, IEpisodeRepository + { + private readonly IDatabase _database; + + public EpisodeRepository(IDatabase database, IEventAggregator eventAggregator) + : base(database, eventAggregator) + { + _database = database; + } + + public Episode Find(int seriesId, int season, int episodeNumber) + { + return Query.SingleOrDefault(s => s.SeriesId == seriesId && s.SeasonNumber == season && s.EpisodeNumber == episodeNumber); + } + + public Episode Get(int seriesId, DateTime date) + { + return Query.Single(s => s.SeriesId == seriesId && s.AirDate == date.ToString(Episode.AIR_DATE_FORMAT)); + } + + public Episode Find(int seriesId, DateTime date) + { + return Query.SingleOrDefault(s => s.SeriesId == seriesId && s.AirDate == date.ToString(Episode.AIR_DATE_FORMAT)); + } + + public List GetEpisodes(int seriesId) + { + return Query.Where(s => s.SeriesId == seriesId).ToList(); + } + + public List GetEpisodes(int seriesId, int seasonNumber) + { + return Query.Where(s => s.SeriesId == seriesId && s.SeasonNumber == seasonNumber).ToList(); + } + + public List GetEpisodeByFileId(int fileId) + { + return Query.Where(e => e.EpisodeFileId == fileId).ToList(); + } + + public PagingSpec EpisodesWithoutFiles(PagingSpec pagingSpec, bool includeSpecials) + { + var currentTime = DateTime.UtcNow; + var startingSeasonNumber = 1; + + if (includeSpecials) + { + startingSeasonNumber = 0; + } + + pagingSpec.Records = GetEpisodesWithoutFilesQuery(pagingSpec, currentTime, startingSeasonNumber).ToList(); + pagingSpec.TotalRecords = GetEpisodesWithoutFilesQuery(pagingSpec, currentTime, startingSeasonNumber).GetRowCount(); + + return pagingSpec; + } + + public Episode FindEpisodeBySceneNumbering(int seriesId, int seasonNumber, int episodeNumber) + { + return Query.SingleOrDefault(s => s.SeriesId == seriesId && s.SceneSeasonNumber == seasonNumber && s.SceneEpisodeNumber == episodeNumber); + } + + + public List EpisodesBetweenDates(DateTime startDate, DateTime endDate) + { + return Query.Join(JoinType.Inner, e => e.Series, (e, s) => e.SeriesId == s.Id) + .Where(e => e.AirDateUtc >= startDate) + .AndWhere(e => e.AirDateUtc <= endDate) + .AndWhere(e => e.Monitored) + .AndWhere(e => e.Series.Monitored) + .ToList(); + } + + public void SetMonitoredFlat(Episode episode, bool monitored) + { + episode.Monitored = monitored; + SetFields(episode, p => p.Monitored); + } + + public void SetMonitoredBySeason(int seriesId, int seasonNumber, bool monitored) + { + var mapper = _database.GetDataMapper(); + + mapper.AddParameter("seriesId", seriesId); + mapper.AddParameter("seasonNumber", seasonNumber); + mapper.AddParameter("monitored", monitored); + + const string sql = "UPDATE Episodes " + + "SET Monitored = @monitored " + + "WHERE SeriesId = @seriesId " + + "AND SeasonNumber = @seasonNumber"; + + mapper.ExecuteNonQuery(sql); + } + + public void SetFileId(int episodeId, int fileId) + { + SetFields(new Episode { Id = episodeId, EpisodeFileId = fileId }, episode => episode.EpisodeFileId); + } + + private SortBuilder GetEpisodesWithoutFilesQuery(PagingSpec pagingSpec, DateTime currentTime, int startingSeasonNumber) + { + return Query.Join(JoinType.Inner, e => e.Series, (e, s) => e.SeriesId == s.Id) + .Where(e => e.EpisodeFileId == 0) + .AndWhere(e => e.SeasonNumber >= startingSeasonNumber) + .AndWhere(e => e.AirDateUtc <= currentTime) + .AndWhere(e => e.Monitored) + .AndWhere(e => e.Series.Monitored) + .OrderBy(pagingSpec.OrderByClause(), pagingSpec.ToSortDirection()) + .Skip(pagingSpec.PagingOffset()) + .Take(pagingSpec.PageSize); + } + } +} diff --git a/NzbDrone.Core/Tv/EpisodeService.cs b/src/NzbDrone.Core/Tv/EpisodeService.cs similarity index 100% rename from NzbDrone.Core/Tv/EpisodeService.cs rename to src/NzbDrone.Core/Tv/EpisodeService.cs diff --git a/NzbDrone.Core/Tv/Events/EpisodeInfoAddedEvent.cs b/src/NzbDrone.Core/Tv/Events/EpisodeInfoAddedEvent.cs similarity index 100% rename from NzbDrone.Core/Tv/Events/EpisodeInfoAddedEvent.cs rename to src/NzbDrone.Core/Tv/Events/EpisodeInfoAddedEvent.cs diff --git a/NzbDrone.Core/Tv/Events/EpisodeInfoDeletedEvent.cs b/src/NzbDrone.Core/Tv/Events/EpisodeInfoDeletedEvent.cs similarity index 100% rename from NzbDrone.Core/Tv/Events/EpisodeInfoDeletedEvent.cs rename to src/NzbDrone.Core/Tv/Events/EpisodeInfoDeletedEvent.cs diff --git a/NzbDrone.Core/Tv/Events/EpisodeInfoUpdatedEvent.cs b/src/NzbDrone.Core/Tv/Events/EpisodeInfoUpdatedEvent.cs similarity index 100% rename from NzbDrone.Core/Tv/Events/EpisodeInfoUpdatedEvent.cs rename to src/NzbDrone.Core/Tv/Events/EpisodeInfoUpdatedEvent.cs diff --git a/NzbDrone.Core/Tv/Events/SeriesAddedEvent.cs b/src/NzbDrone.Core/Tv/Events/SeriesAddedEvent.cs similarity index 100% rename from NzbDrone.Core/Tv/Events/SeriesAddedEvent.cs rename to src/NzbDrone.Core/Tv/Events/SeriesAddedEvent.cs diff --git a/NzbDrone.Core/Tv/Events/SeriesDeletedEvent.cs b/src/NzbDrone.Core/Tv/Events/SeriesDeletedEvent.cs similarity index 100% rename from NzbDrone.Core/Tv/Events/SeriesDeletedEvent.cs rename to src/NzbDrone.Core/Tv/Events/SeriesDeletedEvent.cs diff --git a/NzbDrone.Core/Tv/Events/SeriesUpdatedEvent.cs b/src/NzbDrone.Core/Tv/Events/SeriesUpdatedEvent.cs similarity index 100% rename from NzbDrone.Core/Tv/Events/SeriesUpdatedEvent.cs rename to src/NzbDrone.Core/Tv/Events/SeriesUpdatedEvent.cs diff --git a/NzbDrone.Core/Tv/QualityModel.cs b/src/NzbDrone.Core/Tv/QualityModel.cs similarity index 100% rename from NzbDrone.Core/Tv/QualityModel.cs rename to src/NzbDrone.Core/Tv/QualityModel.cs diff --git a/NzbDrone.Core/Tv/RefreshEpisodeService.cs b/src/NzbDrone.Core/Tv/RefreshEpisodeService.cs similarity index 97% rename from NzbDrone.Core/Tv/RefreshEpisodeService.cs rename to src/NzbDrone.Core/Tv/RefreshEpisodeService.cs index 31a90761d..1d1ca0a5b 100644 --- a/NzbDrone.Core/Tv/RefreshEpisodeService.cs +++ b/src/NzbDrone.Core/Tv/RefreshEpisodeService.cs @@ -1,144 +1,144 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using NLog; -using NzbDrone.Common; -using NzbDrone.Core.Messaging.Events; -using NzbDrone.Core.Tv.Events; - -namespace NzbDrone.Core.Tv -{ - public interface IRefreshEpisodeService - { - void RefreshEpisodeInfo(Series series, IEnumerable remoteEpisodes); - } - - public class RefreshEpisodeService : IRefreshEpisodeService - { - private readonly IEpisodeService _episodeService; - private readonly IEventAggregator _eventAggregator; - private readonly Logger _logger; - - public RefreshEpisodeService(IEpisodeService episodeService, IEventAggregator eventAggregator, Logger logger) - { - _episodeService = episodeService; - _eventAggregator = eventAggregator; - _logger = logger; - } - - public void RefreshEpisodeInfo(Series series, IEnumerable remoteEpisodes) - { - _logger.Info("Starting episode info refresh for: {0}", series); - var successCount = 0; - var failCount = 0; - - var existingEpisodes = _episodeService.GetEpisodeBySeries(series.Id); - var seasons = series.Seasons; - - var updateList = new List(); - var newList = new List(); - var dupeFreeRemoteEpisodes = remoteEpisodes.DistinctBy(m => new { m.SeasonNumber, m.EpisodeNumber }).ToList(); - - foreach (var episode in dupeFreeRemoteEpisodes.OrderBy(e => e.SeasonNumber).ThenBy(e => e.EpisodeNumber)) - { - try - { - var episodeToUpdate = existingEpisodes.FirstOrDefault(e => e.SeasonNumber == episode.SeasonNumber && e.EpisodeNumber == episode.EpisodeNumber); - - if (episodeToUpdate != null) - { - existingEpisodes.Remove(episodeToUpdate); - updateList.Add(episodeToUpdate); - } - else - { - episodeToUpdate = new Episode(); - episodeToUpdate.Monitored = GetMonitoredStatus(episode, seasons); - newList.Add(episodeToUpdate); - } - - episodeToUpdate.SeriesId = series.Id; - episodeToUpdate.TvDbEpisodeId = episode.TvDbEpisodeId; - episodeToUpdate.EpisodeNumber = episode.EpisodeNumber; - episodeToUpdate.SeasonNumber = episode.SeasonNumber; - episodeToUpdate.Title = episode.Title; - episodeToUpdate.Overview = episode.Overview; - episodeToUpdate.AirDate = episode.AirDate; - episodeToUpdate.AirDateUtc = episode.AirDateUtc; - - successCount++; - } - catch (Exception e) - { - _logger.FatalException(String.Format("An error has occurred while updating episode info for series {0}. {1}", series, episode), e); - failCount++; - } - } - - var allEpisodes = new List(); - allEpisodes.AddRange(newList); - allEpisodes.AddRange(updateList); - - AdjustMultiEpisodeAirTime(series, allEpisodes); - - _episodeService.DeleteMany(existingEpisodes); - _episodeService.UpdateMany(updateList); - _episodeService.InsertMany(newList); - - if (newList.Any()) - { - _eventAggregator.PublishEvent(new EpisodeInfoAddedEvent(newList, series)); - } - - if (updateList.Any()) - { - _eventAggregator.PublishEvent(new EpisodeInfoUpdatedEvent(updateList)); - } - - if (existingEpisodes.Any()) - { - _eventAggregator.PublishEvent(new EpisodeInfoDeletedEvent(updateList)); - } - - if (failCount != 0) - { - _logger.Info("Finished episode refresh for series: {0}. Successful: {1} - Failed: {2} ", - series.Title, successCount, failCount); - } - else - { - _logger.Info("Finished episode refresh for series: {0}.", series); - } - } - - private static bool GetMonitoredStatus(Episode episode, IEnumerable seasons) - { - if (episode.EpisodeNumber == 0 && episode.SeasonNumber != 1) - { - return false; - } - - var season = seasons.SingleOrDefault(c => c.SeasonNumber == episode.SeasonNumber); - return season == null || season.Monitored; - } - - private static void AdjustMultiEpisodeAirTime(Series series, IEnumerable allEpisodes) - { - var groups = - allEpisodes.Where(c => c.AirDateUtc.HasValue) - .GroupBy(e => new { e.SeasonNumber, e.AirDate }) - .Where(g => g.Count() > 1) - .ToList(); - - foreach (var group in groups) - { - var episodeCount = 0; - foreach (var episode in @group.OrderBy(e => e.SeasonNumber).ThenBy(e => e.EpisodeNumber)) - { - episode.AirDateUtc = episode.AirDateUtc.Value.AddMinutes(series.Runtime * episodeCount); - episodeCount++; - } - } - } - } +using System; +using System.Collections.Generic; +using System.Linq; +using NLog; +using NzbDrone.Common; +using NzbDrone.Core.Messaging.Events; +using NzbDrone.Core.Tv.Events; + +namespace NzbDrone.Core.Tv +{ + public interface IRefreshEpisodeService + { + void RefreshEpisodeInfo(Series series, IEnumerable remoteEpisodes); + } + + public class RefreshEpisodeService : IRefreshEpisodeService + { + private readonly IEpisodeService _episodeService; + private readonly IEventAggregator _eventAggregator; + private readonly Logger _logger; + + public RefreshEpisodeService(IEpisodeService episodeService, IEventAggregator eventAggregator, Logger logger) + { + _episodeService = episodeService; + _eventAggregator = eventAggregator; + _logger = logger; + } + + public void RefreshEpisodeInfo(Series series, IEnumerable remoteEpisodes) + { + _logger.Info("Starting episode info refresh for: {0}", series); + var successCount = 0; + var failCount = 0; + + var existingEpisodes = _episodeService.GetEpisodeBySeries(series.Id); + var seasons = series.Seasons; + + var updateList = new List(); + var newList = new List(); + var dupeFreeRemoteEpisodes = remoteEpisodes.DistinctBy(m => new { m.SeasonNumber, m.EpisodeNumber }).ToList(); + + foreach (var episode in dupeFreeRemoteEpisodes.OrderBy(e => e.SeasonNumber).ThenBy(e => e.EpisodeNumber)) + { + try + { + var episodeToUpdate = existingEpisodes.FirstOrDefault(e => e.SeasonNumber == episode.SeasonNumber && e.EpisodeNumber == episode.EpisodeNumber); + + if (episodeToUpdate != null) + { + existingEpisodes.Remove(episodeToUpdate); + updateList.Add(episodeToUpdate); + } + else + { + episodeToUpdate = new Episode(); + episodeToUpdate.Monitored = GetMonitoredStatus(episode, seasons); + newList.Add(episodeToUpdate); + } + + episodeToUpdate.SeriesId = series.Id; + episodeToUpdate.TvDbEpisodeId = episode.TvDbEpisodeId; + episodeToUpdate.EpisodeNumber = episode.EpisodeNumber; + episodeToUpdate.SeasonNumber = episode.SeasonNumber; + episodeToUpdate.Title = episode.Title; + episodeToUpdate.Overview = episode.Overview; + episodeToUpdate.AirDate = episode.AirDate; + episodeToUpdate.AirDateUtc = episode.AirDateUtc; + + successCount++; + } + catch (Exception e) + { + _logger.FatalException(String.Format("An error has occurred while updating episode info for series {0}. {1}", series, episode), e); + failCount++; + } + } + + var allEpisodes = new List(); + allEpisodes.AddRange(newList); + allEpisodes.AddRange(updateList); + + AdjustMultiEpisodeAirTime(series, allEpisodes); + + _episodeService.DeleteMany(existingEpisodes); + _episodeService.UpdateMany(updateList); + _episodeService.InsertMany(newList); + + if (newList.Any()) + { + _eventAggregator.PublishEvent(new EpisodeInfoAddedEvent(newList, series)); + } + + if (updateList.Any()) + { + _eventAggregator.PublishEvent(new EpisodeInfoUpdatedEvent(updateList)); + } + + if (existingEpisodes.Any()) + { + _eventAggregator.PublishEvent(new EpisodeInfoDeletedEvent(updateList)); + } + + if (failCount != 0) + { + _logger.Info("Finished episode refresh for series: {0}. Successful: {1} - Failed: {2} ", + series.Title, successCount, failCount); + } + else + { + _logger.Info("Finished episode refresh for series: {0}.", series); + } + } + + private static bool GetMonitoredStatus(Episode episode, IEnumerable seasons) + { + if (episode.EpisodeNumber == 0 && episode.SeasonNumber != 1) + { + return false; + } + + var season = seasons.SingleOrDefault(c => c.SeasonNumber == episode.SeasonNumber); + return season == null || season.Monitored; + } + + private static void AdjustMultiEpisodeAirTime(Series series, IEnumerable allEpisodes) + { + var groups = + allEpisodes.Where(c => c.AirDateUtc.HasValue) + .GroupBy(e => new { e.SeasonNumber, e.AirDate }) + .Where(g => g.Count() > 1) + .ToList(); + + foreach (var group in groups) + { + var episodeCount = 0; + foreach (var episode in @group.OrderBy(e => e.SeasonNumber).ThenBy(e => e.EpisodeNumber)) + { + episode.AirDateUtc = episode.AirDateUtc.Value.AddMinutes(series.Runtime * episodeCount); + episodeCount++; + } + } + } + } } \ No newline at end of file diff --git a/NzbDrone.Core/Tv/RefreshSeriesService.cs b/src/NzbDrone.Core/Tv/RefreshSeriesService.cs similarity index 100% rename from NzbDrone.Core/Tv/RefreshSeriesService.cs rename to src/NzbDrone.Core/Tv/RefreshSeriesService.cs diff --git a/NzbDrone.Core/Tv/Season.cs b/src/NzbDrone.Core/Tv/Season.cs similarity index 100% rename from NzbDrone.Core/Tv/Season.cs rename to src/NzbDrone.Core/Tv/Season.cs diff --git a/NzbDrone.Core/Tv/Series.cs b/src/NzbDrone.Core/Tv/Series.cs similarity index 100% rename from NzbDrone.Core/Tv/Series.cs rename to src/NzbDrone.Core/Tv/Series.cs diff --git a/NzbDrone.Core/Tv/SeriesRepository.cs b/src/NzbDrone.Core/Tv/SeriesRepository.cs similarity index 100% rename from NzbDrone.Core/Tv/SeriesRepository.cs rename to src/NzbDrone.Core/Tv/SeriesRepository.cs diff --git a/NzbDrone.Core/Tv/SeriesService.cs b/src/NzbDrone.Core/Tv/SeriesService.cs similarity index 100% rename from NzbDrone.Core/Tv/SeriesService.cs rename to src/NzbDrone.Core/Tv/SeriesService.cs diff --git a/NzbDrone.Core/Tv/SeriesStatusType.cs b/src/NzbDrone.Core/Tv/SeriesStatusType.cs similarity index 100% rename from NzbDrone.Core/Tv/SeriesStatusType.cs rename to src/NzbDrone.Core/Tv/SeriesStatusType.cs diff --git a/NzbDrone.Core/Tv/SeriesTypes.cs b/src/NzbDrone.Core/Tv/SeriesTypes.cs similarity index 100% rename from NzbDrone.Core/Tv/SeriesTypes.cs rename to src/NzbDrone.Core/Tv/SeriesTypes.cs diff --git a/NzbDrone.Core/Update/Commands/ApplicationUpdateCommand.cs b/src/NzbDrone.Core/Update/Commands/ApplicationUpdateCommand.cs similarity index 100% rename from NzbDrone.Core/Update/Commands/ApplicationUpdateCommand.cs rename to src/NzbDrone.Core/Update/Commands/ApplicationUpdateCommand.cs diff --git a/NzbDrone.Core/Update/InstallUpdateService.cs b/src/NzbDrone.Core/Update/InstallUpdateService.cs similarity index 100% rename from NzbDrone.Core/Update/InstallUpdateService.cs rename to src/NzbDrone.Core/Update/InstallUpdateService.cs diff --git a/NzbDrone.Core/Update/RecentUpdateProvider.cs b/src/NzbDrone.Core/Update/RecentUpdateProvider.cs similarity index 100% rename from NzbDrone.Core/Update/RecentUpdateProvider.cs rename to src/NzbDrone.Core/Update/RecentUpdateProvider.cs diff --git a/NzbDrone.Core/Update/UpdateChanges.cs b/src/NzbDrone.Core/Update/UpdateChanges.cs similarity index 100% rename from NzbDrone.Core/Update/UpdateChanges.cs rename to src/NzbDrone.Core/Update/UpdateChanges.cs diff --git a/NzbDrone.Core/Update/UpdateCheckService.cs b/src/NzbDrone.Core/Update/UpdateCheckService.cs similarity index 100% rename from NzbDrone.Core/Update/UpdateCheckService.cs rename to src/NzbDrone.Core/Update/UpdateCheckService.cs diff --git a/NzbDrone.Core/Update/UpdatePackage.cs b/src/NzbDrone.Core/Update/UpdatePackage.cs similarity index 100% rename from NzbDrone.Core/Update/UpdatePackage.cs rename to src/NzbDrone.Core/Update/UpdatePackage.cs diff --git a/NzbDrone.Core/Update/UpdatePackageAvailable.cs b/src/NzbDrone.Core/Update/UpdatePackageAvailable.cs similarity index 100% rename from NzbDrone.Core/Update/UpdatePackageAvailable.cs rename to src/NzbDrone.Core/Update/UpdatePackageAvailable.cs diff --git a/NzbDrone.Core/Update/UpdatePackageProvider.cs b/src/NzbDrone.Core/Update/UpdatePackageProvider.cs similarity index 100% rename from NzbDrone.Core/Update/UpdatePackageProvider.cs rename to src/NzbDrone.Core/Update/UpdatePackageProvider.cs diff --git a/NzbDrone.Core/Validation/RuleBuilderExtensions.cs b/src/NzbDrone.Core/Validation/RuleBuilderExtensions.cs similarity index 100% rename from NzbDrone.Core/Validation/RuleBuilderExtensions.cs rename to src/NzbDrone.Core/Validation/RuleBuilderExtensions.cs diff --git a/NzbDrone.Core/packages.config b/src/NzbDrone.Core/packages.config similarity index 100% rename from NzbDrone.Core/packages.config rename to src/NzbDrone.Core/packages.config diff --git a/NzbDrone.Host/AccessControl/FirewallAdapter.cs b/src/NzbDrone.Host/AccessControl/FirewallAdapter.cs similarity index 100% rename from NzbDrone.Host/AccessControl/FirewallAdapter.cs rename to src/NzbDrone.Host/AccessControl/FirewallAdapter.cs diff --git a/NzbDrone.Host/AccessControl/NetshProvider.cs b/src/NzbDrone.Host/AccessControl/NetshProvider.cs similarity index 100% rename from NzbDrone.Host/AccessControl/NetshProvider.cs rename to src/NzbDrone.Host/AccessControl/NetshProvider.cs diff --git a/NzbDrone.Host/AccessControl/SslAdapter.cs b/src/NzbDrone.Host/AccessControl/SslAdapter.cs similarity index 100% rename from NzbDrone.Host/AccessControl/SslAdapter.cs rename to src/NzbDrone.Host/AccessControl/SslAdapter.cs diff --git a/NzbDrone.Host/AccessControl/UrlAclAdapter.cs b/src/NzbDrone.Host/AccessControl/UrlAclAdapter.cs similarity index 100% rename from NzbDrone.Host/AccessControl/UrlAclAdapter.cs rename to src/NzbDrone.Host/AccessControl/UrlAclAdapter.cs diff --git a/NzbDrone.Host/ApplicationModes.cs b/src/NzbDrone.Host/ApplicationModes.cs similarity index 100% rename from NzbDrone.Host/ApplicationModes.cs rename to src/NzbDrone.Host/ApplicationModes.cs diff --git a/NzbDrone.Host/ApplicationServer.cs b/src/NzbDrone.Host/ApplicationServer.cs similarity index 100% rename from NzbDrone.Host/ApplicationServer.cs rename to src/NzbDrone.Host/ApplicationServer.cs diff --git a/NzbDrone.Host/Bootstrap.cs b/src/NzbDrone.Host/Bootstrap.cs similarity index 100% rename from NzbDrone.Host/Bootstrap.cs rename to src/NzbDrone.Host/Bootstrap.cs diff --git a/NzbDrone.Host/IUserAlert.cs b/src/NzbDrone.Host/IUserAlert.cs similarity index 100% rename from NzbDrone.Host/IUserAlert.cs rename to src/NzbDrone.Host/IUserAlert.cs diff --git a/NzbDrone.Host/MainAppContainerBuilder.cs b/src/NzbDrone.Host/MainAppContainerBuilder.cs similarity index 100% rename from NzbDrone.Host/MainAppContainerBuilder.cs rename to src/NzbDrone.Host/MainAppContainerBuilder.cs diff --git a/NzbDrone.Host/NLog.xsd b/src/NzbDrone.Host/NLog.xsd similarity index 100% rename from NzbDrone.Host/NLog.xsd rename to src/NzbDrone.Host/NLog.xsd diff --git a/NzbDrone.Host/NzbDrone.Host.csproj b/src/NzbDrone.Host/NzbDrone.Host.csproj similarity index 99% rename from NzbDrone.Host/NzbDrone.Host.csproj rename to src/NzbDrone.Host/NzbDrone.Host.csproj index ff8922c0c..b4aa2ad35 100644 --- a/NzbDrone.Host/NzbDrone.Host.csproj +++ b/src/NzbDrone.Host/NzbDrone.Host.csproj @@ -37,7 +37,7 @@ true full false - ..\_output\ + ..\..\_output\ DEBUG;TRACE prompt 4 @@ -48,7 +48,7 @@ x86 pdbonly true - ..\_output\ + ..\..\_output\ TRACE prompt 4 diff --git a/NzbDrone.Host/NzbDrone.ico b/src/NzbDrone.Host/NzbDrone.ico similarity index 100% rename from NzbDrone.Host/NzbDrone.ico rename to src/NzbDrone.Host/NzbDrone.ico diff --git a/NzbDrone.Host/Owin/IHostController.cs b/src/NzbDrone.Host/Owin/IHostController.cs similarity index 100% rename from NzbDrone.Host/Owin/IHostController.cs rename to src/NzbDrone.Host/Owin/IHostController.cs diff --git a/NzbDrone.Host/Owin/MiddleWare/IOwinMiddleWare.cs b/src/NzbDrone.Host/Owin/MiddleWare/IOwinMiddleWare.cs similarity index 100% rename from NzbDrone.Host/Owin/MiddleWare/IOwinMiddleWare.cs rename to src/NzbDrone.Host/Owin/MiddleWare/IOwinMiddleWare.cs diff --git a/NzbDrone.Host/Owin/MiddleWare/NancyMiddleWare.cs b/src/NzbDrone.Host/Owin/MiddleWare/NancyMiddleWare.cs similarity index 100% rename from NzbDrone.Host/Owin/MiddleWare/NancyMiddleWare.cs rename to src/NzbDrone.Host/Owin/MiddleWare/NancyMiddleWare.cs diff --git a/NzbDrone.Host/Owin/MiddleWare/SignalRMiddleWare.cs b/src/NzbDrone.Host/Owin/MiddleWare/SignalRMiddleWare.cs similarity index 100% rename from NzbDrone.Host/Owin/MiddleWare/SignalRMiddleWare.cs rename to src/NzbDrone.Host/Owin/MiddleWare/SignalRMiddleWare.cs diff --git a/NzbDrone.Host/Owin/NlogTextWriter.cs b/src/NzbDrone.Host/Owin/NlogTextWriter.cs similarity index 100% rename from NzbDrone.Host/Owin/NlogTextWriter.cs rename to src/NzbDrone.Host/Owin/NlogTextWriter.cs diff --git a/NzbDrone.Host/Owin/OwinHostController.cs b/src/NzbDrone.Host/Owin/OwinHostController.cs similarity index 100% rename from NzbDrone.Host/Owin/OwinHostController.cs rename to src/NzbDrone.Host/Owin/OwinHostController.cs diff --git a/NzbDrone.Host/Owin/OwinServiceProvider.cs b/src/NzbDrone.Host/Owin/OwinServiceProvider.cs similarity index 100% rename from NzbDrone.Host/Owin/OwinServiceProvider.cs rename to src/NzbDrone.Host/Owin/OwinServiceProvider.cs diff --git a/NzbDrone.Host/Owin/OwinTraceOutputFactory.cs b/src/NzbDrone.Host/Owin/OwinTraceOutputFactory.cs similarity index 100% rename from NzbDrone.Host/Owin/OwinTraceOutputFactory.cs rename to src/NzbDrone.Host/Owin/OwinTraceOutputFactory.cs diff --git a/NzbDrone.Host/Owin/PortInUseException.cs b/src/NzbDrone.Host/Owin/PortInUseException.cs similarity index 100% rename from NzbDrone.Host/Owin/PortInUseException.cs rename to src/NzbDrone.Host/Owin/PortInUseException.cs diff --git a/NzbDrone.Host/PlatformValidation.cs b/src/NzbDrone.Host/PlatformValidation.cs similarity index 100% rename from NzbDrone.Host/PlatformValidation.cs rename to src/NzbDrone.Host/PlatformValidation.cs diff --git a/NzbDrone.Host/PriorityMonitor.cs b/src/NzbDrone.Host/PriorityMonitor.cs similarity index 100% rename from NzbDrone.Host/PriorityMonitor.cs rename to src/NzbDrone.Host/PriorityMonitor.cs diff --git a/NzbDrone.Host/Properties/AssemblyInfo.cs b/src/NzbDrone.Host/Properties/AssemblyInfo.cs similarity index 100% rename from NzbDrone.Host/Properties/AssemblyInfo.cs rename to src/NzbDrone.Host/Properties/AssemblyInfo.cs diff --git a/NzbDrone.Host/Router.cs b/src/NzbDrone.Host/Router.cs similarity index 100% rename from NzbDrone.Host/Router.cs rename to src/NzbDrone.Host/Router.cs diff --git a/NzbDrone.Host/TerminateApplicationException.cs b/src/NzbDrone.Host/TerminateApplicationException.cs similarity index 100% rename from NzbDrone.Host/TerminateApplicationException.cs rename to src/NzbDrone.Host/TerminateApplicationException.cs diff --git a/NzbDrone.Host/app.config b/src/NzbDrone.Host/app.config similarity index 100% rename from NzbDrone.Host/app.config rename to src/NzbDrone.Host/app.config diff --git a/NzbDrone.Host/packages.config b/src/NzbDrone.Host/packages.config similarity index 100% rename from NzbDrone.Host/packages.config rename to src/NzbDrone.Host/packages.config diff --git a/NzbDrone.Integration.Test/Client/ClientBase.cs b/src/NzbDrone.Integration.Test/Client/ClientBase.cs similarity index 96% rename from NzbDrone.Integration.Test/Client/ClientBase.cs rename to src/NzbDrone.Integration.Test/Client/ClientBase.cs index 9cd0b4b7a..a93bfad43 100644 --- a/NzbDrone.Integration.Test/Client/ClientBase.cs +++ b/src/NzbDrone.Integration.Test/Client/ClientBase.cs @@ -1,154 +1,154 @@ -using System.Collections.Generic; -using System.Net; -using FluentAssertions; -using NLog; -using NzbDrone.Api; -using NzbDrone.Api.REST; -using NzbDrone.Common.Serializer; -using RestSharp; -using System.Linq; - -namespace NzbDrone.Integration.Test.Client -{ - public class ClientBase where TResource : RestResource, new() - { - private readonly IRestClient _restClient; - private readonly string _resource; - private readonly string _apiKey; - private readonly Logger _logger; - - public ClientBase(IRestClient restClient, string apiKey, string resource = null) - { - if (resource == null) - { - resource = new TResource().ResourceName; - } - - _restClient = restClient; - _resource = resource; - _apiKey = apiKey; - - _logger = LogManager.GetLogger("REST"); - } - - public List All() - { - var request = BuildRequest(); - return Get>(request); - } - - public PagingResource GetPaged(int pageNumber, int pageSize, string sortKey, string sortDir) - { - var request = BuildRequest(); - request.AddParameter("page", pageNumber); - request.AddParameter("pageSize", pageSize); - request.AddParameter("sortKey", sortKey); - request.AddParameter("sortDir", sortDir); - return Get>(request); - - } - - public TResource Post(TResource body) - { - var request = BuildRequest(); - request.AddBody(body); - return Post(request); - } - - public TResource Put(TResource body) - { - var request = BuildRequest(); - request.AddBody(body); - return Put(request); - } - - public TResource Get(int id, HttpStatusCode statusCode = HttpStatusCode.OK) - { - var request = BuildRequest(id.ToString()); - return Get(request, statusCode); - } - - public TResource GetSingle(HttpStatusCode statusCode = HttpStatusCode.OK) - { - var request = BuildRequest(); - return Get(request, statusCode); - } - - public void Delete(int id) - { - var request = BuildRequest(id.ToString()); - Delete(request); - } - - public List InvalidPost(TResource body) - { - var request = BuildRequest(); - request.AddBody(body); - return Post>(request, HttpStatusCode.BadRequest); - } - - public RestRequest BuildRequest(string command = "") - { - var request = new RestRequest(_resource + "/" + command.Trim('/')) - { - RequestFormat = DataFormat.Json, - }; - - request.AddHeader("Authorization", _apiKey); - - return request; - } - - public T Get(IRestRequest request, HttpStatusCode statusCode = HttpStatusCode.OK) where T : class, new() - { - request.Method = Method.GET; - return Execute(request, statusCode); - } - - public T Post(IRestRequest request, HttpStatusCode statusCode = HttpStatusCode.Created) where T : class, new() - { - request.Method = Method.POST; - return Execute(request, statusCode); - } - - public T Put(IRestRequest request, HttpStatusCode statusCode = HttpStatusCode.Accepted) where T : class, new() - { - request.Method = Method.PUT; - return Execute(request, statusCode); - } - - public void Delete(IRestRequest request, HttpStatusCode statusCode = HttpStatusCode.OK) - { - request.Method = Method.DELETE; - Execute(request, statusCode); - } - - private T Execute(IRestRequest request, HttpStatusCode statusCode) where T : class, new() - { - _logger.Info("{0}: {1}", request.Method, _restClient.BuildUri(request)); - - var response = _restClient.Execute(request); - _logger.Info("Response: {0}", response.Content); - - if (response.ErrorException != null) - { - throw response.ErrorException; - } - - AssertDisableCache(response.Headers); - - response.ErrorMessage.Should().BeBlank(); - - response.StatusCode.Should().Be(statusCode); - - return Json.Deserialize(response.Content); - } - - private static void AssertDisableCache(IList headers) - { - headers.Single(c => c.Name == "Cache-Control").Value.Should().Be("no-cache, no-store, must-revalidate"); - headers.Single(c => c.Name == "Pragma").Value.Should().Be("no-cache"); - headers.Single(c => c.Name == "Expires").Value.Should().Be("0"); - } - } +using System.Collections.Generic; +using System.Net; +using FluentAssertions; +using NLog; +using NzbDrone.Api; +using NzbDrone.Api.REST; +using NzbDrone.Common.Serializer; +using RestSharp; +using System.Linq; + +namespace NzbDrone.Integration.Test.Client +{ + public class ClientBase where TResource : RestResource, new() + { + private readonly IRestClient _restClient; + private readonly string _resource; + private readonly string _apiKey; + private readonly Logger _logger; + + public ClientBase(IRestClient restClient, string apiKey, string resource = null) + { + if (resource == null) + { + resource = new TResource().ResourceName; + } + + _restClient = restClient; + _resource = resource; + _apiKey = apiKey; + + _logger = LogManager.GetLogger("REST"); + } + + public List All() + { + var request = BuildRequest(); + return Get>(request); + } + + public PagingResource GetPaged(int pageNumber, int pageSize, string sortKey, string sortDir) + { + var request = BuildRequest(); + request.AddParameter("page", pageNumber); + request.AddParameter("pageSize", pageSize); + request.AddParameter("sortKey", sortKey); + request.AddParameter("sortDir", sortDir); + return Get>(request); + + } + + public TResource Post(TResource body) + { + var request = BuildRequest(); + request.AddBody(body); + return Post(request); + } + + public TResource Put(TResource body) + { + var request = BuildRequest(); + request.AddBody(body); + return Put(request); + } + + public TResource Get(int id, HttpStatusCode statusCode = HttpStatusCode.OK) + { + var request = BuildRequest(id.ToString()); + return Get(request, statusCode); + } + + public TResource GetSingle(HttpStatusCode statusCode = HttpStatusCode.OK) + { + var request = BuildRequest(); + return Get(request, statusCode); + } + + public void Delete(int id) + { + var request = BuildRequest(id.ToString()); + Delete(request); + } + + public List InvalidPost(TResource body) + { + var request = BuildRequest(); + request.AddBody(body); + return Post>(request, HttpStatusCode.BadRequest); + } + + public RestRequest BuildRequest(string command = "") + { + var request = new RestRequest(_resource + "/" + command.Trim('/')) + { + RequestFormat = DataFormat.Json, + }; + + request.AddHeader("Authorization", _apiKey); + + return request; + } + + public T Get(IRestRequest request, HttpStatusCode statusCode = HttpStatusCode.OK) where T : class, new() + { + request.Method = Method.GET; + return Execute(request, statusCode); + } + + public T Post(IRestRequest request, HttpStatusCode statusCode = HttpStatusCode.Created) where T : class, new() + { + request.Method = Method.POST; + return Execute(request, statusCode); + } + + public T Put(IRestRequest request, HttpStatusCode statusCode = HttpStatusCode.Accepted) where T : class, new() + { + request.Method = Method.PUT; + return Execute(request, statusCode); + } + + public void Delete(IRestRequest request, HttpStatusCode statusCode = HttpStatusCode.OK) + { + request.Method = Method.DELETE; + Execute(request, statusCode); + } + + private T Execute(IRestRequest request, HttpStatusCode statusCode) where T : class, new() + { + _logger.Info("{0}: {1}", request.Method, _restClient.BuildUri(request)); + + var response = _restClient.Execute(request); + _logger.Info("Response: {0}", response.Content); + + if (response.ErrorException != null) + { + throw response.ErrorException; + } + + AssertDisableCache(response.Headers); + + response.ErrorMessage.Should().BeBlank(); + + response.StatusCode.Should().Be(statusCode); + + return Json.Deserialize(response.Content); + } + + private static void AssertDisableCache(IList headers) + { + headers.Single(c => c.Name == "Cache-Control").Value.Should().Be("no-cache, no-store, must-revalidate"); + headers.Single(c => c.Name == "Pragma").Value.Should().Be("no-cache"); + headers.Single(c => c.Name == "Expires").Value.Should().Be("0"); + } + } } \ No newline at end of file diff --git a/NzbDrone.Integration.Test/Client/EpisodeClient.cs b/src/NzbDrone.Integration.Test/Client/EpisodeClient.cs similarity index 100% rename from NzbDrone.Integration.Test/Client/EpisodeClient.cs rename to src/NzbDrone.Integration.Test/Client/EpisodeClient.cs diff --git a/NzbDrone.Integration.Test/Client/IndexerClient.cs b/src/NzbDrone.Integration.Test/Client/IndexerClient.cs similarity index 100% rename from NzbDrone.Integration.Test/Client/IndexerClient.cs rename to src/NzbDrone.Integration.Test/Client/IndexerClient.cs diff --git a/NzbDrone.Integration.Test/Client/ReleaseClient.cs b/src/NzbDrone.Integration.Test/Client/ReleaseClient.cs similarity index 100% rename from NzbDrone.Integration.Test/Client/ReleaseClient.cs rename to src/NzbDrone.Integration.Test/Client/ReleaseClient.cs diff --git a/NzbDrone.Integration.Test/Client/SeriesClient.cs b/src/NzbDrone.Integration.Test/Client/SeriesClient.cs similarity index 100% rename from NzbDrone.Integration.Test/Client/SeriesClient.cs rename to src/NzbDrone.Integration.Test/Client/SeriesClient.cs diff --git a/NzbDrone.Integration.Test/CommandIntegerationTests.cs b/src/NzbDrone.Integration.Test/CommandIntegerationTests.cs similarity index 100% rename from NzbDrone.Integration.Test/CommandIntegerationTests.cs rename to src/NzbDrone.Integration.Test/CommandIntegerationTests.cs diff --git a/NzbDrone.Integration.Test/EpisodeIntegrationTests.cs b/src/NzbDrone.Integration.Test/EpisodeIntegrationTests.cs similarity index 100% rename from NzbDrone.Integration.Test/EpisodeIntegrationTests.cs rename to src/NzbDrone.Integration.Test/EpisodeIntegrationTests.cs diff --git a/NzbDrone.Integration.Test/HistoryIntegrationTest.cs b/src/NzbDrone.Integration.Test/HistoryIntegrationTest.cs similarity index 100% rename from NzbDrone.Integration.Test/HistoryIntegrationTest.cs rename to src/NzbDrone.Integration.Test/HistoryIntegrationTest.cs diff --git a/NzbDrone.Integration.Test/IndexerIntegrationFixture.cs b/src/NzbDrone.Integration.Test/IndexerIntegrationFixture.cs similarity index 100% rename from NzbDrone.Integration.Test/IndexerIntegrationFixture.cs rename to src/NzbDrone.Integration.Test/IndexerIntegrationFixture.cs diff --git a/NzbDrone.Integration.Test/IntegrationTest.cs b/src/NzbDrone.Integration.Test/IntegrationTest.cs similarity index 100% rename from NzbDrone.Integration.Test/IntegrationTest.cs rename to src/NzbDrone.Integration.Test/IntegrationTest.cs diff --git a/NzbDrone.Integration.Test/IntegrationTestDirectoryInfo.cs b/src/NzbDrone.Integration.Test/IntegrationTestDirectoryInfo.cs similarity index 100% rename from NzbDrone.Integration.Test/IntegrationTestDirectoryInfo.cs rename to src/NzbDrone.Integration.Test/IntegrationTestDirectoryInfo.cs diff --git a/NzbDrone.Integration.Test/NamingConfigTests.cs b/src/NzbDrone.Integration.Test/NamingConfigTests.cs similarity index 100% rename from NzbDrone.Integration.Test/NamingConfigTests.cs rename to src/NzbDrone.Integration.Test/NamingConfigTests.cs diff --git a/NzbDrone.Integration.Test/NzbDrone.Integration.Test.csproj b/src/NzbDrone.Integration.Test/NzbDrone.Integration.Test.csproj similarity index 100% rename from NzbDrone.Integration.Test/NzbDrone.Integration.Test.csproj rename to src/NzbDrone.Integration.Test/NzbDrone.Integration.Test.csproj diff --git a/NzbDrone.Integration.Test/NzbDroneRunner.cs b/src/NzbDrone.Integration.Test/NzbDroneRunner.cs similarity index 100% rename from NzbDrone.Integration.Test/NzbDroneRunner.cs rename to src/NzbDrone.Integration.Test/NzbDroneRunner.cs diff --git a/NzbDrone.Integration.Test/Properties/AssemblyInfo.cs b/src/NzbDrone.Integration.Test/Properties/AssemblyInfo.cs similarity index 100% rename from NzbDrone.Integration.Test/Properties/AssemblyInfo.cs rename to src/NzbDrone.Integration.Test/Properties/AssemblyInfo.cs diff --git a/NzbDrone.Integration.Test/QualityProfileIntegrationTest.cs b/src/NzbDrone.Integration.Test/QualityProfileIntegrationTest.cs similarity index 100% rename from NzbDrone.Integration.Test/QualityProfileIntegrationTest.cs rename to src/NzbDrone.Integration.Test/QualityProfileIntegrationTest.cs diff --git a/NzbDrone.Integration.Test/ReleaseIntegrationTest.cs b/src/NzbDrone.Integration.Test/ReleaseIntegrationTest.cs similarity index 100% rename from NzbDrone.Integration.Test/ReleaseIntegrationTest.cs rename to src/NzbDrone.Integration.Test/ReleaseIntegrationTest.cs diff --git a/NzbDrone.Integration.Test/RootFolderIntegrationTest.cs b/src/NzbDrone.Integration.Test/RootFolderIntegrationTest.cs similarity index 100% rename from NzbDrone.Integration.Test/RootFolderIntegrationTest.cs rename to src/NzbDrone.Integration.Test/RootFolderIntegrationTest.cs diff --git a/NzbDrone.Integration.Test/SeriesIntegrationTest.cs b/src/NzbDrone.Integration.Test/SeriesIntegrationTest.cs similarity index 100% rename from NzbDrone.Integration.Test/SeriesIntegrationTest.cs rename to src/NzbDrone.Integration.Test/SeriesIntegrationTest.cs diff --git a/NzbDrone.Integration.Test/packages.config b/src/NzbDrone.Integration.Test/packages.config similarity index 100% rename from NzbDrone.Integration.Test/packages.config rename to src/NzbDrone.Integration.Test/packages.config diff --git a/NzbDrone.Libraries.Test/JsonTests/JsonFixture.cs b/src/NzbDrone.Libraries.Test/JsonTests/JsonFixture.cs similarity index 100% rename from NzbDrone.Libraries.Test/JsonTests/JsonFixture.cs rename to src/NzbDrone.Libraries.Test/JsonTests/JsonFixture.cs diff --git a/NzbDrone.Libraries.Test/NzbDrone.Libraries.Test.csproj b/src/NzbDrone.Libraries.Test/NzbDrone.Libraries.Test.csproj similarity index 100% rename from NzbDrone.Libraries.Test/NzbDrone.Libraries.Test.csproj rename to src/NzbDrone.Libraries.Test/NzbDrone.Libraries.Test.csproj diff --git a/NzbDrone.Libraries.Test/Properties/AssemblyInfo.cs b/src/NzbDrone.Libraries.Test/Properties/AssemblyInfo.cs similarity index 100% rename from NzbDrone.Libraries.Test/Properties/AssemblyInfo.cs rename to src/NzbDrone.Libraries.Test/Properties/AssemblyInfo.cs diff --git a/NzbDrone.Libraries.Test/packages.config b/src/NzbDrone.Libraries.Test/packages.config similarity index 100% rename from NzbDrone.Libraries.Test/packages.config rename to src/NzbDrone.Libraries.Test/packages.config diff --git a/NzbDrone.SignalR/BroadcastSignalRMessage.cs b/src/NzbDrone.SignalR/BroadcastSignalRMessage.cs similarity index 100% rename from NzbDrone.SignalR/BroadcastSignalRMessage.cs rename to src/NzbDrone.SignalR/BroadcastSignalRMessage.cs diff --git a/NzbDrone.SignalR/NoOpPerformanceCounterManager.cs b/src/NzbDrone.SignalR/NoOpPerformanceCounterManager.cs similarity index 100% rename from NzbDrone.SignalR/NoOpPerformanceCounterManager.cs rename to src/NzbDrone.SignalR/NoOpPerformanceCounterManager.cs diff --git a/NzbDrone.SignalR/NzbDrone.SignalR.csproj b/src/NzbDrone.SignalR/NzbDrone.SignalR.csproj similarity index 97% rename from NzbDrone.SignalR/NzbDrone.SignalR.csproj rename to src/NzbDrone.SignalR/NzbDrone.SignalR.csproj index 859651305..c3110ef29 100644 --- a/NzbDrone.SignalR/NzbDrone.SignalR.csproj +++ b/src/NzbDrone.SignalR/NzbDrone.SignalR.csproj @@ -16,7 +16,7 @@ true - bin\x86\Debug\ + ..\..\_output\ DEBUG;TRACE full x86 @@ -24,7 +24,7 @@ MinimumRecommendedRules.ruleset - bin\x86\Release\ + ..\..\_output\ TRACE true pdbonly diff --git a/NzbDrone.SignalR/NzbDronePersistentConnection.cs b/src/NzbDrone.SignalR/NzbDronePersistentConnection.cs similarity index 100% rename from NzbDrone.SignalR/NzbDronePersistentConnection.cs rename to src/NzbDrone.SignalR/NzbDronePersistentConnection.cs diff --git a/NzbDrone.SignalR/Properties/AssemblyInfo.cs b/src/NzbDrone.SignalR/Properties/AssemblyInfo.cs similarity index 100% rename from NzbDrone.SignalR/Properties/AssemblyInfo.cs rename to src/NzbDrone.SignalR/Properties/AssemblyInfo.cs diff --git a/NzbDrone.SignalR/Serializer.cs b/src/NzbDrone.SignalR/Serializer.cs similarity index 100% rename from NzbDrone.SignalR/Serializer.cs rename to src/NzbDrone.SignalR/Serializer.cs diff --git a/NzbDrone.SignalR/SignalRMessage.cs b/src/NzbDrone.SignalR/SignalRMessage.cs similarity index 100% rename from NzbDrone.SignalR/SignalRMessage.cs rename to src/NzbDrone.SignalR/SignalRMessage.cs diff --git a/NzbDrone.SignalR/SignalrDependencyResolver.cs b/src/NzbDrone.SignalR/SignalrDependencyResolver.cs similarity index 100% rename from NzbDrone.SignalR/SignalrDependencyResolver.cs rename to src/NzbDrone.SignalR/SignalrDependencyResolver.cs diff --git a/NzbDrone.SignalR/packages.config b/src/NzbDrone.SignalR/packages.config similarity index 100% rename from NzbDrone.SignalR/packages.config rename to src/NzbDrone.SignalR/packages.config diff --git a/NzbDrone.Test.Common/App.config b/src/NzbDrone.Test.Common/App.config similarity index 100% rename from NzbDrone.Test.Common/App.config rename to src/NzbDrone.Test.Common/App.config diff --git a/NzbDrone.Test.Common/AutoMoq/AutoMoqer.cs b/src/NzbDrone.Test.Common/AutoMoq/AutoMoqer.cs similarity index 100% rename from NzbDrone.Test.Common/AutoMoq/AutoMoqer.cs rename to src/NzbDrone.Test.Common/AutoMoq/AutoMoqer.cs diff --git a/NzbDrone.Test.Common/AutoMoq/License.txt b/src/NzbDrone.Test.Common/AutoMoq/License.txt similarity index 100% rename from NzbDrone.Test.Common/AutoMoq/License.txt rename to src/NzbDrone.Test.Common/AutoMoq/License.txt diff --git a/NzbDrone.Test.Common/AutoMoq/Unity/AutoMockingBuilderStrategy.cs b/src/NzbDrone.Test.Common/AutoMoq/Unity/AutoMockingBuilderStrategy.cs similarity index 100% rename from NzbDrone.Test.Common/AutoMoq/Unity/AutoMockingBuilderStrategy.cs rename to src/NzbDrone.Test.Common/AutoMoq/Unity/AutoMockingBuilderStrategy.cs diff --git a/NzbDrone.Test.Common/AutoMoq/Unity/AutoMockingContainerExtension.cs b/src/NzbDrone.Test.Common/AutoMoq/Unity/AutoMockingContainerExtension.cs similarity index 100% rename from NzbDrone.Test.Common/AutoMoq/Unity/AutoMockingContainerExtension.cs rename to src/NzbDrone.Test.Common/AutoMoq/Unity/AutoMockingContainerExtension.cs diff --git a/NzbDrone.Test.Common/Categories/DiskAccessTestAttribute.cs b/src/NzbDrone.Test.Common/Categories/DiskAccessTestAttribute.cs similarity index 100% rename from NzbDrone.Test.Common/Categories/DiskAccessTestAttribute.cs rename to src/NzbDrone.Test.Common/Categories/DiskAccessTestAttribute.cs diff --git a/NzbDrone.Test.Common/Categories/IntegrationTestAttribute.cs b/src/NzbDrone.Test.Common/Categories/IntegrationTestAttribute.cs similarity index 100% rename from NzbDrone.Test.Common/Categories/IntegrationTestAttribute.cs rename to src/NzbDrone.Test.Common/Categories/IntegrationTestAttribute.cs diff --git a/NzbDrone.Test.Common/ConcurrencyCounter.cs b/src/NzbDrone.Test.Common/ConcurrencyCounter.cs similarity index 100% rename from NzbDrone.Test.Common/ConcurrencyCounter.cs rename to src/NzbDrone.Test.Common/ConcurrencyCounter.cs diff --git a/NzbDrone.Test.Common/ExceptionVerification.cs b/src/NzbDrone.Test.Common/ExceptionVerification.cs similarity index 100% rename from NzbDrone.Test.Common/ExceptionVerification.cs rename to src/NzbDrone.Test.Common/ExceptionVerification.cs diff --git a/NzbDrone.Test.Common/License.txt b/src/NzbDrone.Test.Common/License.txt similarity index 100% rename from NzbDrone.Test.Common/License.txt rename to src/NzbDrone.Test.Common/License.txt diff --git a/NzbDrone.Test.Common/LoggingTest.cs b/src/NzbDrone.Test.Common/LoggingTest.cs similarity index 100% rename from NzbDrone.Test.Common/LoggingTest.cs rename to src/NzbDrone.Test.Common/LoggingTest.cs diff --git a/NzbDrone.Test.Common/MockerExtensions.cs b/src/NzbDrone.Test.Common/MockerExtensions.cs similarity index 100% rename from NzbDrone.Test.Common/MockerExtensions.cs rename to src/NzbDrone.Test.Common/MockerExtensions.cs diff --git a/NzbDrone.Test.Common/NzbDrone.Test.Common.csproj b/src/NzbDrone.Test.Common/NzbDrone.Test.Common.csproj similarity index 100% rename from NzbDrone.Test.Common/NzbDrone.Test.Common.csproj rename to src/NzbDrone.Test.Common/NzbDrone.Test.Common.csproj diff --git a/NzbDrone.Test.Common/ObjectExtentions.cs b/src/NzbDrone.Test.Common/ObjectExtentions.cs similarity index 100% rename from NzbDrone.Test.Common/ObjectExtentions.cs rename to src/NzbDrone.Test.Common/ObjectExtentions.cs diff --git a/NzbDrone.Test.Common/Properties/AssemblyInfo.cs b/src/NzbDrone.Test.Common/Properties/AssemblyInfo.cs similarity index 100% rename from NzbDrone.Test.Common/Properties/AssemblyInfo.cs rename to src/NzbDrone.Test.Common/Properties/AssemblyInfo.cs diff --git a/NzbDrone.Test.Common/ReflectionExtensions.cs b/src/NzbDrone.Test.Common/ReflectionExtensions.cs similarity index 100% rename from NzbDrone.Test.Common/ReflectionExtensions.cs rename to src/NzbDrone.Test.Common/ReflectionExtensions.cs diff --git a/NzbDrone.Test.Common/StringExtensions.cs b/src/NzbDrone.Test.Common/StringExtensions.cs similarity index 100% rename from NzbDrone.Test.Common/StringExtensions.cs rename to src/NzbDrone.Test.Common/StringExtensions.cs diff --git a/NzbDrone.Test.Common/TestBase.cs b/src/NzbDrone.Test.Common/TestBase.cs similarity index 100% rename from NzbDrone.Test.Common/TestBase.cs rename to src/NzbDrone.Test.Common/TestBase.cs diff --git a/NzbDrone.Test.Common/TestException.cs b/src/NzbDrone.Test.Common/TestException.cs similarity index 100% rename from NzbDrone.Test.Common/TestException.cs rename to src/NzbDrone.Test.Common/TestException.cs diff --git a/NzbDrone.Test.Common/packages.config b/src/NzbDrone.Test.Common/packages.config similarity index 100% rename from NzbDrone.Test.Common/packages.config rename to src/NzbDrone.Test.Common/packages.config diff --git a/NzbDrone.Test.Dummy/DummyApp.cs b/src/NzbDrone.Test.Dummy/DummyApp.cs similarity index 100% rename from NzbDrone.Test.Dummy/DummyApp.cs rename to src/NzbDrone.Test.Dummy/DummyApp.cs diff --git a/NzbDrone.Test.Dummy/NzbDrone.Test.Dummy.csproj b/src/NzbDrone.Test.Dummy/NzbDrone.Test.Dummy.csproj similarity index 100% rename from NzbDrone.Test.Dummy/NzbDrone.Test.Dummy.csproj rename to src/NzbDrone.Test.Dummy/NzbDrone.Test.Dummy.csproj diff --git a/NzbDrone.Test.Dummy/Properties/AssemblyInfo.cs b/src/NzbDrone.Test.Dummy/Properties/AssemblyInfo.cs similarity index 100% rename from NzbDrone.Test.Dummy/Properties/AssemblyInfo.cs rename to src/NzbDrone.Test.Dummy/Properties/AssemblyInfo.cs diff --git a/NzbDrone.Test.Dummy/app.config b/src/NzbDrone.Test.Dummy/app.config similarity index 100% rename from NzbDrone.Test.Dummy/app.config rename to src/NzbDrone.Test.Dummy/app.config diff --git a/NzbDrone.Update.Test/InstallUpdateServiceFixture.cs b/src/NzbDrone.Update.Test/InstallUpdateServiceFixture.cs similarity index 100% rename from NzbDrone.Update.Test/InstallUpdateServiceFixture.cs rename to src/NzbDrone.Update.Test/InstallUpdateServiceFixture.cs diff --git a/NzbDrone.Update.Test/License.txt b/src/NzbDrone.Update.Test/License.txt similarity index 100% rename from NzbDrone.Update.Test/License.txt rename to src/NzbDrone.Update.Test/License.txt diff --git a/NzbDrone.Update.Test/NzbDrone.Update.Test.csproj b/src/NzbDrone.Update.Test/NzbDrone.Update.Test.csproj similarity index 100% rename from NzbDrone.Update.Test/NzbDrone.Update.Test.csproj rename to src/NzbDrone.Update.Test/NzbDrone.Update.Test.csproj diff --git a/NzbDrone.Update.Test/ProgramFixture.cs b/src/NzbDrone.Update.Test/ProgramFixture.cs similarity index 100% rename from NzbDrone.Update.Test/ProgramFixture.cs rename to src/NzbDrone.Update.Test/ProgramFixture.cs diff --git a/NzbDrone.Update.Test/Properties/AssemblyInfo.cs b/src/NzbDrone.Update.Test/Properties/AssemblyInfo.cs similarity index 100% rename from NzbDrone.Update.Test/Properties/AssemblyInfo.cs rename to src/NzbDrone.Update.Test/Properties/AssemblyInfo.cs diff --git a/NzbDrone.Update.Test/StartNzbDroneService.cs b/src/NzbDrone.Update.Test/StartNzbDroneService.cs similarity index 100% rename from NzbDrone.Update.Test/StartNzbDroneService.cs rename to src/NzbDrone.Update.Test/StartNzbDroneService.cs diff --git a/NzbDrone.Update.Test/UpdateProviderStartFixture.cs b/src/NzbDrone.Update.Test/UpdateProviderStartFixture.cs similarity index 100% rename from NzbDrone.Update.Test/UpdateProviderStartFixture.cs rename to src/NzbDrone.Update.Test/UpdateProviderStartFixture.cs diff --git a/NzbDrone.Update.Test/packages.config b/src/NzbDrone.Update.Test/packages.config similarity index 100% rename from NzbDrone.Update.Test/packages.config rename to src/NzbDrone.Update.Test/packages.config diff --git a/NzbDrone.Update/AppType.cs b/src/NzbDrone.Update/AppType.cs similarity index 100% rename from NzbDrone.Update/AppType.cs rename to src/NzbDrone.Update/AppType.cs diff --git a/NzbDrone.Update/NLog.xsd b/src/NzbDrone.Update/NLog.xsd similarity index 100% rename from NzbDrone.Update/NLog.xsd rename to src/NzbDrone.Update/NLog.xsd diff --git a/NzbDrone.Update/NzbDrone.Update.csproj b/src/NzbDrone.Update/NzbDrone.Update.csproj similarity index 96% rename from NzbDrone.Update/NzbDrone.Update.csproj rename to src/NzbDrone.Update/NzbDrone.Update.csproj index d52120d91..3aa8ea3a4 100644 --- a/NzbDrone.Update/NzbDrone.Update.csproj +++ b/src/NzbDrone.Update/NzbDrone.Update.csproj @@ -22,7 +22,7 @@ true full false - ..\_output\NzbDrone.Update\ + ..\..\_output\NzbDrone.Update\ DEBUG;TRACE prompt 4 @@ -31,7 +31,7 @@ x86 pdbonly true - ..\_output\NzbDrone.Update\ + ..\..\_output\NzbDrone.Update\ TRACE prompt 4 diff --git a/NzbDrone.Update/Properties/AssemblyInfo.cs b/src/NzbDrone.Update/Properties/AssemblyInfo.cs similarity index 100% rename from NzbDrone.Update/Properties/AssemblyInfo.cs rename to src/NzbDrone.Update/Properties/AssemblyInfo.cs diff --git a/NzbDrone.Update/UpdateApp.cs b/src/NzbDrone.Update/UpdateApp.cs similarity index 100% rename from NzbDrone.Update/UpdateApp.cs rename to src/NzbDrone.Update/UpdateApp.cs diff --git a/NzbDrone.Update/UpdateContainerBuilder.cs b/src/NzbDrone.Update/UpdateContainerBuilder.cs similarity index 100% rename from NzbDrone.Update/UpdateContainerBuilder.cs rename to src/NzbDrone.Update/UpdateContainerBuilder.cs diff --git a/NzbDrone.Update/UpdateEngine/BackupAndRestore.cs b/src/NzbDrone.Update/UpdateEngine/BackupAndRestore.cs similarity index 100% rename from NzbDrone.Update/UpdateEngine/BackupAndRestore.cs rename to src/NzbDrone.Update/UpdateEngine/BackupAndRestore.cs diff --git a/NzbDrone.Update/UpdateEngine/DetectApplicationType.cs b/src/NzbDrone.Update/UpdateEngine/DetectApplicationType.cs similarity index 100% rename from NzbDrone.Update/UpdateEngine/DetectApplicationType.cs rename to src/NzbDrone.Update/UpdateEngine/DetectApplicationType.cs diff --git a/NzbDrone.Update/UpdateEngine/InstallUpdateService.cs b/src/NzbDrone.Update/UpdateEngine/InstallUpdateService.cs similarity index 100% rename from NzbDrone.Update/UpdateEngine/InstallUpdateService.cs rename to src/NzbDrone.Update/UpdateEngine/InstallUpdateService.cs diff --git a/NzbDrone.Update/UpdateEngine/StartNzbDrone.cs b/src/NzbDrone.Update/UpdateEngine/StartNzbDrone.cs similarity index 100% rename from NzbDrone.Update/UpdateEngine/StartNzbDrone.cs rename to src/NzbDrone.Update/UpdateEngine/StartNzbDrone.cs diff --git a/NzbDrone.Update/UpdateEngine/TerminateNzbDrone.cs b/src/NzbDrone.Update/UpdateEngine/TerminateNzbDrone.cs similarity index 100% rename from NzbDrone.Update/UpdateEngine/TerminateNzbDrone.cs rename to src/NzbDrone.Update/UpdateEngine/TerminateNzbDrone.cs diff --git a/NzbDrone.Update/app.config b/src/NzbDrone.Update/app.config similarity index 100% rename from NzbDrone.Update/app.config rename to src/NzbDrone.Update/app.config diff --git a/NzbDrone.Update/packages.config b/src/NzbDrone.Update/packages.config similarity index 100% rename from NzbDrone.Update/packages.config rename to src/NzbDrone.Update/packages.config diff --git a/NzbDrone.sln b/src/NzbDrone.sln similarity index 100% rename from NzbDrone.sln rename to src/NzbDrone.sln diff --git a/NzbDrone.sln.DotSettings b/src/NzbDrone.sln.DotSettings similarity index 100% rename from NzbDrone.sln.DotSettings rename to src/NzbDrone.sln.DotSettings diff --git a/NzbDrone/MessageBoxUserAlert.cs b/src/NzbDrone/MessageBoxUserAlert.cs similarity index 100% rename from NzbDrone/MessageBoxUserAlert.cs rename to src/NzbDrone/MessageBoxUserAlert.cs diff --git a/NzbDrone/NzbDrone.csproj b/src/NzbDrone/NzbDrone.csproj similarity index 98% rename from NzbDrone/NzbDrone.csproj rename to src/NzbDrone/NzbDrone.csproj index 5d45930cd..f428eae7b 100644 --- a/NzbDrone/NzbDrone.csproj +++ b/src/NzbDrone/NzbDrone.csproj @@ -37,7 +37,7 @@ true full false - ..\_output\ + ..\..\_output\ DEBUG;TRACE prompt 4 @@ -48,7 +48,7 @@ x86 pdbonly true - ..\_output\ + ..\..\_output\ TRACE prompt 4 diff --git a/NzbDrone/Properties/AssemblyInfo.cs b/src/NzbDrone/Properties/AssemblyInfo.cs similarity index 100% rename from NzbDrone/Properties/AssemblyInfo.cs rename to src/NzbDrone/Properties/AssemblyInfo.cs diff --git a/NzbDrone/Properties/Resources.Designer.cs b/src/NzbDrone/Properties/Resources.Designer.cs similarity index 100% rename from NzbDrone/Properties/Resources.Designer.cs rename to src/NzbDrone/Properties/Resources.Designer.cs diff --git a/NzbDrone/Properties/Resources.resx b/src/NzbDrone/Properties/Resources.resx similarity index 100% rename from NzbDrone/Properties/Resources.resx rename to src/NzbDrone/Properties/Resources.resx diff --git a/NzbDrone/SysTray/SysTrayApp.cs b/src/NzbDrone/SysTray/SysTrayApp.cs similarity index 100% rename from NzbDrone/SysTray/SysTrayApp.cs rename to src/NzbDrone/SysTray/SysTrayApp.cs diff --git a/NzbDrone/WindowsApp.cs b/src/NzbDrone/WindowsApp.cs similarity index 100% rename from NzbDrone/WindowsApp.cs rename to src/NzbDrone/WindowsApp.cs diff --git a/NzbDrone/packages.config b/src/NzbDrone/packages.config similarity index 100% rename from NzbDrone/packages.config rename to src/NzbDrone/packages.config diff --git a/ServiceHelpers/ServiceInstall/Program.cs b/src/ServiceHelpers/ServiceInstall/Program.cs similarity index 100% rename from ServiceHelpers/ServiceInstall/Program.cs rename to src/ServiceHelpers/ServiceInstall/Program.cs diff --git a/ServiceHelpers/ServiceInstall/Properties/AssemblyInfo.cs b/src/ServiceHelpers/ServiceInstall/Properties/AssemblyInfo.cs similarity index 100% rename from ServiceHelpers/ServiceInstall/Properties/AssemblyInfo.cs rename to src/ServiceHelpers/ServiceInstall/Properties/AssemblyInfo.cs diff --git a/ServiceHelpers/ServiceInstall/ServiceHelper.cs b/src/ServiceHelpers/ServiceInstall/ServiceHelper.cs similarity index 100% rename from ServiceHelpers/ServiceInstall/ServiceHelper.cs rename to src/ServiceHelpers/ServiceInstall/ServiceHelper.cs diff --git a/ServiceHelpers/ServiceInstall/ServiceInstall.csproj b/src/ServiceHelpers/ServiceInstall/ServiceInstall.csproj similarity index 96% rename from ServiceHelpers/ServiceInstall/ServiceInstall.csproj rename to src/ServiceHelpers/ServiceInstall/ServiceInstall.csproj index 9433f32e3..928fce634 100644 --- a/ServiceHelpers/ServiceInstall/ServiceInstall.csproj +++ b/src/ServiceHelpers/ServiceInstall/ServiceInstall.csproj @@ -22,7 +22,7 @@ true full false - ..\..\_output\ + ..\..\..\_output\ DEBUG;TRACE prompt 4 @@ -31,7 +31,7 @@ x86 pdbonly true - ..\..\_output\ + ..\..\..\_output\ TRACE prompt 4 diff --git a/ServiceHelpers/ServiceInstall/app.config b/src/ServiceHelpers/ServiceInstall/app.config similarity index 100% rename from ServiceHelpers/ServiceInstall/app.config rename to src/ServiceHelpers/ServiceInstall/app.config diff --git a/ServiceHelpers/ServiceInstall/app.manifest b/src/ServiceHelpers/ServiceInstall/app.manifest similarity index 100% rename from ServiceHelpers/ServiceInstall/app.manifest rename to src/ServiceHelpers/ServiceInstall/app.manifest diff --git a/ServiceHelpers/ServiceInstall/green_puzzle.ico b/src/ServiceHelpers/ServiceInstall/green_puzzle.ico similarity index 100% rename from ServiceHelpers/ServiceInstall/green_puzzle.ico rename to src/ServiceHelpers/ServiceInstall/green_puzzle.ico diff --git a/ServiceHelpers/ServiceUninstall/Program.cs b/src/ServiceHelpers/ServiceUninstall/Program.cs similarity index 100% rename from ServiceHelpers/ServiceUninstall/Program.cs rename to src/ServiceHelpers/ServiceUninstall/Program.cs diff --git a/ServiceHelpers/ServiceUninstall/Properties/AssemblyInfo.cs b/src/ServiceHelpers/ServiceUninstall/Properties/AssemblyInfo.cs similarity index 100% rename from ServiceHelpers/ServiceUninstall/Properties/AssemblyInfo.cs rename to src/ServiceHelpers/ServiceUninstall/Properties/AssemblyInfo.cs diff --git a/ServiceHelpers/ServiceUninstall/ServiceHelper.cs b/src/ServiceHelpers/ServiceUninstall/ServiceHelper.cs similarity index 100% rename from ServiceHelpers/ServiceUninstall/ServiceHelper.cs rename to src/ServiceHelpers/ServiceUninstall/ServiceHelper.cs diff --git a/ServiceHelpers/ServiceUninstall/ServiceUninstall.csproj b/src/ServiceHelpers/ServiceUninstall/ServiceUninstall.csproj similarity index 96% rename from ServiceHelpers/ServiceUninstall/ServiceUninstall.csproj rename to src/ServiceHelpers/ServiceUninstall/ServiceUninstall.csproj index 338b4e7fb..66adb5935 100644 --- a/ServiceHelpers/ServiceUninstall/ServiceUninstall.csproj +++ b/src/ServiceHelpers/ServiceUninstall/ServiceUninstall.csproj @@ -22,7 +22,7 @@ true full false - ..\..\_output\ + ..\..\..\_output\ DEBUG;TRACE prompt 4 @@ -31,7 +31,7 @@ x86 pdbonly true - ..\..\_output\ + ..\..\..\_output\ TRACE prompt 4 diff --git a/ServiceHelpers/ServiceUninstall/app.config b/src/ServiceHelpers/ServiceUninstall/app.config similarity index 100% rename from ServiceHelpers/ServiceUninstall/app.config rename to src/ServiceHelpers/ServiceUninstall/app.config diff --git a/ServiceHelpers/ServiceUninstall/app.manifest b/src/ServiceHelpers/ServiceUninstall/app.manifest similarity index 100% rename from ServiceHelpers/ServiceUninstall/app.manifest rename to src/ServiceHelpers/ServiceUninstall/app.manifest diff --git a/ServiceHelpers/ServiceUninstall/red_puzzle.ico b/src/ServiceHelpers/ServiceUninstall/red_puzzle.ico similarity index 100% rename from ServiceHelpers/ServiceUninstall/red_puzzle.ico rename to src/ServiceHelpers/ServiceUninstall/red_puzzle.ico diff --git a/SharedLiveTemplates.xml b/src/SharedLiveTemplates.xml similarity index 100% rename from SharedLiveTemplates.xml rename to src/SharedLiveTemplates.xml diff --git a/UI/.idea/.name b/src/UI/.idea/.name similarity index 100% rename from UI/.idea/.name rename to src/UI/.idea/.name diff --git a/UI/.idea/NzbDrone.UI.iml b/src/UI/.idea/NzbDrone.UI.iml similarity index 100% rename from UI/.idea/NzbDrone.UI.iml rename to src/UI/.idea/NzbDrone.UI.iml diff --git a/UI/.idea/codeStyleSettings.xml b/src/UI/.idea/codeStyleSettings.xml similarity index 100% rename from UI/.idea/codeStyleSettings.xml rename to src/UI/.idea/codeStyleSettings.xml diff --git a/UI/.idea/dictionaries/Keivan.xml b/src/UI/.idea/dictionaries/Keivan.xml similarity index 100% rename from UI/.idea/dictionaries/Keivan.xml rename to src/UI/.idea/dictionaries/Keivan.xml diff --git a/UI/.idea/dictionaries/Keivan_Beigi.xml b/src/UI/.idea/dictionaries/Keivan_Beigi.xml similarity index 100% rename from UI/.idea/dictionaries/Keivan_Beigi.xml rename to src/UI/.idea/dictionaries/Keivan_Beigi.xml diff --git a/UI/.idea/dictionaries/Mark.xml b/src/UI/.idea/dictionaries/Mark.xml similarity index 100% rename from UI/.idea/dictionaries/Mark.xml rename to src/UI/.idea/dictionaries/Mark.xml diff --git a/UI/.idea/encodings.xml b/src/UI/.idea/encodings.xml similarity index 100% rename from UI/.idea/encodings.xml rename to src/UI/.idea/encodings.xml diff --git a/UI/.idea/inspectionProfiles/Project_Default.xml b/src/UI/.idea/inspectionProfiles/Project_Default.xml similarity index 100% rename from UI/.idea/inspectionProfiles/Project_Default.xml rename to src/UI/.idea/inspectionProfiles/Project_Default.xml diff --git a/UI/.idea/inspectionProfiles/profiles_settings.xml b/src/UI/.idea/inspectionProfiles/profiles_settings.xml similarity index 100% rename from UI/.idea/inspectionProfiles/profiles_settings.xml rename to src/UI/.idea/inspectionProfiles/profiles_settings.xml diff --git a/UI/.idea/jsLibraryMappings.xml b/src/UI/.idea/jsLibraryMappings.xml similarity index 100% rename from UI/.idea/jsLibraryMappings.xml rename to src/UI/.idea/jsLibraryMappings.xml diff --git a/UI/.idea/jsLinters/jshint.xml b/src/UI/.idea/jsLinters/jshint.xml similarity index 100% rename from UI/.idea/jsLinters/jshint.xml rename to src/UI/.idea/jsLinters/jshint.xml diff --git a/UI/.idea/jsLinters/jslint.xml b/src/UI/.idea/jsLinters/jslint.xml similarity index 100% rename from UI/.idea/jsLinters/jslint.xml rename to src/UI/.idea/jsLinters/jslint.xml diff --git a/UI/.idea/misc.xml b/src/UI/.idea/misc.xml similarity index 100% rename from UI/.idea/misc.xml rename to src/UI/.idea/misc.xml diff --git a/UI/.idea/modules.xml b/src/UI/.idea/modules.xml similarity index 100% rename from UI/.idea/modules.xml rename to src/UI/.idea/modules.xml diff --git a/UI/.idea/runConfigurations/Debug___Chrome.xml b/src/UI/.idea/runConfigurations/Debug___Chrome.xml similarity index 100% rename from UI/.idea/runConfigurations/Debug___Chrome.xml rename to src/UI/.idea/runConfigurations/Debug___Chrome.xml diff --git a/UI/.idea/runConfigurations/Debug___Firefox.xml b/src/UI/.idea/runConfigurations/Debug___Firefox.xml similarity index 100% rename from UI/.idea/runConfigurations/Debug___Firefox.xml rename to src/UI/.idea/runConfigurations/Debug___Firefox.xml diff --git a/UI/.idea/scopes/NzbDrone.xml b/src/UI/.idea/scopes/NzbDrone.xml similarity index 100% rename from UI/.idea/scopes/NzbDrone.xml rename to src/UI/.idea/scopes/NzbDrone.xml diff --git a/UI/.idea/scopes/scope_settings.xml b/src/UI/.idea/scopes/scope_settings.xml similarity index 100% rename from UI/.idea/scopes/scope_settings.xml rename to src/UI/.idea/scopes/scope_settings.xml diff --git a/UI/.idea/vcs.xml b/src/UI/.idea/vcs.xml similarity index 100% rename from UI/.idea/vcs.xml rename to src/UI/.idea/vcs.xml diff --git a/UI/AddSeries/AddSeriesCollection.js b/src/UI/AddSeries/AddSeriesCollection.js similarity index 100% rename from UI/AddSeries/AddSeriesCollection.js rename to src/UI/AddSeries/AddSeriesCollection.js diff --git a/UI/AddSeries/AddSeriesLayout.js b/src/UI/AddSeries/AddSeriesLayout.js similarity index 100% rename from UI/AddSeries/AddSeriesLayout.js rename to src/UI/AddSeries/AddSeriesLayout.js diff --git a/UI/AddSeries/AddSeriesLayoutTemplate.html b/src/UI/AddSeries/AddSeriesLayoutTemplate.html similarity index 100% rename from UI/AddSeries/AddSeriesLayoutTemplate.html rename to src/UI/AddSeries/AddSeriesLayoutTemplate.html diff --git a/UI/AddSeries/AddSeriesView.js b/src/UI/AddSeries/AddSeriesView.js similarity index 100% rename from UI/AddSeries/AddSeriesView.js rename to src/UI/AddSeries/AddSeriesView.js diff --git a/UI/AddSeries/AddSeriesViewTemplate.html b/src/UI/AddSeries/AddSeriesViewTemplate.html similarity index 100% rename from UI/AddSeries/AddSeriesViewTemplate.html rename to src/UI/AddSeries/AddSeriesViewTemplate.html diff --git a/UI/AddSeries/Existing/AddExistingSeriesCollectionView.js b/src/UI/AddSeries/Existing/AddExistingSeriesCollectionView.js similarity index 100% rename from UI/AddSeries/Existing/AddExistingSeriesCollectionView.js rename to src/UI/AddSeries/Existing/AddExistingSeriesCollectionView.js diff --git a/UI/AddSeries/Existing/UnmappedFolderCollection.js b/src/UI/AddSeries/Existing/UnmappedFolderCollection.js similarity index 100% rename from UI/AddSeries/Existing/UnmappedFolderCollection.js rename to src/UI/AddSeries/Existing/UnmappedFolderCollection.js diff --git a/UI/AddSeries/Existing/UnmappedFolderModel.js b/src/UI/AddSeries/Existing/UnmappedFolderModel.js similarity index 100% rename from UI/AddSeries/Existing/UnmappedFolderModel.js rename to src/UI/AddSeries/Existing/UnmappedFolderModel.js diff --git a/UI/AddSeries/NotFoundTemplate.html b/src/UI/AddSeries/NotFoundTemplate.html similarity index 100% rename from UI/AddSeries/NotFoundTemplate.html rename to src/UI/AddSeries/NotFoundTemplate.html diff --git a/UI/AddSeries/NotFoundView.js b/src/UI/AddSeries/NotFoundView.js similarity index 100% rename from UI/AddSeries/NotFoundView.js rename to src/UI/AddSeries/NotFoundView.js diff --git a/UI/AddSeries/RootFolders/Collection.js b/src/UI/AddSeries/RootFolders/Collection.js similarity index 100% rename from UI/AddSeries/RootFolders/Collection.js rename to src/UI/AddSeries/RootFolders/Collection.js diff --git a/UI/AddSeries/RootFolders/CollectionView.js b/src/UI/AddSeries/RootFolders/CollectionView.js similarity index 100% rename from UI/AddSeries/RootFolders/CollectionView.js rename to src/UI/AddSeries/RootFolders/CollectionView.js diff --git a/UI/AddSeries/RootFolders/ItemView.js b/src/UI/AddSeries/RootFolders/ItemView.js similarity index 100% rename from UI/AddSeries/RootFolders/ItemView.js rename to src/UI/AddSeries/RootFolders/ItemView.js diff --git a/UI/AddSeries/RootFolders/ItemViewTemplate.html b/src/UI/AddSeries/RootFolders/ItemViewTemplate.html similarity index 100% rename from UI/AddSeries/RootFolders/ItemViewTemplate.html rename to src/UI/AddSeries/RootFolders/ItemViewTemplate.html diff --git a/UI/AddSeries/RootFolders/Layout.js b/src/UI/AddSeries/RootFolders/Layout.js similarity index 100% rename from UI/AddSeries/RootFolders/Layout.js rename to src/UI/AddSeries/RootFolders/Layout.js diff --git a/UI/AddSeries/RootFolders/LayoutTemplate.html b/src/UI/AddSeries/RootFolders/LayoutTemplate.html similarity index 100% rename from UI/AddSeries/RootFolders/LayoutTemplate.html rename to src/UI/AddSeries/RootFolders/LayoutTemplate.html diff --git a/UI/AddSeries/RootFolders/Model.js b/src/UI/AddSeries/RootFolders/Model.js similarity index 100% rename from UI/AddSeries/RootFolders/Model.js rename to src/UI/AddSeries/RootFolders/Model.js diff --git a/UI/AddSeries/RootFolders/RootFolderSelectionPartial.html b/src/UI/AddSeries/RootFolders/RootFolderSelectionPartial.html similarity index 100% rename from UI/AddSeries/RootFolders/RootFolderSelectionPartial.html rename to src/UI/AddSeries/RootFolders/RootFolderSelectionPartial.html diff --git a/UI/AddSeries/RootFolders/StartingSeasonSelectionPartial.html b/src/UI/AddSeries/RootFolders/StartingSeasonSelectionPartial.html similarity index 100% rename from UI/AddSeries/RootFolders/StartingSeasonSelectionPartial.html rename to src/UI/AddSeries/RootFolders/StartingSeasonSelectionPartial.html diff --git a/UI/AddSeries/SearchResultCollectionView.js b/src/UI/AddSeries/SearchResultCollectionView.js similarity index 100% rename from UI/AddSeries/SearchResultCollectionView.js rename to src/UI/AddSeries/SearchResultCollectionView.js diff --git a/UI/AddSeries/SearchResultView.js b/src/UI/AddSeries/SearchResultView.js similarity index 97% rename from UI/AddSeries/SearchResultView.js rename to src/UI/AddSeries/SearchResultView.js index 218bf0ff0..a25d36e5c 100644 --- a/UI/AddSeries/SearchResultView.js +++ b/src/UI/AddSeries/SearchResultView.js @@ -1,161 +1,161 @@ -'use strict'; -define( - [ - 'app', - 'underscore', - 'marionette', - 'Quality/QualityProfileCollection', - 'AddSeries/RootFolders/Collection', - 'AddSeries/RootFolders/Layout', - 'Series/SeriesCollection', - 'Config', - 'Shared/Messenger', - 'Mixins/AsValidatedView', - 'jquery.dotdotdot' - ], function (App, _, Marionette, QualityProfiles, RootFolders, RootFolderLayout, SeriesCollection, Config, Messenger, AsValidatedView) { - - var view = Marionette.ItemView.extend({ - - template: 'AddSeries/SearchResultViewTemplate', - - ui: { - qualityProfile: '.x-quality-profile', - rootFolder : '.x-root-folder', - addButton : '.x-add', - overview : '.x-overview', - startingSeason: '.x-starting-season' - }, - - events: { - 'click .x-add' : '_addSeries', - 'change .x-quality-profile': '_qualityProfileChanged', - 'change .x-root-folder' : '_rootFolderChanged' - }, - - initialize: function () { - - if (!this.model) { - throw 'model is required'; - } - - this.templateHelpers = {}; - this._configureTemplateHelpers(); - - this.listenTo(App.vent, Config.Events.ConfigUpdatedEvent, this._onConfigUpdated); - this.listenTo(this.model, 'change', this.render); - this.listenTo(RootFolders, 'all', this.render); - - this.rootFolderLayout = new RootFolderLayout(); - this.listenTo(this.rootFolderLayout, 'folderSelected', this._setRootFolder); - }, - - onRender: function () { - - var defaultQuality = Config.getValue(Config.Keys.DefaultQualityProfileId); - var defaultRoot = Config.getValue(Config.Keys.DefaultRootFolderId); - - if (QualityProfiles.get(defaultQuality)) { - this.ui.qualityProfile.val(defaultQuality); - } - - if (RootFolders.get(defaultRoot)) { - this.ui.rootFolder.val(defaultRoot); - } - - var minSeasonNotZero = _.min(_.reject(this.model.get('seasons'), { seasonNumber: 0 }), 'seasonNumber'); - - if (minSeasonNotZero) { - this.ui.startingSeason.val(minSeasonNotZero.seasonNumber); - } - - //TODO: make this work via onRender, FM? - //works with onShow, but stops working after the first render - this.ui.overview.dotdotdot({ - height: 120 - }); - }, - - _configureTemplateHelpers: function () { - var existingSeries = SeriesCollection.where({tvdbId: this.model.get('tvdbId')}); - - if (existingSeries.length > 0) { - this.templateHelpers.existing = existingSeries[0].toJSON(); - } - - this.templateHelpers.qualityProfiles = QualityProfiles.toJSON(); - - if (!this.model.get('isExisting')) { - this.templateHelpers.rootFolders = RootFolders.toJSON(); - } - }, - - _onConfigUpdated: function (options) { - if (options.key === Config.Keys.DefaultQualityProfileId) { - this.ui.qualityProfile.val(options.value); - } - else if (options.key === Config.Keys.DefaultRootFolderId) { - this.ui.rootFolder.val(options.value); - } - }, - - _qualityProfileChanged: function () { - Config.setValue(Config.Keys.DefaultQualityProfileId, this.ui.qualityProfile.val()); - }, - - _rootFolderChanged: function () { - var rootFolderValue = this.ui.rootFolder.val(); - if (rootFolderValue === 'addNew') { - App.modalRegion.show(this.rootFolderLayout); - } - else { - Config.setValue(Config.Keys.DefaultRootFolderId, rootFolderValue); - } - }, - - _setRootFolder: function (options) { - App.vent.trigger(App.Commands.CloseModalCommand); - this.ui.rootFolder.val(options.model.id); - this._rootFolderChanged(); - }, - - _addSeries: function () { - var icon = this.ui.addButton.find('icon'); - icon.removeClass('icon-plus').addClass('icon-spin icon-spinner disabled'); - - var quality = this.ui.qualityProfile.val(); - var rootFolderPath = this.ui.rootFolder.children(':selected').text(); - var startingSeason = this.ui.startingSeason.val(); - - this.model.set('qualityProfileId', quality); - this.model.set('rootFolderPath', rootFolderPath); - this.model.setSeasonPass(startingSeason); - - var self = this; - - SeriesCollection.add(this.model); - - - var promise = this.model.save(); - - promise.done(function () { - self.close(); - icon.removeClass('icon-spin icon-spinner disabled').addClass('icon-search'); - - Messenger.show({ - message: 'Added: ' + self.model.get('title') - }); - - App.vent.trigger(App.Events.SeriesAdded, { series: self.model }); - }); - - promise.fail(function () { - icon.removeClass('icon-spin icon-spinner disabled').addClass('icon-search'); - }); - } - }); - - - AsValidatedView.apply(view); - - return view; - }); +'use strict'; +define( + [ + 'app', + 'underscore', + 'marionette', + 'Quality/QualityProfileCollection', + 'AddSeries/RootFolders/Collection', + 'AddSeries/RootFolders/Layout', + 'Series/SeriesCollection', + 'Config', + 'Shared/Messenger', + 'Mixins/AsValidatedView', + 'jquery.dotdotdot' + ], function (App, _, Marionette, QualityProfiles, RootFolders, RootFolderLayout, SeriesCollection, Config, Messenger, AsValidatedView) { + + var view = Marionette.ItemView.extend({ + + template: 'AddSeries/SearchResultViewTemplate', + + ui: { + qualityProfile: '.x-quality-profile', + rootFolder : '.x-root-folder', + addButton : '.x-add', + overview : '.x-overview', + startingSeason: '.x-starting-season' + }, + + events: { + 'click .x-add' : '_addSeries', + 'change .x-quality-profile': '_qualityProfileChanged', + 'change .x-root-folder' : '_rootFolderChanged' + }, + + initialize: function () { + + if (!this.model) { + throw 'model is required'; + } + + this.templateHelpers = {}; + this._configureTemplateHelpers(); + + this.listenTo(App.vent, Config.Events.ConfigUpdatedEvent, this._onConfigUpdated); + this.listenTo(this.model, 'change', this.render); + this.listenTo(RootFolders, 'all', this.render); + + this.rootFolderLayout = new RootFolderLayout(); + this.listenTo(this.rootFolderLayout, 'folderSelected', this._setRootFolder); + }, + + onRender: function () { + + var defaultQuality = Config.getValue(Config.Keys.DefaultQualityProfileId); + var defaultRoot = Config.getValue(Config.Keys.DefaultRootFolderId); + + if (QualityProfiles.get(defaultQuality)) { + this.ui.qualityProfile.val(defaultQuality); + } + + if (RootFolders.get(defaultRoot)) { + this.ui.rootFolder.val(defaultRoot); + } + + var minSeasonNotZero = _.min(_.reject(this.model.get('seasons'), { seasonNumber: 0 }), 'seasonNumber'); + + if (minSeasonNotZero) { + this.ui.startingSeason.val(minSeasonNotZero.seasonNumber); + } + + //TODO: make this work via onRender, FM? + //works with onShow, but stops working after the first render + this.ui.overview.dotdotdot({ + height: 120 + }); + }, + + _configureTemplateHelpers: function () { + var existingSeries = SeriesCollection.where({tvdbId: this.model.get('tvdbId')}); + + if (existingSeries.length > 0) { + this.templateHelpers.existing = existingSeries[0].toJSON(); + } + + this.templateHelpers.qualityProfiles = QualityProfiles.toJSON(); + + if (!this.model.get('isExisting')) { + this.templateHelpers.rootFolders = RootFolders.toJSON(); + } + }, + + _onConfigUpdated: function (options) { + if (options.key === Config.Keys.DefaultQualityProfileId) { + this.ui.qualityProfile.val(options.value); + } + else if (options.key === Config.Keys.DefaultRootFolderId) { + this.ui.rootFolder.val(options.value); + } + }, + + _qualityProfileChanged: function () { + Config.setValue(Config.Keys.DefaultQualityProfileId, this.ui.qualityProfile.val()); + }, + + _rootFolderChanged: function () { + var rootFolderValue = this.ui.rootFolder.val(); + if (rootFolderValue === 'addNew') { + App.modalRegion.show(this.rootFolderLayout); + } + else { + Config.setValue(Config.Keys.DefaultRootFolderId, rootFolderValue); + } + }, + + _setRootFolder: function (options) { + App.vent.trigger(App.Commands.CloseModalCommand); + this.ui.rootFolder.val(options.model.id); + this._rootFolderChanged(); + }, + + _addSeries: function () { + var icon = this.ui.addButton.find('icon'); + icon.removeClass('icon-plus').addClass('icon-spin icon-spinner disabled'); + + var quality = this.ui.qualityProfile.val(); + var rootFolderPath = this.ui.rootFolder.children(':selected').text(); + var startingSeason = this.ui.startingSeason.val(); + + this.model.set('qualityProfileId', quality); + this.model.set('rootFolderPath', rootFolderPath); + this.model.setSeasonPass(startingSeason); + + var self = this; + + SeriesCollection.add(this.model); + + + var promise = this.model.save(); + + promise.done(function () { + self.close(); + icon.removeClass('icon-spin icon-spinner disabled').addClass('icon-search'); + + Messenger.show({ + message: 'Added: ' + self.model.get('title') + }); + + App.vent.trigger(App.Events.SeriesAdded, { series: self.model }); + }); + + promise.fail(function () { + icon.removeClass('icon-spin icon-spinner disabled').addClass('icon-search'); + }); + } + }); + + + AsValidatedView.apply(view); + + return view; + }); diff --git a/UI/AddSeries/SearchResultViewTemplate.html b/src/UI/AddSeries/SearchResultViewTemplate.html similarity index 100% rename from UI/AddSeries/SearchResultViewTemplate.html rename to src/UI/AddSeries/SearchResultViewTemplate.html diff --git a/UI/AddSeries/addSeries.less b/src/UI/AddSeries/addSeries.less similarity index 100% rename from UI/AddSeries/addSeries.less rename to src/UI/AddSeries/addSeries.less diff --git a/UI/Calendar/CalendarLayout.js b/src/UI/Calendar/CalendarLayout.js similarity index 100% rename from UI/Calendar/CalendarLayout.js rename to src/UI/Calendar/CalendarLayout.js diff --git a/UI/Calendar/CalendarLayoutTemplate.html b/src/UI/Calendar/CalendarLayoutTemplate.html similarity index 100% rename from UI/Calendar/CalendarLayoutTemplate.html rename to src/UI/Calendar/CalendarLayoutTemplate.html diff --git a/UI/Calendar/CalendarView.js b/src/UI/Calendar/CalendarView.js similarity index 100% rename from UI/Calendar/CalendarView.js rename to src/UI/Calendar/CalendarView.js diff --git a/UI/Calendar/Collection.js b/src/UI/Calendar/Collection.js similarity index 100% rename from UI/Calendar/Collection.js rename to src/UI/Calendar/Collection.js diff --git a/UI/Calendar/UpcomingCollection.js b/src/UI/Calendar/UpcomingCollection.js similarity index 100% rename from UI/Calendar/UpcomingCollection.js rename to src/UI/Calendar/UpcomingCollection.js diff --git a/UI/Calendar/UpcomingCollectionView.js b/src/UI/Calendar/UpcomingCollectionView.js similarity index 100% rename from UI/Calendar/UpcomingCollectionView.js rename to src/UI/Calendar/UpcomingCollectionView.js diff --git a/UI/Calendar/UpcomingItemView.js b/src/UI/Calendar/UpcomingItemView.js similarity index 100% rename from UI/Calendar/UpcomingItemView.js rename to src/UI/Calendar/UpcomingItemView.js diff --git a/UI/Calendar/UpcomingItemViewTemplate.html b/src/UI/Calendar/UpcomingItemViewTemplate.html similarity index 100% rename from UI/Calendar/UpcomingItemViewTemplate.html rename to src/UI/Calendar/UpcomingItemViewTemplate.html diff --git a/UI/Calendar/calendar.less b/src/UI/Calendar/calendar.less similarity index 100% rename from UI/Calendar/calendar.less rename to src/UI/Calendar/calendar.less diff --git a/UI/Cells/ApprovalStatusCell.js b/src/UI/Cells/ApprovalStatusCell.js similarity index 100% rename from UI/Cells/ApprovalStatusCell.js rename to src/UI/Cells/ApprovalStatusCell.js diff --git a/UI/Cells/ApprovalStatusCellTemplate.html b/src/UI/Cells/ApprovalStatusCellTemplate.html similarity index 100% rename from UI/Cells/ApprovalStatusCellTemplate.html rename to src/UI/Cells/ApprovalStatusCellTemplate.html diff --git a/UI/Cells/Edit/QualityCellEditor.js b/src/UI/Cells/Edit/QualityCellEditor.js similarity index 100% rename from UI/Cells/Edit/QualityCellEditor.js rename to src/UI/Cells/Edit/QualityCellEditor.js diff --git a/UI/Cells/Edit/QualityCellEditorTemplate.html b/src/UI/Cells/Edit/QualityCellEditorTemplate.html similarity index 100% rename from UI/Cells/Edit/QualityCellEditorTemplate.html rename to src/UI/Cells/Edit/QualityCellEditorTemplate.html diff --git a/UI/Cells/EpisodeActionsCell.js b/src/UI/Cells/EpisodeActionsCell.js similarity index 100% rename from UI/Cells/EpisodeActionsCell.js rename to src/UI/Cells/EpisodeActionsCell.js diff --git a/UI/Cells/EpisodeActionsCellTemplate.html b/src/UI/Cells/EpisodeActionsCellTemplate.html similarity index 100% rename from UI/Cells/EpisodeActionsCellTemplate.html rename to src/UI/Cells/EpisodeActionsCellTemplate.html diff --git a/UI/Cells/EpisodeNumberCell.js b/src/UI/Cells/EpisodeNumberCell.js similarity index 100% rename from UI/Cells/EpisodeNumberCell.js rename to src/UI/Cells/EpisodeNumberCell.js diff --git a/UI/Cells/EpisodeProgressCell.js b/src/UI/Cells/EpisodeProgressCell.js similarity index 100% rename from UI/Cells/EpisodeProgressCell.js rename to src/UI/Cells/EpisodeProgressCell.js diff --git a/UI/Cells/EpisodeProgressCellTemplate.html b/src/UI/Cells/EpisodeProgressCellTemplate.html similarity index 100% rename from UI/Cells/EpisodeProgressCellTemplate.html rename to src/UI/Cells/EpisodeProgressCellTemplate.html diff --git a/UI/Cells/EpisodeStatusCell.js b/src/UI/Cells/EpisodeStatusCell.js similarity index 100% rename from UI/Cells/EpisodeStatusCell.js rename to src/UI/Cells/EpisodeStatusCell.js diff --git a/UI/Cells/EpisodeTitleCell.js b/src/UI/Cells/EpisodeTitleCell.js similarity index 100% rename from UI/Cells/EpisodeTitleCell.js rename to src/UI/Cells/EpisodeTitleCell.js diff --git a/UI/Cells/FileSizeCell.js b/src/UI/Cells/FileSizeCell.js similarity index 100% rename from UI/Cells/FileSizeCell.js rename to src/UI/Cells/FileSizeCell.js diff --git a/UI/Cells/Header/QualityHeaderCell.js b/src/UI/Cells/Header/QualityHeaderCell.js similarity index 100% rename from UI/Cells/Header/QualityHeaderCell.js rename to src/UI/Cells/Header/QualityHeaderCell.js diff --git a/UI/Cells/IndexerCell.js b/src/UI/Cells/IndexerCell.js similarity index 100% rename from UI/Cells/IndexerCell.js rename to src/UI/Cells/IndexerCell.js diff --git a/UI/Cells/NzbDroneCell.js b/src/UI/Cells/NzbDroneCell.js similarity index 100% rename from UI/Cells/NzbDroneCell.js rename to src/UI/Cells/NzbDroneCell.js diff --git a/UI/Cells/QualityCell.js b/src/UI/Cells/QualityCell.js similarity index 100% rename from UI/Cells/QualityCell.js rename to src/UI/Cells/QualityCell.js diff --git a/UI/Cells/QualityCellTemplate.html b/src/UI/Cells/QualityCellTemplate.html similarity index 100% rename from UI/Cells/QualityCellTemplate.html rename to src/UI/Cells/QualityCellTemplate.html diff --git a/UI/Cells/QualityProfileCell.js b/src/UI/Cells/QualityProfileCell.js similarity index 100% rename from UI/Cells/QualityProfileCell.js rename to src/UI/Cells/QualityProfileCell.js diff --git a/UI/Cells/RelativeDateCell.js b/src/UI/Cells/RelativeDateCell.js similarity index 100% rename from UI/Cells/RelativeDateCell.js rename to src/UI/Cells/RelativeDateCell.js diff --git a/UI/Cells/SeriesActionsCell.js b/src/UI/Cells/SeriesActionsCell.js similarity index 100% rename from UI/Cells/SeriesActionsCell.js rename to src/UI/Cells/SeriesActionsCell.js diff --git a/UI/Cells/SeriesStatusCell.js b/src/UI/Cells/SeriesStatusCell.js similarity index 100% rename from UI/Cells/SeriesStatusCell.js rename to src/UI/Cells/SeriesStatusCell.js diff --git a/UI/Cells/SeriesTitleCell.js b/src/UI/Cells/SeriesTitleCell.js similarity index 100% rename from UI/Cells/SeriesTitleCell.js rename to src/UI/Cells/SeriesTitleCell.js diff --git a/UI/Cells/SeriesTitleTemplate.html b/src/UI/Cells/SeriesTitleTemplate.html similarity index 100% rename from UI/Cells/SeriesTitleTemplate.html rename to src/UI/Cells/SeriesTitleTemplate.html diff --git a/UI/Cells/TemplatedCell.js b/src/UI/Cells/TemplatedCell.js similarity index 100% rename from UI/Cells/TemplatedCell.js rename to src/UI/Cells/TemplatedCell.js diff --git a/UI/Cells/ToggleCell.js b/src/UI/Cells/ToggleCell.js similarity index 100% rename from UI/Cells/ToggleCell.js rename to src/UI/Cells/ToggleCell.js diff --git a/UI/Cells/cells.less b/src/UI/Cells/cells.less similarity index 100% rename from UI/Cells/cells.less rename to src/UI/Cells/cells.less diff --git a/UI/Commands/CommandCollection.js b/src/UI/Commands/CommandCollection.js similarity index 100% rename from UI/Commands/CommandCollection.js rename to src/UI/Commands/CommandCollection.js diff --git a/UI/Commands/CommandController.js b/src/UI/Commands/CommandController.js similarity index 100% rename from UI/Commands/CommandController.js rename to src/UI/Commands/CommandController.js diff --git a/UI/Commands/CommandMessengerCollectionView.js b/src/UI/Commands/CommandMessengerCollectionView.js similarity index 100% rename from UI/Commands/CommandMessengerCollectionView.js rename to src/UI/Commands/CommandMessengerCollectionView.js diff --git a/UI/Commands/CommandMessengerItemView.js b/src/UI/Commands/CommandMessengerItemView.js similarity index 100% rename from UI/Commands/CommandMessengerItemView.js rename to src/UI/Commands/CommandMessengerItemView.js diff --git a/UI/Commands/CommandModel.js b/src/UI/Commands/CommandModel.js similarity index 100% rename from UI/Commands/CommandModel.js rename to src/UI/Commands/CommandModel.js diff --git a/UI/Config.js b/src/UI/Config.js similarity index 100% rename from UI/Config.js rename to src/UI/Config.js diff --git a/UI/Content/Backgrid/backgrid.less b/src/UI/Content/Backgrid/backgrid.less similarity index 100% rename from UI/Content/Backgrid/backgrid.less rename to src/UI/Content/Backgrid/backgrid.less diff --git a/UI/Content/Backgrid/filter.less b/src/UI/Content/Backgrid/filter.less similarity index 100% rename from UI/Content/Backgrid/filter.less rename to src/UI/Content/Backgrid/filter.less diff --git a/UI/Content/Backgrid/paginator.less b/src/UI/Content/Backgrid/paginator.less similarity index 100% rename from UI/Content/Backgrid/paginator.less rename to src/UI/Content/Backgrid/paginator.less diff --git a/UI/Content/Bootstrap/accordion.less b/src/UI/Content/Bootstrap/accordion.less similarity index 100% rename from UI/Content/Bootstrap/accordion.less rename to src/UI/Content/Bootstrap/accordion.less diff --git a/UI/Content/Bootstrap/alerts.less b/src/UI/Content/Bootstrap/alerts.less similarity index 100% rename from UI/Content/Bootstrap/alerts.less rename to src/UI/Content/Bootstrap/alerts.less diff --git a/UI/Content/Bootstrap/bootstrap.less b/src/UI/Content/Bootstrap/bootstrap.less similarity index 100% rename from UI/Content/Bootstrap/bootstrap.less rename to src/UI/Content/Bootstrap/bootstrap.less diff --git a/UI/Content/Bootstrap/breadcrumbs.less b/src/UI/Content/Bootstrap/breadcrumbs.less similarity index 100% rename from UI/Content/Bootstrap/breadcrumbs.less rename to src/UI/Content/Bootstrap/breadcrumbs.less diff --git a/UI/Content/Bootstrap/button-groups.less b/src/UI/Content/Bootstrap/button-groups.less similarity index 100% rename from UI/Content/Bootstrap/button-groups.less rename to src/UI/Content/Bootstrap/button-groups.less diff --git a/UI/Content/Bootstrap/buttons.less b/src/UI/Content/Bootstrap/buttons.less similarity index 100% rename from UI/Content/Bootstrap/buttons.less rename to src/UI/Content/Bootstrap/buttons.less diff --git a/UI/Content/Bootstrap/carousel.less b/src/UI/Content/Bootstrap/carousel.less similarity index 100% rename from UI/Content/Bootstrap/carousel.less rename to src/UI/Content/Bootstrap/carousel.less diff --git a/UI/Content/Bootstrap/close.less b/src/UI/Content/Bootstrap/close.less similarity index 100% rename from UI/Content/Bootstrap/close.less rename to src/UI/Content/Bootstrap/close.less diff --git a/UI/Content/Bootstrap/code.less b/src/UI/Content/Bootstrap/code.less similarity index 100% rename from UI/Content/Bootstrap/code.less rename to src/UI/Content/Bootstrap/code.less diff --git a/UI/Content/Bootstrap/component-animations.less b/src/UI/Content/Bootstrap/component-animations.less similarity index 100% rename from UI/Content/Bootstrap/component-animations.less rename to src/UI/Content/Bootstrap/component-animations.less diff --git a/UI/Content/Bootstrap/dropdowns.less b/src/UI/Content/Bootstrap/dropdowns.less similarity index 100% rename from UI/Content/Bootstrap/dropdowns.less rename to src/UI/Content/Bootstrap/dropdowns.less diff --git a/UI/Content/Bootstrap/forms.less b/src/UI/Content/Bootstrap/forms.less similarity index 100% rename from UI/Content/Bootstrap/forms.less rename to src/UI/Content/Bootstrap/forms.less diff --git a/UI/Content/Bootstrap/grid.less b/src/UI/Content/Bootstrap/grid.less similarity index 100% rename from UI/Content/Bootstrap/grid.less rename to src/UI/Content/Bootstrap/grid.less diff --git a/UI/Content/Bootstrap/hero-unit.less b/src/UI/Content/Bootstrap/hero-unit.less similarity index 100% rename from UI/Content/Bootstrap/hero-unit.less rename to src/UI/Content/Bootstrap/hero-unit.less diff --git a/UI/Content/Bootstrap/labels-badges.less b/src/UI/Content/Bootstrap/labels-badges.less similarity index 100% rename from UI/Content/Bootstrap/labels-badges.less rename to src/UI/Content/Bootstrap/labels-badges.less diff --git a/UI/Content/Bootstrap/layouts.less b/src/UI/Content/Bootstrap/layouts.less similarity index 100% rename from UI/Content/Bootstrap/layouts.less rename to src/UI/Content/Bootstrap/layouts.less diff --git a/UI/Content/Bootstrap/media.less b/src/UI/Content/Bootstrap/media.less similarity index 100% rename from UI/Content/Bootstrap/media.less rename to src/UI/Content/Bootstrap/media.less diff --git a/UI/Content/Bootstrap/mixins.less b/src/UI/Content/Bootstrap/mixins.less similarity index 100% rename from UI/Content/Bootstrap/mixins.less rename to src/UI/Content/Bootstrap/mixins.less diff --git a/UI/Content/Bootstrap/modals.less b/src/UI/Content/Bootstrap/modals.less similarity index 100% rename from UI/Content/Bootstrap/modals.less rename to src/UI/Content/Bootstrap/modals.less diff --git a/UI/Content/Bootstrap/navbar.less b/src/UI/Content/Bootstrap/navbar.less similarity index 100% rename from UI/Content/Bootstrap/navbar.less rename to src/UI/Content/Bootstrap/navbar.less diff --git a/UI/Content/Bootstrap/navs.less b/src/UI/Content/Bootstrap/navs.less similarity index 100% rename from UI/Content/Bootstrap/navs.less rename to src/UI/Content/Bootstrap/navs.less diff --git a/UI/Content/Bootstrap/pager.less b/src/UI/Content/Bootstrap/pager.less similarity index 100% rename from UI/Content/Bootstrap/pager.less rename to src/UI/Content/Bootstrap/pager.less diff --git a/UI/Content/Bootstrap/pagination.less b/src/UI/Content/Bootstrap/pagination.less similarity index 100% rename from UI/Content/Bootstrap/pagination.less rename to src/UI/Content/Bootstrap/pagination.less diff --git a/UI/Content/Bootstrap/popovers.less b/src/UI/Content/Bootstrap/popovers.less similarity index 100% rename from UI/Content/Bootstrap/popovers.less rename to src/UI/Content/Bootstrap/popovers.less diff --git a/UI/Content/Bootstrap/progress-bars.less b/src/UI/Content/Bootstrap/progress-bars.less similarity index 100% rename from UI/Content/Bootstrap/progress-bars.less rename to src/UI/Content/Bootstrap/progress-bars.less diff --git a/UI/Content/Bootstrap/reset.less b/src/UI/Content/Bootstrap/reset.less similarity index 100% rename from UI/Content/Bootstrap/reset.less rename to src/UI/Content/Bootstrap/reset.less diff --git a/UI/Content/Bootstrap/scaffolding.less b/src/UI/Content/Bootstrap/scaffolding.less similarity index 100% rename from UI/Content/Bootstrap/scaffolding.less rename to src/UI/Content/Bootstrap/scaffolding.less diff --git a/UI/Content/Bootstrap/sprites.less b/src/UI/Content/Bootstrap/sprites.less similarity index 100% rename from UI/Content/Bootstrap/sprites.less rename to src/UI/Content/Bootstrap/sprites.less diff --git a/UI/Content/Bootstrap/tables.less b/src/UI/Content/Bootstrap/tables.less similarity index 100% rename from UI/Content/Bootstrap/tables.less rename to src/UI/Content/Bootstrap/tables.less diff --git a/UI/Content/Bootstrap/thumbnails.less b/src/UI/Content/Bootstrap/thumbnails.less similarity index 100% rename from UI/Content/Bootstrap/thumbnails.less rename to src/UI/Content/Bootstrap/thumbnails.less diff --git a/UI/Content/Bootstrap/tooltip.less b/src/UI/Content/Bootstrap/tooltip.less similarity index 100% rename from UI/Content/Bootstrap/tooltip.less rename to src/UI/Content/Bootstrap/tooltip.less diff --git a/UI/Content/Bootstrap/type.less b/src/UI/Content/Bootstrap/type.less similarity index 100% rename from UI/Content/Bootstrap/type.less rename to src/UI/Content/Bootstrap/type.less diff --git a/UI/Content/Bootstrap/utilities.less b/src/UI/Content/Bootstrap/utilities.less similarity index 100% rename from UI/Content/Bootstrap/utilities.less rename to src/UI/Content/Bootstrap/utilities.less diff --git a/UI/Content/Bootstrap/variables.less b/src/UI/Content/Bootstrap/variables.less similarity index 100% rename from UI/Content/Bootstrap/variables.less rename to src/UI/Content/Bootstrap/variables.less diff --git a/UI/Content/Bootstrap/wells.less b/src/UI/Content/Bootstrap/wells.less similarity index 100% rename from UI/Content/Bootstrap/wells.less rename to src/UI/Content/Bootstrap/wells.less diff --git a/UI/Content/FontAwesome/fontawesome.otf b/src/UI/Content/FontAwesome/FontAwesome.otf similarity index 100% rename from UI/Content/FontAwesome/fontawesome.otf rename to src/UI/Content/FontAwesome/FontAwesome.otf diff --git a/UI/Content/FontAwesome/bootstrap.less b/src/UI/Content/FontAwesome/bootstrap.less similarity index 100% rename from UI/Content/FontAwesome/bootstrap.less rename to src/UI/Content/FontAwesome/bootstrap.less diff --git a/UI/Content/FontAwesome/core.less b/src/UI/Content/FontAwesome/core.less similarity index 100% rename from UI/Content/FontAwesome/core.less rename to src/UI/Content/FontAwesome/core.less diff --git a/UI/Content/FontAwesome/extras.less b/src/UI/Content/FontAwesome/extras.less similarity index 100% rename from UI/Content/FontAwesome/extras.less rename to src/UI/Content/FontAwesome/extras.less diff --git a/UI/Content/FontAwesome/font-awesome-ie7.less b/src/UI/Content/FontAwesome/font-awesome-ie7.less similarity index 100% rename from UI/Content/FontAwesome/font-awesome-ie7.less rename to src/UI/Content/FontAwesome/font-awesome-ie7.less diff --git a/UI/Content/FontAwesome/font-awesome.less b/src/UI/Content/FontAwesome/font-awesome.less similarity index 100% rename from UI/Content/FontAwesome/font-awesome.less rename to src/UI/Content/FontAwesome/font-awesome.less diff --git a/UI/Content/FontAwesome/fontawesome-webfont.eot b/src/UI/Content/FontAwesome/fontawesome-webfont.eot similarity index 100% rename from UI/Content/FontAwesome/fontawesome-webfont.eot rename to src/UI/Content/FontAwesome/fontawesome-webfont.eot diff --git a/UI/Content/FontAwesome/fontawesome-webfont.svg b/src/UI/Content/FontAwesome/fontawesome-webfont.svg similarity index 100% rename from UI/Content/FontAwesome/fontawesome-webfont.svg rename to src/UI/Content/FontAwesome/fontawesome-webfont.svg diff --git a/UI/Content/FontAwesome/fontawesome-webfont.ttf b/src/UI/Content/FontAwesome/fontawesome-webfont.ttf similarity index 100% rename from UI/Content/FontAwesome/fontawesome-webfont.ttf rename to src/UI/Content/FontAwesome/fontawesome-webfont.ttf diff --git a/UI/Content/FontAwesome/fontawesome-webfont.woff b/src/UI/Content/FontAwesome/fontawesome-webfont.woff similarity index 100% rename from UI/Content/FontAwesome/fontawesome-webfont.woff rename to src/UI/Content/FontAwesome/fontawesome-webfont.woff diff --git a/UI/Content/FontAwesome/icons.less b/src/UI/Content/FontAwesome/icons.less similarity index 100% rename from UI/Content/FontAwesome/icons.less rename to src/UI/Content/FontAwesome/icons.less diff --git a/UI/Content/FontAwesome/mixins.less b/src/UI/Content/FontAwesome/mixins.less similarity index 100% rename from UI/Content/FontAwesome/mixins.less rename to src/UI/Content/FontAwesome/mixins.less diff --git a/UI/Content/FontAwesome/path.less b/src/UI/Content/FontAwesome/path.less similarity index 100% rename from UI/Content/FontAwesome/path.less rename to src/UI/Content/FontAwesome/path.less diff --git a/UI/Content/FontAwesome/variables.less b/src/UI/Content/FontAwesome/variables.less similarity index 100% rename from UI/Content/FontAwesome/variables.less rename to src/UI/Content/FontAwesome/variables.less diff --git a/UI/Content/Images/404.png b/src/UI/Content/Images/404.png similarity index 100% rename from UI/Content/Images/404.png rename to src/UI/Content/Images/404.png diff --git a/UI/Content/Images/black_linen_v2.png b/src/UI/Content/Images/black_linen_v2.png similarity index 100% rename from UI/Content/Images/black_linen_v2.png rename to src/UI/Content/Images/black_linen_v2.png diff --git a/UI/Content/Images/logo.png b/src/UI/Content/Images/logo.png similarity index 100% rename from UI/Content/Images/logo.png rename to src/UI/Content/Images/logo.png diff --git a/UI/Content/Images/pattern.png b/src/UI/Content/Images/pattern.png similarity index 100% rename from UI/Content/Images/pattern.png rename to src/UI/Content/Images/pattern.png diff --git a/UI/Content/Images/poster-dark.jpg b/src/UI/Content/Images/poster-dark.jpg similarity index 100% rename from UI/Content/Images/poster-dark.jpg rename to src/UI/Content/Images/poster-dark.jpg diff --git a/UI/Content/Images/touch/114.png b/src/UI/Content/Images/touch/114.png similarity index 100% rename from UI/Content/Images/touch/114.png rename to src/UI/Content/Images/touch/114.png diff --git a/UI/Content/Images/touch/144.png b/src/UI/Content/Images/touch/144.png similarity index 100% rename from UI/Content/Images/touch/144.png rename to src/UI/Content/Images/touch/144.png diff --git a/UI/Content/Images/touch/57.png b/src/UI/Content/Images/touch/57.png similarity index 100% rename from UI/Content/Images/touch/57.png rename to src/UI/Content/Images/touch/57.png diff --git a/UI/Content/Images/touch/72.png b/src/UI/Content/Images/touch/72.png similarity index 100% rename from UI/Content/Images/touch/72.png rename to src/UI/Content/Images/touch/72.png diff --git a/UI/Content/Messenger/messenger.css b/src/UI/Content/Messenger/messenger.css similarity index 100% rename from UI/Content/Messenger/messenger.css rename to src/UI/Content/Messenger/messenger.css diff --git a/UI/Content/Messenger/messenger.future.css b/src/UI/Content/Messenger/messenger.future.css similarity index 100% rename from UI/Content/Messenger/messenger.future.css rename to src/UI/Content/Messenger/messenger.future.css diff --git a/UI/Content/Overrides/bootstrap.less b/src/UI/Content/Overrides/bootstrap.less similarity index 100% rename from UI/Content/Overrides/bootstrap.less rename to src/UI/Content/Overrides/bootstrap.less diff --git a/UI/Content/Overrides/bootstrap.toggle-switch.less b/src/UI/Content/Overrides/bootstrap.toggle-switch.less similarity index 100% rename from UI/Content/Overrides/bootstrap.toggle-switch.less rename to src/UI/Content/Overrides/bootstrap.toggle-switch.less diff --git a/UI/Content/Overrides/browser.less b/src/UI/Content/Overrides/browser.less similarity index 100% rename from UI/Content/Overrides/browser.less rename to src/UI/Content/Overrides/browser.less diff --git a/UI/Content/bootstrap.toggle-switch.css b/src/UI/Content/bootstrap.toggle-switch.css similarity index 100% rename from UI/Content/bootstrap.toggle-switch.css rename to src/UI/Content/bootstrap.toggle-switch.css diff --git a/UI/Content/font.less b/src/UI/Content/font.less similarity index 100% rename from UI/Content/font.less rename to src/UI/Content/font.less diff --git a/UI/Content/fonts/OpenSans-Italic.eot b/src/UI/Content/fonts/opensans-italic.eot similarity index 100% rename from UI/Content/fonts/OpenSans-Italic.eot rename to src/UI/Content/fonts/opensans-italic.eot diff --git a/UI/Content/fonts/OpenSans-Italic.ttf b/src/UI/Content/fonts/opensans-italic.ttf similarity index 100% rename from UI/Content/fonts/OpenSans-Italic.ttf rename to src/UI/Content/fonts/opensans-italic.ttf diff --git a/UI/Content/fonts/OpenSans-Italic.woff b/src/UI/Content/fonts/opensans-italic.woff similarity index 100% rename from UI/Content/fonts/OpenSans-Italic.woff rename to src/UI/Content/fonts/opensans-italic.woff diff --git a/UI/Content/fonts/OpenSans-Light.eot b/src/UI/Content/fonts/opensans-light.eot similarity index 100% rename from UI/Content/fonts/OpenSans-Light.eot rename to src/UI/Content/fonts/opensans-light.eot diff --git a/UI/Content/fonts/OpenSans-Light.ttf b/src/UI/Content/fonts/opensans-light.ttf similarity index 100% rename from UI/Content/fonts/OpenSans-Light.ttf rename to src/UI/Content/fonts/opensans-light.ttf diff --git a/UI/Content/fonts/OpenSans-Light.woff b/src/UI/Content/fonts/opensans-light.woff similarity index 100% rename from UI/Content/fonts/OpenSans-Light.woff rename to src/UI/Content/fonts/opensans-light.woff diff --git a/UI/Content/fonts/OpenSans-LightItalic.eot b/src/UI/Content/fonts/opensans-lightitalic.eot similarity index 100% rename from UI/Content/fonts/OpenSans-LightItalic.eot rename to src/UI/Content/fonts/opensans-lightitalic.eot diff --git a/UI/Content/fonts/OpenSans-LightItalic.ttf b/src/UI/Content/fonts/opensans-lightitalic.ttf similarity index 100% rename from UI/Content/fonts/OpenSans-LightItalic.ttf rename to src/UI/Content/fonts/opensans-lightitalic.ttf diff --git a/UI/Content/fonts/OpenSans-LightItalic.woff b/src/UI/Content/fonts/opensans-lightitalic.woff similarity index 100% rename from UI/Content/fonts/OpenSans-LightItalic.woff rename to src/UI/Content/fonts/opensans-lightitalic.woff diff --git a/UI/Content/fonts/OpenSans-Regular.eot b/src/UI/Content/fonts/opensans-regular.eot similarity index 100% rename from UI/Content/fonts/OpenSans-Regular.eot rename to src/UI/Content/fonts/opensans-regular.eot diff --git a/UI/Content/fonts/OpenSans-Regular.ttf b/src/UI/Content/fonts/opensans-regular.ttf similarity index 100% rename from UI/Content/fonts/OpenSans-Regular.ttf rename to src/UI/Content/fonts/opensans-regular.ttf diff --git a/UI/Content/fonts/OpenSans-Regular.woff b/src/UI/Content/fonts/opensans-regular.woff similarity index 100% rename from UI/Content/fonts/OpenSans-Regular.woff rename to src/UI/Content/fonts/opensans-regular.woff diff --git a/UI/Content/fonts/OpenSans-SemiBold.eot b/src/UI/Content/fonts/opensans-semibold.eot similarity index 100% rename from UI/Content/fonts/OpenSans-SemiBold.eot rename to src/UI/Content/fonts/opensans-semibold.eot diff --git a/UI/Content/fonts/OpenSans-Semibold.ttf b/src/UI/Content/fonts/opensans-semibold.ttf similarity index 100% rename from UI/Content/fonts/OpenSans-Semibold.ttf rename to src/UI/Content/fonts/opensans-semibold.ttf diff --git a/UI/Content/fonts/OpenSans-SemiBold.woff b/src/UI/Content/fonts/opensans-semibold.woff similarity index 100% rename from UI/Content/fonts/OpenSans-SemiBold.woff rename to src/UI/Content/fonts/opensans-semibold.woff diff --git a/UI/Content/fonts/OpenSans-SemiboldItalic.eot b/src/UI/Content/fonts/opensans-semibolditalic.eot similarity index 100% rename from UI/Content/fonts/OpenSans-SemiboldItalic.eot rename to src/UI/Content/fonts/opensans-semibolditalic.eot diff --git a/UI/Content/fonts/OpenSans-SemiboldItalic.ttf b/src/UI/Content/fonts/opensans-semibolditalic.ttf similarity index 100% rename from UI/Content/fonts/OpenSans-SemiboldItalic.ttf rename to src/UI/Content/fonts/opensans-semibolditalic.ttf diff --git a/UI/Content/fonts/OpenSans-SemiboldItalic.woff b/src/UI/Content/fonts/opensans-semibolditalic.woff similarity index 100% rename from UI/Content/fonts/OpenSans-SemiboldItalic.woff rename to src/UI/Content/fonts/opensans-semibolditalic.woff diff --git a/UI/Content/form.less b/src/UI/Content/form.less similarity index 100% rename from UI/Content/form.less rename to src/UI/Content/form.less diff --git a/UI/Content/fullcalendar.css b/src/UI/Content/fullcalendar.css similarity index 100% rename from UI/Content/fullcalendar.css rename to src/UI/Content/fullcalendar.css diff --git a/UI/Content/icons.less b/src/UI/Content/icons.less similarity index 100% rename from UI/Content/icons.less rename to src/UI/Content/icons.less diff --git a/UI/Content/legend.less b/src/UI/Content/legend.less similarity index 100% rename from UI/Content/legend.less rename to src/UI/Content/legend.less diff --git a/UI/Content/menu.less b/src/UI/Content/menu.less similarity index 100% rename from UI/Content/menu.less rename to src/UI/Content/menu.less diff --git a/UI/Content/overrides.less b/src/UI/Content/overrides.less similarity index 100% rename from UI/Content/overrides.less rename to src/UI/Content/overrides.less diff --git a/UI/Content/prefixer.less b/src/UI/Content/prefixer.less similarity index 100% rename from UI/Content/prefixer.less rename to src/UI/Content/prefixer.less diff --git a/UI/Content/spinner.less b/src/UI/Content/spinner.less similarity index 100% rename from UI/Content/spinner.less rename to src/UI/Content/spinner.less diff --git a/UI/Content/theme.less b/src/UI/Content/theme.less similarity index 100% rename from UI/Content/theme.less rename to src/UI/Content/theme.less diff --git a/UI/Content/variables.less b/src/UI/Content/variables.less similarity index 100% rename from UI/Content/variables.less rename to src/UI/Content/variables.less diff --git a/UI/Controller.js b/src/UI/Controller.js similarity index 100% rename from UI/Controller.js rename to src/UI/Controller.js diff --git a/UI/Episode/EpisodeDetailsLayout.js b/src/UI/Episode/EpisodeDetailsLayout.js similarity index 100% rename from UI/Episode/EpisodeDetailsLayout.js rename to src/UI/Episode/EpisodeDetailsLayout.js diff --git a/UI/Episode/EpisodeDetailsLayoutTemplate.html b/src/UI/Episode/EpisodeDetailsLayoutTemplate.html similarity index 100% rename from UI/Episode/EpisodeDetailsLayoutTemplate.html rename to src/UI/Episode/EpisodeDetailsLayoutTemplate.html diff --git a/UI/Episode/Search/ButtonsView.js b/src/UI/Episode/Search/ButtonsView.js similarity index 100% rename from UI/Episode/Search/ButtonsView.js rename to src/UI/Episode/Search/ButtonsView.js diff --git a/UI/Episode/Search/ButtonsViewTemplate.html b/src/UI/Episode/Search/ButtonsViewTemplate.html similarity index 100% rename from UI/Episode/Search/ButtonsViewTemplate.html rename to src/UI/Episode/Search/ButtonsViewTemplate.html diff --git a/UI/Episode/Search/EpisodeSearchLayout.js b/src/UI/Episode/Search/EpisodeSearchLayout.js similarity index 100% rename from UI/Episode/Search/EpisodeSearchLayout.js rename to src/UI/Episode/Search/EpisodeSearchLayout.js diff --git a/UI/Episode/Search/EpisodeSearchLayoutTemplate.html b/src/UI/Episode/Search/EpisodeSearchLayoutTemplate.html similarity index 100% rename from UI/Episode/Search/EpisodeSearchLayoutTemplate.html rename to src/UI/Episode/Search/EpisodeSearchLayoutTemplate.html diff --git a/UI/Episode/Search/ManualLayout.js b/src/UI/Episode/Search/ManualLayout.js similarity index 100% rename from UI/Episode/Search/ManualLayout.js rename to src/UI/Episode/Search/ManualLayout.js diff --git a/UI/Episode/Search/ManualLayoutTemplate.html b/src/UI/Episode/Search/ManualLayoutTemplate.html similarity index 100% rename from UI/Episode/Search/ManualLayoutTemplate.html rename to src/UI/Episode/Search/ManualLayoutTemplate.html diff --git a/UI/Episode/Summary/EpisodeSummaryLayout.js b/src/UI/Episode/Summary/EpisodeSummaryLayout.js similarity index 100% rename from UI/Episode/Summary/EpisodeSummaryLayout.js rename to src/UI/Episode/Summary/EpisodeSummaryLayout.js diff --git a/UI/Episode/Summary/EpisodeSummaryLayoutTemplate.html b/src/UI/Episode/Summary/EpisodeSummaryLayoutTemplate.html similarity index 100% rename from UI/Episode/Summary/EpisodeSummaryLayoutTemplate.html rename to src/UI/Episode/Summary/EpisodeSummaryLayoutTemplate.html diff --git a/UI/Episode/Summary/NoFileView.js b/src/UI/Episode/Summary/NoFileView.js similarity index 100% rename from UI/Episode/Summary/NoFileView.js rename to src/UI/Episode/Summary/NoFileView.js diff --git a/UI/Episode/Summary/NoFileViewTemplate.html b/src/UI/Episode/Summary/NoFileViewTemplate.html similarity index 100% rename from UI/Episode/Summary/NoFileViewTemplate.html rename to src/UI/Episode/Summary/NoFileViewTemplate.html diff --git a/UI/Form/CheckboxTemplate.html b/src/UI/Form/CheckboxTemplate.html similarity index 100% rename from UI/Form/CheckboxTemplate.html rename to src/UI/Form/CheckboxTemplate.html diff --git a/UI/Form/FormBuilder.js b/src/UI/Form/FormBuilder.js similarity index 100% rename from UI/Form/FormBuilder.js rename to src/UI/Form/FormBuilder.js diff --git a/UI/Form/FormHelpPartial.html b/src/UI/Form/FormHelpPartial.html similarity index 100% rename from UI/Form/FormHelpPartial.html rename to src/UI/Form/FormHelpPartial.html diff --git a/UI/Form/PasswordTemplate.html b/src/UI/Form/PasswordTemplate.html similarity index 100% rename from UI/Form/PasswordTemplate.html rename to src/UI/Form/PasswordTemplate.html diff --git a/UI/Form/SelectTemplate.html b/src/UI/Form/SelectTemplate.html similarity index 100% rename from UI/Form/SelectTemplate.html rename to src/UI/Form/SelectTemplate.html diff --git a/UI/Form/TextboxTemplate.html b/src/UI/Form/TextboxTemplate.html similarity index 100% rename from UI/Form/TextboxTemplate.html rename to src/UI/Form/TextboxTemplate.html diff --git a/UI/Handlebars/Handlebars.Debug.js b/src/UI/Handlebars/Handlebars.Debug.js similarity index 100% rename from UI/Handlebars/Handlebars.Debug.js rename to src/UI/Handlebars/Handlebars.Debug.js diff --git a/UI/Handlebars/Helpers/DateTime.js b/src/UI/Handlebars/Helpers/DateTime.js similarity index 100% rename from UI/Handlebars/Helpers/DateTime.js rename to src/UI/Handlebars/Helpers/DateTime.js diff --git a/UI/Handlebars/Helpers/Episode.js b/src/UI/Handlebars/Helpers/Episode.js similarity index 100% rename from UI/Handlebars/Helpers/Episode.js rename to src/UI/Handlebars/Helpers/Episode.js diff --git a/UI/Handlebars/Helpers/Html.js b/src/UI/Handlebars/Helpers/Html.js similarity index 100% rename from UI/Handlebars/Helpers/Html.js rename to src/UI/Handlebars/Helpers/Html.js diff --git a/UI/Handlebars/Helpers/Numbers.js b/src/UI/Handlebars/Helpers/Numbers.js similarity index 100% rename from UI/Handlebars/Helpers/Numbers.js rename to src/UI/Handlebars/Helpers/Numbers.js diff --git a/UI/Handlebars/Helpers/Quality.js b/src/UI/Handlebars/Helpers/Quality.js similarity index 100% rename from UI/Handlebars/Helpers/Quality.js rename to src/UI/Handlebars/Helpers/Quality.js diff --git a/UI/Handlebars/Helpers/Series.js b/src/UI/Handlebars/Helpers/Series.js similarity index 100% rename from UI/Handlebars/Helpers/Series.js rename to src/UI/Handlebars/Helpers/Series.js diff --git a/UI/Handlebars/Helpers/Version.js b/src/UI/Handlebars/Helpers/Version.js similarity index 100% rename from UI/Handlebars/Helpers/Version.js rename to src/UI/Handlebars/Helpers/Version.js diff --git a/UI/Handlebars/backbone.marionette.templates.js b/src/UI/Handlebars/backbone.marionette.templates.js similarity index 100% rename from UI/Handlebars/backbone.marionette.templates.js rename to src/UI/Handlebars/backbone.marionette.templates.js diff --git a/UI/History/Details/HistoryDetailsView.js b/src/UI/History/Details/HistoryDetailsView.js similarity index 100% rename from UI/History/Details/HistoryDetailsView.js rename to src/UI/History/Details/HistoryDetailsView.js diff --git a/UI/History/Details/HistoryDetailsViewTemplate.html b/src/UI/History/Details/HistoryDetailsViewTemplate.html similarity index 100% rename from UI/History/Details/HistoryDetailsViewTemplate.html rename to src/UI/History/Details/HistoryDetailsViewTemplate.html diff --git a/UI/History/HistoryCollection.js b/src/UI/History/HistoryCollection.js similarity index 100% rename from UI/History/HistoryCollection.js rename to src/UI/History/HistoryCollection.js diff --git a/UI/History/HistoryLayout.js b/src/UI/History/HistoryLayout.js similarity index 100% rename from UI/History/HistoryLayout.js rename to src/UI/History/HistoryLayout.js diff --git a/UI/History/HistoryLayoutTemplate.html b/src/UI/History/HistoryLayoutTemplate.html similarity index 100% rename from UI/History/HistoryLayoutTemplate.html rename to src/UI/History/HistoryLayoutTemplate.html diff --git a/UI/History/HistoryModel.js b/src/UI/History/HistoryModel.js similarity index 100% rename from UI/History/HistoryModel.js rename to src/UI/History/HistoryModel.js diff --git a/UI/History/Queue/QueueCollection.js b/src/UI/History/Queue/QueueCollection.js similarity index 100% rename from UI/History/Queue/QueueCollection.js rename to src/UI/History/Queue/QueueCollection.js diff --git a/UI/History/Queue/QueueLayout.js b/src/UI/History/Queue/QueueLayout.js similarity index 100% rename from UI/History/Queue/QueueLayout.js rename to src/UI/History/Queue/QueueLayout.js diff --git a/UI/History/Queue/QueueLayoutTemplate.html b/src/UI/History/Queue/QueueLayoutTemplate.html similarity index 100% rename from UI/History/Queue/QueueLayoutTemplate.html rename to src/UI/History/Queue/QueueLayoutTemplate.html diff --git a/UI/History/Queue/QueueModel.js b/src/UI/History/Queue/QueueModel.js similarity index 100% rename from UI/History/Queue/QueueModel.js rename to src/UI/History/Queue/QueueModel.js diff --git a/UI/History/Queue/TimeleftCell.js b/src/UI/History/Queue/TimeleftCell.js similarity index 100% rename from UI/History/Queue/TimeleftCell.js rename to src/UI/History/Queue/TimeleftCell.js diff --git a/UI/History/Table/ControlsColumnTemplate.html b/src/UI/History/Table/ControlsColumnTemplate.html similarity index 100% rename from UI/History/Table/ControlsColumnTemplate.html rename to src/UI/History/Table/ControlsColumnTemplate.html diff --git a/UI/History/Table/EventTypeCell.js b/src/UI/History/Table/EventTypeCell.js similarity index 100% rename from UI/History/Table/EventTypeCell.js rename to src/UI/History/Table/EventTypeCell.js diff --git a/UI/History/Table/HistoryDetailsCell.js b/src/UI/History/Table/HistoryDetailsCell.js similarity index 100% rename from UI/History/Table/HistoryDetailsCell.js rename to src/UI/History/Table/HistoryDetailsCell.js diff --git a/UI/History/Table/HistoryTableLayout.js b/src/UI/History/Table/HistoryTableLayout.js similarity index 100% rename from UI/History/Table/HistoryTableLayout.js rename to src/UI/History/Table/HistoryTableLayout.js diff --git a/UI/History/Table/HistoryTableLayoutTemplate.html b/src/UI/History/Table/HistoryTableLayoutTemplate.html similarity index 100% rename from UI/History/Table/HistoryTableLayoutTemplate.html rename to src/UI/History/Table/HistoryTableLayoutTemplate.html diff --git a/UI/Instrumentation/ErrorHandler.js b/src/UI/Instrumentation/ErrorHandler.js similarity index 100% rename from UI/Instrumentation/ErrorHandler.js rename to src/UI/Instrumentation/ErrorHandler.js diff --git a/UI/Instrumentation/StringFormat.js b/src/UI/Instrumentation/StringFormat.js similarity index 100% rename from UI/Instrumentation/StringFormat.js rename to src/UI/Instrumentation/StringFormat.js diff --git a/UI/JsLibraries/backbone.backgrid.filter.js b/src/UI/JsLibraries/backbone.backgrid.filter.js similarity index 100% rename from UI/JsLibraries/backbone.backgrid.filter.js rename to src/UI/JsLibraries/backbone.backgrid.filter.js diff --git a/UI/JsLibraries/backbone.backgrid.js b/src/UI/JsLibraries/backbone.backgrid.js similarity index 100% rename from UI/JsLibraries/backbone.backgrid.js rename to src/UI/JsLibraries/backbone.backgrid.js diff --git a/UI/JsLibraries/backbone.backgrid.paginator.js b/src/UI/JsLibraries/backbone.backgrid.paginator.js similarity index 100% rename from UI/JsLibraries/backbone.backgrid.paginator.js rename to src/UI/JsLibraries/backbone.backgrid.paginator.js diff --git a/UI/JsLibraries/backbone.deep.model.js b/src/UI/JsLibraries/backbone.deep.model.js similarity index 100% rename from UI/JsLibraries/backbone.deep.model.js rename to src/UI/JsLibraries/backbone.deep.model.js diff --git a/UI/JsLibraries/backbone.js b/src/UI/JsLibraries/backbone.js similarity index 100% rename from UI/JsLibraries/backbone.js rename to src/UI/JsLibraries/backbone.js diff --git a/UI/JsLibraries/backbone.marionette.js b/src/UI/JsLibraries/backbone.marionette.js similarity index 100% rename from UI/JsLibraries/backbone.marionette.js rename to src/UI/JsLibraries/backbone.marionette.js diff --git a/UI/JsLibraries/backbone.modelbinder.js b/src/UI/JsLibraries/backbone.modelbinder.js similarity index 100% rename from UI/JsLibraries/backbone.modelbinder.js rename to src/UI/JsLibraries/backbone.modelbinder.js diff --git a/UI/JsLibraries/backbone.pageable.js b/src/UI/JsLibraries/backbone.pageable.js similarity index 100% rename from UI/JsLibraries/backbone.pageable.js rename to src/UI/JsLibraries/backbone.pageable.js diff --git a/UI/JsLibraries/backbone.shortcuts.js b/src/UI/JsLibraries/backbone.shortcuts.js similarity index 100% rename from UI/JsLibraries/backbone.shortcuts.js rename to src/UI/JsLibraries/backbone.shortcuts.js diff --git a/UI/JsLibraries/backbone.validation.js b/src/UI/JsLibraries/backbone.validation.js similarity index 100% rename from UI/JsLibraries/backbone.validation.js rename to src/UI/JsLibraries/backbone.validation.js diff --git a/UI/JsLibraries/bootstrap.js b/src/UI/JsLibraries/bootstrap.js similarity index 100% rename from UI/JsLibraries/bootstrap.js rename to src/UI/JsLibraries/bootstrap.js diff --git a/UI/JsLibraries/filesize.js b/src/UI/JsLibraries/filesize.js similarity index 100% rename from UI/JsLibraries/filesize.js rename to src/UI/JsLibraries/filesize.js diff --git a/UI/JsLibraries/fullcalendar.js b/src/UI/JsLibraries/fullcalendar.js similarity index 100% rename from UI/JsLibraries/fullcalendar.js rename to src/UI/JsLibraries/fullcalendar.js diff --git a/UI/JsLibraries/handlebars.helpers.js b/src/UI/JsLibraries/handlebars.helpers.js similarity index 100% rename from UI/JsLibraries/handlebars.helpers.js rename to src/UI/JsLibraries/handlebars.helpers.js diff --git a/UI/JsLibraries/handlebars.runtime.js b/src/UI/JsLibraries/handlebars.runtime.js similarity index 100% rename from UI/JsLibraries/handlebars.runtime.js rename to src/UI/JsLibraries/handlebars.runtime.js diff --git a/UI/JsLibraries/jquery.backstretch.js b/src/UI/JsLibraries/jquery.backstretch.js similarity index 100% rename from UI/JsLibraries/jquery.backstretch.js rename to src/UI/JsLibraries/jquery.backstretch.js diff --git a/UI/JsLibraries/jquery.dotdotdot.js b/src/UI/JsLibraries/jquery.dotdotdot.js similarity index 100% rename from UI/JsLibraries/jquery.dotdotdot.js rename to src/UI/JsLibraries/jquery.dotdotdot.js diff --git a/UI/JsLibraries/jquery.js b/src/UI/JsLibraries/jquery.js similarity index 100% rename from UI/JsLibraries/jquery.js rename to src/UI/JsLibraries/jquery.js diff --git a/UI/JsLibraries/jquery.knob.js b/src/UI/JsLibraries/jquery.knob.js similarity index 100% rename from UI/JsLibraries/jquery.knob.js rename to src/UI/JsLibraries/jquery.knob.js diff --git a/UI/JsLibraries/jquery.signalR.js b/src/UI/JsLibraries/jquery.signalR.js similarity index 100% rename from UI/JsLibraries/jquery.signalR.js rename to src/UI/JsLibraries/jquery.signalR.js diff --git a/UI/JsLibraries/lodash.underscore.js b/src/UI/JsLibraries/lodash.underscore.js similarity index 100% rename from UI/JsLibraries/lodash.underscore.js rename to src/UI/JsLibraries/lodash.underscore.js diff --git a/UI/JsLibraries/messenger.js b/src/UI/JsLibraries/messenger.js similarity index 100% rename from UI/JsLibraries/messenger.js rename to src/UI/JsLibraries/messenger.js diff --git a/UI/JsLibraries/moment.js b/src/UI/JsLibraries/moment.js similarity index 100% rename from UI/JsLibraries/moment.js rename to src/UI/JsLibraries/moment.js diff --git a/UI/JsLibraries/require.js b/src/UI/JsLibraries/require.js similarity index 100% rename from UI/JsLibraries/require.js rename to src/UI/JsLibraries/require.js diff --git a/UI/Missing/Collection.js b/src/UI/Missing/Collection.js similarity index 100% rename from UI/Missing/Collection.js rename to src/UI/Missing/Collection.js diff --git a/UI/Missing/ControlsColumnTemplate.html b/src/UI/Missing/ControlsColumnTemplate.html similarity index 100% rename from UI/Missing/ControlsColumnTemplate.html rename to src/UI/Missing/ControlsColumnTemplate.html diff --git a/UI/Missing/MissingLayout.js b/src/UI/Missing/MissingLayout.js similarity index 100% rename from UI/Missing/MissingLayout.js rename to src/UI/Missing/MissingLayout.js diff --git a/UI/Missing/MissingLayoutTemplate.html b/src/UI/Missing/MissingLayoutTemplate.html similarity index 100% rename from UI/Missing/MissingLayoutTemplate.html rename to src/UI/Missing/MissingLayoutTemplate.html diff --git a/UI/Mixins/AsChangeTrackingModel.js b/src/UI/Mixins/AsChangeTrackingModel.js similarity index 100% rename from UI/Mixins/AsChangeTrackingModel.js rename to src/UI/Mixins/AsChangeTrackingModel.js diff --git a/UI/Mixins/AsModelBoundView.js b/src/UI/Mixins/AsModelBoundView.js similarity index 100% rename from UI/Mixins/AsModelBoundView.js rename to src/UI/Mixins/AsModelBoundView.js diff --git a/UI/Mixins/AsNamedView.js b/src/UI/Mixins/AsNamedView.js similarity index 100% rename from UI/Mixins/AsNamedView.js rename to src/UI/Mixins/AsNamedView.js diff --git a/UI/Mixins/AsValidatedView.js b/src/UI/Mixins/AsValidatedView.js similarity index 100% rename from UI/Mixins/AsValidatedView.js rename to src/UI/Mixins/AsValidatedView.js diff --git a/UI/Mixins/AutoComplete.js b/src/UI/Mixins/AutoComplete.js similarity index 100% rename from UI/Mixins/AutoComplete.js rename to src/UI/Mixins/AutoComplete.js diff --git a/UI/Mixins/backbone.marionette.region.mixin.js b/src/UI/Mixins/backbone.marionette.region.mixin.js similarity index 100% rename from UI/Mixins/backbone.marionette.region.mixin.js rename to src/UI/Mixins/backbone.marionette.region.mixin.js diff --git a/UI/Mixins/backbone.signalr.mixin.js b/src/UI/Mixins/backbone.signalr.mixin.js similarity index 100% rename from UI/Mixins/backbone.signalr.mixin.js rename to src/UI/Mixins/backbone.signalr.mixin.js diff --git a/UI/Mixins/jquery.ajax.js b/src/UI/Mixins/jquery.ajax.js similarity index 100% rename from UI/Mixins/jquery.ajax.js rename to src/UI/Mixins/jquery.ajax.js diff --git a/UI/Mixins/underscore.mixin.deepExtend.js b/src/UI/Mixins/underscore.mixin.deepExtend.js similarity index 100% rename from UI/Mixins/underscore.mixin.deepExtend.js rename to src/UI/Mixins/underscore.mixin.deepExtend.js diff --git a/UI/Navbar/NavbarTemplate.html b/src/UI/Navbar/NavbarTemplate.html similarity index 100% rename from UI/Navbar/NavbarTemplate.html rename to src/UI/Navbar/NavbarTemplate.html diff --git a/UI/Navbar/NavbarView.js b/src/UI/Navbar/NavbarView.js similarity index 100% rename from UI/Navbar/NavbarView.js rename to src/UI/Navbar/NavbarView.js diff --git a/UI/Navbar/Search.js b/src/UI/Navbar/Search.js similarity index 100% rename from UI/Navbar/Search.js rename to src/UI/Navbar/Search.js diff --git a/UI/ProgressMessaging/ProgressMessageCollection.js b/src/UI/ProgressMessaging/ProgressMessageCollection.js similarity index 100% rename from UI/ProgressMessaging/ProgressMessageCollection.js rename to src/UI/ProgressMessaging/ProgressMessageCollection.js diff --git a/UI/Quality/QualityProfileCollection.js b/src/UI/Quality/QualityProfileCollection.js similarity index 100% rename from UI/Quality/QualityProfileCollection.js rename to src/UI/Quality/QualityProfileCollection.js diff --git a/UI/Quality/QualityProfileModel.js b/src/UI/Quality/QualityProfileModel.js similarity index 100% rename from UI/Quality/QualityProfileModel.js rename to src/UI/Quality/QualityProfileModel.js diff --git a/UI/Quality/QualityProfileSelectionPartial.html b/src/UI/Quality/QualityProfileSelectionPartial.html similarity index 100% rename from UI/Quality/QualityProfileSelectionPartial.html rename to src/UI/Quality/QualityProfileSelectionPartial.html diff --git a/UI/Quality/QualitySizeCollection.js b/src/UI/Quality/QualitySizeCollection.js similarity index 100% rename from UI/Quality/QualitySizeCollection.js rename to src/UI/Quality/QualitySizeCollection.js diff --git a/UI/Quality/QualitySizeModel.js b/src/UI/Quality/QualitySizeModel.js similarity index 100% rename from UI/Quality/QualitySizeModel.js rename to src/UI/Quality/QualitySizeModel.js diff --git a/UI/Release/Collection.js b/src/UI/Release/Collection.js similarity index 100% rename from UI/Release/Collection.js rename to src/UI/Release/Collection.js diff --git a/UI/Release/DownloadReportCell.js b/src/UI/Release/DownloadReportCell.js similarity index 100% rename from UI/Release/DownloadReportCell.js rename to src/UI/Release/DownloadReportCell.js diff --git a/UI/Release/Layout.js b/src/UI/Release/Layout.js similarity index 100% rename from UI/Release/Layout.js rename to src/UI/Release/Layout.js diff --git a/UI/Release/LayoutTemplate.html b/src/UI/Release/LayoutTemplate.html similarity index 100% rename from UI/Release/LayoutTemplate.html rename to src/UI/Release/LayoutTemplate.html diff --git a/UI/Release/Model.js b/src/UI/Release/Model.js similarity index 100% rename from UI/Release/Model.js rename to src/UI/Release/Model.js diff --git a/UI/Router.js b/src/UI/Router.js similarity index 100% rename from UI/Router.js rename to src/UI/Router.js diff --git a/UI/SeasonPass/SeasonPassLayout.js b/src/UI/SeasonPass/SeasonPassLayout.js similarity index 100% rename from UI/SeasonPass/SeasonPassLayout.js rename to src/UI/SeasonPass/SeasonPassLayout.js diff --git a/UI/SeasonPass/SeasonPassLayoutTemplate.html b/src/UI/SeasonPass/SeasonPassLayoutTemplate.html similarity index 100% rename from UI/SeasonPass/SeasonPassLayoutTemplate.html rename to src/UI/SeasonPass/SeasonPassLayoutTemplate.html diff --git a/UI/SeasonPass/SeriesCollectionView.js b/src/UI/SeasonPass/SeriesCollectionView.js similarity index 100% rename from UI/SeasonPass/SeriesCollectionView.js rename to src/UI/SeasonPass/SeriesCollectionView.js diff --git a/UI/SeasonPass/SeriesLayout.js b/src/UI/SeasonPass/SeriesLayout.js similarity index 100% rename from UI/SeasonPass/SeriesLayout.js rename to src/UI/SeasonPass/SeriesLayout.js diff --git a/UI/SeasonPass/SeriesLayoutTemplate.html b/src/UI/SeasonPass/SeriesLayoutTemplate.html similarity index 100% rename from UI/SeasonPass/SeriesLayoutTemplate.html rename to src/UI/SeasonPass/SeriesLayoutTemplate.html diff --git a/UI/Series/Delete/DeleteSeriesTemplate.html b/src/UI/Series/Delete/DeleteSeriesTemplate.html similarity index 100% rename from UI/Series/Delete/DeleteSeriesTemplate.html rename to src/UI/Series/Delete/DeleteSeriesTemplate.html diff --git a/UI/Series/Delete/DeleteSeriesView.js b/src/UI/Series/Delete/DeleteSeriesView.js similarity index 100% rename from UI/Series/Delete/DeleteSeriesView.js rename to src/UI/Series/Delete/DeleteSeriesView.js diff --git a/UI/Series/Details/InfoView.js b/src/UI/Series/Details/InfoView.js similarity index 100% rename from UI/Series/Details/InfoView.js rename to src/UI/Series/Details/InfoView.js diff --git a/UI/Series/Details/InfoViewTemplate.html b/src/UI/Series/Details/InfoViewTemplate.html similarity index 100% rename from UI/Series/Details/InfoViewTemplate.html rename to src/UI/Series/Details/InfoViewTemplate.html diff --git a/UI/Series/Details/SeasonCollectionView.js b/src/UI/Series/Details/SeasonCollectionView.js similarity index 100% rename from UI/Series/Details/SeasonCollectionView.js rename to src/UI/Series/Details/SeasonCollectionView.js diff --git a/UI/Series/Details/SeasonLayout.js b/src/UI/Series/Details/SeasonLayout.js similarity index 100% rename from UI/Series/Details/SeasonLayout.js rename to src/UI/Series/Details/SeasonLayout.js diff --git a/UI/Series/Details/SeasonLayoutTemplate.html b/src/UI/Series/Details/SeasonLayoutTemplate.html similarity index 100% rename from UI/Series/Details/SeasonLayoutTemplate.html rename to src/UI/Series/Details/SeasonLayoutTemplate.html diff --git a/UI/Series/Details/SeriesDetailsLayout.js b/src/UI/Series/Details/SeriesDetailsLayout.js similarity index 100% rename from UI/Series/Details/SeriesDetailsLayout.js rename to src/UI/Series/Details/SeriesDetailsLayout.js diff --git a/UI/Series/Details/SeriesDetailsTemplate.html b/src/UI/Series/Details/SeriesDetailsTemplate.html similarity index 100% rename from UI/Series/Details/SeriesDetailsTemplate.html rename to src/UI/Series/Details/SeriesDetailsTemplate.html diff --git a/UI/Series/Edit/EditSeriesTemplate.html b/src/UI/Series/Edit/EditSeriesTemplate.html similarity index 100% rename from UI/Series/Edit/EditSeriesTemplate.html rename to src/UI/Series/Edit/EditSeriesTemplate.html diff --git a/UI/Series/Edit/EditSeriesView.js b/src/UI/Series/Edit/EditSeriesView.js similarity index 100% rename from UI/Series/Edit/EditSeriesView.js rename to src/UI/Series/Edit/EditSeriesView.js diff --git a/UI/Series/EpisodeCollection.js b/src/UI/Series/EpisodeCollection.js similarity index 100% rename from UI/Series/EpisodeCollection.js rename to src/UI/Series/EpisodeCollection.js diff --git a/UI/Series/EpisodeFileCollection.js b/src/UI/Series/EpisodeFileCollection.js similarity index 100% rename from UI/Series/EpisodeFileCollection.js rename to src/UI/Series/EpisodeFileCollection.js diff --git a/UI/Series/EpisodeFileModel.js b/src/UI/Series/EpisodeFileModel.js similarity index 100% rename from UI/Series/EpisodeFileModel.js rename to src/UI/Series/EpisodeFileModel.js diff --git a/UI/Series/EpisodeModel.js b/src/UI/Series/EpisodeModel.js similarity index 100% rename from UI/Series/EpisodeModel.js rename to src/UI/Series/EpisodeModel.js diff --git a/UI/Series/Index/EmptySeriesIndexView.js b/src/UI/Series/Index/EmptySeriesIndexView.js similarity index 100% rename from UI/Series/Index/EmptySeriesIndexView.js rename to src/UI/Series/Index/EmptySeriesIndexView.js diff --git a/UI/Series/Index/EmptyTemplate.html b/src/UI/Series/Index/EmptyTemplate.html similarity index 100% rename from UI/Series/Index/EmptyTemplate.html rename to src/UI/Series/Index/EmptyTemplate.html diff --git a/UI/Series/Index/EmptyView.js b/src/UI/Series/Index/EmptyView.js similarity index 100% rename from UI/Series/Index/EmptyView.js rename to src/UI/Series/Index/EmptyView.js diff --git a/UI/Series/Index/EpisodeProgressPartial.html b/src/UI/Series/Index/EpisodeProgressPartial.html similarity index 100% rename from UI/Series/Index/EpisodeProgressPartial.html rename to src/UI/Series/Index/EpisodeProgressPartial.html diff --git a/UI/Series/Index/FooterModel.js b/src/UI/Series/Index/FooterModel.js similarity index 100% rename from UI/Series/Index/FooterModel.js rename to src/UI/Series/Index/FooterModel.js diff --git a/UI/Series/Index/FooterView.js b/src/UI/Series/Index/FooterView.js similarity index 100% rename from UI/Series/Index/FooterView.js rename to src/UI/Series/Index/FooterView.js diff --git a/UI/Series/Index/FooterViewTemplate.html b/src/UI/Series/Index/FooterViewTemplate.html similarity index 100% rename from UI/Series/Index/FooterViewTemplate.html rename to src/UI/Series/Index/FooterViewTemplate.html diff --git a/UI/Series/Index/List/CollectionTemplate.html b/src/UI/Series/Index/List/CollectionTemplate.html similarity index 100% rename from UI/Series/Index/List/CollectionTemplate.html rename to src/UI/Series/Index/List/CollectionTemplate.html diff --git a/UI/Series/Index/List/CollectionView.js b/src/UI/Series/Index/List/CollectionView.js similarity index 100% rename from UI/Series/Index/List/CollectionView.js rename to src/UI/Series/Index/List/CollectionView.js diff --git a/UI/Series/Index/List/ItemTemplate.html b/src/UI/Series/Index/List/ItemTemplate.html similarity index 100% rename from UI/Series/Index/List/ItemTemplate.html rename to src/UI/Series/Index/List/ItemTemplate.html diff --git a/UI/Series/Index/List/ItemView.js b/src/UI/Series/Index/List/ItemView.js similarity index 100% rename from UI/Series/Index/List/ItemView.js rename to src/UI/Series/Index/List/ItemView.js diff --git a/UI/Series/Index/Posters/CollectionTemplate.html b/src/UI/Series/Index/Posters/CollectionTemplate.html similarity index 100% rename from UI/Series/Index/Posters/CollectionTemplate.html rename to src/UI/Series/Index/Posters/CollectionTemplate.html diff --git a/UI/Series/Index/Posters/CollectionView.js b/src/UI/Series/Index/Posters/CollectionView.js similarity index 100% rename from UI/Series/Index/Posters/CollectionView.js rename to src/UI/Series/Index/Posters/CollectionView.js diff --git a/UI/Series/Index/Posters/ItemTemplate.html b/src/UI/Series/Index/Posters/ItemTemplate.html similarity index 100% rename from UI/Series/Index/Posters/ItemTemplate.html rename to src/UI/Series/Index/Posters/ItemTemplate.html diff --git a/UI/Series/Index/Posters/ItemView.js b/src/UI/Series/Index/Posters/ItemView.js similarity index 100% rename from UI/Series/Index/Posters/ItemView.js rename to src/UI/Series/Index/Posters/ItemView.js diff --git a/UI/Series/Index/SeriesIndexLayout.js b/src/UI/Series/Index/SeriesIndexLayout.js similarity index 100% rename from UI/Series/Index/SeriesIndexLayout.js rename to src/UI/Series/Index/SeriesIndexLayout.js diff --git a/UI/Series/Index/SeriesIndexLayoutTemplate.html b/src/UI/Series/Index/SeriesIndexLayoutTemplate.html similarity index 100% rename from UI/Series/Index/SeriesIndexLayoutTemplate.html rename to src/UI/Series/Index/SeriesIndexLayoutTemplate.html diff --git a/UI/Series/SeasonCollection.js b/src/UI/Series/SeasonCollection.js similarity index 100% rename from UI/Series/SeasonCollection.js rename to src/UI/Series/SeasonCollection.js diff --git a/UI/Series/SeasonModel.js b/src/UI/Series/SeasonModel.js similarity index 100% rename from UI/Series/SeasonModel.js rename to src/UI/Series/SeasonModel.js diff --git a/UI/Series/SeriesCollection.js b/src/UI/Series/SeriesCollection.js similarity index 100% rename from UI/Series/SeriesCollection.js rename to src/UI/Series/SeriesCollection.js diff --git a/UI/Series/SeriesModel.js b/src/UI/Series/SeriesModel.js similarity index 100% rename from UI/Series/SeriesModel.js rename to src/UI/Series/SeriesModel.js diff --git a/UI/Series/series.less b/src/UI/Series/series.less similarity index 100% rename from UI/Series/series.less rename to src/UI/Series/series.less diff --git a/UI/ServerStatus.js b/src/UI/ServerStatus.js similarity index 100% rename from UI/ServerStatus.js rename to src/UI/ServerStatus.js diff --git a/UI/Settings/DownloadClient/BlackholeView.js b/src/UI/Settings/DownloadClient/BlackholeView.js similarity index 100% rename from UI/Settings/DownloadClient/BlackholeView.js rename to src/UI/Settings/DownloadClient/BlackholeView.js diff --git a/UI/Settings/DownloadClient/BlackholeViewTemplate.html b/src/UI/Settings/DownloadClient/BlackholeViewTemplate.html similarity index 100% rename from UI/Settings/DownloadClient/BlackholeViewTemplate.html rename to src/UI/Settings/DownloadClient/BlackholeViewTemplate.html diff --git a/UI/Settings/DownloadClient/Layout.js b/src/UI/Settings/DownloadClient/Layout.js similarity index 100% rename from UI/Settings/DownloadClient/Layout.js rename to src/UI/Settings/DownloadClient/Layout.js diff --git a/UI/Settings/DownloadClient/LayoutTemplate.html b/src/UI/Settings/DownloadClient/LayoutTemplate.html similarity index 100% rename from UI/Settings/DownloadClient/LayoutTemplate.html rename to src/UI/Settings/DownloadClient/LayoutTemplate.html diff --git a/UI/Settings/DownloadClient/NzbgetView.js b/src/UI/Settings/DownloadClient/NzbgetView.js similarity index 100% rename from UI/Settings/DownloadClient/NzbgetView.js rename to src/UI/Settings/DownloadClient/NzbgetView.js diff --git a/UI/Settings/DownloadClient/NzbgetViewTemplate.html b/src/UI/Settings/DownloadClient/NzbgetViewTemplate.html similarity index 100% rename from UI/Settings/DownloadClient/NzbgetViewTemplate.html rename to src/UI/Settings/DownloadClient/NzbgetViewTemplate.html diff --git a/UI/Settings/DownloadClient/PneumaticView.js b/src/UI/Settings/DownloadClient/PneumaticView.js similarity index 100% rename from UI/Settings/DownloadClient/PneumaticView.js rename to src/UI/Settings/DownloadClient/PneumaticView.js diff --git a/UI/Settings/DownloadClient/PneumaticViewTemplate.html b/src/UI/Settings/DownloadClient/PneumaticViewTemplate.html similarity index 100% rename from UI/Settings/DownloadClient/PneumaticViewTemplate.html rename to src/UI/Settings/DownloadClient/PneumaticViewTemplate.html diff --git a/UI/Settings/DownloadClient/SabView.js b/src/UI/Settings/DownloadClient/SabView.js similarity index 100% rename from UI/Settings/DownloadClient/SabView.js rename to src/UI/Settings/DownloadClient/SabView.js diff --git a/UI/Settings/DownloadClient/SabViewTemplate.html b/src/UI/Settings/DownloadClient/SabViewTemplate.html similarity index 100% rename from UI/Settings/DownloadClient/SabViewTemplate.html rename to src/UI/Settings/DownloadClient/SabViewTemplate.html diff --git a/UI/Settings/General/GeneralSettingsModel.js b/src/UI/Settings/General/GeneralSettingsModel.js similarity index 100% rename from UI/Settings/General/GeneralSettingsModel.js rename to src/UI/Settings/General/GeneralSettingsModel.js diff --git a/UI/Settings/General/GeneralTemplate.html b/src/UI/Settings/General/GeneralTemplate.html similarity index 100% rename from UI/Settings/General/GeneralTemplate.html rename to src/UI/Settings/General/GeneralTemplate.html diff --git a/UI/Settings/General/GeneralView.js b/src/UI/Settings/General/GeneralView.js similarity index 100% rename from UI/Settings/General/GeneralView.js rename to src/UI/Settings/General/GeneralView.js diff --git a/UI/Settings/Indexers/Collection.js b/src/UI/Settings/Indexers/Collection.js similarity index 100% rename from UI/Settings/Indexers/Collection.js rename to src/UI/Settings/Indexers/Collection.js diff --git a/UI/Settings/Indexers/CollectionTemplate.html b/src/UI/Settings/Indexers/CollectionTemplate.html similarity index 100% rename from UI/Settings/Indexers/CollectionTemplate.html rename to src/UI/Settings/Indexers/CollectionTemplate.html diff --git a/UI/Settings/Indexers/CollectionView.js b/src/UI/Settings/Indexers/CollectionView.js similarity index 100% rename from UI/Settings/Indexers/CollectionView.js rename to src/UI/Settings/Indexers/CollectionView.js diff --git a/UI/Settings/Indexers/DeleteTemplate.html b/src/UI/Settings/Indexers/DeleteTemplate.html similarity index 100% rename from UI/Settings/Indexers/DeleteTemplate.html rename to src/UI/Settings/Indexers/DeleteTemplate.html diff --git a/UI/Settings/Indexers/DeleteView.js b/src/UI/Settings/Indexers/DeleteView.js similarity index 100% rename from UI/Settings/Indexers/DeleteView.js rename to src/UI/Settings/Indexers/DeleteView.js diff --git a/UI/Settings/Indexers/EditTemplate.html b/src/UI/Settings/Indexers/EditTemplate.html similarity index 100% rename from UI/Settings/Indexers/EditTemplate.html rename to src/UI/Settings/Indexers/EditTemplate.html diff --git a/UI/Settings/Indexers/EditView.js b/src/UI/Settings/Indexers/EditView.js similarity index 100% rename from UI/Settings/Indexers/EditView.js rename to src/UI/Settings/Indexers/EditView.js diff --git a/UI/Settings/Indexers/IndexerLayout.js b/src/UI/Settings/Indexers/IndexerLayout.js similarity index 100% rename from UI/Settings/Indexers/IndexerLayout.js rename to src/UI/Settings/Indexers/IndexerLayout.js diff --git a/UI/Settings/Indexers/IndexerLayoutTemplate.html b/src/UI/Settings/Indexers/IndexerLayoutTemplate.html similarity index 100% rename from UI/Settings/Indexers/IndexerLayoutTemplate.html rename to src/UI/Settings/Indexers/IndexerLayoutTemplate.html diff --git a/UI/Settings/Indexers/ItemTemplate.html b/src/UI/Settings/Indexers/ItemTemplate.html similarity index 100% rename from UI/Settings/Indexers/ItemTemplate.html rename to src/UI/Settings/Indexers/ItemTemplate.html diff --git a/UI/Settings/Indexers/ItemView.js b/src/UI/Settings/Indexers/ItemView.js similarity index 100% rename from UI/Settings/Indexers/ItemView.js rename to src/UI/Settings/Indexers/ItemView.js diff --git a/UI/Settings/Indexers/Model.js b/src/UI/Settings/Indexers/Model.js similarity index 100% rename from UI/Settings/Indexers/Model.js rename to src/UI/Settings/Indexers/Model.js diff --git a/UI/Settings/Indexers/Options/IndexerOptionsView.js b/src/UI/Settings/Indexers/Options/IndexerOptionsView.js similarity index 100% rename from UI/Settings/Indexers/Options/IndexerOptionsView.js rename to src/UI/Settings/Indexers/Options/IndexerOptionsView.js diff --git a/UI/Settings/Indexers/Options/IndexerOptionsViewTemplate.html b/src/UI/Settings/Indexers/Options/IndexerOptionsViewTemplate.html similarity index 100% rename from UI/Settings/Indexers/Options/IndexerOptionsViewTemplate.html rename to src/UI/Settings/Indexers/Options/IndexerOptionsViewTemplate.html diff --git a/UI/Settings/Indexers/indexers.less b/src/UI/Settings/Indexers/indexers.less similarity index 100% rename from UI/Settings/Indexers/indexers.less rename to src/UI/Settings/Indexers/indexers.less diff --git a/UI/Settings/MediaManagement/FileManagement/FileManagementView.js b/src/UI/Settings/MediaManagement/FileManagement/FileManagementView.js similarity index 100% rename from UI/Settings/MediaManagement/FileManagement/FileManagementView.js rename to src/UI/Settings/MediaManagement/FileManagement/FileManagementView.js diff --git a/UI/Settings/MediaManagement/FileManagement/FileManagementViewTemplate.html b/src/UI/Settings/MediaManagement/FileManagement/FileManagementViewTemplate.html similarity index 100% rename from UI/Settings/MediaManagement/FileManagement/FileManagementViewTemplate.html rename to src/UI/Settings/MediaManagement/FileManagement/FileManagementViewTemplate.html diff --git a/UI/Settings/MediaManagement/MediaManagementLayout.js b/src/UI/Settings/MediaManagement/MediaManagementLayout.js similarity index 100% rename from UI/Settings/MediaManagement/MediaManagementLayout.js rename to src/UI/Settings/MediaManagement/MediaManagementLayout.js diff --git a/UI/Settings/MediaManagement/MediaManagementLayoutTemplate.html b/src/UI/Settings/MediaManagement/MediaManagementLayoutTemplate.html similarity index 100% rename from UI/Settings/MediaManagement/MediaManagementLayoutTemplate.html rename to src/UI/Settings/MediaManagement/MediaManagementLayoutTemplate.html diff --git a/UI/Settings/MediaManagement/Naming/Model.js b/src/UI/Settings/MediaManagement/Naming/Model.js similarity index 100% rename from UI/Settings/MediaManagement/Naming/Model.js rename to src/UI/Settings/MediaManagement/Naming/Model.js diff --git a/UI/Settings/MediaManagement/Naming/View.js b/src/UI/Settings/MediaManagement/Naming/View.js similarity index 100% rename from UI/Settings/MediaManagement/Naming/View.js rename to src/UI/Settings/MediaManagement/Naming/View.js diff --git a/UI/Settings/MediaManagement/Naming/ViewTemplate.html b/src/UI/Settings/MediaManagement/Naming/ViewTemplate.html similarity index 100% rename from UI/Settings/MediaManagement/Naming/ViewTemplate.html rename to src/UI/Settings/MediaManagement/Naming/ViewTemplate.html diff --git a/UI/Settings/MediaManagement/Sorting/View.js b/src/UI/Settings/MediaManagement/Sorting/View.js similarity index 100% rename from UI/Settings/MediaManagement/Sorting/View.js rename to src/UI/Settings/MediaManagement/Sorting/View.js diff --git a/UI/Settings/MediaManagement/Sorting/ViewTemplate.html b/src/UI/Settings/MediaManagement/Sorting/ViewTemplate.html similarity index 100% rename from UI/Settings/MediaManagement/Sorting/ViewTemplate.html rename to src/UI/Settings/MediaManagement/Sorting/ViewTemplate.html diff --git a/UI/Settings/Notifications/AddItemTemplate.html b/src/UI/Settings/Notifications/AddItemTemplate.html similarity index 100% rename from UI/Settings/Notifications/AddItemTemplate.html rename to src/UI/Settings/Notifications/AddItemTemplate.html diff --git a/UI/Settings/Notifications/AddItemView.js b/src/UI/Settings/Notifications/AddItemView.js similarity index 100% rename from UI/Settings/Notifications/AddItemView.js rename to src/UI/Settings/Notifications/AddItemView.js diff --git a/UI/Settings/Notifications/AddTemplate.html b/src/UI/Settings/Notifications/AddTemplate.html similarity index 100% rename from UI/Settings/Notifications/AddTemplate.html rename to src/UI/Settings/Notifications/AddTemplate.html diff --git a/UI/Settings/Notifications/AddView.js b/src/UI/Settings/Notifications/AddView.js similarity index 100% rename from UI/Settings/Notifications/AddView.js rename to src/UI/Settings/Notifications/AddView.js diff --git a/UI/Settings/Notifications/Collection.js b/src/UI/Settings/Notifications/Collection.js similarity index 100% rename from UI/Settings/Notifications/Collection.js rename to src/UI/Settings/Notifications/Collection.js diff --git a/UI/Settings/Notifications/CollectionTemplate.html b/src/UI/Settings/Notifications/CollectionTemplate.html similarity index 100% rename from UI/Settings/Notifications/CollectionTemplate.html rename to src/UI/Settings/Notifications/CollectionTemplate.html diff --git a/UI/Settings/Notifications/CollectionView.js b/src/UI/Settings/Notifications/CollectionView.js similarity index 100% rename from UI/Settings/Notifications/CollectionView.js rename to src/UI/Settings/Notifications/CollectionView.js diff --git a/UI/Settings/Notifications/DeleteTemplate.html b/src/UI/Settings/Notifications/DeleteTemplate.html similarity index 100% rename from UI/Settings/Notifications/DeleteTemplate.html rename to src/UI/Settings/Notifications/DeleteTemplate.html diff --git a/UI/Settings/Notifications/DeleteView.js b/src/UI/Settings/Notifications/DeleteView.js similarity index 100% rename from UI/Settings/Notifications/DeleteView.js rename to src/UI/Settings/Notifications/DeleteView.js diff --git a/UI/Settings/Notifications/EditTemplate.html b/src/UI/Settings/Notifications/EditTemplate.html similarity index 100% rename from UI/Settings/Notifications/EditTemplate.html rename to src/UI/Settings/Notifications/EditTemplate.html diff --git a/UI/Settings/Notifications/EditView.js b/src/UI/Settings/Notifications/EditView.js similarity index 100% rename from UI/Settings/Notifications/EditView.js rename to src/UI/Settings/Notifications/EditView.js diff --git a/UI/Settings/Notifications/ItemTemplate.html b/src/UI/Settings/Notifications/ItemTemplate.html similarity index 100% rename from UI/Settings/Notifications/ItemTemplate.html rename to src/UI/Settings/Notifications/ItemTemplate.html diff --git a/UI/Settings/Notifications/ItemView.js b/src/UI/Settings/Notifications/ItemView.js similarity index 100% rename from UI/Settings/Notifications/ItemView.js rename to src/UI/Settings/Notifications/ItemView.js diff --git a/UI/Settings/Notifications/Model.js b/src/UI/Settings/Notifications/Model.js similarity index 100% rename from UI/Settings/Notifications/Model.js rename to src/UI/Settings/Notifications/Model.js diff --git a/UI/Settings/Notifications/SchemaModal.js b/src/UI/Settings/Notifications/SchemaModal.js similarity index 100% rename from UI/Settings/Notifications/SchemaModal.js rename to src/UI/Settings/Notifications/SchemaModal.js diff --git a/UI/Settings/Notifications/notifications.less b/src/UI/Settings/Notifications/notifications.less similarity index 100% rename from UI/Settings/Notifications/notifications.less rename to src/UI/Settings/Notifications/notifications.less diff --git a/UI/Settings/Quality/Profile/AllowedLabeler.js b/src/UI/Settings/Quality/Profile/AllowedLabeler.js similarity index 100% rename from UI/Settings/Quality/Profile/AllowedLabeler.js rename to src/UI/Settings/Quality/Profile/AllowedLabeler.js diff --git a/UI/Settings/Quality/Profile/DeleteTemplate.html b/src/UI/Settings/Quality/Profile/DeleteTemplate.html similarity index 100% rename from UI/Settings/Quality/Profile/DeleteTemplate.html rename to src/UI/Settings/Quality/Profile/DeleteTemplate.html diff --git a/UI/Settings/Quality/Profile/DeleteView.js b/src/UI/Settings/Quality/Profile/DeleteView.js similarity index 100% rename from UI/Settings/Quality/Profile/DeleteView.js rename to src/UI/Settings/Quality/Profile/DeleteView.js diff --git a/UI/Settings/Quality/Profile/EditQualityProfileTemplate.html b/src/UI/Settings/Quality/Profile/EditQualityProfileTemplate.html similarity index 100% rename from UI/Settings/Quality/Profile/EditQualityProfileTemplate.html rename to src/UI/Settings/Quality/Profile/EditQualityProfileTemplate.html diff --git a/UI/Settings/Quality/Profile/EditQualityProfileView.js b/src/UI/Settings/Quality/Profile/EditQualityProfileView.js similarity index 100% rename from UI/Settings/Quality/Profile/EditQualityProfileView.js rename to src/UI/Settings/Quality/Profile/EditQualityProfileView.js diff --git a/UI/Settings/Quality/Profile/QualityProfileCollectionTemplate.html b/src/UI/Settings/Quality/Profile/QualityProfileCollectionTemplate.html similarity index 100% rename from UI/Settings/Quality/Profile/QualityProfileCollectionTemplate.html rename to src/UI/Settings/Quality/Profile/QualityProfileCollectionTemplate.html diff --git a/UI/Settings/Quality/Profile/QualityProfileCollectionView.js b/src/UI/Settings/Quality/Profile/QualityProfileCollectionView.js similarity index 100% rename from UI/Settings/Quality/Profile/QualityProfileCollectionView.js rename to src/UI/Settings/Quality/Profile/QualityProfileCollectionView.js diff --git a/UI/Settings/Quality/Profile/QualityProfileSchemaCollection.js b/src/UI/Settings/Quality/Profile/QualityProfileSchemaCollection.js similarity index 100% rename from UI/Settings/Quality/Profile/QualityProfileSchemaCollection.js rename to src/UI/Settings/Quality/Profile/QualityProfileSchemaCollection.js diff --git a/UI/Settings/Quality/Profile/QualityProfileTemplate.html b/src/UI/Settings/Quality/Profile/QualityProfileTemplate.html similarity index 100% rename from UI/Settings/Quality/Profile/QualityProfileTemplate.html rename to src/UI/Settings/Quality/Profile/QualityProfileTemplate.html diff --git a/UI/Settings/Quality/Profile/QualityProfileView.js b/src/UI/Settings/Quality/Profile/QualityProfileView.js similarity index 100% rename from UI/Settings/Quality/Profile/QualityProfileView.js rename to src/UI/Settings/Quality/Profile/QualityProfileView.js diff --git a/UI/Settings/Quality/QualityLayout.js b/src/UI/Settings/Quality/QualityLayout.js similarity index 100% rename from UI/Settings/Quality/QualityLayout.js rename to src/UI/Settings/Quality/QualityLayout.js diff --git a/UI/Settings/Quality/QualityLayoutTemplate.html b/src/UI/Settings/Quality/QualityLayoutTemplate.html similarity index 100% rename from UI/Settings/Quality/QualityLayoutTemplate.html rename to src/UI/Settings/Quality/QualityLayoutTemplate.html diff --git a/UI/Settings/Quality/Size/QualitySizeCollectionTemplate.html b/src/UI/Settings/Quality/Size/QualitySizeCollectionTemplate.html similarity index 100% rename from UI/Settings/Quality/Size/QualitySizeCollectionTemplate.html rename to src/UI/Settings/Quality/Size/QualitySizeCollectionTemplate.html diff --git a/UI/Settings/Quality/Size/QualitySizeCollectionView.js b/src/UI/Settings/Quality/Size/QualitySizeCollectionView.js similarity index 100% rename from UI/Settings/Quality/Size/QualitySizeCollectionView.js rename to src/UI/Settings/Quality/Size/QualitySizeCollectionView.js diff --git a/UI/Settings/Quality/Size/QualitySizeTemplate.html b/src/UI/Settings/Quality/Size/QualitySizeTemplate.html similarity index 100% rename from UI/Settings/Quality/Size/QualitySizeTemplate.html rename to src/UI/Settings/Quality/Size/QualitySizeTemplate.html diff --git a/UI/Settings/Quality/Size/QualitySizeView.js b/src/UI/Settings/Quality/Size/QualitySizeView.js similarity index 100% rename from UI/Settings/Quality/Size/QualitySizeView.js rename to src/UI/Settings/Quality/Size/QualitySizeView.js diff --git a/UI/Settings/Quality/quality.less b/src/UI/Settings/Quality/quality.less similarity index 100% rename from UI/Settings/Quality/quality.less rename to src/UI/Settings/Quality/quality.less diff --git a/UI/Settings/SettingsLayout.js b/src/UI/Settings/SettingsLayout.js similarity index 100% rename from UI/Settings/SettingsLayout.js rename to src/UI/Settings/SettingsLayout.js diff --git a/UI/Settings/SettingsLayoutTemplate.html b/src/UI/Settings/SettingsLayoutTemplate.html similarity index 100% rename from UI/Settings/SettingsLayoutTemplate.html rename to src/UI/Settings/SettingsLayoutTemplate.html diff --git a/UI/Settings/SettingsModel.js b/src/UI/Settings/SettingsModel.js similarity index 100% rename from UI/Settings/SettingsModel.js rename to src/UI/Settings/SettingsModel.js diff --git a/UI/Settings/SettingsModelBase.js b/src/UI/Settings/SettingsModelBase.js similarity index 100% rename from UI/Settings/SettingsModelBase.js rename to src/UI/Settings/SettingsModelBase.js diff --git a/UI/Settings/settings.less b/src/UI/Settings/settings.less similarity index 100% rename from UI/Settings/settings.less rename to src/UI/Settings/settings.less diff --git a/UI/Shared/Footer/Template.html b/src/UI/Shared/Footer/Template.html similarity index 100% rename from UI/Shared/Footer/Template.html rename to src/UI/Shared/Footer/Template.html diff --git a/UI/Shared/Footer/View.js b/src/UI/Shared/Footer/View.js similarity index 100% rename from UI/Shared/Footer/View.js rename to src/UI/Shared/Footer/View.js diff --git a/UI/Shared/FormatHelpers.js b/src/UI/Shared/FormatHelpers.js similarity index 100% rename from UI/Shared/FormatHelpers.js rename to src/UI/Shared/FormatHelpers.js diff --git a/UI/Shared/Grid/DateHeaderCell.js b/src/UI/Shared/Grid/DateHeaderCell.js similarity index 100% rename from UI/Shared/Grid/DateHeaderCell.js rename to src/UI/Shared/Grid/DateHeaderCell.js diff --git a/UI/Shared/Grid/HeaderCell.js b/src/UI/Shared/Grid/HeaderCell.js similarity index 100% rename from UI/Shared/Grid/HeaderCell.js rename to src/UI/Shared/Grid/HeaderCell.js diff --git a/UI/Shared/Grid/Pager.js b/src/UI/Shared/Grid/Pager.js similarity index 100% rename from UI/Shared/Grid/Pager.js rename to src/UI/Shared/Grid/Pager.js diff --git a/UI/Shared/Grid/PagerTemplate.html b/src/UI/Shared/Grid/PagerTemplate.html similarity index 100% rename from UI/Shared/Grid/PagerTemplate.html rename to src/UI/Shared/Grid/PagerTemplate.html diff --git a/UI/Shared/LoadingTemplate.html b/src/UI/Shared/LoadingTemplate.html similarity index 100% rename from UI/Shared/LoadingTemplate.html rename to src/UI/Shared/LoadingTemplate.html diff --git a/UI/Shared/LoadingView.js b/src/UI/Shared/LoadingView.js similarity index 100% rename from UI/Shared/LoadingView.js rename to src/UI/Shared/LoadingView.js diff --git a/UI/Shared/Messenger.js b/src/UI/Shared/Messenger.js similarity index 100% rename from UI/Shared/Messenger.js rename to src/UI/Shared/Messenger.js diff --git a/UI/Shared/Modal/Controller.js b/src/UI/Shared/Modal/Controller.js similarity index 100% rename from UI/Shared/Modal/Controller.js rename to src/UI/Shared/Modal/Controller.js diff --git a/UI/Shared/Modal/Region.js b/src/UI/Shared/Modal/Region.js similarity index 100% rename from UI/Shared/Modal/Region.js rename to src/UI/Shared/Modal/Region.js diff --git a/UI/Shared/NotFoundTemplate.html b/src/UI/Shared/NotFoundTemplate.html similarity index 100% rename from UI/Shared/NotFoundTemplate.html rename to src/UI/Shared/NotFoundTemplate.html diff --git a/UI/Shared/NotFoundView.js b/src/UI/Shared/NotFoundView.js similarity index 100% rename from UI/Shared/NotFoundView.js rename to src/UI/Shared/NotFoundView.js diff --git a/UI/Shared/SignalRBroadcaster.js b/src/UI/Shared/SignalRBroadcaster.js similarity index 100% rename from UI/Shared/SignalRBroadcaster.js rename to src/UI/Shared/SignalRBroadcaster.js diff --git a/UI/Shared/Styles/card.less b/src/UI/Shared/Styles/card.less similarity index 100% rename from UI/Shared/Styles/card.less rename to src/UI/Shared/Styles/card.less diff --git a/UI/Shared/Styles/clickable.less b/src/UI/Shared/Styles/clickable.less similarity index 100% rename from UI/Shared/Styles/clickable.less rename to src/UI/Shared/Styles/clickable.less diff --git a/UI/Shared/Toolbar/Button/ButtonCollectionView.js b/src/UI/Shared/Toolbar/Button/ButtonCollectionView.js similarity index 100% rename from UI/Shared/Toolbar/Button/ButtonCollectionView.js rename to src/UI/Shared/Toolbar/Button/ButtonCollectionView.js diff --git a/UI/Shared/Toolbar/Button/ButtonView.js b/src/UI/Shared/Toolbar/Button/ButtonView.js similarity index 100% rename from UI/Shared/Toolbar/Button/ButtonView.js rename to src/UI/Shared/Toolbar/Button/ButtonView.js diff --git a/UI/Shared/Toolbar/ButtonCollection.js b/src/UI/Shared/Toolbar/ButtonCollection.js similarity index 100% rename from UI/Shared/Toolbar/ButtonCollection.js rename to src/UI/Shared/Toolbar/ButtonCollection.js diff --git a/UI/Shared/Toolbar/ButtonModel.js b/src/UI/Shared/Toolbar/ButtonModel.js similarity index 100% rename from UI/Shared/Toolbar/ButtonModel.js rename to src/UI/Shared/Toolbar/ButtonModel.js diff --git a/UI/Shared/Toolbar/ButtonTemplate.html b/src/UI/Shared/Toolbar/ButtonTemplate.html similarity index 100% rename from UI/Shared/Toolbar/ButtonTemplate.html rename to src/UI/Shared/Toolbar/ButtonTemplate.html diff --git a/UI/Shared/Toolbar/Radio/RadioButtonCollectionView.js b/src/UI/Shared/Toolbar/Radio/RadioButtonCollectionView.js similarity index 100% rename from UI/Shared/Toolbar/Radio/RadioButtonCollectionView.js rename to src/UI/Shared/Toolbar/Radio/RadioButtonCollectionView.js diff --git a/UI/Shared/Toolbar/Radio/RadioButtonView.js b/src/UI/Shared/Toolbar/Radio/RadioButtonView.js similarity index 100% rename from UI/Shared/Toolbar/Radio/RadioButtonView.js rename to src/UI/Shared/Toolbar/Radio/RadioButtonView.js diff --git a/UI/Shared/Toolbar/ToolbarLayout.js b/src/UI/Shared/Toolbar/ToolbarLayout.js similarity index 100% rename from UI/Shared/Toolbar/ToolbarLayout.js rename to src/UI/Shared/Toolbar/ToolbarLayout.js diff --git a/UI/Shared/Toolbar/ToolbarLayoutTemplate.html b/src/UI/Shared/Toolbar/ToolbarLayoutTemplate.html similarity index 100% rename from UI/Shared/Toolbar/ToolbarLayoutTemplate.html rename to src/UI/Shared/Toolbar/ToolbarLayoutTemplate.html diff --git a/UI/System/About/AboutView.js b/src/UI/System/About/AboutView.js similarity index 100% rename from UI/System/About/AboutView.js rename to src/UI/System/About/AboutView.js diff --git a/UI/System/About/AboutViewTemplate.html b/src/UI/System/About/AboutViewTemplate.html similarity index 100% rename from UI/System/About/AboutViewTemplate.html rename to src/UI/System/About/AboutViewTemplate.html diff --git a/UI/System/Logs/Files/ContentsModel.js b/src/UI/System/Logs/Files/ContentsModel.js similarity index 100% rename from UI/System/Logs/Files/ContentsModel.js rename to src/UI/System/Logs/Files/ContentsModel.js diff --git a/UI/System/Logs/Files/ContentsView.js b/src/UI/System/Logs/Files/ContentsView.js similarity index 100% rename from UI/System/Logs/Files/ContentsView.js rename to src/UI/System/Logs/Files/ContentsView.js diff --git a/UI/System/Logs/Files/ContentsViewTemplate.html b/src/UI/System/Logs/Files/ContentsViewTemplate.html similarity index 100% rename from UI/System/Logs/Files/ContentsViewTemplate.html rename to src/UI/System/Logs/Files/ContentsViewTemplate.html diff --git a/UI/System/Logs/Files/FilenameCell.js b/src/UI/System/Logs/Files/FilenameCell.js similarity index 100% rename from UI/System/Logs/Files/FilenameCell.js rename to src/UI/System/Logs/Files/FilenameCell.js diff --git a/UI/System/Logs/Files/LogFileCollection.js b/src/UI/System/Logs/Files/LogFileCollection.js similarity index 100% rename from UI/System/Logs/Files/LogFileCollection.js rename to src/UI/System/Logs/Files/LogFileCollection.js diff --git a/UI/System/Logs/Files/LogFileLayout.js b/src/UI/System/Logs/Files/LogFileLayout.js similarity index 100% rename from UI/System/Logs/Files/LogFileLayout.js rename to src/UI/System/Logs/Files/LogFileLayout.js diff --git a/UI/System/Logs/Files/LogFileLayoutTemplate.html b/src/UI/System/Logs/Files/LogFileLayoutTemplate.html similarity index 100% rename from UI/System/Logs/Files/LogFileLayoutTemplate.html rename to src/UI/System/Logs/Files/LogFileLayoutTemplate.html diff --git a/UI/System/Logs/Files/LogFileModel.js b/src/UI/System/Logs/Files/LogFileModel.js similarity index 100% rename from UI/System/Logs/Files/LogFileModel.js rename to src/UI/System/Logs/Files/LogFileModel.js diff --git a/UI/System/Logs/Files/Row.js b/src/UI/System/Logs/Files/Row.js similarity index 100% rename from UI/System/Logs/Files/Row.js rename to src/UI/System/Logs/Files/Row.js diff --git a/UI/System/Logs/Logs.less b/src/UI/System/Logs/Logs.less similarity index 100% rename from UI/System/Logs/Logs.less rename to src/UI/System/Logs/Logs.less diff --git a/UI/System/Logs/LogsCollection.js b/src/UI/System/Logs/LogsCollection.js similarity index 100% rename from UI/System/Logs/LogsCollection.js rename to src/UI/System/Logs/LogsCollection.js diff --git a/UI/System/Logs/LogsLayout.js b/src/UI/System/Logs/LogsLayout.js similarity index 100% rename from UI/System/Logs/LogsLayout.js rename to src/UI/System/Logs/LogsLayout.js diff --git a/UI/System/Logs/LogsLayoutTemplate.html b/src/UI/System/Logs/LogsLayoutTemplate.html similarity index 100% rename from UI/System/Logs/LogsLayoutTemplate.html rename to src/UI/System/Logs/LogsLayoutTemplate.html diff --git a/UI/System/Logs/LogsModel.js b/src/UI/System/Logs/LogsModel.js similarity index 100% rename from UI/System/Logs/LogsModel.js rename to src/UI/System/Logs/LogsModel.js diff --git a/UI/System/Logs/Table/LogLevelCell.js b/src/UI/System/Logs/Table/LogLevelCell.js similarity index 100% rename from UI/System/Logs/Table/LogLevelCell.js rename to src/UI/System/Logs/Table/LogLevelCell.js diff --git a/UI/System/Logs/Table/LogTimeCell.js b/src/UI/System/Logs/Table/LogTimeCell.js similarity index 100% rename from UI/System/Logs/Table/LogTimeCell.js rename to src/UI/System/Logs/Table/LogTimeCell.js diff --git a/UI/System/Logs/Table/LogsTableLayout.js b/src/UI/System/Logs/Table/LogsTableLayout.js similarity index 100% rename from UI/System/Logs/Table/LogsTableLayout.js rename to src/UI/System/Logs/Table/LogsTableLayout.js diff --git a/UI/System/Logs/Table/LogsTableLayoutTemplate.html b/src/UI/System/Logs/Table/LogsTableLayoutTemplate.html similarity index 100% rename from UI/System/Logs/Table/LogsTableLayoutTemplate.html rename to src/UI/System/Logs/Table/LogsTableLayoutTemplate.html diff --git a/UI/System/StatusModel.js b/src/UI/System/StatusModel.js similarity index 100% rename from UI/System/StatusModel.js rename to src/UI/System/StatusModel.js diff --git a/UI/System/SystemLayout.js b/src/UI/System/SystemLayout.js similarity index 100% rename from UI/System/SystemLayout.js rename to src/UI/System/SystemLayout.js diff --git a/UI/System/SystemLayoutTemplate.html b/src/UI/System/SystemLayoutTemplate.html similarity index 100% rename from UI/System/SystemLayoutTemplate.html rename to src/UI/System/SystemLayoutTemplate.html diff --git a/UI/System/Update/UpdateCollection.js b/src/UI/System/Update/UpdateCollection.js similarity index 100% rename from UI/System/Update/UpdateCollection.js rename to src/UI/System/Update/UpdateCollection.js diff --git a/UI/System/Update/UpdateCollectionView.js b/src/UI/System/Update/UpdateCollectionView.js similarity index 100% rename from UI/System/Update/UpdateCollectionView.js rename to src/UI/System/Update/UpdateCollectionView.js diff --git a/UI/System/Update/UpdateItemView.js b/src/UI/System/Update/UpdateItemView.js similarity index 100% rename from UI/System/Update/UpdateItemView.js rename to src/UI/System/Update/UpdateItemView.js diff --git a/UI/System/Update/UpdateItemViewTemplate.html b/src/UI/System/Update/UpdateItemViewTemplate.html similarity index 100% rename from UI/System/Update/UpdateItemViewTemplate.html rename to src/UI/System/Update/UpdateItemViewTemplate.html diff --git a/UI/System/Update/UpdateLayout.js b/src/UI/System/Update/UpdateLayout.js similarity index 100% rename from UI/System/Update/UpdateLayout.js rename to src/UI/System/Update/UpdateLayout.js diff --git a/UI/System/Update/UpdateLayoutTemplate.html b/src/UI/System/Update/UpdateLayoutTemplate.html similarity index 100% rename from UI/System/Update/UpdateLayoutTemplate.html rename to src/UI/System/Update/UpdateLayoutTemplate.html diff --git a/UI/System/Update/UpdateModel.js b/src/UI/System/Update/UpdateModel.js similarity index 100% rename from UI/System/Update/UpdateModel.js rename to src/UI/System/Update/UpdateModel.js diff --git a/UI/System/Update/update.less b/src/UI/System/Update/update.less similarity index 100% rename from UI/System/Update/update.less rename to src/UI/System/Update/update.less diff --git a/UI/app.js b/src/UI/app.js similarity index 100% rename from UI/app.js rename to src/UI/app.js diff --git a/UI/favicon.ico b/src/UI/favicon.ico similarity index 100% rename from UI/favicon.ico rename to src/UI/favicon.ico diff --git a/UI/index.html b/src/UI/index.html similarity index 100% rename from UI/index.html rename to src/UI/index.html diff --git a/UI/jQuery/RouteBinder.js b/src/UI/jQuery/RouteBinder.js similarity index 100% rename from UI/jQuery/RouteBinder.js rename to src/UI/jQuery/RouteBinder.js diff --git a/UI/jQuery/ToTheTop.js b/src/UI/jQuery/ToTheTop.js similarity index 100% rename from UI/jQuery/ToTheTop.js rename to src/UI/jQuery/ToTheTop.js diff --git a/UI/jQuery/TooltipBinder.js b/src/UI/jQuery/TooltipBinder.js similarity index 100% rename from UI/jQuery/TooltipBinder.js rename to src/UI/jQuery/TooltipBinder.js diff --git a/UI/jQuery/jquery.spin.js b/src/UI/jQuery/jquery.spin.js similarity index 100% rename from UI/jQuery/jquery.spin.js rename to src/UI/jQuery/jquery.spin.js diff --git a/UI/jQuery/jquery.validation.js b/src/UI/jQuery/jquery.validation.js similarity index 100% rename from UI/jQuery/jquery.validation.js rename to src/UI/jQuery/jquery.validation.js diff --git a/UI/polyfills.js b/src/UI/polyfills.js similarity index 100% rename from UI/polyfills.js rename to src/UI/polyfills.js From 0c9260b05c8ce8ea02a9176deeb17506b9768ed4 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Wed, 2 Oct 2013 18:26:18 -0700 Subject: [PATCH 24/52] Do not copy config.xml for Core.Test --- src/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj b/src/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj index 8a79c19af..c89608171 100644 --- a/src/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj +++ b/src/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj @@ -252,9 +252,7 @@ sqlite3.dll Always - - Always - + Always From 89c2ff6107d3d66f3295879400d50ec4272d20b4 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Thu, 3 Oct 2013 08:18:51 -0700 Subject: [PATCH 25/52] Quality size settings are shown under advanced settings New: Change max download size per quality when advanced settings are shown --- src/UI/.idea/vcs.xml | 2 +- src/UI/Settings/Quality/QualityLayoutTemplate.html | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/UI/.idea/vcs.xml b/src/UI/.idea/vcs.xml index 21cbaa607..9ab281ac8 100644 --- a/src/UI/.idea/vcs.xml +++ b/src/UI/.idea/vcs.xml @@ -1,7 +1,7 @@ - + diff --git a/src/UI/Settings/Quality/QualityLayoutTemplate.html b/src/UI/Settings/Quality/QualityLayoutTemplate.html index b1f7ec6d5..eb7bc8890 100644 --- a/src/UI/Settings/Quality/QualityLayoutTemplate.html +++ b/src/UI/Settings/Quality/QualityLayoutTemplate.html @@ -1,6 +1,9 @@ 
    - +
    From 938b5f1ae33341b526d2d610256b6e56a9f531ed Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Thu, 3 Oct 2013 11:12:12 -0700 Subject: [PATCH 26/52] Connect to SAB over SSL (optional) New: Ability to connect to SABnzbd over SSL --- .../Configuration/ConfigService.cs | 9 +++++++- .../Configuration/IConfigService.cs | 1 + .../Download/Clients/Sabnzbd/SabnzbdClient.cs | 5 ++++- .../DownloadClient/SabViewTemplate.html | 21 +++++++++++++++++++ .../Quality/QualityLayoutTemplate.html | 2 +- 5 files changed, 35 insertions(+), 3 deletions(-) diff --git a/src/NzbDrone.Core/Configuration/ConfigService.cs b/src/NzbDrone.Core/Configuration/ConfigService.cs index 8a9b7a5d5..a7bebdb6d 100644 --- a/src/NzbDrone.Core/Configuration/ConfigService.cs +++ b/src/NzbDrone.Core/Configuration/ConfigService.cs @@ -128,6 +128,13 @@ namespace NzbDrone.Core.Configuration set { SetValue("SabOlderTvPriority", value); } } + public bool SabUseSsl + { + get { return GetValueBoolean("SabUseSsl", false); } + + set { SetValue("SabUseSsl", value); } + } + public String DownloadedEpisodesFolder { get { return GetValue(ConfigKey.DownloadedEpisodesFolder.ToString()); } @@ -162,7 +169,7 @@ namespace NzbDrone.Core.Configuration public DownloadClientType DownloadClient { - get { return GetValueEnum("DownloadClient", DownloadClientType.Sabnzbd); } + get { return GetValueEnum("DownloadClient", DownloadClientType.Blackhole); } set { SetValue("DownloadClient", value); } } diff --git a/src/NzbDrone.Core/Configuration/IConfigService.cs b/src/NzbDrone.Core/Configuration/IConfigService.cs index d84ed272b..e226740b0 100644 --- a/src/NzbDrone.Core/Configuration/IConfigService.cs +++ b/src/NzbDrone.Core/Configuration/IConfigService.cs @@ -18,6 +18,7 @@ namespace NzbDrone.Core.Configuration String SabTvCategory { get; set; } SabPriorityType SabRecentTvPriority { get; set; } SabPriorityType SabOlderTvPriority { get; set; } + Boolean SabUseSsl { get; set; } String DownloadedEpisodesFolder { get; set; } bool UseSeasonFolder { get; set; } string SeasonFolderFormat { get; set; } diff --git a/src/NzbDrone.Core/Download/Clients/Sabnzbd/SabnzbdClient.cs b/src/NzbDrone.Core/Download/Clients/Sabnzbd/SabnzbdClient.cs index 7a6eac544..817f3a30d 100644 --- a/src/NzbDrone.Core/Download/Clients/Sabnzbd/SabnzbdClient.cs +++ b/src/NzbDrone.Core/Download/Clients/Sabnzbd/SabnzbdClient.cs @@ -221,7 +221,10 @@ namespace NzbDrone.Core.Download.Clients.Sabnzbd private string GetSabRequest(string action) { - return string.Format(@"http://{0}:{1}/api?{2}&apikey={3}&ma_username={4}&ma_password={5}", + var protocol = _configService.SabUseSsl ? "https" : "http"; + + return string.Format(@"{0}://{1}:{2}/api?{3}&apikey={4}&ma_username={5}&ma_password={6}", + protocol, _configService.SabHost, _configService.SabPort, action, diff --git a/src/UI/Settings/DownloadClient/SabViewTemplate.html b/src/UI/Settings/DownloadClient/SabViewTemplate.html index 25ae6e74a..39e194aa0 100644 --- a/src/UI/Settings/DownloadClient/SabViewTemplate.html +++ b/src/UI/Settings/DownloadClient/SabViewTemplate.html @@ -96,4 +96,25 @@ + +
    + + +
    +
    diff --git a/src/UI/Settings/Quality/QualityLayoutTemplate.html b/src/UI/Settings/Quality/QualityLayoutTemplate.html index eb7bc8890..5954e5eb4 100644 --- a/src/UI/Settings/Quality/QualityLayoutTemplate.html +++ b/src/UI/Settings/Quality/QualityLayoutTemplate.html @@ -3,7 +3,7 @@

    - +
    From 6f27d8c33f8edde1a99baf79c6ee07d3d0cc1450 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Thu, 3 Oct 2013 14:06:52 -0700 Subject: [PATCH 27/52] Queue should update now --- src/NzbDrone.Api/Queue/QueueResource.cs | 1 + .../Download/Clients/Nzbget/NzbgetClient.cs | 2 +- .../Download/Clients/Sabnzbd/SabQueueItem.cs | 2 +- .../Download/Clients/Sabnzbd/SabnzbdClient.cs | 6 ++- src/NzbDrone.Core/Download/QueueItem.cs | 3 +- src/NzbDrone.Core/Queue/Queue.cs | 1 + src/NzbDrone.Core/Queue/QueueService.cs | 3 +- src/UI/Cells/cells.less | 5 +++ src/UI/History/Queue/QueueLayout.js | 8 ++++ src/UI/History/Queue/QueueStatusCell.js | 39 +++++++++++++++++++ src/UI/Mixins/jquery.ajax.js | 2 +- 11 files changed, 65 insertions(+), 7 deletions(-) create mode 100644 src/UI/History/Queue/QueueStatusCell.js diff --git a/src/NzbDrone.Api/Queue/QueueResource.cs b/src/NzbDrone.Api/Queue/QueueResource.cs index 77a7c2772..429a25c44 100644 --- a/src/NzbDrone.Api/Queue/QueueResource.cs +++ b/src/NzbDrone.Api/Queue/QueueResource.cs @@ -14,5 +14,6 @@ namespace NzbDrone.Api.Queue public String Title { get; set; } public Decimal Sizeleft { get; set; } public TimeSpan Timeleft { get; set; } + public String Status { get; set; } } } diff --git a/src/NzbDrone.Core/Download/Clients/Nzbget/NzbgetClient.cs b/src/NzbDrone.Core/Download/Clients/Nzbget/NzbgetClient.cs index ee94a2198..e7a53fde9 100644 --- a/src/NzbDrone.Core/Download/Clients/Nzbget/NzbgetClient.cs +++ b/src/NzbDrone.Core/Download/Clients/Nzbget/NzbgetClient.cs @@ -73,7 +73,7 @@ namespace NzbDrone.Core.Download.Clients.Nzbget queueItem.Id = nzbGetQueueItem.NzbId.ToString(); queueItem.Title = nzbGetQueueItem.NzbName; queueItem.Size = nzbGetQueueItem.FileSizeMb; - queueItem.SizeLeft = nzbGetQueueItem.RemainingSizeMb; + queueItem.Sizeleft = nzbGetQueueItem.RemainingSizeMb; yield return queueItem; } diff --git a/src/NzbDrone.Core/Download/Clients/Sabnzbd/SabQueueItem.cs b/src/NzbDrone.Core/Download/Clients/Sabnzbd/SabQueueItem.cs index b6fcdb0dd..bc233eb84 100644 --- a/src/NzbDrone.Core/Download/Clients/Sabnzbd/SabQueueItem.cs +++ b/src/NzbDrone.Core/Download/Clients/Sabnzbd/SabQueueItem.cs @@ -27,7 +27,7 @@ namespace NzbDrone.Core.Download.Clients.Sabnzbd public string Category { get; set; } [JsonProperty(PropertyName = "mbleft")] - public decimal SizeLeft { get; set; } + public decimal Sizeleft { get; set; } public int Percentage { get; set; } diff --git a/src/NzbDrone.Core/Download/Clients/Sabnzbd/SabnzbdClient.cs b/src/NzbDrone.Core/Download/Clients/Sabnzbd/SabnzbdClient.cs index 817f3a30d..3e36e941d 100644 --- a/src/NzbDrone.Core/Download/Clients/Sabnzbd/SabnzbdClient.cs +++ b/src/NzbDrone.Core/Download/Clients/Sabnzbd/SabnzbdClient.cs @@ -117,9 +117,11 @@ namespace NzbDrone.Core.Download.Clients.Sabnzbd queueItem.Id = sabQueueItem.Id; queueItem.Title = sabQueueItem.Title; queueItem.Size = sabQueueItem.Size; - queueItem.SizeLeft = sabQueueItem.Size; + queueItem.Sizeleft = sabQueueItem.Sizeleft; + queueItem.Timeleft = sabQueueItem.Timeleft; + queueItem.Status = sabQueueItem.Status; - queueItems.Add( queueItem); + queueItems.Add(queueItem); } return queueItems; diff --git a/src/NzbDrone.Core/Download/QueueItem.cs b/src/NzbDrone.Core/Download/QueueItem.cs index f9de11ff0..c63d98c1a 100644 --- a/src/NzbDrone.Core/Download/QueueItem.cs +++ b/src/NzbDrone.Core/Download/QueueItem.cs @@ -7,7 +7,8 @@ namespace NzbDrone.Core.Download public string Id { get; set; } public decimal Size { get; set; } public string Title { get; set; } - public decimal SizeLeft { get; set; } + public decimal Sizeleft { get; set; } public TimeSpan Timeleft { get; set; } + public String Status { get; set; } } } diff --git a/src/NzbDrone.Core/Queue/Queue.cs b/src/NzbDrone.Core/Queue/Queue.cs index 611aa05f4..e1ceb3ff8 100644 --- a/src/NzbDrone.Core/Queue/Queue.cs +++ b/src/NzbDrone.Core/Queue/Queue.cs @@ -13,5 +13,6 @@ namespace NzbDrone.Core.Queue public String Title { get; set; } public Decimal Sizeleft { get; set; } public TimeSpan Timeleft { get; set; } + public String Status { get; set; } } } diff --git a/src/NzbDrone.Core/Queue/QueueService.cs b/src/NzbDrone.Core/Queue/QueueService.cs index 07eb767f2..e3e78c7ac 100644 --- a/src/NzbDrone.Core/Queue/QueueService.cs +++ b/src/NzbDrone.Core/Queue/QueueService.cs @@ -59,8 +59,9 @@ namespace NzbDrone.Core.Queue queue.Quality = remoteEpisode.ParsedEpisodeInfo.Quality; queue.Title = queueItem.Title; queue.Size = queueItem.Size; - queue.Sizeleft = queueItem.SizeLeft; + queue.Sizeleft = queueItem.Sizeleft; queue.Timeleft = queueItem.Timeleft; + queue.Status = queueItem.Status; queued.Add(queue); } } diff --git a/src/UI/Cells/cells.less b/src/UI/Cells/cells.less index af5a71e8d..b557af740 100644 --- a/src/UI/Cells/cells.less +++ b/src/UI/Cells/cells.less @@ -96,4 +96,9 @@ td.episode-status-cell, td.quality-cell { .timeleft-cell { cursor: default; width: 80px; +} + +.queue-status-cell { + width: 20px; + text-align: center !important; } \ No newline at end of file diff --git a/src/UI/History/Queue/QueueLayout.js b/src/UI/History/Queue/QueueLayout.js index d397d4fd7..612ec0297 100644 --- a/src/UI/History/Queue/QueueLayout.js +++ b/src/UI/History/Queue/QueueLayout.js @@ -8,6 +8,7 @@ define( 'Cells/EpisodeNumberCell', 'Cells/EpisodeTitleCell', 'Cells/QualityCell', + 'History/Queue/QueueStatusCell', 'History/Queue/TimeleftCell' ], function (Marionette, Backgrid, @@ -16,6 +17,7 @@ define( EpisodeNumberCell, EpisodeTitleCell, QualityCell, + QueueStatusCell, TimeleftCell) { return Marionette.Layout.extend({ template: 'History/Queue/QueueLayoutTemplate', @@ -26,6 +28,12 @@ define( columns: [ + { + name : 'status', + label: '', + cell : QueueStatusCell, + cellValue: 'this' + }, { name : 'series', label: 'Series', diff --git a/src/UI/History/Queue/QueueStatusCell.js b/src/UI/History/Queue/QueueStatusCell.js new file mode 100644 index 000000000..67442cb09 --- /dev/null +++ b/src/UI/History/Queue/QueueStatusCell.js @@ -0,0 +1,39 @@ +'use strict'; + +define( + [ + 'Cells/NzbDroneCell' + ], function (NzbDroneCell) { + return NzbDroneCell.extend({ + + className: 'queue-status-cell', + + render: function () { + this.$el.empty(); + + if (this.cellValue) { + var status = this.cellValue.get('status').toLowerCase(); + var icon = 'icon-nd-downloading'; + var title = 'Downloading'; + + if (status === 'paused') { + icon = 'icon-pause'; + title = 'Paused'; + } + + if (status === 'queued') { + icon = 'icon-cloud'; + title = 'Queued'; + } + + var timeleft = this.cellValue.get('timeleft'); + var size = this.cellValue.get('size'); + var sizeleft = this.cellValue.get('sizeleft'); + + this.$el.html(''.format(icon, title)); + } + + return this; + } + }); + }); diff --git a/src/UI/Mixins/jquery.ajax.js b/src/UI/Mixins/jquery.ajax.js index e05a7d8fb..918d565af 100644 --- a/src/UI/Mixins/jquery.ajax.js +++ b/src/UI/Mixins/jquery.ajax.js @@ -22,7 +22,7 @@ define(function () { } if (xhr) { xhr.headers = xhr.headers || {}; - xhr.headers['Authorization'] = window.NzbDrone.ApiKey; +// xhr.headers.Authorization = window.NzbDrone.ApiKey; } return original.apply(this, arguments); From a91d21fba165e2bbe23e5576b10a83e1df5d10f7 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Thu, 3 Oct 2013 19:25:07 -0700 Subject: [PATCH 28/52] Upcoming now only shows 3 days of episodes New: Upcoming shows today, tomorrow and the day --- src/NzbDrone.Api/Calendar/CalendarModule.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/NzbDrone.Api/Calendar/CalendarModule.cs b/src/NzbDrone.Api/Calendar/CalendarModule.cs index 755c898aa..cd6f8d13f 100644 --- a/src/NzbDrone.Api/Calendar/CalendarModule.cs +++ b/src/NzbDrone.Api/Calendar/CalendarModule.cs @@ -23,8 +23,8 @@ namespace NzbDrone.Api.Calendar private List GetPaged() { - var start = DateTime.Today.AddDays(-1); - var end = DateTime.Today.AddDays(7); + var start = DateTime.Today; + var end = DateTime.Today.AddDays(2); var queryStart = Request.Query.Start; var queryEnd = Request.Query.End; From c7b4deeef993408a2dc1738aa720235009e645e2 Mon Sep 17 00:00:00 2001 From: kayone Date: Fri, 4 Oct 2013 14:56:49 -0700 Subject: [PATCH 29/52] removed extra fonts. --- src/UI/Content/font.less | 24 +++++++++--------- src/UI/Content/fonts/opensans-italic.eot | Bin 18624 -> 0 bytes src/UI/Content/fonts/opensans-italic.ttf | Bin 212896 -> 0 bytes src/UI/Content/fonts/opensans-italic.woff | Bin 21092 -> 0 bytes src/UI/Content/fonts/opensans-lightitalic.eot | Bin 18972 -> 0 bytes src/UI/Content/fonts/opensans-lightitalic.ttf | Bin 213128 -> 0 bytes .../Content/fonts/opensans-lightitalic.woff | Bin 21524 -> 0 bytes .../Content/fonts/opensans-semibolditalic.eot | Bin 18794 -> 0 bytes .../Content/fonts/opensans-semibolditalic.ttf | Bin 212820 -> 0 bytes .../fonts/opensans-semibolditalic.woff | Bin 21252 -> 0 bytes 10 files changed, 12 insertions(+), 12 deletions(-) delete mode 100644 src/UI/Content/fonts/opensans-italic.eot delete mode 100644 src/UI/Content/fonts/opensans-italic.ttf delete mode 100644 src/UI/Content/fonts/opensans-italic.woff delete mode 100644 src/UI/Content/fonts/opensans-lightitalic.eot delete mode 100644 src/UI/Content/fonts/opensans-lightitalic.ttf delete mode 100644 src/UI/Content/fonts/opensans-lightitalic.woff delete mode 100644 src/UI/Content/fonts/opensans-semibolditalic.eot delete mode 100644 src/UI/Content/fonts/opensans-semibolditalic.ttf delete mode 100644 src/UI/Content/fonts/opensans-semibolditalic.woff diff --git a/src/UI/Content/font.less b/src/UI/Content/font.less index a4657ee47..71636bcd6 100644 --- a/src/UI/Content/font.less +++ b/src/UI/Content/font.less @@ -2,34 +2,34 @@ font-family: 'Open Sans'; font-style: normal; font-weight: 300; - src: url('/Content/fonts/OpenSans-Light.eot'); + src: url('/Content/fonts/opensans-light.eot'); src: local('Open Sans Light'), local('OpenSans-Light'), - url('/Content/fonts/OpenSans-Light.eot?#iefix') format('embedded-opentype'), - url('/Content/fonts/OpenSans-Light.woff') format('woff'), - url('/Content/fonts/OpenSans-Light.ttf') format('truetype'); + url('/Content/fonts/opensans-light.eot?#iefix') format('embedded-opentype'), + url('/Content/fonts/opensans-light.woff') format('woff'), + url('/Content/fonts/opensans-light.ttf') format('truetype'); } @font-face { font-family: 'Open Sans'; font-style: normal; font-weight: 400; - src: url('/Content/fonts/OpenSans-Regular.eot'); + src: url('/Content/fonts/opensans-regular.eot'); src: local('Open Sans'), local('OpenSans'), - url('/Content/fonts/OpenSans-Regular.eot?#iefix') format('embedded-opentype'), - url('/Content/fonts/OpenSans-Regular.woff') format('woff'), - url('/Content/fonts/OpenSans-Regular.ttf') format('truetype') + url('/Content/fonts/opensans-regular.eot?#iefix') format('embedded-opentype'), + url('/Content/fonts/opensans-regular.woff') format('woff'), + url('/Content/fonts/opensans-regular.ttf') format('truetype') } @font-face { font-family: 'Open Sans'; font-style: normal; font-weight: 600; - src: url('/Content/fonts/OpenSans-SemiBold.eot'); + src: url('/Content/fonts/opensans-semibold.eot'); src: local('Open Sans SemiBold'), local('OpenSans-SemiBold'), - url('/Content/fonts/OpenSans-SemiBold.eot?#iefix') format('embedded-opentype'), - url('/Content/fonts/OpenSans-SemiBold.woff') format('woff'), - url('/Content/fonts/OpenSans-SemiBold.ttf') format('truetype') + url('/Content/fonts/opensans-semibold.eot?#iefix') format('embedded-opentype'), + url('/Content/fonts/opensans-semibold.woff') format('woff'), + url('/Content/fonts/opensans-semibold.ttf') format('truetype') } diff --git a/src/UI/Content/fonts/opensans-italic.eot b/src/UI/Content/fonts/opensans-italic.eot deleted file mode 100644 index 3fa53278733ba198c23f845ccdf62153afe9eb7b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18624 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 H#IY{)szAE4 diff --git a/src/UI/Content/fonts/opensans-italic.ttf b/src/UI/Content/fonts/opensans-italic.ttf deleted file mode 100644 index c90da48ff3b8ad6167236d70c48df4d7b5de3bbb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 212896 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 I-Ko?4FC8~NI{*Lx diff --git a/src/UI/Content/fonts/opensans-italic.woff b/src/UI/Content/fonts/opensans-italic.woff deleted file mode 100644 index cedefb8f6ff406c6b77e75ae55ee88e2bd88dc17..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21092 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 F;UD<^W={YB diff --git a/src/UI/Content/fonts/opensans-lightitalic.eot b/src/UI/Content/fonts/opensans-lightitalic.eot deleted file mode 100644 index 6005799a2963b757a213a7a4b49ce6be8997654f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18972 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%0AcdZx)e(&Qd#a*s5*M_SL=`WWXP>A<;1 zI&kih4xD?W1Lq#;z_~|SE2z3ca*s5*M_Rj8UGCf?P41B<_ehg_q{%(fT3Pim&OOrF zt?F8wd!)%d(t&f2bl}`09XR($2hKgxrE%p!>F)RbF^}4KxuAwln)XQ8FgQ}PTiML`v!w{Jv9&swVPMyZ%f3ET&x^GAvvQdj8VRcbe_;5Fg|3G~4|?JE6bRY?p@^{hekzUeV4shVAkSm-t)4 zcD^5M=li~PzUgb{JHB>#g+7&682!y%yS&2aZ|mCeigvuBT|S_z!Ux*%fp)%SYfoxd zv&yxrS@;Jd{joim>w5{j(%8=TYwdhL)h>PN%+jaP-$u1dpGJQV)y_9i?b4@Xf9upP zeH#5uQ@iwOwCdVXT|264M|Gd^(;2~M#IsPf8}+<-uuAG07W#XoRZ`ce(C1mDtj4Ha zIznrERq`I%fzR;i2(iC&*^qpW_yzF0;ENpdGN>JWI_Br# zMI)`SfmYZMbozK@XfD4OypNL2#2N50N}eFruUP2F5!dVARS@b|EQH56<~d@n#J{Vc za`&bU%H@pujRN7%h_#1M@fi4P(BGAB2wvxy8Sn}vvtSx@b)gnF(p4X>TJgAg&Wn5!@|(0_EL#j z%II$}H){MfzDUWhK)b|7wYbXF;>P>H&0=q(##7?~j&Un*6stbQ-*RpgxBgVWfFyML zZqz7ge1T)AOHBIs-y1dF4GP}@F7lClN7x7+Zkx1xqty3x*6z&7Pj?~FDcS=hxe-X5nI=PEZwUJ`Aj*e987&lUK zpN~|YHZ1gb-5Gd{>kNj#{h)W_bSgJdTJJ zL#OgF$KGSpDFqtMMyG#ITQ~v!o^rF%nM#4huF+5Y3Ex3%PCC_3bq2H=!%Pe_vF56y zL9AJ-aSXI>V{{v9#_Do^LlL9fShH7`{5xn3$FLN`QmomiK1Inf^UzrHP?uQMF{+L= zCw06P+y+|bv1X=5>pa%{)bT%pUP+6kd6zs3TJ5nIbM4;)t@hZ@8w!6;$!~}+fOei( zGgG5A9|zWajOJtIv5GZU)u)=J8t1D&#?q4UU6gqBEY@6gH0Xl8F4*frS6%3;i#b9U zy6Qq#UFfQdoey2;sta9p!B`iJb)l;+`PE?1g|52LRTsMILRVe-6)Dv#2lFx3RTsMI zLRVersta9pp{p)*)rGFQ&{Y?@>Oxmt=&B1{b)l;+bk&8fy3kdZyv}u5S6%3;OTHH= zwywI+RTq7&3te@gt8SR-hM8`3)s3#Y(N#Bo*p05b(N#CP>PA=H=&BoCb>ofQu+$Ap z-RP6CK9S!c) z-;M_N>2D)piBUPv3E@Gx)_q#Ja_sElKE~+#7^CmgN|gRewdi=&V(j$sjMVojyU_8< zE_}>s%E!Q88|B7EkH7aRL(q|o>Gvr&aO{!&ektU<&^hq^jFR_D6^?%mdX&6hs&L5} z@Ul@#FgjblKX}~7s5KoQ1w8`ZueNi^cfjv~9`){5tGV2x-u-GL$9fJ+_!jsFBjeru zjCc2|ja;JVu!M_+J@DTH|2^vODj|F9QLlIWq|V$!_Shp<9UlUnJ@$xUmpFUuA$#oc zuW~8=F6ivB$G^%YboSVzRxmny?4hlDXzL!b#~!lB9~nft=+PRW(b;1U*<(-O z?6D_s_SoZJAo280KI7~bOew$DA zJfq6J!*+A>pNREqu8Q5WHcJDJJtA+$IXB~$n|0SN@%X#hzve3RD7;x~$UfUe{z|{* z8u-1Ix)LeJ=n;9dvN9bb73q4UBAs6unoBnE=|jXGmp5z0$>koMH*4L=vAuM2&`-P_ z^hmwgzve2`uel1X_RYBKX01dy_Sn6d(PuN`&Ss4}F43>K3STDv0kPK!H%oQCDrY#G zS%uy#)%j|F4cc`#D-ZOU?Y*0o4LY`8ZPu!kWBc%C#;nb(KX1l+H?#h{83*1h?Wrzl zPjx9v)L-Gln{nXH(xE@SUY|ZduYZ7E{{Rm801o*84*39m^8xzi19;;DxZ(pi-UE1D z232HGMFv%5P(=n+WKcy${xBG1luMr%S``^okwFz1)jO;bt0IFcGN>YhDl(`dgDNtp zB7-V2s3LZs-}ntOs3LYhDl(`dgDNtpB7-V2fmM-VRL!7@464YWiVUjA zpo)yvBz>e+kwFz1RFOdy8B~!$6&X~KK@}NPkwFz1RFOdy8I86lbRMfBgDNtpB7-V2 zs3LIz-%^^jghv|dKEUPiQDMzmf=v|dKE-oPVTFC$tnBU&#bS}!A7 zFC$tnBU&#bTCY^3s}%!2|Idg$qV+PO^)jOMGNSb|qV+PO^)jOMGNSb|qV*~t)?YEA z^)jOMGNSb|qV+PO^@?HD!id((h}J8%^*cU{Xj>W4wlbn^WklP`h_;mxZ7U<%Rz|d~ zjA&aK(Y7+8ZDmB;%80g=5p63Y+Ezxit&C_}8PT>fqHR@wQN4_4TN%-|GNNr|MBB=U zwv`cWDW4`cOz83h6^3eJG?4h4i72J`~c2Li$ih9}4M1A$=&M4~6uh zkUkXBheG;LNFNI6Lm_=Aqz{Gkp^!cl(uYF&P)HvN=|drXD5MXC^r4VG6w-%6`cOz8 z3h6^3eJG?4h4i72J`~c2Li$ih9}4Ls=jlTseJG?4h4i72J`~c2Li$ih9}4M1A$=&M z4~6uhkUkXBheG;LNFNI6Lm_=AWE%?EhC;TXkZmYr8w%NmLbjohZ75_L3fYE2wxN)1 zC}bN7*@i;4p^$ATWE%?EhC;TXkZmYr8w%NmLbjohZ75_L3fYE2wxN)1C}bN7*@i-R z2Xw$Ypo4xC(vL#=QAj@u=|>^`D5M{S^rMh|6w;4E`cX(f3h757{V1d#h4iD4eiYJ= zLU_}3z?-Ipo$8hSD5M{S^rMh|6w;4E`cX(f3h757{V1d#h4iD4eiYJ=Li$liKMLtb zA^j+%ABFUzkbV@>k3#xUNIwecM^`D5M{S^rMh| z6w;4E`ccTk^v8$kj}PPd4~vu0;9)%fVS3HO^qPn9{D<-Uhw=P}@%-(q+HGgmZhP{W z{&qVn72C-lwzF!tomIQ-8u#_7Mtq}J?Y3)_H+t1>yT){*SM9blj&Eli-_AI`oe_My z)a6enL9g0v*H~=ydct;A?Y6UOw_Un&$veU8gkSS7q6c5|FQNxuDTEaU#E|J z9p!%=<@-(C!-3z#EtC#Nh5JCS6+a?H8DFI2SD;t+9?=<8t}__DR{V%Gb3*8~;zy(t zALEslN2C^i>b2rWq#1wewcp4r2Nip*cnAG`huURWvDb=supY8Q*R11p&BibLJb_o$cCh-fgSCzw z_`nWbx&BJmZ1h_34y|t(JrCNUYj(NUig&2(j9xw4p}foJInfTapvygL-Vu1lu|qE5 zGkD!>hg`zwwc;JP#133yhuTYLR(lz}V)m%t0VFIj${)4}eQl4*6C8V{{HWZ(v1g-? zO56VQ=io)7-vJ~{gPoMbpub&xl-~U){r6FN>!a$eI-B(Gzda55iNZ(KPmP|vK1v^a zls@<G}h(8aa z(m_-@NV^Q;&x82$AZ;;-KM&&1gZT3x{11wMod^C0@#jJOc@Tdd#GeOYeh}sd@#jJO zc@Tddl4A@8L;fWtp=Uiqdgpw#(5nPPYKvjvK1#fQen>6i603a(ml(n&hWs07D)C%( zNN*%?e2VyopxbLmGZg>TKXc}P0e`}$KLvjVx=n|YzaSn3|CPTwP5evHt4Tx2SHb_q zd45B=e*H}4uMvBn{7};SeYW7QIMUyA3r?C<)A zaMvNtt$YT1?2zVGj_tHVnp-)x-wtVR<=Cz}gzFAzZsihxvp*!~P%G$H&K!RO^qSaE z@DHF@`G)i>XT~Qv@&NcPO1$nj6dVHW$lE?_KKn4IpXhdU*7{? z6gu1f*z!8vxElJL(Q9a<`1cd8h^uI z*?ES7e*HHdX7E53~8?C_%iVyT#J6eOn;?cFf(53a{9}V zdc8mOs4=9z@7Uj!4>95lG2#r#4P0V37}778`3xSRhBP;H`64r;8KUF&fcA==>USrE zUjN)FH#2(vzEhs&*sD4_lU`5TDV-bbt~;5t@031uj7D=~8eH#Br7M?st!5|l@tw@X zcQOax$-H|fv+SMBuXl=bAMZ7joy?1OG9%u}TzDt*-<`~Sck1qRB(vR}%yxIm@lFK0 z+NCyiya@Ct{0;8$8{FeJxY}=UwckJk-#`PrxjuM|oP_t+D|YVW_t&2g`mX&J z`(dH)ns?a?|1R+-!u#dnyw_gn{?2>th3@0L*IwwH>M?lW?e>b@6CZ<($22-P_DJnF z-5XzWy^Pn7soy#FsQs82@Tcw_y!Bq_9^tp%tDHOHP4|ke;m62B9+xuD2aijW#xd|! z&@1qdOPR)hH_G>nn?U`Nx#F#$elJe(--Cz2e+0b_|2QMsJy^m6EZE8b0O?xr<&Y0W*f<{nye53RXJ4s$-(LuRsv*4#sD?x8jJ(3*SXCpw1K+#^46?AF{PKQX#B z_mH3Lp*8o=ntN!?J@OWR>ek#tYwn>n_t2VqXw5xb?H;an53RX}*4#^5?4=d<(h7T- zkL+a*xECkc3;%nW)9r=%y)eHQ=J&$1Mq(U{tv+a0r)=v{|DgzAo@Ru{tv?cLHIw&y&OdU z2jTx9`acN&2jTx9{2xUB2jTx9{2zpW-ZdZamU*H1KZyQ$zr14SIS1kYAo@QD|GZ^B zIEelaqW^>Ne-Qq^$tdtm))~IZ9etBK`WAD&Z!y>V7BjeSF@y6P-UkD};eAx-`P5U) zr+Cl1V$Y|ZVm{@!y>C(M`IO)GZv3|YidN=r?~0v2JjHyc>ZzpXQ+~I*|JL&ZzpXQ+~s{ z&c=MoZ+Lg?`IO)AZuET0Z+Q2So=^GR?v6d5^1I!AjOSB+x4S>}e9G^3H}+8C`4sPS z7kWO$``m?|Pw_r?q32V)&t2$@%WrabiRV*KF`x4L+#P#9#rxcao=^FG?k;iO`xNu3 zrvlHX{8o3D41=Ce@m6=C=Tp4ZUFi7~Z*>=XKJ^syDc<3(*z+mB!`*-D`IO(`?%4Aw zzr)?J=Tm-%yJOF%{0?{jmFH7_hr1CaFrRvg`IO(`ZuUH%@;lu9SDsJt4tF8#$b5>o zx2weSDc;^L^n8l9w+lU=;_dB1&!_yZcGbvyig&duF7la~Px)Q#I-dEI-_`Eext!nC zZuET0?`rpXJfGrS?LyC|o?<@bceOkAe9G@?9}I@+cf<6%Vfx)Lv#MdTondBG!{j`} zQv3N}SZX&qcO8~ijhxDw^EVOdC{;m zV{~3Ltd=!;o;56n9Xl5qCKnnOZ;Hu+hRK44nP&~_PF?P7c9?nA({h{D!P9aZVRDzQ z=V|6yPba-o@oCMo{!I8?wd2#8XSw88V&-Wa_37jp$MPustvt$jpN~{N90~mkHcxAw zrN2@}>LW*dHszv@vy|t+=fLMFe}OZ2p7pdw4WG?f)6>%D38B6BY3b9kN5H2wg7_F` zP)}>TaO`~PY31IkORcZElz}^bC$V=SKCOIpI5?zxkA&Wzc}Vv)DD)18L%J`;x-XUM zzKmaXdEnK~L#%clVzu*-?#oAdo%2v&k3Gabu0w%WI1e%Q9pd^Aapi}&=0jZVA+Ga~ zu2ARKwHdu)`HWg&RJafHJogz^kDp z8CHD{Go~D7OgYRd*k`3X7oAC=yRC$!^65?eX9F4 z+D{JaP91x;by#<5v|}9BJvw%;Kg{~!Vb%{1vwnD3_pVP_4>?T#JuDtv;$2UN#l!jF z2>HnoMy?}_Tt~=Hj?hL&@aiKt@DXy7BjhAU$VrZnlN`ZmkC2lbAtyOPiyWavj^KDl z@VXytBvQh7M5W07dXk2!D z4)nM@qH)Xhd%5BfBa23i!9+{h&wZ5qYVPbk7~3=Z>J35xJ|&dnw;a z+(*2PxS#l8(Bt)pyw}HnoiqDs#1W0u#>e^8BlUbpIV;6?8=3!l=bHcKfgX1N4k_ zMB|Q+^jheMMjyvs`5Dm|8qJLhd|!UQgU~BWBO2p;q#b@lBb{UKsv6OFwE>;d@n2K zak=xoY|{CER$RH<`G1!DKP%o`;`~2L{+|_xE_oGn=AV_%xOQj$Su+2u9LBLT|13Fw zR^BqI_;>u3Gyg1^e^&haZ2!R-ocU+T{Ig{KSu+1DnSYkdKdTnm5@hj{tXf3Jljmpg zlPr0DmOMX8o}VSp&ywe7$@8yfJ4RM&aqLyutlYrp z96l=_aQp+%8GDwDJxj)(C1cN$v1iryeWYh?Su*ylp1603^Y(1u94|}uo((*A%Sw~3 z(HTNk&)vI3ZrvveK|)dqP%9cKiqb6`6dNOg^jr?vl`- zs=qr<6FYm)GTLUz-m_%yS+e&m{XMH*;J@+;SXO<(v9tFq+55NEBZh--t49c>=kr2m zCf`;s7D^#1mqLu*3HEJqB~&d&@1Dxhr*ibE9DOQBpUTmva`dSjeJV$v%F(BC^r;+u zDyNbCM3AFT<>*s6`c#fSm7`DP=uzNK9!?S<(N(9=uzNK9!?S<>*s6`c#fSm7`DP=uzN zK9!?S<>*s6`c#fSm7`DP=uzNK9!?S<>*s6 z`c#fSm17p1qfh1NQ#txnjy{#6Pvz)SIr>zNK9!?S<>*s6`c#fSm7`DP=uzNK9!?S<>*s6`c#fSm7`DP=ug*Q_s?;o~2JcOP_j{KJ_ep>RI~Kv-GKF=~K_r zr=F!x9itx|V+HIOz2+Fb<`})^m@?JT;25etrYux3>N>{vAjkL~lOjJ7_;?DCk}+MjxMd5oFbG1~MP{2zn)V{m>9 zwvWN&F_=6CZ^x8%j0VTaC61Ft94Cu7P8M-ocXVE#dS&3a`kjzG;W!z>ap~VBp6?%* z=8c~3AD2pvp6?%*K8>Dd9oMxPJ@-FOws4$m;W*jCab2Ox$r+B5GaTn?k8`!h$sCT8 zIXp)zJjXiZa~$&=$2`xR@p6Ixr?BJ_8uCz#>teZrLcNt_dKrMI?Ha@i$1r_P{r8vT8)cJUKu zK<}73L5nL(^_gjFjc*ze21H<~%QRo|ie#%be$B&hs+od71OP%z1vmd49lo ze!zKtzXz+@9x6$A7yrSN1^u4^I-fi@^Jg=yC8~rWME9%|Gt)QQ0 zc}2b3=x^CxQSUbTE?$uijrO8faG_VY@>kT;U2*~Rw>+i@rr?~f1taqJKd+D64dYw|MIbJOMA@}t|YWX4O{~>4iA%FWL-0VlV z*^g-PAJO7JM$bP+&p$@bKSs|#;rO3${7*RkCmjD%j{hmg|CHl@%JIM8_+N1RFF5`e z96!qOqa3f_92F;{9DiEnQE*!2Lb>Ij(CZ1O)oLzr-#M*TbBR{~PU9-4xyRGE%4wZV zN9t_GjXqv&rz6#N!@>;s2<1cIe$eZ*r}3ZD>goPlkCms@f?I_C{lL>&UGytd<*cgnB!Ppp#jltL$jE%wA7>td<*cgnB!Ppp# zjltL$jE(U$^cYV=j|FCIjFs&%7#oAJF&G#V{=@@qTjb z=4-UhYqZX5to^qr zfkGxw$OH73YkD56DVW? zg-oE32^2DcLMBki1PYlzArmNM0)qrfkGxw$OHqrfkGxw$OHQ$QcxJ28EnKA!ks?85D8`g`7bl zXHdu)6mkZIoFOYdLsoo-toV$4>3nbog`7blXHdu)6mkZIoFxxDOCETZJn$^ee3n)| ziyNOM4?Ih&oh1)E8$2Yo&yok8B@aAH9(a~K@GN=YS@OWMwA5ML^(^gm7I!_1yPm~e z&(dCJbuT`r^T4y@foI7B&(b1i@z}HEfoI7B&*HIXao4ltfoI7B&yfe7BM&@B9(XSK zs?K?idpSoQc#b^q9C_e5^1yTCf#=8r&uNyY1-3t}=^d}rJ6@+3 zyiPB89W}m=8vl*Gi@!y6zeRPwMN7X$OTUGm-@?x%wMtu6gA16 zPI9M{_`oDSFo_RL;scW~FbM;b_`oDSFp0V*(bXhAFo_RL;scZDY7!rq#0Mtvfk}K| z5+9hv2PW}>Nqk@uADBdSllZ_SJ}?RMlQ2Jt4@}|%llZ_SJ}`+7T%biR&>|P`feZM+ z1$^KFK5zjaxPT8_zy~hSb{A;73;4hVeBc5;Z~-5LZ(p26bhL_AyX)13WZFekSP>0g+iuK$P@~h zLLpNqWD12$p^zyQGKE5>P{0g+iuK$P@~hLLpNqWD12$p^zyQGKE5>P{PLN20^izwtG3b}|vE~1c&DC8mvxrjn8qL7OyPLZ(s3GzytUA=4;i8ih=wkZBY$jY6hT$TSL>Mj_KEWEzD`qmXG7GL1r}QOGn3 znMNVgC}bLiOrwx#6f%uMrcuZ=3YkVB(Mj_KEWEzD`qmXG7GL1r}QOGn3nMNVgC}bLiOrwx#6f%uMrcuZ= z3YkVB($R!kV358rjA(v3dB@}WA zg$R!kV358rjA(v3d3<{Y+Au}js28GO^ zkQo#*gFCls z3YkG6Gbm&Rh0LIk85A;uLS|6N3<{Y+Au}js28GO^kQo#*gFCls3YkG6Gbm&Rh0LIk%P8bB3b~9z zE~AjkDC9Bkjp6KG77njLN23_%P8bB3b~9zE~AjkDC9B< zxr{kjp6KG77mOg=`6~NFhRHp67+$n{h>|h=jw$BcRu&t|a}- zCs&k_o)G>MvG+P&A;-HS4LJ6S-<70if>)Bx^seZxjlTo^dpK9f_pb2ECs(8y|CN9F zwUa(UDYTR>3XCh9jT1hC0;GO5x9XoHlqDi zROhR5wtPjZ^L2WE$Q7y1=+($8%A$Q{uSs4}F74PE=@n(vj-8iYQF{rMQR}bBPOm7h zcI>svE7G3olJ-=WvTOYnS?d+D)+^GXKfPX`zCo{lgI@oJ`sQfxhT6sG8sDIAzCqu7 zLwvf#>$Gp^%*N}5v#4SgRm`G_SyVBLDrQl|to&gxnAJSxywIwcMHRECVpjDItHfuX zMHRECVir}*qKa8mF^ei@`8}LjR56PxW>Li~s+dI;v#4SgRm`G_SyVBLDrQl|EUK7A z6|>ABW>Li~s+dI;v#4SgRm`G_SyVBLDrQl|EUK7A6|<;f7FEomidj@Kiz;SO#Vo3r zMHRECVir}*qKa8mF^ei@QN=8(m_-${sA3jX%%X}}R56PxW>Li~s+dI;v#4SgRm`G_ zSyVBLDrQl|EUK7A6|<<~O;qtFs(2GsyooB_L=|tMiZ@Zko2cSVRPiRNcoS9RQAHkA zK zEIcJYDX^=vpeyltysNXoNLon#3&(p`XCdibd4;6c%nQ0&AL(74g`{`r6{INtm3MU( zv=78+H!f%_b}io3S&-6P;uXR|(mQqvQk~JeIt%RTENG1Ok>1r=NP1UiA^AGTdsk;6 z>0O-#snqB3PQQXw>e#zF3u4dcU7ZE(3^96FXF>Zz9D7%1fnA*ic6Aom)#*27>#xvr zL3-BN*wtBJwWq+Y&H}qS3n;vx7V+`job4;1cXbx@y}z-?S1aZFJP!~*2zsTcpkCne zUSjX+EU;=+P%m)YPq}w>7StDv-ql$MysNXIJtRi&>MW446nOrk5IA!vu&cA697gx6 z{Uk1N7EuVitFxdUrvM^BKIWv!K4_*sHY#c6Ao$cLnLzTzOY#LAy|lKL^naJ+VMfEYK4R>WMy& zS9%NV>MXFUv%s#-0=qg3tc(@ZPkrPRM|xLhfmO1C`l(}ob6rqw=6mt3&Vq6?qjz-{ zv@q&7y?u%WW1=idO>ghhxyE+T% z?~a`t6x3U{r2OvnL7~1g5-OueCDhkW2(^+g{5kQz66+ZamAndSCx&9}#1QHkja0(B zI)!>hLwF6SXEYRRH=1z0kCZ-rq@F|;YR`sHdp3mHvmw-;4WagI2(@QJsAn{U+NUAZ zGaAB+pq|l4CB%kN&m9XF_(gMrMSD4pZrRt>`1~rg<+w7Nkgb7 zzl6h-XrHHI?IIA$mxS^qp|V_|en~^9ooPbt6%;D#6DsQy{xiqRofK>5r%*dTh1&Tk zl*WYG`6<*MLgByiSK9fhSWkWl_2idOy9b4GB%$_y3gt*b?f(=`fZG45So=SP@*<(0 z{1X0-zt#Rv#d=~$s3*UK|3R!>g^H(%_2if08Dc&8rC3jXrBbwJiq=fgnkjja{)*O2 zsWo*r?_LvbaJ}BWChRnaYGohUO^KfTQmiMxgnIHzC>Ijy$uFUtN2n*igmNCCp8OJO zN2pLwehK9~LV1o*PksrtBUGqg(h%y&FQK0N5A^-CIx_2ifETa;*z zsABCA70Q2vdh$ys{}JlRFQImo3*|OK{gQ@IZX=Z22(@ces9AtevjCxH0Yc3JgmN1p z+K}7$Y}yGd)RSLA^kBD9j0WU3=1n_Dg?jQ!s3*UKavR~lfwZG{wW&la@IpQLC6vzy zHDeNLr>Ia*ehK9>Lb*yx-N1k4y=}s4U2azq>X$Txp^ulVIM#kn;e0-|C#2*mE?K~* zdh$#0b(Fu0a{ZEqO8zsk_KqsnlV7Q8)bCCRON{u*HO}!A+fS}>jwjT7P^kH!P%}ZH z_I?QMC)Y@C#x$sTpJKbmHO}0Gn%@bxf|}DQ)}9cdW^F>v*MxSDYn(v|HO~@iz9ZD! zDs_!>B%x+fLc7N`&WMEC`ysS@%)uq*cprjdyTKgXU=BVoNBM(Gv@2V9#xZ?ij`!Lr zzF#gh2er>Z=W|f_9JD_^QC~%HOJ;%?3+H0p+dzFQHl1un~%C*-{ z@ehbK%T{bv%s~%xP{JIwzRGFMIhy0^Q`&Bh#)8q5-&=iNXm7t(ZDF*xU#mMZ+TpKN ziwJS=Yw_)C@om3j+U54`YsI|LzI`peeXV+mV|`C5)HkF;d$`{mZM28`&Cy1E|CREa zqm6d*Yq{EMx!P;-^K0?*xwOSxT464&FjuWGnwsm?C!y98Qgh*du2+*3+h^v&{9Kry z3-fbfelE<pA?MWfJAO%ep6gsf_%lj0cUEk+=fd_}*q-Z^B9;8X zsGen<2f8=S<&NgU|6G3ymMVh(BKR+Y|04MJ+c5p9`7eV1BKR+Y|04J=g8w4;FM|If z_%DM0BKR+Y|04J=g8w4;FM|If_%DM0BKR+Yf4_-xH05_t8apC_+&JO=(6^e8+Jub!v%L&qLN=V|@W z_nq))T2T{HNhRO^%UqnTnfQ;cSc(M+-Wwa%bb zq*iqT9lY!suJVmK*A zGsRkAR_%c`Qw&SRXr>shiqT9lj1{AqVt6Y?GsUo1jAn}Auo%r0qnToj?>?tBQw+Do zXr>s=6r-79G*gU|6r-79crHdW#jstBW{S~FF`6kxGsS4882;zO|9tqL4~O&Na6X!u z50mp@az0GXM>F%`b3S~|hpYLpG#`HE!^V7gm=6Q^g2qbFSP2>{fu9oiDS??1m??po5;!S=lM*ymg2qbF zSP2>{L1QIotOVXl&{zrVm7uW_I4nV9C1|V!jg`P^2^uSb+Y&TZ0>dR}tOTA*&{zp< zm!Po{I4?nCC1|V!jg_FW6565!jg_FW5;RtV#!6_B5;RsqyOf}@5?ZGOjg`;}C1|XK zwkSbkCA8N9_+J433*c}894g+l%knZG*gOZO1a-s?zfaXE#*#2xzkeav6Oo(MKh&nrWDPTqM1@OQ;KFv z;h_}Gl)^?Snkj{oQZ!SFW=hdaDJ+$unNqkaMKh%^R*Ggy;jI+Sl)_#qnkj|DQZ!SF zW=hdaDViyT+fp=Bie^gDOevZvh2c^(QwqglOVLaznkhvyrD&!U&6L9bLik?@ z{|n)8AsjA5GYesIAxtiW$%SY}?`fA;EQHU6aJ3MY7Q)X$*jNY;3t?a(_r8$3Uda6} zZs6jsO!|?I!3K*%z%$^%m}Dw3RJFV3WQ!^xK3?kJWYwS@$1wg#)Z+v*3xJdm)&uOT?7(H`Y1P_bEgGLV`s6(yb@Ez(u#47w^~CnfiR zo52idmKLcO=x^1&jz@?+Ct9RlVAOtip?O;*{rkx0iK$)6ce(joB()p06IJN><|46b zG^>lGXCd4!g4;!?cM-Z>B*p5?YW>mFVida=#V$s%i&5-i6uTJ3E=IA7QS4$AyBNhT zMzM=g>|zwV7{x9|v5QgcVida=#V$s%i&5-i6uTJ3E=IA7QS4$AyBNhTMzM=g>|zwV z7{$Ju>v=b4em7@+H|KmefBPQB+4nHczK7oW9@_eP-Rb$%^}17`uHWc!_Pr{Pgj#_V z-XKoioA?l@H;pR(DDlTYy=hb>def+IDY#5)8t?U+Muq=3_%-nBpmx-&daD~o z@!a;k3Af{W6Q{r*fv=+EO}-w#X;ior{8Nt6 zN~}t>5-aqq`MrMAs8CM?2=%S2@GpI&-!v+01e?HSumx-d+rUqQp8@{@{4DtPc{+Ul zR0L|>Uh#lxc^~}05B}c=|L=qUGWaip|1$V5ga0zW=`~db|7CvDt77wC2LEO7UzRZc zW$<4H|78jDU*%KVq5%zs(R{FnJnuR`-*mNNfkDf3?j|7CvDt77xN1pb%6{}T9L z0{`XkUk?A}@Lvx9Ke*^sA0RL6+Uj_eF@LvW0Rq$U0|5fl`1^-p>Uj_eF@LvW0Rq$U0 z|5fl`1^-p>Uj_eF@LvW0Rq$U0|5fl`1^-p>Uj_eF@LvW0Rq$U0|5fl`1^-p>Uj_eF z@LvW0Rq$U0|5fl`1^-p>Uj_eF@LvW0Rq$U0|5fl`1^-p>Uj_eF@LvW0Rq$U0|5fl` z1^-p>Uj_eF@LvW0AB6u8!v6>1|AX*f4gb~fUk(4&@Lvu8)$m^p|JCqc4gb~fUk(4& z@Lvu8)$m^p|JCqc4gb~fUk(4&@Lvu8)$m^p|JCqc4gb~fUk(4&@Lvu8)$m^p|JCqc z4gb~fUk(4&@Lvu8)$m^p|JCqc4gb~fUk(4&@Lvu8)$m^p|JCqc4gb~fUk(4&@Lvu8 z)$m^p|JCqc4gb~fUk(4&@c$wB{}B9t2>w3=|26Pm1OGMfUjzR&@LvP}HSk{p|26Pm z1OGMfUjzR&@LvP}HSk{p|26Pm1OGMfUjzR&@LvP}HSk{p|26Pm1OGMfUjzR&@LvP} zHSk{p|26Pm1OGMfUjzR&@LvP}HSk{p|26Pm1OGMfUjzR&@LvP}HSk{p|26Pm1OGMf zUjzR&@LvP}HSk{p|26Pm1OGMfUjzRihW`)4|A*oK!|-1V|F!U63;(t7Ukm@W@Lvo6 zweVjH|F!U63;(t7Ukm@W@Lvo6weVjH|F!U63;(t7Ukm@W@Lvo6weVjH|F!U63;(t7 zUkm@W@Lvo6weVjH|F!U63;(t7Ukm@W@Lvo6weVjH|F!U63;(t7Ukm@W@Lvo6weVjH z|F!U63;(t7Ukm@W@Lvo6weVjH|F!U63;(t7{}K5A2>gEp{yzf$b?{#Y|8?+R2mf{O zUkCqn@Lvc2b?{#Y|8?+R2mf{OUkCqn@Lvc2b?{#Y|8?+R2mf{OUkCqn@Lvc2b?{#Y z|8?+R2mf{OUkCqn@Lvc2b?{#Y|8?+R2mf{OUkCqn@Lvc2b?{#Y|8?+R2mf{OUkCqn z@Lvc2b?{#Y|8?+R2mf{OUkCqn@Lvc2b?{#Y|8?+R2md$1|Bdi}BmCb8|Ml=+5C8S> zUl0HF@Lv!A_3&R0|Ml=+5C8S>Ul0HF@Lv!A_3&R0|Ml=+5C8S>Ul0HF@Lv!A_3&R0 z|Ml=+5C8S>Ul0HF@Lv!A_3&R0|Ml=+5C8S>Ul0HF@Lv!A_3&R0|Ml=+5C8S>Ul0HF z@Lv!A_3&R0|Ml=+5C8S>Ul0HF@Lv!A_3&R0|Ml=+5C8S>Ul0Euh5wJj|3~5fqwwDV z{|)fp0RIi}-vIv&@ZSLc4e;Lp{|)fp0RIi}-vIv&@ZSLc4e;Lp{|)fp0RIi}-vIv& z@ZSLc4e;Lp{|)fp0RIi}-vIv&@ZSLc4e;Lp{|)fp0RIi}-vIv&@ZSLc4e;Lp{|)fp z0RIi}-vIv&@ZSLc4e;Lp{|)fp0RIi}-vIv&@ZSLc4e;Lp{|)fp0RIi}|1tRg82o<> z{yzr)A5YXK{w{SBpWei$Hzho?zA3Q^^!)m!#A@)fS}(dO;kCG%lAi#Vxg>cDxE#z= z?)A5usO2VVxhZvzNWQtDbtT}!EJDRnKSuBFtql)9Eu*HY?QN?l8-YbkXt zrLLvawUoM+QrA-I`eW)^MqSIOYZ-MdqpoGtwT!x!QP(o+T1H*VsB0N@Eu*ew)U}Md zmQmL->RLu!e?nciP}eQgbqjUfLS45|*Dcg_3w7N>UAIuzE!1@jb=^W;w@}wD)O8DW z-9lZrP}hH5XYdLi-r>^DHwVb+^Q`d6pT25WdscSiPEvK&K z)b(GfYXxRLfvE2wJ)b$yb$ zZl$hUsq0qix|OsIQzmAY=Fu3M?=R_eNyx^AVeTdC_->bjM>Zl$i<68?VS zwuHZ5xGnJkY4tYw*a_huNyE3v$BchWxfOm};!i-YnctSsK3?HN;1;kK+zRR`9)0>f z;uk^hAi7Pyr1Q&{j5qlh`I3>kl7CE0Ey@2v{7L@G-zMB9zcTt;gWKd+Liv@^-+#U@8R?<2vX`Mz|r;*laq;(o;okm)x zk=ALXbs9C+oKH2cyL8WV1v#)Mm^k=ALX zbsA}%Mp~zl)@h`58k26FMp~ya>DFmXx^)_9okm)xk=ALXbsA}%Mp~zl)@h`58dGka z#*|y9G3C~2Ou2O$Q*NEclv}4U<<@CTxpf*-Zk@)ITc2hPP&TYlgRGcx#5YW_W9cw`O>2hPP&TYlgRGcx#5YW_W9cw`O>2hPP&TYlgRG zcx#5YW_W9cw`O>2hPP&TYlgRGcx#5YW_W9cw`O>2hPP&TYlgRGcx#5YW_W9cw`O>2 zhPP&TYlgRGcx!>T7IT7IT z7IT7IT7IT7IT7IEfdgSR$#YlF8ocx!{VHh61;w>EfdgSR$#YlF8ocx!{V zHh61;w>EfdgSR$#YlF8ocx!{VHh61;w>EfdgSR$#YlF8ocx!{VHh61;w>EfdgSR$# zYlF8ocx!{VHh61;w>EfdgSR$#YlF8ocx!{VHh61;w>EfdPu!OH^Hh7{)8Jsc|he-l-lpnz~ax&iDc4 zHg~Ew8TFfuLOo+H^b<^Xsy7+EAO24DBjbzU_l@coLMdP8k@Ai0E|Kz$Wnej20ak)l zU^Q3+)`E3lJ=h?;Tg==o{4{92-3>E$!_3_!@)ZHLjz^b=0_y8rM#1=) zHLj<|_0+hY8aGhm25Q_ujT@+O12t}-#tqcCff_eZ;|6NnK#d!yaRW7OpvDcw+4HEyKFjnuf28aGnoMrzzhjT@

    tNNc zgH^i@R_!`iwd+Xy19j~N_2jAkYA>i?0ad&od=k_zcBgx)+N^iG?Ogr6GgNaz_=p`K9{`l+#wgq~3q>WOBd-V-7GHRzo=9f|)1dVfww z!cPQruu9pHm>@m_o(13ZH7BnH{k&C2vKaJEs*a?e4DDb&vm@yzLpxa2>`0apdv8xi z@;YMgl

    o8+@-@Iav9JaRqTDcmpL>#2+NC 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%0D%`DDP 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 N`wWY+`c;&D@jsIj925Wm diff --git a/src/UI/Content/fonts/opensans-semibolditalic.eot b/src/UI/Content/fonts/opensans-semibolditalic.eot deleted file mode 100644 index 31cd8204883744fa27d6c3f3c8acd8e7b22ff547..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18794 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 diff --git a/src/UI/Content/fonts/opensans-semibolditalic.ttf b/src/UI/Content/fonts/opensans-semibolditalic.ttf deleted file mode 100644 index 59b6d16b065f6baa6f70ddbd4322a4f44bb9636a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 212820 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 b^2ROSp1r5Xdx>eYXCxdsa=Oc~d6M+Mf|cc} diff --git a/src/UI/Content/fonts/opensans-semibolditalic.woff b/src/UI/Content/fonts/opensans-semibolditalic.woff deleted file mode 100644 index 983bb33145e7ac8d627892bcd53b4dc719b26766..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21252 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 IY-b(*0efB24gdfE From d0d65db4f215bc8ab1e4b621757d3078fa11eb9e Mon Sep 17 00:00:00 2001 From: kayone Date: Fri, 4 Oct 2013 14:58:32 -0700 Subject: [PATCH 30/52] updated to owin 2.0.0-rc1 --- src/NzbDrone.Console/NzbDrone.Console.csproj | 8 ++++---- src/NzbDrone.Console/packages.config | 4 ++-- src/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj | 1 - src/NzbDrone.Host/NzbDrone.Host.csproj | 12 ++++++------ src/NzbDrone.Host/packages.config | 6 +++--- .../NzbDrone.Integration.Test.csproj | 13 +++++++------ src/NzbDrone.Integration.Test/packages.config | 6 +++--- src/NzbDrone/NzbDrone.csproj | 8 ++++---- src/NzbDrone/app.config | 2 ++ src/NzbDrone/packages.config | 4 ++-- 10 files changed, 33 insertions(+), 31 deletions(-) create mode 100644 src/NzbDrone/app.config diff --git a/src/NzbDrone.Console/NzbDrone.Console.csproj b/src/NzbDrone.Console/NzbDrone.Console.csproj index f4351791a..f3d95b162 100644 --- a/src/NzbDrone.Console/NzbDrone.Console.csproj +++ b/src/NzbDrone.Console/NzbDrone.Console.csproj @@ -71,13 +71,13 @@ False ..\packages\Microsoft.AspNet.SignalR.Owin.1.1.3\lib\net40\Microsoft.AspNet.SignalR.Owin.dll - + False - ..\packages\Microsoft.Owin.1.1.0-beta2\lib\net40\Microsoft.Owin.dll + ..\packages\Microsoft.Owin.2.0.0-rc1\lib\net40\Microsoft.Owin.dll - + False - ..\packages\Microsoft.Owin.Hosting.1.1.0-beta2\lib\net40\Microsoft.Owin.Hosting.dll + ..\packages\Microsoft.Owin.Hosting.2.0.0-rc1\lib\net40\Microsoft.Owin.Hosting.dll False diff --git a/src/NzbDrone.Console/packages.config b/src/NzbDrone.Console/packages.config index 19f3a3d8b..589175f60 100644 --- a/src/NzbDrone.Console/packages.config +++ b/src/NzbDrone.Console/packages.config @@ -2,8 +2,8 @@ - - + + diff --git a/src/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj b/src/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj index c89608171..cbe2b0f67 100644 --- a/src/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj +++ b/src/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj @@ -252,7 +252,6 @@ sqlite3.dll Always - Always diff --git a/src/NzbDrone.Host/NzbDrone.Host.csproj b/src/NzbDrone.Host/NzbDrone.Host.csproj index b4aa2ad35..2f46280dc 100644 --- a/src/NzbDrone.Host/NzbDrone.Host.csproj +++ b/src/NzbDrone.Host/NzbDrone.Host.csproj @@ -77,17 +77,17 @@ False ..\packages\Microsoft.AspNet.SignalR.Owin.1.1.3\lib\net40\Microsoft.AspNet.SignalR.Owin.dll - + False - ..\packages\Microsoft.Owin.1.1.0-beta2\lib\net40\Microsoft.Owin.dll + ..\packages\Microsoft.Owin.2.0.0-rc1\lib\net40\Microsoft.Owin.dll - + False - ..\packages\Microsoft.Owin.Host.HttpListener.1.1.0-beta2\lib\net40\Microsoft.Owin.Host.HttpListener.dll + ..\packages\Microsoft.Owin.Host.HttpListener.2.0.0-rc1\lib\net40\Microsoft.Owin.Host.HttpListener.dll - + False - ..\packages\Microsoft.Owin.Hosting.1.1.0-beta2\lib\net40\Microsoft.Owin.Hosting.dll + ..\packages\Microsoft.Owin.Hosting.2.0.0-rc1\lib\net40\Microsoft.Owin.Hosting.dll False diff --git a/src/NzbDrone.Host/packages.config b/src/NzbDrone.Host/packages.config index f134e38ed..1e0567127 100644 --- a/src/NzbDrone.Host/packages.config +++ b/src/NzbDrone.Host/packages.config @@ -2,9 +2,9 @@ - - - + + + diff --git a/src/NzbDrone.Integration.Test/NzbDrone.Integration.Test.csproj b/src/NzbDrone.Integration.Test/NzbDrone.Integration.Test.csproj index 75bea0f21..cc41d5d13 100644 --- a/src/NzbDrone.Integration.Test/NzbDrone.Integration.Test.csproj +++ b/src/NzbDrone.Integration.Test/NzbDrone.Integration.Test.csproj @@ -44,16 +44,17 @@ ..\packages\Microsoft.AspNet.SignalR.Client.1.1.3\lib\net40\Microsoft.AspNet.SignalR.Client.dll - - ..\packages\Microsoft.Owin.1.1.0-beta2\lib\net40\Microsoft.Owin.dll + + False + ..\packages\Microsoft.Owin.2.0.0-rc1\lib\net40\Microsoft.Owin.dll - + False - ..\packages\Microsoft.Owin.Host.HttpListener.1.1.0-beta2\lib\net40\Microsoft.Owin.Host.HttpListener.dll + ..\packages\Microsoft.Owin.Host.HttpListener.2.0.0-rc1\lib\net40\Microsoft.Owin.Host.HttpListener.dll - + False - ..\packages\Microsoft.Owin.Hosting.1.1.0-beta2\lib\net40\Microsoft.Owin.Hosting.dll + ..\packages\Microsoft.Owin.Hosting.2.0.0-rc1\lib\net40\Microsoft.Owin.Hosting.dll False diff --git a/src/NzbDrone.Integration.Test/packages.config b/src/NzbDrone.Integration.Test/packages.config index 101c14bc1..fb64eb6b1 100644 --- a/src/NzbDrone.Integration.Test/packages.config +++ b/src/NzbDrone.Integration.Test/packages.config @@ -3,9 +3,9 @@ - - - + + + diff --git a/src/NzbDrone/NzbDrone.csproj b/src/NzbDrone/NzbDrone.csproj index f428eae7b..32600f1e6 100644 --- a/src/NzbDrone/NzbDrone.csproj +++ b/src/NzbDrone/NzbDrone.csproj @@ -71,13 +71,13 @@ False ..\packages\Microsoft.AspNet.SignalR.Owin.1.1.3\lib\net40\Microsoft.AspNet.SignalR.Owin.dll - + False - ..\packages\Microsoft.Owin.1.1.0-beta2\lib\net40\Microsoft.Owin.dll + ..\packages\Microsoft.Owin.2.0.0-rc1\lib\net40\Microsoft.Owin.dll - + False - ..\packages\Microsoft.Owin.Hosting.1.1.0-beta2\lib\net40\Microsoft.Owin.Hosting.dll + ..\packages\Microsoft.Owin.Hosting.2.0.0-rc1\lib\net40\Microsoft.Owin.Hosting.dll False diff --git a/src/NzbDrone/app.config b/src/NzbDrone/app.config new file mode 100644 index 000000000..a6a2b7fa9 --- /dev/null +++ b/src/NzbDrone/app.config @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/src/NzbDrone/packages.config b/src/NzbDrone/packages.config index 19f3a3d8b..589175f60 100644 --- a/src/NzbDrone/packages.config +++ b/src/NzbDrone/packages.config @@ -2,8 +2,8 @@ - - + + From c0b7612053f901c1b8428bc85178a80683637dd3 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Thu, 3 Oct 2013 23:01:02 -0700 Subject: [PATCH 31/52] Episode Activity added New: Activity tab added to Episode Details --- Gruntfile.js | 16 ++--- .../Episodes/EpisodeActivityModule.cs | 39 ++++++++++ src/NzbDrone.Api/NzbDrone.Api.csproj | 1 + .../History/HistoryRepository.cs | 6 ++ src/NzbDrone.Core/History/HistoryService.cs | 6 ++ .../{History/Table => Cells}/EventTypeCell.js | 2 +- .../Activity/EpisodeActivityCollection.js | 31 ++++++++ .../Episode/Activity/EpisodeActivityLayout.js | 72 +++++++++++++++++++ .../EpisodeActivityLayoutTemplate.html | 1 + .../Episode/Activity/EpisodeActivityModel.js | 9 +++ src/UI/Episode/EpisodeDetailsLayout.js | 6 +- .../Episode/EpisodeDetailsLayoutTemplate.html | 4 +- .../Episode/Summary/EpisodeSummaryLayout.js | 2 +- src/UI/History/Table/HistoryTableLayout.js | 2 +- 14 files changed, 182 insertions(+), 15 deletions(-) create mode 100644 src/NzbDrone.Api/Episodes/EpisodeActivityModule.cs rename src/UI/{History/Table => Cells}/EventTypeCell.js (92%) create mode 100644 src/UI/Episode/Activity/EpisodeActivityCollection.js create mode 100644 src/UI/Episode/Activity/EpisodeActivityLayout.js create mode 100644 src/UI/Episode/Activity/EpisodeActivityLayoutTemplate.html create mode 100644 src/UI/Episode/Activity/EpisodeActivityModel.js diff --git a/Gruntfile.js b/Gruntfile.js index e608d7630..21dfd6b5a 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -169,35 +169,35 @@ module.exports = function (grunt) { tasks: ['handlebars'] }, copyIndex : { - files: '<%= copy.index.src %>', + files: '<%= copy.index.cwd %><%= copy.index.src %>', tasks: ['copy:index'] }, copyScripts: { - files: '<%= copy.scripts.src %>', + files: '<%= copy.scripts.cwd %><%= copy.scripts.src %>', tasks: ['copy:scripts'] }, copyStyles : { - files: '<%= copy.styles.src %>', + files: '<%= copy.styles.cwd %><%= copy.styles.src %>', tasks: ['copy:styles'] }, copyImages : { - files: '<%= copy.images.src %>', + files: '<%= copy.images.cwd %><%= copy.images.src %>', tasks: ['copy:images'] }, copyJpg : { - files: '<%= copy.jpg.src %>', + files: '<%= copy.jpg.cwd %><%= copy.jpg.src %>', tasks: ['copy:jpg'] }, copyIcon : { - files: '<%= copy.icon.src %>', + files: '<%= copy.icon.cwd %><%= copy.icon.src %>', tasks: ['copy:icon'] }, copyFontAwesome : { - files: '<%= copy.fontAwesome.src %>', + files: '<%= copy.fontAwesome.cwd %><%= copy.fontAwesome.src %>', tasks: ['copy:fontAwesome'] }, copyFonts : { - files: '<%= copy.fonts.src %>', + files: '<%= copy.fonts.cwd %><%= copy.fonts.src %>', tasks: ['copy:fonts'] } } diff --git a/src/NzbDrone.Api/Episodes/EpisodeActivityModule.cs b/src/NzbDrone.Api/Episodes/EpisodeActivityModule.cs new file mode 100644 index 000000000..35eae7fcc --- /dev/null +++ b/src/NzbDrone.Api/Episodes/EpisodeActivityModule.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; +using NzbDrone.Api.History; +using NzbDrone.Api.Mapping; +using NzbDrone.Api.REST; +using NzbDrone.Core.Datastore.Events; +using NzbDrone.Core.Download; +using NzbDrone.Core.History; +using NzbDrone.Core.MediaFiles.Events; +using NzbDrone.Core.Tv; + +namespace NzbDrone.Api.Episodes +{ + public class EpisodeActivityModule : NzbDroneRestModule + + { + private readonly IHistoryService _historyService; + + public EpisodeActivityModule(IHistoryService historyService) + : base("episodes/activity") + { + _historyService = historyService; + + GetResourceAll = GetActivity; + } + + private List GetActivity() + { + var episodeId = (int?)Request.Query.EpisodeId; + + if (episodeId == null) + { + throw new BadRequestException("episodeId is missing"); + } + + return ToListResource(() => _historyService.ByEpisode(episodeId.Value)); + } + } +} \ No newline at end of file diff --git a/src/NzbDrone.Api/NzbDrone.Api.csproj b/src/NzbDrone.Api/NzbDrone.Api.csproj index 7b885fe48..19d51cea7 100644 --- a/src/NzbDrone.Api/NzbDrone.Api.csproj +++ b/src/NzbDrone.Api/NzbDrone.Api.csproj @@ -91,6 +91,7 @@ + diff --git a/src/NzbDrone.Core/History/HistoryRepository.cs b/src/NzbDrone.Core/History/HistoryRepository.cs index a39e117ea..b622ac3b8 100644 --- a/src/NzbDrone.Core/History/HistoryRepository.cs +++ b/src/NzbDrone.Core/History/HistoryRepository.cs @@ -12,6 +12,7 @@ namespace NzbDrone.Core.History { void Trim(); List GetEpisodeHistory(int episodeId); + List ByEpisode(int episodeId); } public class HistoryRepository : BasicRepository, IHistoryRepository @@ -37,6 +38,11 @@ namespace NzbDrone.Core.History return history.Select(h => h.Quality).ToList(); } + public List ByEpisode(int episodeId) + { + return Query.Where(h => h.EpisodeId == episodeId).ToList(); + } + public override PagingSpec GetPaged(PagingSpec pagingSpec) { var pagingQuery = Query.Join(JoinType.Inner, h => h.Series, (h, s) => h.SeriesId == s.Id) diff --git a/src/NzbDrone.Core/History/HistoryService.cs b/src/NzbDrone.Core/History/HistoryService.cs index 64736c9f0..5a32aae21 100644 --- a/src/NzbDrone.Core/History/HistoryService.cs +++ b/src/NzbDrone.Core/History/HistoryService.cs @@ -17,6 +17,7 @@ namespace NzbDrone.Core.History void Trim(); QualityModel GetBestQualityInHistory(int episodeId); PagingSpec Paged(PagingSpec pagingSpec); + List ByEpisode(int episodeId); } public class HistoryService : IHistoryService, IHandle, IHandle @@ -40,6 +41,11 @@ namespace NzbDrone.Core.History return _historyRepository.GetPaged(pagingSpec); } + public List ByEpisode(int episodeId) + { + return _historyRepository.ByEpisode(episodeId); + } + public void Purge() { _historyRepository.Purge(); diff --git a/src/UI/History/Table/EventTypeCell.js b/src/UI/Cells/EventTypeCell.js similarity index 92% rename from src/UI/History/Table/EventTypeCell.js rename to src/UI/Cells/EventTypeCell.js index d328b9bf1..3b9bb8b0a 100644 --- a/src/UI/History/Table/EventTypeCell.js +++ b/src/UI/Cells/EventTypeCell.js @@ -35,7 +35,7 @@ define( } - this.$el.html(''.format(icon, toolTip)); + this.$el.html(''.format(icon, toolTip)); } return this; diff --git a/src/UI/Episode/Activity/EpisodeActivityCollection.js b/src/UI/Episode/Activity/EpisodeActivityCollection.js new file mode 100644 index 000000000..968286c08 --- /dev/null +++ b/src/UI/Episode/Activity/EpisodeActivityCollection.js @@ -0,0 +1,31 @@ +'use strict'; +define( + [ + 'backbone', + 'Episode/Activity/EpisodeActivityModel' + ], function (Backbone, EpisodeActivityModel) { + return Backbone.Collection.extend({ + url : window.NzbDrone.ApiRoot + '/episodes/activity', + model: EpisodeActivityModel, + + originalFetch: Backbone.Collection.prototype.fetch, + + initialize: function (options) { + this.episodeId = options.episodeId; + }, + + fetch: function (options) { + if (!this.episodeId) { + throw 'episodeId is required'; + } + + if (!options) { + options = {}; + } + + options.data = { episodeId: this.episodeId }; + + return this.originalFetch.call(this, options); + } + }); + }); diff --git a/src/UI/Episode/Activity/EpisodeActivityLayout.js b/src/UI/Episode/Activity/EpisodeActivityLayout.js new file mode 100644 index 000000000..1a451391e --- /dev/null +++ b/src/UI/Episode/Activity/EpisodeActivityLayout.js @@ -0,0 +1,72 @@ +'use strict'; +define( + [ + 'app', + 'marionette', + 'backgrid', + 'Episode/Activity/EpisodeActivityCollection', + 'Cells/EventTypeCell', + 'Cells/QualityCell', + 'Cells/RelativeDateCell', + 'Shared/LoadingView' + ], function (App, Marionette, Backgrid, EpisodeActivityCollection, EventTypeCell, QualityCell, RelativeDateCell, LoadingView) { + + return Marionette.Layout.extend({ + template: 'Episode/Activity/EpisodeActivityLayoutTemplate', + + regions: { + activityTable: '.activity-table' + }, + + columns: + [ + { + name : 'eventType', + label : '', + cell : EventTypeCell, + cellValue: 'this' + }, + { + name : 'sourceTitle', + label: 'Source Title', + cell : 'string' + }, + { + name : 'quality', + label: 'Quality', + cell : QualityCell + }, + { + name : 'date', + label: 'Date', + cell : RelativeDateCell + } + ], + + initialize: function (options) { + this.model = options.model; + this.series = options.series; + + this.collection = new EpisodeActivityCollection({ episodeId: this.model.id }); + }, + + onShow: function () { + var self = this; + this.activityTable.show(new LoadingView()); + + var promise = this.collection.fetch(); + + promise.done(function () { + self._showTable(); + }); + }, + + _showTable: function () { + this.activityTable.show(new Backgrid.Grid({ + collection: this.collection, + columns : this.columns, + className : 'table table-hover table-condensed' + })); + } + }); + }); diff --git a/src/UI/Episode/Activity/EpisodeActivityLayoutTemplate.html b/src/UI/Episode/Activity/EpisodeActivityLayoutTemplate.html new file mode 100644 index 000000000..459032937 --- /dev/null +++ b/src/UI/Episode/Activity/EpisodeActivityLayoutTemplate.html @@ -0,0 +1 @@ +

    \ No newline at end of file diff --git a/src/UI/Episode/Activity/EpisodeActivityModel.js b/src/UI/Episode/Activity/EpisodeActivityModel.js new file mode 100644 index 000000000..808c9c77c --- /dev/null +++ b/src/UI/Episode/Activity/EpisodeActivityModel.js @@ -0,0 +1,9 @@ +'use strict'; +define( + [ + 'backbone' + ], function (Backbone) { + return Backbone.Model.extend({ + + }); + }); diff --git a/src/UI/Episode/EpisodeDetailsLayout.js b/src/UI/Episode/EpisodeDetailsLayout.js index 590351b40..fe60cad1b 100644 --- a/src/UI/Episode/EpisodeDetailsLayout.js +++ b/src/UI/Episode/EpisodeDetailsLayout.js @@ -4,8 +4,9 @@ define( 'marionette', 'Episode/Summary/EpisodeSummaryLayout', 'Episode/Search/EpisodeSearchLayout', + 'Episode/Activity/EpisodeActivityLayout', 'Series/SeriesCollection' - ], function (Marionette, SummaryLayout, SearchLayout, SeriesCollection) { + ], function (Marionette, SummaryLayout, SearchLayout, EpisodeActivityLayout, SeriesCollection) { return Marionette.Layout.extend({ template: 'Episode/EpisodeDetailsLayoutTemplate', @@ -38,7 +39,7 @@ define( this.series = SeriesCollection.find({ id: this.model.get('seriesId') }); this.templateHelpers.series = this.series.toJSON(); - this.openingTab = options.openingTab || 'summary' + this.openingTab = options.openingTab || 'summary'; }, onShow: function () { @@ -71,6 +72,7 @@ define( } this.ui.activity.tab('show'); + this.activity.show(new EpisodeActivityLayout({model: this.model, series: this.series})); }, _showSearch: function (e) { diff --git a/src/UI/Episode/EpisodeDetailsLayoutTemplate.html b/src/UI/Episode/EpisodeDetailsLayoutTemplate.html index 982110d6a..1031118b1 100644 --- a/src/UI/Episode/EpisodeDetailsLayoutTemplate.html +++ b/src/UI/Episode/EpisodeDetailsLayoutTemplate.html @@ -15,12 +15,12 @@