mirror of
https://github.com/Radarr/Radarr
synced 2025-02-25 15:43:08 +00:00
Add basic ui of manual import.
This commit is contained in:
parent
fbe9ad6582
commit
032bc2d5c4
7 changed files with 151 additions and 52 deletions
|
@ -238,6 +238,7 @@
|
|||
<Compile Include="SeasonPass\SeasonPassResource.cs" />
|
||||
<Compile Include="Series\AlternateTitleResource.cs" />
|
||||
<Compile Include="Series\MovieFileResource.cs" />
|
||||
<Compile Include="Series\FetchMovieListModule.cs" />
|
||||
<Compile Include="Series\SeasonResource.cs" />
|
||||
<Compile Include="SeasonPass\SeasonPassModule.cs" />
|
||||
<Compile Include="Series\SeriesEditorModule.cs" />
|
||||
|
@ -299,4 +300,4 @@
|
|||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
||||
</Project>
|
45
src/NzbDrone.Api/Series/FetchMovieListModule.cs
Normal file
45
src/NzbDrone.Api/Series/FetchMovieListModule.cs
Normal file
|
@ -0,0 +1,45 @@
|
|||
using System.Collections.Generic;
|
||||
using Nancy;
|
||||
using NzbDrone.Api.Extensions;
|
||||
using NzbDrone.Core.MediaCover;
|
||||
using NzbDrone.Core.MetadataSource;
|
||||
using System.Linq;
|
||||
using NzbDrone.Core.NetImport;
|
||||
|
||||
namespace NzbDrone.Api.Movie
|
||||
{
|
||||
public class FetchMovieListModule : NzbDroneRestModule<MovieResource>
|
||||
{
|
||||
private readonly IFetchNetImport _fetchNetImport;
|
||||
|
||||
public FetchMovieListModule(IFetchNetImport netImport)
|
||||
: base("/netimport/movies")
|
||||
{
|
||||
_fetchNetImport = netImport;
|
||||
Get["/"] = x => Search();
|
||||
}
|
||||
|
||||
|
||||
private Response Search()
|
||||
{
|
||||
var results = _fetchNetImport.FetchAndFilter((int) Request.Query.listId, false);
|
||||
return MapToResource(results).AsResponse();
|
||||
}
|
||||
|
||||
|
||||
private static IEnumerable<MovieResource> MapToResource(IEnumerable<Core.Tv.Movie> movies)
|
||||
{
|
||||
foreach (var currentSeries in movies)
|
||||
{
|
||||
var resource = currentSeries.ToResource();
|
||||
var poster = currentSeries.Images.FirstOrDefault(c => c.CoverType == MediaCoverTypes.Poster);
|
||||
if (poster != null)
|
||||
{
|
||||
resource.RemotePoster = poster.Url;
|
||||
}
|
||||
|
||||
yield return resource;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,51 +1,47 @@
|
|||
var Marionette = require('marionette');
|
||||
var AddMoviesView = require('../AddMoviesView');
|
||||
var ListItemView = require('./ListItemView');
|
||||
var vent = require('vent');
|
||||
|
||||
module.exports = Marionette.CompositeView.extend({
|
||||
itemView : AddMoviesView,
|
||||
itemViewContainer : '.x-loading-folders',
|
||||
template : 'AddMovies/List/AddFromListCollectionViewTemplate',
|
||||
module.exports = Marionette.CollectionView.extend({
|
||||
itemView : ListItemView,
|
||||
|
||||
ui : {
|
||||
loadingFolders : '.x-loading-list'
|
||||
loadingList : '.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
|
||||
}
|
||||
},
|
||||
//
|
||||
// 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
|
||||
// }
|
||||
|
||||
});
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
<div class="x-list">
|
||||
<div class="loading-list x-loading-list">
|
||||
Loading search results from TheTVDB for your movies, this may take a few minutes.
|
||||
</div>
|
||||
<div class="x-loading-list">
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
var _ = require('underscore');
|
||||
var vent = require('vent');
|
||||
var Marionette = require('marionette');
|
||||
var Backgrid = require('backgrid');
|
||||
var AddFromListCollection = require('./AddFromListCollection');
|
||||
//var SearchResultCollectionView = require('./SearchResultCollectionView');
|
||||
var AddFromListCollectionView = require('./AddFromListCollectionView');
|
||||
var AddListView = require("../../Settings/NetImport/Add/NetImportAddItemView");
|
||||
var EmptyView = require('../EmptyView');
|
||||
var NotFoundView = require('../NotFoundView');
|
||||
|
@ -10,6 +11,16 @@ var ListCollection = require("../../Settings/NetImport/NetImportCollection");
|
|||
var ErrorView = require('../ErrorView');
|
||||
var LoadingView = require('../../Shared/LoadingView');
|
||||
var AppLayout = require('../../AppLayout');
|
||||
var InCinemasCell = require('../../Cells/InCinemasCell');
|
||||
var MovieTitleCell = require('../../Cells/MovieTitleCell');
|
||||
var TemplatedCell = require('../../Cells/TemplatedCell');
|
||||
var ProfileCell = require('../../Cells/ProfileCell');
|
||||
var MovieLinksCell = require('../../Cells/MovieLinksCell');
|
||||
var MovieActionCell = require('../../Cells/MovieActionCell');
|
||||
var MovieStatusCell = require('../../Cells/MovieStatusCell');
|
||||
var MovieDownloadStatusCell = require('../../Cells/MovieDownloadStatusCell');
|
||||
var DownloadedQualityCell = require('../../Cells/DownloadedQualityCell');
|
||||
|
||||
var SchemaModal = require('../../Settings/NetImport/Add/NetImportSchemaModal');
|
||||
|
||||
module.exports = Marionette.Layout.extend({
|
||||
|
@ -25,6 +36,27 @@ module.exports = Marionette.Layout.extend({
|
|||
|
||||
},
|
||||
|
||||
columns : [
|
||||
{
|
||||
name : 'title',
|
||||
label : 'Title',
|
||||
cell : MovieTitleCell,
|
||||
cellValue : 'this',
|
||||
},
|
||||
{
|
||||
name : 'profileId',
|
||||
label : 'Profile',
|
||||
cell : ProfileCell
|
||||
},
|
||||
{
|
||||
name : 'this',
|
||||
label : 'Links',
|
||||
cell : MovieLinksCell,
|
||||
className : "movie-links-cell",
|
||||
sortable : false,
|
||||
}
|
||||
],
|
||||
|
||||
events : {
|
||||
'click .x-load-more' : '_onLoadMore',
|
||||
"change .x-list-selection" : "_listSelected",
|
||||
|
@ -46,6 +78,8 @@ module.exports = Marionette.Layout.extend({
|
|||
|
||||
this.collection = new AddFromListCollection();
|
||||
|
||||
this.listenTo(this.collection, 'sync', this._showResults);
|
||||
|
||||
/*this.listenTo(this.collection, 'sync', this._showResults);
|
||||
|
||||
this.resultCollectionView = new SearchResultCollectionView({
|
||||
|
@ -126,7 +160,7 @@ module.exports = Marionette.Layout.extend({
|
|||
this.fetchResult.show(new LoadingView());
|
||||
|
||||
this.currentFetchPromise = this.collection.fetch(
|
||||
{ data : { profileId : listId} }
|
||||
{ data : { listId : listId} }
|
||||
)
|
||||
this.currentFetchPromise.fail(function() {
|
||||
self._showError();
|
||||
|
@ -149,17 +183,16 @@ module.exports = Marionette.Layout.extend({
|
|||
},
|
||||
|
||||
_showResults : function() {
|
||||
if (!this.isClosed) {
|
||||
if (this.collection.length === 0) {
|
||||
this.ui.searchBar.show();
|
||||
this.searchResult.show(new NotFoundView({ term : this.collection.term }));
|
||||
this.fetchResult.show(new NotFoundView({ term : "" }));
|
||||
} else {
|
||||
this.searchResult.show(this.resultCollectionView);
|
||||
if (!this.showingAll) {
|
||||
this.ui.loadMore.show();
|
||||
}
|
||||
this.fetchResult.show(new Backgrid.Grid({
|
||||
collection : this.collection,
|
||||
columns : this.columns,
|
||||
className : 'table table-hover'
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
_abortExistingSearch : function() {
|
||||
|
|
22
src/UI/AddMovies/List/ListItemView.js
Normal file
22
src/UI/AddMovies/List/ListItemView.js
Normal file
|
@ -0,0 +1,22 @@
|
|||
var _ = require('underscore');
|
||||
var vent = require('vent');
|
||||
var AppLayout = require('../../AppLayout');
|
||||
var Backbone = require('backbone');
|
||||
var Marionette = require('marionette');
|
||||
var Config = require('../../Config');
|
||||
var Messenger = require('../../Shared/Messenger');
|
||||
var AsValidatedView = require('../../Mixins/AsValidatedView');
|
||||
|
||||
require('jquery.dotdotdot');
|
||||
|
||||
var view = Marionette.ItemView.extend({
|
||||
|
||||
template : 'AddMovies/SearchResultViewTemplate',
|
||||
|
||||
|
||||
})
|
||||
|
||||
|
||||
AsValidatedView.apply(view);
|
||||
|
||||
module.exports = view;
|
3
src/UI/AddMovies/List/ListItemViewTemplate.hbs
Normal file
3
src/UI/AddMovies/List/ListItemViewTemplate.hbs
Normal file
|
@ -0,0 +1,3 @@
|
|||
<div class="fetch-item">
|
||||
ASDF
|
||||
</div>
|
Loading…
Reference in a new issue