mirror of
https://github.com/lidarr/lidarr.git
synced 2025-08-23 06:45:19 -07:00
Merge branch 'develop' into MovieEditorFixes
This commit is contained in:
commit
d03ee006fc
8 changed files with 565 additions and 515 deletions
|
@ -49,7 +49,7 @@ namespace NzbDrone.Core.Download.Clients.DownloadStation.Proxies
|
|||
{
|
||||
if (retries == 5)
|
||||
{
|
||||
throw new DownloadClientException("Try to process same request more than 5 times");
|
||||
throw new DownloadClientException("Try to process request to {0} with {1} more than 5 times", api, arguments.ToJson().ToString());
|
||||
}
|
||||
|
||||
if (!_authenticated && api != DiskStationApi.Info && api != DiskStationApi.DSMInfo)
|
||||
|
@ -72,15 +72,21 @@ namespace NzbDrone.Core.Download.Clients.DownloadStation.Proxies
|
|||
}
|
||||
else
|
||||
{
|
||||
if (responseContent.Error.SessionError)
|
||||
{
|
||||
_authenticated = false;
|
||||
return ProcessRequest<T>(api, arguments, settings, operation, method, retries++);
|
||||
}
|
||||
|
||||
var msg = $"Failed to {operation}. Reason: {responseContent.Error.GetMessage(api)}";
|
||||
_logger.Error(msg);
|
||||
|
||||
if (responseContent.Error.SessionError)
|
||||
{
|
||||
_authenticated = false;
|
||||
|
||||
if (responseContent.Error.Code == 105)
|
||||
{
|
||||
throw new DownloadClientAuthenticationException(msg);
|
||||
}
|
||||
|
||||
return ProcessRequest<T>(api, arguments, settings, operation, method, ++retries);
|
||||
}
|
||||
|
||||
throw new DownloadClientException(msg);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -282,7 +282,17 @@ namespace NzbDrone.Core.Download.Clients.DownloadStation
|
|||
{
|
||||
try
|
||||
{
|
||||
var downloadDir = GetDownloadDirectory();
|
||||
var downloadDir = GetDefaultDir();
|
||||
|
||||
if (downloadDir == null)
|
||||
{
|
||||
return new NzbDroneValidationFailure(nameof(Settings.TvDirectory), "No default destination")
|
||||
{
|
||||
DetailedDescription = $"You must login into your Diskstation as {Settings.Username} and manually set it up into DownloadStation settings under BT/HTTP/FTP/NZB -> Location."
|
||||
};
|
||||
}
|
||||
|
||||
downloadDir = GetDownloadDirectory();
|
||||
|
||||
if (downloadDir != null)
|
||||
{
|
||||
|
@ -295,7 +305,7 @@ namespace NzbDrone.Core.Download.Clients.DownloadStation
|
|||
{
|
||||
return new NzbDroneValidationFailure(fieldName, $"Shared folder does not exist")
|
||||
{
|
||||
DetailedDescription = $"The DownloadStation does not have a Shared Folder with the name '{sharedFolder}', are you sure you specified it correctly?"
|
||||
DetailedDescription = $"The Diskstation does not have a Shared Folder with the name '{sharedFolder}', are you sure you specified it correctly?"
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -310,6 +320,11 @@ namespace NzbDrone.Core.Download.Clients.DownloadStation
|
|||
|
||||
return null;
|
||||
}
|
||||
catch (DownloadClientAuthenticationException ex) // User could not have permission to access to downloadstation
|
||||
{
|
||||
_logger.Error(ex);
|
||||
return new NzbDroneValidationFailure(string.Empty, ex.Message);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.Error(ex);
|
||||
|
|
|
@ -195,7 +195,17 @@ namespace NzbDrone.Core.Download.Clients.DownloadStation
|
|||
{
|
||||
try
|
||||
{
|
||||
var downloadDir = GetDownloadDirectory();
|
||||
var downloadDir = GetDefaultDir();
|
||||
|
||||
if (downloadDir == null)
|
||||
{
|
||||
return new NzbDroneValidationFailure(nameof(Settings.TvDirectory), "No default destination")
|
||||
{
|
||||
DetailedDescription = $"You must login into your Diskstation as {Settings.Username} and manually set it up into DownloadStation settings under BT/HTTP/FTP/NZB -> Location."
|
||||
};
|
||||
}
|
||||
|
||||
downloadDir = GetDownloadDirectory();
|
||||
|
||||
if (downloadDir != null)
|
||||
{
|
||||
|
@ -208,7 +218,7 @@ namespace NzbDrone.Core.Download.Clients.DownloadStation
|
|||
{
|
||||
return new NzbDroneValidationFailure(fieldName, $"Shared folder does not exist")
|
||||
{
|
||||
DetailedDescription = $"The DownloadStation does not have a Shared Folder with the name '{sharedFolder}', are you sure you specified it correctly?"
|
||||
DetailedDescription = $"The Diskstation does not have a Shared Folder with the name '{sharedFolder}', are you sure you specified it correctly?"
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -223,6 +233,11 @@ namespace NzbDrone.Core.Download.Clients.DownloadStation
|
|||
|
||||
return null;
|
||||
}
|
||||
catch (DownloadClientAuthenticationException ex) // User could not have permission to access to downloadstation
|
||||
{
|
||||
_logger.Error(ex);
|
||||
return new NzbDroneValidationFailure(string.Empty, ex.Message);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.Error(ex);
|
||||
|
|
|
@ -36,42 +36,34 @@ namespace NzbDrone.Core.MediaFiles
|
|||
_logger = logger;
|
||||
}
|
||||
|
||||
public MovieFileMoveResult UpgradeMovieFile(MovieFile episodeFile, LocalMovie localEpisode, bool copyOnly = false)
|
||||
public MovieFileMoveResult UpgradeMovieFile(MovieFile movieFile, LocalMovie localMovie, bool copyOnly = false)
|
||||
{
|
||||
_logger.Trace("Upgrading existing episode file.");
|
||||
_logger.Trace("Upgrading existing movie file.");
|
||||
var moveFileResult = new MovieFileMoveResult();
|
||||
localEpisode.Movie.MovieFile.LazyLoad();
|
||||
var existingFile = localEpisode.Movie.MovieFile;
|
||||
existingFile.LazyLoad();
|
||||
|
||||
if (existingFile.IsLoaded && existingFile.Value != null)
|
||||
var existingFile = localMovie.Movie.MovieFile.Value;
|
||||
|
||||
if (existingFile != null)
|
||||
{
|
||||
var file = existingFile.Value;
|
||||
var episodeFilePath = Path.Combine(localEpisode.Movie.Path, file.RelativePath);
|
||||
var movieFilePath = Path.Combine(localMovie.Movie.Path, existingFile.RelativePath);
|
||||
|
||||
if (_diskProvider.FileExists(episodeFilePath))
|
||||
if (_diskProvider.FileExists(movieFilePath))
|
||||
{
|
||||
_logger.Debug("Removing existing episode file: {0}", file);
|
||||
_recycleBinProvider.DeleteFile(episodeFilePath);
|
||||
_logger.Debug("Removing existing movie file: {0}", existingFile);
|
||||
_recycleBinProvider.DeleteFile(movieFilePath);
|
||||
}
|
||||
|
||||
moveFileResult.OldFiles.Add(file);
|
||||
_mediaFileService.Delete(file, DeleteMediaFileReason.Upgrade);
|
||||
moveFileResult.OldFiles.Add(existingFile);
|
||||
_mediaFileService.Delete(existingFile, DeleteMediaFileReason.Upgrade);
|
||||
}
|
||||
else
|
||||
{
|
||||
//_logger.Warn("The existing movie file was not lazy loaded.");
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (copyOnly)
|
||||
{
|
||||
moveFileResult.MovieFile = _movieFileMover.CopyMovieFile(episodeFile, localEpisode);
|
||||
moveFileResult.MovieFile = _movieFileMover.CopyMovieFile(movieFile, localMovie);
|
||||
}
|
||||
else
|
||||
{
|
||||
moveFileResult.MovieFile= _movieFileMover.MoveMovieFile(episodeFile, localEpisode);
|
||||
moveFileResult.MovieFile = _movieFileMover.MoveMovieFile(movieFile, localMovie);
|
||||
}
|
||||
|
||||
return moveFileResult;
|
||||
|
|
|
@ -31,17 +31,17 @@ namespace NzbDrone.Core.Notifications.CustomScript
|
|||
{
|
||||
var movie = message.Movie;
|
||||
var remoteMovie = message.RemoteMovie;
|
||||
var releaseGroup = remoteMovie.ParsedMovieInfo.ReleaseGroup;
|
||||
var environmentVariables = new StringDictionary();
|
||||
|
||||
environmentVariables.Add("Radarr_EventType", "Grab");
|
||||
environmentVariables.Add("Radarr_Movie_Id", movie.Id.ToString());
|
||||
environmentVariables.Add("Radarr_Movie_Title", movie.Title);
|
||||
environmentVariables.Add("Radarr_Movie_ImdbId", movie.ImdbId.ToString());
|
||||
environmentVariables.Add("Radarr_Movie_ImdbId", movie.ImdbId);
|
||||
environmentVariables.Add("Radarr_Movie_TmdbId", movie.TmdbId.ToString());
|
||||
environmentVariables.Add("Radarr_Release_Title", remoteMovie.Release.Title);
|
||||
environmentVariables.Add("Radarr_Release_Indexer", remoteMovie.Release.Indexer);
|
||||
environmentVariables.Add("Radarr_Release_Size", remoteMovie.Release.Size.ToString());
|
||||
environmentVariables.Add("Radarr_Release_ReleaseGroup", releaseGroup);
|
||||
environmentVariables.Add("Radarr_Release_ReleaseGroup", remoteMovie.ParsedMovieInfo.ReleaseGroup ?? string.Empty);
|
||||
|
||||
ExecuteScript(environmentVariables);
|
||||
}
|
||||
|
@ -57,7 +57,8 @@ namespace NzbDrone.Core.Notifications.CustomScript
|
|||
environmentVariables.Add("Radarr_Movie_Id", movie.Id.ToString());
|
||||
environmentVariables.Add("Radarr_Movie_Title", movie.Title);
|
||||
environmentVariables.Add("Radarr_Movie_Path", movie.Path);
|
||||
environmentVariables.Add("Radarr_Movie_ImdbId", movie.ImdbId.ToString());
|
||||
environmentVariables.Add("Radarr_Movie_ImdbId", movie.ImdbId);
|
||||
environmentVariables.Add("Radarr_Movie_TmdbId", movie.TmdbId.ToString());
|
||||
environmentVariables.Add("Radarr_MovieFile_Id", movieFile.Id.ToString());
|
||||
environmentVariables.Add("Radarr_MovieFile_RelativePath", movieFile.RelativePath);
|
||||
environmentVariables.Add("Radarr_MovieFile_Path", Path.Combine(movie.Path, movieFile.RelativePath));
|
||||
|
@ -79,7 +80,9 @@ namespace NzbDrone.Core.Notifications.CustomScript
|
|||
environmentVariables.Add("Radarr_Movie_Id", movie.Id.ToString());
|
||||
environmentVariables.Add("Radarr_Movie_Title", movie.Title);
|
||||
environmentVariables.Add("Radarr_Movie_Path", movie.Path);
|
||||
environmentVariables.Add("Radarr_Movie_TvdbId", movie.ImdbId.ToString());
|
||||
environmentVariables.Add("Radarr_Movie_ImdbId", movie.ImdbId);
|
||||
environmentVariables.Add("Radarr_Movie_TmdbId", movie.TmdbId.ToString());
|
||||
|
||||
ExecuteScript(environmentVariables);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,467 +1,476 @@
|
|||
var _ = require('underscore');
|
||||
var Marionette = require('marionette');
|
||||
var Backgrid = require('backgrid');
|
||||
var PosterCollectionView = require('./Posters/SeriesPostersCollectionView');
|
||||
var ListCollectionView = require('./Overview/SeriesOverviewCollectionView');
|
||||
var EmptyView = require('./EmptyView');
|
||||
var MoviesCollection = require('../MoviesCollection');
|
||||
var FullMovieCollection = require('../FullMovieCollection');
|
||||
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 FooterView = require('./FooterView');
|
||||
var GridPager = require('../../Shared/Grid/Pager');
|
||||
var FooterModel = require('./FooterModel');
|
||||
var ToolbarLayout = require('../../Shared/Toolbar/ToolbarLayout');
|
||||
require('../../Mixins/backbone.signalr.mixin');
|
||||
|
||||
//var MoviesCollectionClient = require('../MoviesCollectionClient');
|
||||
|
||||
|
||||
//this variable prevents double fetching the FullMovieCollection on first load
|
||||
//var shownOnce = false;
|
||||
//require('../Globals');
|
||||
window.shownOnce = false;
|
||||
module.exports = Marionette.Layout.extend({
|
||||
template : 'Movies/Index/MoviesIndexLayoutTemplate',
|
||||
|
||||
regions : {
|
||||
seriesRegion : '#x-series',
|
||||
toolbar : '#x-toolbar',
|
||||
toolbar2 : '#x-toolbar2',
|
||||
footer : '#x-series-footer',
|
||||
pager : "#x-movie-pager",
|
||||
pagerTop : "#x-movie-pager-top"
|
||||
},
|
||||
|
||||
columns : [
|
||||
{
|
||||
name : 'status',
|
||||
label : '',
|
||||
cell : MovieStatusCell
|
||||
},
|
||||
{
|
||||
name : 'title',
|
||||
label : 'Title',
|
||||
cell : MovieTitleCell,
|
||||
cellValue : 'this',
|
||||
},
|
||||
{
|
||||
name : "downloadedQuality",
|
||||
label : "Downloaded",
|
||||
cell : DownloadedQualityCell,
|
||||
sortable : true
|
||||
},
|
||||
{
|
||||
name : 'profileId',
|
||||
label : 'Profile',
|
||||
cell : ProfileCell
|
||||
},
|
||||
{
|
||||
name : 'inCinemas',
|
||||
label : 'In Cinemas',
|
||||
cell : InCinemasCell
|
||||
},
|
||||
{
|
||||
name : 'this',
|
||||
label : 'Links',
|
||||
cell : MovieLinksCell,
|
||||
className : "movie-links-cell",
|
||||
sortable : false,
|
||||
},
|
||||
{
|
||||
name : "this",
|
||||
label : "Status",
|
||||
cell : MovieDownloadStatusCell,
|
||||
sortable : false,
|
||||
sortValue : function(m, k) {
|
||||
if (m.get("downloaded")) {
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
},
|
||||
{
|
||||
name : 'this',
|
||||
label : '',
|
||||
sortable : false,
|
||||
cell : MovieActionCell
|
||||
}
|
||||
],
|
||||
|
||||
leftSideButtons : {
|
||||
type : 'default',
|
||||
storeState : false,
|
||||
collapse : true,
|
||||
items : [
|
||||
{
|
||||
title : 'Add Movie',
|
||||
icon : 'icon-sonarr-add',
|
||||
route : 'addmovies'
|
||||
},
|
||||
{
|
||||
title : 'Movie Editor',
|
||||
icon : 'icon-sonarr-edit',
|
||||
route : 'movieeditor'
|
||||
},
|
||||
{
|
||||
title : 'RSS Sync',
|
||||
icon : 'icon-sonarr-rss',
|
||||
command : 'rsssync',
|
||||
errorMessage : 'RSS Sync Failed!'
|
||||
},
|
||||
{
|
||||
title : 'Update Library',
|
||||
icon : 'icon-sonarr-refresh',
|
||||
command : 'refreshmovie',
|
||||
successMessage : 'Library was updated!',
|
||||
errorMessage : 'Library update failed!'
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
initialize : function() {
|
||||
//this variable prevents us from showing the list before seriesCollection has been fetched the first time
|
||||
this.seriesCollection = MoviesCollection;//.clone();
|
||||
this.seriesCollection.bindSignalR();
|
||||
|
||||
this.listenTo(FullMovieCollection, 'sync', function() {
|
||||
this._showFooter();
|
||||
});
|
||||
|
||||
this.listenTo(this.seriesCollection, 'sync', function(model, collection, options) {
|
||||
this._renderView();
|
||||
//MoviesCollectionClient.fetch();
|
||||
});
|
||||
this.listenTo(this.seriesCollection, "change", function(model) {
|
||||
if (model.get('saved')) {
|
||||
model.set('saved', false);
|
||||
this.seriesCollection.fetch();
|
||||
//FullMovieCollection.fetch({reset : true });
|
||||
//this._showFooter();
|
||||
var m = FullMovieCollection.findWhere( { tmdbId : model.get('tmdbId') });
|
||||
m.set('monitored', model.get('monitored'));
|
||||
m.set('minimumAvailability', model.get('minimumAvailability'));
|
||||
m.set( {profileId : model.get('profileId') } );
|
||||
|
||||
this._showFooter();
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
this.listenTo(this.seriesCollection, 'remove', function(model, collection, options) {
|
||||
if (model.get('deleted')) {
|
||||
this.seriesCollection.fetch(); //need to do this so that the page shows a full page and the 'total records' number is updated
|
||||
//FullMovieCollection.fetch({reset : true}); //need to do this to update the footer
|
||||
FullMovieCollection.remove(model);
|
||||
this._showFooter();
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
this.sortingOptions = {
|
||||
type : 'sorting',
|
||||
storeState : false,
|
||||
viewCollection : this.seriesCollection,
|
||||
callback : this._sort,
|
||||
items : [
|
||||
{
|
||||
title : 'Title',
|
||||
name : 'title'
|
||||
},
|
||||
var _ = require('underscore');
|
||||
var Marionette = require('marionette');
|
||||
var Backgrid = require('backgrid');
|
||||
var PosterCollectionView = require('./Posters/SeriesPostersCollectionView');
|
||||
var ListCollectionView = require('./Overview/SeriesOverviewCollectionView');
|
||||
var EmptyView = require('./EmptyView');
|
||||
var MoviesCollection = require('../MoviesCollection');
|
||||
|
||||
var FullMovieCollection = require('../FullMovieCollection');
|
||||
var InCinemasCell = require('../../Cells/InCinemasCell');
|
||||
|
||||
var RelativeDateCell = require('../../Cells/RelativeDateCell');
|
||||
|
||||
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 FooterView = require('./FooterView');
|
||||
var GridPager = require('../../Shared/Grid/Pager');
|
||||
var FooterModel = require('./FooterModel');
|
||||
var ToolbarLayout = require('../../Shared/Toolbar/ToolbarLayout');
|
||||
require('../../Mixins/backbone.signalr.mixin');
|
||||
|
||||
//var MoviesCollectionClient = require('../MoviesCollectionClient');
|
||||
|
||||
|
||||
//this variable prevents double fetching the FullMovieCollection on first load
|
||||
//var shownOnce = false;
|
||||
//require('../Globals');
|
||||
window.shownOnce = false;
|
||||
module.exports = Marionette.Layout.extend({
|
||||
template : 'Movies/Index/MoviesIndexLayoutTemplate',
|
||||
|
||||
regions : {
|
||||
seriesRegion : '#x-series',
|
||||
toolbar : '#x-toolbar',
|
||||
toolbar2 : '#x-toolbar2',
|
||||
footer : '#x-series-footer',
|
||||
pager : "#x-movie-pager",
|
||||
pagerTop : "#x-movie-pager-top"
|
||||
},
|
||||
|
||||
columns : [
|
||||
{
|
||||
name : 'status',
|
||||
label : '',
|
||||
cell : MovieStatusCell
|
||||
},
|
||||
{
|
||||
name : 'title',
|
||||
label : 'Title',
|
||||
cell : MovieTitleCell,
|
||||
cellValue : 'this',
|
||||
},
|
||||
{
|
||||
name : 'added',
|
||||
label : 'Date Added',
|
||||
cell : RelativeDateCell
|
||||
},
|
||||
{
|
||||
name : "downloadedQuality",
|
||||
label : "Downloaded",
|
||||
cell : DownloadedQualityCell,
|
||||
sortable : true
|
||||
},
|
||||
{
|
||||
name : 'profileId',
|
||||
label : 'Profile',
|
||||
cell : ProfileCell
|
||||
},
|
||||
{
|
||||
name : 'inCinemas',
|
||||
label : 'In Cinemas',
|
||||
cell : RelativeDateCell
|
||||
},
|
||||
{
|
||||
name : 'this',
|
||||
label : 'Links',
|
||||
cell : MovieLinksCell,
|
||||
className : "movie-links-cell",
|
||||
sortable : false,
|
||||
},
|
||||
{
|
||||
name : "this",
|
||||
label : "Status",
|
||||
cell : MovieDownloadStatusCell,
|
||||
sortable : false,
|
||||
sortValue : function(m, k) {
|
||||
if (m.get("downloaded")) {
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
},
|
||||
{
|
||||
name : 'this',
|
||||
label : '',
|
||||
sortable : false,
|
||||
cell : MovieActionCell
|
||||
}
|
||||
],
|
||||
|
||||
leftSideButtons : {
|
||||
type : 'default',
|
||||
storeState : false,
|
||||
collapse : true,
|
||||
items : [
|
||||
{
|
||||
title : 'Add Movie',
|
||||
icon : 'icon-sonarr-add',
|
||||
route : 'addmovies'
|
||||
},
|
||||
{
|
||||
title : 'Movie Editor',
|
||||
icon : 'icon-sonarr-edit',
|
||||
route : 'movieeditor'
|
||||
},
|
||||
{
|
||||
title : 'RSS Sync',
|
||||
icon : 'icon-sonarr-rss',
|
||||
command : 'rsssync',
|
||||
errorMessage : 'RSS Sync Failed!'
|
||||
},
|
||||
{
|
||||
title : 'Update Library',
|
||||
icon : 'icon-sonarr-refresh',
|
||||
command : 'refreshmovie',
|
||||
successMessage : 'Library was updated!',
|
||||
errorMessage : 'Library update failed!'
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
initialize : function() {
|
||||
//this variable prevents us from showing the list before seriesCollection has been fetched the first time
|
||||
this.seriesCollection = MoviesCollection;//.clone();
|
||||
this.seriesCollection.bindSignalR();
|
||||
|
||||
this.listenTo(FullMovieCollection, 'sync', function() {
|
||||
this._showFooter();
|
||||
});
|
||||
|
||||
this.listenTo(this.seriesCollection, 'sync', function(model, collection, options) {
|
||||
this._renderView();
|
||||
//MoviesCollectionClient.fetch();
|
||||
});
|
||||
this.listenTo(this.seriesCollection, "change", function(model) {
|
||||
if (model.get('saved')) {
|
||||
model.set('saved', false);
|
||||
this.seriesCollection.fetch();
|
||||
//FullMovieCollection.fetch({reset : true });
|
||||
//this._showFooter();
|
||||
var m = FullMovieCollection.findWhere( { tmdbId : model.get('tmdbId') });
|
||||
m.set('monitored', model.get('monitored'));
|
||||
m.set('minimumAvailability', model.get('minimumAvailability'));
|
||||
m.set( {profileId : model.get('profileId') } );
|
||||
|
||||
this._showFooter();
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
this.listenTo(this.seriesCollection, 'remove', function(model, collection, options) {
|
||||
if (model.get('deleted')) {
|
||||
this.seriesCollection.fetch(); //need to do this so that the page shows a full page and the 'total records' number is updated
|
||||
//FullMovieCollection.fetch({reset : true}); //need to do this to update the footer
|
||||
FullMovieCollection.remove(model);
|
||||
this._showFooter();
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
this.sortingOptions = {
|
||||
type : 'sorting',
|
||||
storeState : false,
|
||||
viewCollection : this.seriesCollection,
|
||||
callback : this._sort,
|
||||
items : [
|
||||
{
|
||||
title: 'Downloaded',
|
||||
title : 'Title',
|
||||
name : 'title'
|
||||
},
|
||||
{
|
||||
title: 'Downloaded',
|
||||
name: 'downloadedQuality'
|
||||
},
|
||||
{
|
||||
title : 'Profile',
|
||||
name : 'profileId'
|
||||
},
|
||||
{
|
||||
title : 'In Cinemas',
|
||||
name : 'inCinemas'
|
||||
},
|
||||
/*{
|
||||
title : "Status",
|
||||
name : "status",
|
||||
}*/
|
||||
]
|
||||
};
|
||||
|
||||
this.filteringOptions = {
|
||||
type : 'radio',
|
||||
storeState : true,
|
||||
menuKey : 'series.filterMode',
|
||||
defaultAction : 'all',
|
||||
items : [
|
||||
{
|
||||
key : 'all',
|
||||
title : '',
|
||||
tooltip : 'All',
|
||||
icon : 'icon-sonarr-all',
|
||||
callback : this._setFilter
|
||||
},
|
||||
{
|
||||
key : 'monitored',
|
||||
title : '',
|
||||
tooltip : 'Monitored Only',
|
||||
icon : 'icon-sonarr-monitored',
|
||||
callback : this._setFilter
|
||||
},
|
||||
{
|
||||
key : 'missing',
|
||||
title : '',
|
||||
tooltip : 'Missing Only',
|
||||
icon : 'icon-sonarr-missing',
|
||||
callback : this._setFilter
|
||||
},
|
||||
{
|
||||
key : 'released',
|
||||
title : '',
|
||||
tooltip : 'Released',
|
||||
icon : 'icon-sonarr-movie-released',
|
||||
callback : this._setFilter
|
||||
},
|
||||
{
|
||||
key : 'announced',
|
||||
title : '',
|
||||
tooltip : 'Announced',
|
||||
icon : 'icon-sonarr-movie-announced',
|
||||
callback : this._setFilter
|
||||
},
|
||||
{
|
||||
key : 'cinemas',
|
||||
title : '',
|
||||
tooltip : 'In Cinemas',
|
||||
icon : 'icon-sonarr-movie-cinemas',
|
||||
callback : this._setFilter
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
this.viewButtons = {
|
||||
type : 'radio',
|
||||
storeState : true,
|
||||
menuKey : 'seriesViewMode',
|
||||
defaultAction : 'listView',
|
||||
items : [
|
||||
{
|
||||
key : 'posterView',
|
||||
title : '',
|
||||
tooltip : 'Posters',
|
||||
icon : 'icon-sonarr-view-poster',
|
||||
callback : this._showPosters
|
||||
},
|
||||
{
|
||||
key : 'listView',
|
||||
title : '',
|
||||
tooltip : 'Overview List',
|
||||
icon : 'icon-sonarr-view-list',
|
||||
callback : this._showList
|
||||
},
|
||||
{
|
||||
key : 'tableView',
|
||||
title : '',
|
||||
tooltip : 'Table',
|
||||
icon : 'icon-sonarr-view-table',
|
||||
callback : this._showTable
|
||||
}
|
||||
]
|
||||
};
|
||||
},
|
||||
|
||||
onShow : function() {
|
||||
this._showToolbar();
|
||||
this._fetchCollection();
|
||||
if (window.shownOnce) {
|
||||
this._showFooter();
|
||||
}
|
||||
window.shownOnce = true;
|
||||
},
|
||||
|
||||
_showTable : function() {
|
||||
this.currentView = new Backgrid.Grid({
|
||||
collection : this.seriesCollection,
|
||||
columns : this.columns,
|
||||
className : 'table table-hover'
|
||||
});
|
||||
|
||||
this._showPager();
|
||||
this._renderView();
|
||||
},
|
||||
|
||||
_showList : function() {
|
||||
//this.current = "list";
|
||||
this.currentView = new ListCollectionView({
|
||||
collection : this.seriesCollection
|
||||
});
|
||||
|
||||
this._renderView();
|
||||
},
|
||||
|
||||
_showPosters : function() {
|
||||
this.currentView = new PosterCollectionView({
|
||||
collection : this.seriesCollection
|
||||
});
|
||||
|
||||
this._renderView();
|
||||
},
|
||||
|
||||
_sort : function() {
|
||||
console.warn("Sorting");
|
||||
},
|
||||
|
||||
_renderView : function() {
|
||||
if (MoviesCollection.length === 0) {
|
||||
this.seriesRegion.show(new EmptyView());
|
||||
|
||||
this.toolbar.close();
|
||||
this.toolbar2.close();
|
||||
} else {
|
||||
this.renderedOnce = true;
|
||||
this.seriesRegion.show(this.currentView);
|
||||
this.listenTo(this.currentView.collection, 'sync', function(eventName){
|
||||
this._showPager();
|
||||
});
|
||||
this._showToolbar();
|
||||
}
|
||||
},
|
||||
|
||||
_fetchCollection : function() {
|
||||
this.seriesCollection.fetch();
|
||||
},
|
||||
|
||||
_setFilter : function(buttonContext) {
|
||||
var mode = buttonContext.model.get('key');
|
||||
this.seriesCollection.setFilterMode(mode);
|
||||
},
|
||||
|
||||
_showToolbar : function() {
|
||||
if (this.toolbar.currentView) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.toolbar2.show(new ToolbarLayout({
|
||||
right : [
|
||||
this.filteringOptions
|
||||
],
|
||||
context : this
|
||||
}));
|
||||
|
||||
this.toolbar.show(new ToolbarLayout({
|
||||
right : [
|
||||
this.sortingOptions,
|
||||
this.viewButtons
|
||||
],
|
||||
left : [
|
||||
this.leftSideButtons
|
||||
],
|
||||
context : this
|
||||
}));
|
||||
},
|
||||
|
||||
_showPager : function() {
|
||||
var pager = new GridPager({
|
||||
columns : this.columns,
|
||||
collection : this.seriesCollection,
|
||||
});
|
||||
var pagerTop = new GridPager({
|
||||
columns : this.columns,
|
||||
collection : this.seriesCollection,
|
||||
});
|
||||
this.pager.show(pager);
|
||||
this.pagerTop.show(pagerTop);
|
||||
},
|
||||
|
||||
_showFooter : function() {
|
||||
var footerModel = new FooterModel();
|
||||
var movies = FullMovieCollection.models.length;
|
||||
//instead of all the counters could do something like this with different query in the where...
|
||||
//var releasedMovies = FullMovieCollection.where({ 'released' : this.model.get('released') });
|
||||
// releasedMovies.length
|
||||
|
||||
var announced = 0;
|
||||
var incinemas = 0;
|
||||
var released = 0;
|
||||
|
||||
var monitored = 0;
|
||||
|
||||
var downloaded =0;
|
||||
var missingMonitored=0;
|
||||
var missingNotMonitored=0;
|
||||
var missingMonitoredNotAvailable=0;
|
||||
var missingMonitoredAvailable=0;
|
||||
|
||||
var downloadedMonitored=0;
|
||||
var downloadedNotMonitored=0;
|
||||
|
||||
_.each(FullMovieCollection.models, function(model) {
|
||||
|
||||
if (model.get('status').toLowerCase() === 'released') {
|
||||
released++;
|
||||
}
|
||||
else if (model.get('status').toLowerCase() === 'incinemas') {
|
||||
incinemas++;
|
||||
}
|
||||
else if (model.get('status').toLowerCase() === 'announced') {
|
||||
announced++;
|
||||
}
|
||||
|
||||
if (model.get('monitored')) {
|
||||
monitored++;
|
||||
if (model.get('downloaded')) {
|
||||
downloadedMonitored++;
|
||||
}
|
||||
}
|
||||
else { //not monitored
|
||||
if (model.get('downloaded')) {
|
||||
downloadedNotMonitored++;
|
||||
}
|
||||
else { //missing
|
||||
missingNotMonitored++;
|
||||
}
|
||||
}
|
||||
|
||||
if (model.get('downloaded')) {
|
||||
downloaded++;
|
||||
}
|
||||
else { //missing
|
||||
if (!model.get('isAvailable')) {
|
||||
if (model.get('monitored')) {
|
||||
missingMonitoredNotAvailable++;
|
||||
}
|
||||
}
|
||||
|
||||
if (model.get('monitored')) {
|
||||
missingMonitored++;
|
||||
if (model.get('isAvailable')) {
|
||||
missingMonitoredAvailable++;
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
footerModel.set({
|
||||
movies : movies,
|
||||
announced : announced,
|
||||
incinemas : incinemas,
|
||||
released : released,
|
||||
monitored : monitored,
|
||||
downloaded : downloaded,
|
||||
downloadedMonitored : downloadedMonitored,
|
||||
downloadedNotMonitored : downloadedNotMonitored,
|
||||
missingMonitored : missingMonitored,
|
||||
missingMonitoredAvailable : missingMonitoredAvailable,
|
||||
missingMonitoredNotAvailable : missingMonitoredNotAvailable,
|
||||
missingNotMonitored : missingNotMonitored
|
||||
});
|
||||
|
||||
this.footer.show(new FooterView({ model : footerModel }));
|
||||
}
|
||||
});
|
||||
},
|
||||
{
|
||||
title : 'Profile',
|
||||
name : 'profileId'
|
||||
},
|
||||
{
|
||||
title : 'In Cinemas',
|
||||
name : 'inCinemas'
|
||||
},
|
||||
/*{
|
||||
title : "Status",
|
||||
name : "status",
|
||||
}*/
|
||||
]
|
||||
};
|
||||
|
||||
this.filteringOptions = {
|
||||
type : 'radio',
|
||||
storeState : true,
|
||||
menuKey : 'series.filterMode',
|
||||
defaultAction : 'all',
|
||||
items : [
|
||||
{
|
||||
key : 'all',
|
||||
title : '',
|
||||
tooltip : 'All',
|
||||
icon : 'icon-sonarr-all',
|
||||
callback : this._setFilter
|
||||
},
|
||||
{
|
||||
key : 'monitored',
|
||||
title : '',
|
||||
tooltip : 'Monitored Only',
|
||||
icon : 'icon-sonarr-monitored',
|
||||
callback : this._setFilter
|
||||
},
|
||||
{
|
||||
key : 'missing',
|
||||
title : '',
|
||||
tooltip : 'Missing Only',
|
||||
icon : 'icon-sonarr-missing',
|
||||
callback : this._setFilter
|
||||
},
|
||||
{
|
||||
key : 'released',
|
||||
title : '',
|
||||
tooltip : 'Released',
|
||||
icon : 'icon-sonarr-movie-released',
|
||||
callback : this._setFilter
|
||||
},
|
||||
{
|
||||
key : 'announced',
|
||||
title : '',
|
||||
tooltip : 'Announced',
|
||||
icon : 'icon-sonarr-movie-announced',
|
||||
callback : this._setFilter
|
||||
},
|
||||
{
|
||||
key : 'cinemas',
|
||||
title : '',
|
||||
tooltip : 'In Cinemas',
|
||||
icon : 'icon-sonarr-movie-cinemas',
|
||||
callback : this._setFilter
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
this.viewButtons = {
|
||||
type : 'radio',
|
||||
storeState : true,
|
||||
menuKey : 'seriesViewMode',
|
||||
defaultAction : 'listView',
|
||||
items : [
|
||||
{
|
||||
key : 'posterView',
|
||||
title : '',
|
||||
tooltip : 'Posters',
|
||||
icon : 'icon-sonarr-view-poster',
|
||||
callback : this._showPosters
|
||||
},
|
||||
{
|
||||
key : 'listView',
|
||||
title : '',
|
||||
tooltip : 'Overview List',
|
||||
icon : 'icon-sonarr-view-list',
|
||||
callback : this._showList
|
||||
},
|
||||
{
|
||||
key : 'tableView',
|
||||
title : '',
|
||||
tooltip : 'Table',
|
||||
icon : 'icon-sonarr-view-table',
|
||||
callback : this._showTable
|
||||
}
|
||||
]
|
||||
};
|
||||
},
|
||||
|
||||
onShow : function() {
|
||||
this._showToolbar();
|
||||
this._fetchCollection();
|
||||
if (window.shownOnce) {
|
||||
this._showFooter();
|
||||
}
|
||||
window.shownOnce = true;
|
||||
},
|
||||
|
||||
_showTable : function() {
|
||||
this.currentView = new Backgrid.Grid({
|
||||
collection : this.seriesCollection,
|
||||
columns : this.columns,
|
||||
className : 'table table-hover'
|
||||
});
|
||||
|
||||
this._showPager();
|
||||
this._renderView();
|
||||
},
|
||||
|
||||
_showList : function() {
|
||||
//this.current = "list";
|
||||
this.currentView = new ListCollectionView({
|
||||
collection : this.seriesCollection
|
||||
});
|
||||
|
||||
this._renderView();
|
||||
},
|
||||
|
||||
_showPosters : function() {
|
||||
this.currentView = new PosterCollectionView({
|
||||
collection : this.seriesCollection
|
||||
});
|
||||
|
||||
this._renderView();
|
||||
},
|
||||
|
||||
_sort : function() {
|
||||
console.warn("Sorting");
|
||||
},
|
||||
|
||||
_renderView : function() {
|
||||
if (MoviesCollection.length === 0) {
|
||||
this.seriesRegion.show(new EmptyView());
|
||||
|
||||
this.toolbar.close();
|
||||
this.toolbar2.close();
|
||||
} else {
|
||||
this.renderedOnce = true;
|
||||
this.seriesRegion.show(this.currentView);
|
||||
this.listenTo(this.currentView.collection, 'sync', function(eventName){
|
||||
this._showPager();
|
||||
});
|
||||
this._showToolbar();
|
||||
}
|
||||
},
|
||||
|
||||
_fetchCollection : function() {
|
||||
this.seriesCollection.fetch();
|
||||
},
|
||||
|
||||
_setFilter : function(buttonContext) {
|
||||
var mode = buttonContext.model.get('key');
|
||||
this.seriesCollection.setFilterMode(mode);
|
||||
},
|
||||
|
||||
_showToolbar : function() {
|
||||
if (this.toolbar.currentView) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.toolbar2.show(new ToolbarLayout({
|
||||
right : [
|
||||
this.filteringOptions
|
||||
],
|
||||
context : this
|
||||
}));
|
||||
|
||||
this.toolbar.show(new ToolbarLayout({
|
||||
right : [
|
||||
this.sortingOptions,
|
||||
this.viewButtons
|
||||
],
|
||||
left : [
|
||||
this.leftSideButtons
|
||||
],
|
||||
context : this
|
||||
}));
|
||||
},
|
||||
|
||||
_showPager : function() {
|
||||
var pager = new GridPager({
|
||||
columns : this.columns,
|
||||
collection : this.seriesCollection,
|
||||
});
|
||||
var pagerTop = new GridPager({
|
||||
columns : this.columns,
|
||||
collection : this.seriesCollection,
|
||||
});
|
||||
this.pager.show(pager);
|
||||
this.pagerTop.show(pagerTop);
|
||||
},
|
||||
|
||||
_showFooter : function() {
|
||||
var footerModel = new FooterModel();
|
||||
var movies = FullMovieCollection.models.length;
|
||||
//instead of all the counters could do something like this with different query in the where...
|
||||
//var releasedMovies = FullMovieCollection.where({ 'released' : this.model.get('released') });
|
||||
// releasedMovies.length
|
||||
|
||||
var announced = 0;
|
||||
var incinemas = 0;
|
||||
var released = 0;
|
||||
|
||||
var monitored = 0;
|
||||
|
||||
var downloaded =0;
|
||||
var missingMonitored=0;
|
||||
var missingNotMonitored=0;
|
||||
var missingMonitoredNotAvailable=0;
|
||||
var missingMonitoredAvailable=0;
|
||||
|
||||
var downloadedMonitored=0;
|
||||
var downloadedNotMonitored=0;
|
||||
|
||||
_.each(FullMovieCollection.models, function(model) {
|
||||
|
||||
if (model.get('status').toLowerCase() === 'released') {
|
||||
released++;
|
||||
}
|
||||
else if (model.get('status').toLowerCase() === 'incinemas') {
|
||||
incinemas++;
|
||||
}
|
||||
else if (model.get('status').toLowerCase() === 'announced') {
|
||||
announced++;
|
||||
}
|
||||
|
||||
if (model.get('monitored')) {
|
||||
monitored++;
|
||||
if (model.get('downloaded')) {
|
||||
downloadedMonitored++;
|
||||
}
|
||||
}
|
||||
else { //not monitored
|
||||
if (model.get('downloaded')) {
|
||||
downloadedNotMonitored++;
|
||||
}
|
||||
else { //missing
|
||||
missingNotMonitored++;
|
||||
}
|
||||
}
|
||||
|
||||
if (model.get('downloaded')) {
|
||||
downloaded++;
|
||||
}
|
||||
else { //missing
|
||||
if (!model.get('isAvailable')) {
|
||||
if (model.get('monitored')) {
|
||||
missingMonitoredNotAvailable++;
|
||||
}
|
||||
}
|
||||
|
||||
if (model.get('monitored')) {
|
||||
missingMonitored++;
|
||||
if (model.get('isAvailable')) {
|
||||
missingMonitoredAvailable++;
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
footerModel.set({
|
||||
movies : movies,
|
||||
announced : announced,
|
||||
incinemas : incinemas,
|
||||
released : released,
|
||||
monitored : monitored,
|
||||
downloaded : downloaded,
|
||||
downloadedMonitored : downloadedMonitored,
|
||||
downloadedNotMonitored : downloadedNotMonitored,
|
||||
missingMonitored : missingMonitored,
|
||||
missingMonitoredAvailable : missingMonitoredAvailable,
|
||||
missingMonitoredNotAvailable : missingMonitoredNotAvailable,
|
||||
missingNotMonitored : missingNotMonitored
|
||||
});
|
||||
|
||||
this.footer.show(new FooterView({ model : footerModel }));
|
||||
}
|
||||
});
|
||||
|
|
|
@ -37,7 +37,9 @@
|
|||
<div class="col-md-8 col-xs-8">
|
||||
<span class="label label-default">{{GetStatus}}</span>
|
||||
|
||||
<span class="label label-default">{{ShortDate inCinemas}}</span>
|
||||
{{#if inCinemas}}
|
||||
<span class="label label-default">{{RelativeDate inCinemas}}</span>
|
||||
{{/if}}
|
||||
|
||||
{{profile profileId}}
|
||||
|
||||
|
|
|
@ -4,7 +4,6 @@ var MoviesCollection = require('./MoviesCollection');
|
|||
var FullMovieCollection = require("./FullMovieCollection");
|
||||
var MoviesIndexLayout = require('./Index/MoviesIndexLayout');
|
||||
var MoviesDetailsLayout = require('./Details/MoviesDetailsLayout');
|
||||
var SeriesDetailsLayout = require('../Series/Details/SeriesDetailsLayout');
|
||||
|
||||
module.exports = NzbDroneController.extend({
|
||||
_originalInit : NzbDroneController.prototype.initialize,
|
||||
|
@ -23,17 +22,26 @@ module.exports = NzbDroneController.extend({
|
|||
},
|
||||
|
||||
seriesDetails : function(query) {
|
||||
var series = FullMovieCollection.where({ titleSlug : query });
|
||||
if (series.length !== 0) {
|
||||
var targetMovie = series[0];
|
||||
console.log(AppLayout.mainRegion);
|
||||
|
||||
this.setTitle(targetMovie.get('title'));
|
||||
//this.showNotFound();
|
||||
//this.showMainRegion(new SeriesDetailsLayout({model : targetMovie}));
|
||||
this.showMainRegion(new MoviesDetailsLayout({ model : targetMovie }));
|
||||
} else {
|
||||
this.showNotFound();
|
||||
}
|
||||
if(FullMovieCollection.length > 0) {
|
||||
this._renderMovieDetails(query);
|
||||
} else {
|
||||
this.listenTo(FullMovieCollection, 'sync', function(model, options) {
|
||||
this._renderMovieDetails(query);
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
_renderMovieDetails: function(query) {
|
||||
var movies = FullMovieCollection.where({ titleSlug : query });
|
||||
if (movies.length !== 0) {
|
||||
var targetMovie = movies[0];
|
||||
|
||||
this.setTitle(targetMovie.get('title'));
|
||||
this.showMainRegion(new MoviesDetailsLayout({ model : targetMovie }));
|
||||
} else {
|
||||
this.showNotFound();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue