diff --git a/src/NzbDrone.Core/NetImport/CouchPotato/CouchPotatoSettings.cs b/src/NzbDrone.Core/NetImport/CouchPotato/CouchPotatoSettings.cs
index fcebef860..073213247 100644
--- a/src/NzbDrone.Core/NetImport/CouchPotato/CouchPotatoSettings.cs
+++ b/src/NzbDrone.Core/NetImport/CouchPotato/CouchPotatoSettings.cs
@@ -30,7 +30,7 @@ namespace NzbDrone.Core.NetImport.CouchPotato
[FieldDefinition(3, Label = "CouchPotato API Key", HelpText = "CoouchPootato API Key.")]
public string ApiKey { get; set; }
- [FieldDefinition(4, Label = "Only Active", HelpText = "Should only active (not yet downloaded) movies be fetched")]
+ [FieldDefinition(4, Label = "Only Active", HelpText = "Should only active (not yet downloaded) movies be fetched", Type = FieldType.Checkbox)]
public bool OnlyActive { get; set; }
}
diff --git a/src/UI/AddMovies/AddMoviesLayout.js b/src/UI/AddMovies/AddMoviesLayout.js
index 127e0f0c0..00344bfdb 100644
--- a/src/UI/AddMovies/AddMoviesLayout.js
+++ b/src/UI/AddMovies/AddMoviesLayout.js
@@ -5,7 +5,7 @@ var RootFolderLayout = require('./RootFolders/RootFolderLayout');
var ExistingMoviesCollectionView = require('./Existing/AddExistingMovieCollectionView');
var AddMoviesView = require('./AddMoviesView');
var ProfileCollection = require('../Profile/ProfileCollection');
-var ListCollection = require("../Settings/NetImport/NetImportCollection");
+var AddFromListView = require("./List/AddFromListView");
var RootFolderCollection = require('./RootFolders/RootFolderCollection');
require('../Movies/MoviesCollection');
@@ -19,6 +19,7 @@ module.exports = Marionette.Layout.extend({
events : {
'click .x-import' : '_importMovies',
'click .x-add-new' : '_addMovies',
+ "click .x-add-lists" : "_addFromList",
'click .x-show-existing' : '_toggleExisting'
},
@@ -31,12 +32,7 @@ module.exports = Marionette.Layout.extend({
RootFolderCollection.fetch().done(function() {
RootFolderCollection.synced = true;
});
- this.templateHelpers = {}
- this.listCollection = new ListCollection();
- this.templateHelpers.lists = this.listCollection.toJSON();
- this.listenTo(this.listCollection, 'all', this._listsUpdated);
- this.listCollection.fetch();
},
@@ -52,10 +48,6 @@ module.exports = Marionette.Layout.extend({
this.workspace.show(new AddMoviesView());
},
- _listsUpdated : function() {
- this.templateHelpers.lists = this.listCollection.toJSON();
- this.render();
- },
_folderSelected : function(options) {
vent.trigger(vent.Commands.CloseModalCommand);
@@ -70,5 +62,9 @@ module.exports = Marionette.Layout.extend({
_addMovies : function() {
this.workspace.show(new AddMoviesView());
+ },
+
+ _addFromList : function() {
+ this.workspace.show(new AddFromListView());
}
});
diff --git a/src/UI/AddMovies/AddMoviesLayoutTemplate.hbs b/src/UI/AddMovies/AddMoviesLayoutTemplate.hbs
index c4a375918..0e251dcb7 100644
--- a/src/UI/AddMovies/AddMoviesLayoutTemplate.hbs
+++ b/src/UI/AddMovies/AddMoviesLayoutTemplate.hbs
@@ -1,11 +1,12 @@
-
@@ -33,14 +34,6 @@
-
-
diff --git a/src/UI/AddMovies/List/AddFromListCollection.js b/src/UI/AddMovies/List/AddFromListCollection.js
new file mode 100644
index 000000000..12f5cb7f0
--- /dev/null
+++ b/src/UI/AddMovies/List/AddFromListCollection.js
@@ -0,0 +1,18 @@
+var Backbone = require('backbone');
+var MovieModel = require('../../Movies/MovieModel');
+var _ = require('underscore');
+
+module.exports = Backbone.Collection.extend({
+ url : window.NzbDrone.ApiRoot + '/netimport/movies',
+ model : MovieModel,
+
+ parse : function(response) {
+ var self = this;
+
+ _.each(response, function(model) {
+ model.id = undefined;
+ });
+
+ return response;
+ }
+});
diff --git a/src/UI/AddMovies/List/AddFromListCollectionView.js b/src/UI/AddMovies/List/AddFromListCollectionView.js
new file mode 100644
index 000000000..4177bd995
--- /dev/null
+++ b/src/UI/AddMovies/List/AddFromListCollectionView.js
@@ -0,0 +1,51 @@
+var Marionette = require('marionette');
+var AddMoviesView = require('../AddMoviesView');
+var vent = require('vent');
+
+module.exports = Marionette.CompositeView.extend({
+ itemView : AddMoviesView,
+ itemViewContainer : '.x-loading-folders',
+ template : 'AddMovies/List/AddFromListCollectionViewTemplate',
+
+ ui : {
+ loadingFolders : '.x-loading-list'
+ },
+
+ initialize : function() {
+ this.collection = new UnmappedFolderCollection();
+ this.collection.importItems(this.model);
+ },
+
+ showCollection : function() {
+ this._showAndSearch(0);
+ },
+
+ appendHtml : function(collectionView, itemView, index) {
+ collectionView.ui.loadingFolders.before(itemView.el);
+ },
+
+ _showAndSearch : function(index) {
+ var self = this;
+ var model = this.collection.at(index);
+
+ if (model) {
+ var currentIndex = index;
+ var folderName = model.get('folder').name;
+ this.addItemView(model, this.getItemView(), index);
+ this.children.findByModel(model).search({ term : folderName }).always(function() {
+ if (!self.isClosed) {
+ self._showAndSearch(currentIndex + 1);
+ }
+ });
+ }
+
+ else {
+ this.ui.loadingFolders.hide();
+ }
+ },
+
+ itemViewOptions : {
+ isExisting : true
+ }
+
+});
diff --git a/src/UI/AddMovies/List/AddFromListCollectionViewTemplate.hbs b/src/UI/AddMovies/List/AddFromListCollectionViewTemplate.hbs
new file mode 100644
index 000000000..dc812c87f
--- /dev/null
+++ b/src/UI/AddMovies/List/AddFromListCollectionViewTemplate.hbs
@@ -0,0 +1,5 @@
+
+
+ Loading search results from TheTVDB for your movies, this may take a few minutes.
+
+
diff --git a/src/UI/AddMovies/List/AddFromListView.js b/src/UI/AddMovies/List/AddFromListView.js
new file mode 100644
index 000000000..199240007
--- /dev/null
+++ b/src/UI/AddMovies/List/AddFromListView.js
@@ -0,0 +1,177 @@
+var _ = require('underscore');
+var vent = require('vent');
+var Marionette = require('marionette');
+var AddFromListCollection = require('./AddFromListCollection');
+//var SearchResultCollectionView = require('./SearchResultCollectionView');
+var AddListView = require("../../Settings/NetImport/Add/NetImportAddItemView");
+var EmptyView = require('../EmptyView');
+var NotFoundView = require('../NotFoundView');
+var ListCollection = require("../../Settings/NetImport/NetImportCollection");
+var ErrorView = require('../ErrorView');
+var LoadingView = require('../../Shared/LoadingView');
+var AppLayout = require('../../AppLayout');
+var SchemaModal = require('../../Settings/NetImport/Add/NetImportSchemaModal');
+
+module.exports = Marionette.Layout.extend({
+ template : 'AddMovies/List/AddFromListViewTemplate',
+
+ regions : {
+ fetchResult : '#fetch-result'
+ },
+
+ ui : {
+ moviesSearch : '.x-movies-search',
+ listSelection : ".x-list-selection",
+
+ },
+
+ events : {
+ 'click .x-load-more' : '_onLoadMore',
+ "change .x-list-selection" : "_listSelected",
+ "click .x-fetch-list" : "_fetchList"
+ },
+
+ initialize : function(options) {
+ console.log(options);
+
+ this.isExisting = options.isExisting;
+ //this.collection = new AddFromListCollection();
+
+ this.templateHelpers = {}
+ this.listCollection = new ListCollection();
+ this.templateHelpers.lists = this.listCollection.toJSON();
+
+ this.listenTo(this.listCollection, 'all', this._listsUpdated);
+ this.listCollection.fetch();
+
+ this.collection = new AddFromListCollection();
+
+ /*this.listenTo(this.collection, 'sync', this._showResults);
+
+ this.resultCollectionView = new SearchResultCollectionView({
+ collection : this.collection,
+ isExisting : this.isExisting
+ });*/
+
+ //this.throttledSearch = _.debounce(this.search, 1000, { trailing : true }).bind(this);
+ },
+
+ onRender : function() {
+ var self = this;
+ },
+
+ onShow : function() {
+ this.ui.moviesSearch.focus();
+ },
+
+ search : function(options) {
+ var self = this;
+
+ this.collection.reset();
+
+ if (!options.term || options.term === this.collection.term) {
+ return Marionette.$.Deferred().resolve();
+ }
+
+ this.searchResult.show(new LoadingView());
+ this.collection.term = options.term;
+ this.currentSearchPromise = this.collection.fetch({
+ data : { term : options.term }
+ });
+
+ this.currentSearchPromise.fail(function() {
+ self._showError();
+ });
+
+ return this.currentSearchPromise;
+ },
+
+ _onMoviesAdded : function(options) {
+ if (this.isExisting && options.movie.get('path') === this.model.get('folder').path) {
+ this.close();
+ }
+
+ else if (!this.isExisting) {
+ this.resultCollectionView.setExisting(options.movie.get('tmdbId'));
+ /*this.collection.term = '';
+ this.collection.reset();
+ this._clearResults();
+ this.ui.moviesSearch.val('');
+ this.ui.moviesSearch.focus();*/ //TODO: Maybe add option wheter to clear search result.
+ }
+ },
+
+ _onLoadMore : function() {
+ var showingAll = this.resultCollectionView.showMore();
+ this.ui.searchBar.show();
+
+ if (showingAll) {
+ this.ui.loadMore.hide();
+ }
+ },
+
+ _listSelected : function() {
+ var rootFolderValue = this.ui.listSelection.val();
+ if (rootFolderValue === 'addNew') {
+ //var rootFolderLayout = new SchemaModal(this.listCollection);
+ //AppLayout.modalRegion.show(rootFolderLayout);
+ SchemaModal.open(this.listCollection)
+ }
+ },
+
+ _fetchList : function() {
+ var self = this;
+ var listId = this.ui.listSelection.val();
+
+ this.fetchResult.show(new LoadingView());
+
+ this.currentFetchPromise = this.collection.fetch(
+ { data : { profileId : listId} }
+ )
+ this.currentFetchPromise.fail(function() {
+ self._showError();
+ });
+
+ },
+
+ _listsUpdated : function() {
+ this.templateHelpers.lists = this.listCollection.toJSON();
+ this.render();
+ },
+
+ _clearResults : function() {
+
+ if (!this.isExisting) {
+ this.searchResult.show(new EmptyView());
+ } else {
+ this.searchResult.close();
+ }
+ },
+
+ _showResults : function() {
+ if (!this.isClosed) {
+ if (this.collection.length === 0) {
+ this.ui.searchBar.show();
+ this.searchResult.show(new NotFoundView({ term : this.collection.term }));
+ } else {
+ this.searchResult.show(this.resultCollectionView);
+ if (!this.showingAll) {
+ this.ui.loadMore.show();
+ }
+ }
+ }
+ },
+
+ _abortExistingSearch : function() {
+ if (this.currentSearchPromise && this.currentSearchPromise.readyState > 0 && this.currentSearchPromise.readyState < 4) {
+ console.log('aborting previous pending search request.');
+ this.currentSearchPromise.abort();
+ } else {
+ this._clearResults();
+ }
+ },
+
+ _showError : function() {
+ this.fetchResult.show(new ErrorView({ term : "" }));
+ }
+});
diff --git a/src/UI/AddMovies/List/AddFromListViewTemplate.hbs b/src/UI/AddMovies/List/AddFromListViewTemplate.hbs
new file mode 100644
index 000000000..fcf4e2611
--- /dev/null
+++ b/src/UI/AddMovies/List/AddFromListViewTemplate.hbs
@@ -0,0 +1,15 @@
+
+
diff --git a/src/UI/Settings/NetImport/ListSelectionPartial.hbs b/src/UI/Settings/NetImport/ListSelectionPartial.hbs
index dd93cc17d..d2b37459d 100644
--- a/src/UI/Settings/NetImport/ListSelectionPartial.hbs
+++ b/src/UI/Settings/NetImport/ListSelectionPartial.hbs
@@ -1,4 +1,5 @@
-