Merge remote-tracking branch 'refs/remotes/galli-leo/develop' into develop

This commit is contained in:
Tim Turner 2017-01-08 17:01:47 -05:00
commit 14bf63e21d
27 changed files with 175 additions and 67 deletions

View File

@ -1,4 +1,9 @@
# Radarr [![Build Status](https://travis-ci.org/galli-leo/Radarr.svg?branch=develop)](https://travis-ci.org/galli-leo/Radarr)#
# Radarr
| Service | Master | Develop |
|----------|:---------------------------:|:----------------------------:|
| AppVeyor | [![AppVeyor](https://img.shields.io/appveyor/ci/galli-leo/Radarr/master.svg?maxAge=60&style=flat-square)](https://ci.appveyor.com/project/galli-leo/Radarr) | [![AppVeyor](https://img.shields.io/appveyor/ci/galli-leo/Radarr/develop.svg?maxAge=60&style=flat-square)](https://ci.appveyor.com/project/galli-leo/Radarr) |
| Travis | [![Travis](https://img.shields.io/travis/galli-leo/Radarr/master.svg?maxAge=60&style=flat-square)](https://travis-ci.org/galli-leo/Radarr) | [![Travis](https://img.shields.io/travis/galli-leo/Radarr/develop.svg?maxAge=60&style=flat-square)](https://travis-ci.org/galli-leo/Radarr) |
This fork of Sonarr aims to turn it into something like Couchpotato.

View File

@ -27,9 +27,10 @@ namespace NzbDrone.Api.Movie
public MovieStatusType Status { get; set; }
public string Overview { get; set; }
public DateTime? InCinemas { get; set; }
public DateTime? PhysicalRelease { get; set; }
public List<MediaCover> Images { get; set; }
public string Website { get; set; }
public bool Downloaded { get; set; }
public string RemotePoster { get; set; }
public int Year { get; set; }
@ -79,6 +80,8 @@ namespace NzbDrone.Api.Movie
{
if (model == null) return null;
long Size = model.MovieFile.Value != null ? model.MovieFile.Value.Size : 0;
return new MovieResource
{
Id = model.Id,
@ -87,6 +90,9 @@ namespace NzbDrone.Api.Movie
//AlternateTitles
SortTitle = model.SortTitle,
InCinemas = model.InCinemas,
PhysicalRelease = model.PhysicalRelease,
Downloaded = model.MovieFile.Value != null,
//TotalEpisodeCount
//EpisodeCount
//EpisodeFileCount
@ -104,6 +110,8 @@ namespace NzbDrone.Api.Movie
Monitored = model.Monitored,
SizeOnDisk = Size,
Runtime = model.Runtime,
LastInfoSync = model.LastInfoSync,
CleanTitle = model.CleanTitle,
@ -134,6 +142,7 @@ namespace NzbDrone.Api.Movie
//AlternateTitles
SortTitle = resource.SortTitle,
InCinemas = resource.InCinemas,
PhysicalRelease = resource.PhysicalRelease,
//TotalEpisodeCount
//EpisodeCount
//EpisodeFileCount

View File

@ -16,10 +16,10 @@ namespace NzbDrone.Common.Extensions
private const string UPDATE_CLIENT_EXE = "Radarr.Update.exe";
private const string BACKUP_FOLDER = "Backups";
private static readonly string UPDATE_SANDBOX_FOLDER_NAME = "nzbdrone_update" + Path.DirectorySeparatorChar;
private static readonly string UPDATE_PACKAGE_FOLDER_NAME = "";
private static readonly string UPDATE_BACKUP_FOLDER_NAME = "nzbdrone_backup" + Path.DirectorySeparatorChar;
private static readonly string UPDATE_BACKUP_APPDATA_FOLDER_NAME = "nzbdrone_appdata_backup" + Path.DirectorySeparatorChar;
private static readonly string UPDATE_SANDBOX_FOLDER_NAME = "radarr_update" + Path.DirectorySeparatorChar;
private static readonly string UPDATE_PACKAGE_FOLDER_NAME = "Radarr" + Path.DirectorySeparatorChar;
private static readonly string UPDATE_BACKUP_FOLDER_NAME = "radarr_backup" + Path.DirectorySeparatorChar;
private static readonly string UPDATE_BACKUP_APPDATA_FOLDER_NAME = "radarr_appdata_backup" + Path.DirectorySeparatorChar;
private static readonly string UPDATE_CLIENT_FOLDER_NAME = "NzbDrone.Update" + Path.DirectorySeparatorChar;
private static readonly string UPDATE_LOG_FOLDER_NAME = "UpdateLogs" + Path.DirectorySeparatorChar;

View File

@ -25,7 +25,7 @@ namespace NzbDrone.Common
public class ServiceProvider : IServiceProvider
{
public const string NZBDRONE_SERVICE_NAME = "NzbDrone";
public const string NZBDRONE_SERVICE_NAME = "Radarr";
private readonly IProcessProvider _processProvider;
private readonly Logger _logger;
@ -78,7 +78,7 @@ namespace NzbDrone.Common
serviceInstaller.Context = context;
serviceInstaller.DisplayName = serviceName;
serviceInstaller.ServiceName = serviceName;
serviceInstaller.Description = "NzbDrone Application Server";
serviceInstaller.Description = "Radarr Application Server";
serviceInstaller.StartType = ServiceStartMode.Automatic;
serviceInstaller.ServicesDependedOn = new[] { "EventLog", "Tcpip", "http" };

View File

@ -161,7 +161,8 @@ namespace NzbDrone.Core.Configuration
public bool AnalyticsEnabled => GetValueBoolean("AnalyticsEnabled", true, persist: false);
public string Branch => GetValue("Branch", "master").ToLowerInvariant();
// TODO: Change back to "master" for the first stable release.
public string Branch => GetValue("Branch", "develop").ToLowerInvariant();
public string LogLevel => GetValue("LogLevel", "Info");

View File

@ -0,0 +1,23 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using FluentMigrator;
using NzbDrone.Core.Datastore.Migration.Framework;
using System.Data;
namespace NzbDrone.Core.Datastore.Migration
{
[Migration(110)]
public class add_phyiscal_release : NzbDroneMigrationBase
{
protected override void MainDbUpgrade()
{
Alter.Table("Movies").AddColumn("PhysicalRelease").AsDateTime().Nullable();
}
}
}

View File

@ -61,6 +61,27 @@ namespace NzbDrone.Core.MetadataSource.SkyHook.Resource
public float vote_average { get; set; }
public int vote_count { get; set; }
public AlternativeTitles alternative_titles { get; set; }
public ReleaseDatesResource release_dates { get; set; }
}
public class ReleaseDatesResource
{
public List<ReleaseDates> results { get; set; }
}
public class ReleaseDate
{
public string certification { get; set; }
public string iso_639_1 { get; set; }
public string note { get; set; }
public string release_date { get; set; }
public int type { get; set; }
}
public class ReleaseDates
{
public string iso_3166_1 { get; set; }
public List<ReleaseDate> release_dates { get; set; }
}
public class Belongs_To_Collection

View File

@ -70,7 +70,7 @@ namespace NzbDrone.Core.MetadataSource.SkyHook
.SetSegment("route", "movie")
.SetSegment("id", TmdbId.ToString())
.SetSegment("secondaryRoute", "")
.AddQueryParam("append_to_response", "alternative_titles")
.AddQueryParam("append_to_response", "alternative_titles,release_dates")
.AddQueryParam("country", "US")
.Build();
@ -102,6 +102,27 @@ namespace NzbDrone.Core.MetadataSource.SkyHook
movie.AlternativeTitles.Add(title.title);
}
foreach(ReleaseDates releaseDates in resource.release_dates.results)
{
foreach(ReleaseDate releaseDate in releaseDates.release_dates)
{
if (releaseDate.type == 5 || releaseDate.type == 4)
{
if (movie.PhysicalRelease.HasValue)
{
if (movie.PhysicalRelease.Value.After(DateTime.Parse(releaseDate.release_date)))
{
movie.PhysicalRelease = DateTime.Parse(releaseDate.release_date); //Use oldest release date available.
}
}
else
{
movie.PhysicalRelease = DateTime.Parse(releaseDate.release_date);
}
}
}
}
movie.Ratings = new Ratings();
movie.Ratings.Votes = resource.vote_count;
movie.Ratings.Value = (decimal)resource.vote_average;

View File

@ -286,6 +286,7 @@
<Compile Include="Datastore\Migration\098_remove_titans_of_tv.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="Datastore\Migration\110_add_physical_release_to_table.cs" />
<Compile Include="Datastore\Migration\109_add_movie_formats_to_naming_config.cs" />
<Compile Include="Datastore\Migration\Framework\MigrationContext.cs" />
<Compile Include="Datastore\Migration\Framework\MigrationController.cs" />

View File

@ -41,6 +41,7 @@ namespace NzbDrone.Core.Tv
public string RootFolderPath { get; set; }
public DateTime Added { get; set; }
public DateTime? InCinemas { get; set; }
public DateTime? PhysicalRelease { get; set; }
public LazyLoaded<Profile> Profile { get; set; }
public HashSet<int> Tags { get; set; }
public AddMovieOptions AddOptions { get; set; }

View File

@ -83,6 +83,7 @@ namespace NzbDrone.Core.Tv
movie.Website = movieInfo.Website;
movie.AlternativeTitles = movieInfo.AlternativeTitles;
movie.Year = movieInfo.Year;
movie.PhysicalRelease = movieInfo.PhysicalRelease;
try
{

View File

@ -6,6 +6,6 @@ namespace NzbDrone.Core.Update.Commands
{
public override bool SendUpdatesToClient => true;
public override string CompletionMessage => "Restarting Sonarr to apply updates";
public override string CompletionMessage => "Restarting Radarr to apply updates";
}
}

View File

@ -129,7 +129,7 @@ namespace NzbDrone.Core.Update
_diskTransferService.TransferFolder(_appFolderInfo.GetUpdateClientFolder(), updateSandboxFolder, TransferMode.Move, false);
_logger.Info("Starting update client {0}", _appFolderInfo.GetUpdateClientExePath());
_logger.ProgressInfo("Sonarr will restart shortly.");
_logger.ProgressInfo("Radarr will restart shortly.");
_processProvider.Start(_appFolderInfo.GetUpdateClientExePath(), GetUpdaterArgs(updateSandboxFolder));
}
@ -178,8 +178,9 @@ namespace NzbDrone.Core.Update
{
var processId = _processProvider.GetCurrentProcess().Id.ToString();
var executingApplication = _runtimeInfo.ExecutingApplication;
return string.Join(" ", processId, updateSandboxFolder.TrimEnd(Path.DirectorySeparatorChar).WrapInQuotes(), executingApplication.WrapInQuotes(), _startupContext.PreservedArguments);
var args = string.Join(" ", processId, updateSandboxFolder.TrimEnd(Path.DirectorySeparatorChar).WrapInQuotes(), executingApplication.WrapInQuotes(), _startupContext.PreservedArguments);
_logger.Info("Updater Arguments: " + args);
return args;
}
private void EnsureAppDataSafety()
@ -187,7 +188,7 @@ namespace NzbDrone.Core.Update
if (_appFolderInfo.StartUpFolder.IsParentPath(_appFolderInfo.AppDataFolder) ||
_appFolderInfo.StartUpFolder.PathEquals(_appFolderInfo.AppDataFolder))
{
throw new UpdateFailedException("Your Sonarr configuration '{0}' is being stored in application folder '{1}' which will cause data lost during the upgrade. Please remove any symlinks or redirects before trying again.", _appFolderInfo.AppDataFolder, _appFolderInfo.StartUpFolder);
throw new UpdateFailedException("Your Radarr configuration '{0}' is being stored in application folder '{1}' which will cause data lost during the upgrade. Please remove any symlinks or redirects before trying again.", _appFolderInfo.AppDataFolder, _appFolderInfo.StartUpFolder);
}
}

View File

@ -28,8 +28,7 @@ namespace NzbDrone.Core.Update
public UpdatePackage AvailableUpdate()
{
//For new let's just use develop, afterwards we can change it back to the config: _configFileProvider.Branch
return _updatePackageProvider.GetLatestUpdate("develop", BuildInfo.Version);
return _updatePackageProvider.GetLatestUpdate(_configFileProvider.Branch, BuildInfo.Version);
}
}
}

View File

@ -36,7 +36,7 @@ namespace NzbDrone.Update
var startupArgument = new StartupContext(args);
NzbDroneLogger.Register(startupArgument, true, true);
Logger.Info("Starting Sonarr Update Client");
Logger.Info("Starting Radarr Update Client");
_container = UpdateContainerBuilder.Build(startupArgument);
@ -66,9 +66,9 @@ namespace NzbDrone.Update
}
var startupContext = new UpdateStartupContext
{
ProcessId = ParseProcessId(args[0])
};
{
ProcessId = ParseProcessId(args[0])
};
if (OsInfo.IsNotWindows)
{

View File

@ -17,7 +17,7 @@ namespace NzbDrone.Update
{
var assemblies = new List<string>
{
"NzbDrone.Update",
"Radarr.Update",
"NzbDrone.Common"
};

View File

@ -80,7 +80,7 @@ namespace NzbDrone.Update.UpdateEngine
public void Start(string installationFolder, int processId)
{
_logger.Info("Installation Folder: {0}", installationFolder);
_logger.Info("Updating Sonarr from version {0} to version {1}", _detectExistingVersion.GetExistingVersion(installationFolder), BuildInfo.Version);
_logger.Info("Updating Radarr from version {0} to version {1}", _detectExistingVersion.GetExistingVersion(installationFolder), BuildInfo.Version);
Verify(installationFolder, processId);
@ -103,7 +103,7 @@ namespace NzbDrone.Update.UpdateEngine
{
if (_processProvider.Exists(ProcessProvider.NZB_DRONE_CONSOLE_PROCESS_NAME) || _processProvider.Exists(ProcessProvider.NZB_DRONE_PROCESS_NAME))
{
_logger.Error("Sonarr was restarted prematurely by external process.");
_logger.Error("Radarr was restarted prematurely by external process.");
return;
}
}
@ -146,7 +146,7 @@ namespace NzbDrone.Update.UpdateEngine
if (_processProvider.Exists(ProcessProvider.NZB_DRONE_PROCESS_NAME))
{
_logger.Info("Sonarr was restarted by external process.");
_logger.Info("Radarr was restarted by external process.");
break;
}
}

View File

@ -50,7 +50,7 @@ var Collection = PageableCollection.extend({
},
sortMappings : {
'movie' : { sortKey : 'movie.sortTitle' }
'movie' : { sortKey : 'movie.title' }
},
initialize : function(options) {

View File

@ -0,0 +1,6 @@
var TemplatedCell = require('./TemplatedCell');
module.exports = TemplatedCell.extend({
className : 'movie-title-cell',
template : 'Cells/MovieDownloadStatusTemplate',
});

View File

@ -0,0 +1 @@
<span class="label label-{{DownloadedStatusColor}}">{{DownloadedStatus}}</span>

View File

@ -127,17 +127,56 @@ Handlebars.registerHelper('GetBannerStatus', function() {
else if (!monitored) {
return new Handlebars.SafeString('<div class="announced-banner"><i class="icon-sonarr-series-unmonitored grid-icon" title=""></i>&nbsp;Not Monitored</div>');
}
});
Handlebars.registerHelper('DownloadedStatusColor', function() {
if (!this.monitored) {
if (this.downloaded) {
return "default";
}
return "warning";
}
if (this.downloaded) {
return "success";
}
if (this.status != "released") {
return "primary";
}
return "danger";
})
Handlebars.registerHelper('DownloadedStatus', function() {
if (this.downloaded) {
return "Downloaded";
}
if (!this.monitored) {
return "Not Monitored";
}
return "Missing";
});
Handlebars.registerHelper('inCinemas', function() {
var monthNames = ["January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December"
];
if (this.physicalRelease) {
var d = new Date(this.physicalRelease);
var day = d.getDate();
var month = monthNames[d.getMonth()];
var year = d.getFullYear();
return "Available: " + day + ". " + month + " " + year;
}
var cinemasDate = new Date(this.inCinemas);
var year = cinemasDate.getFullYear();
var month = monthNames[cinemasDate.getMonth()];
return "In Cinemas " + month + " " + year;
return "In Cinemas: " + month + " " + year;
});
Handlebars.registerHelper('tvRageUrl', function() {

View File

@ -26,6 +26,7 @@
{{else}}
<span class="label label-default">Announced</span>
{{/if_eq}}
<span class="label label-{{DownloadedStatusColor}}">{{DownloadedStatus}}</span>
</div>
<div class="col-md-4">
<span class="series-info-links">

View File

@ -12,6 +12,7 @@ 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 FooterView = require('./FooterView');
var FooterModel = require('./FooterModel');
var ToolbarLayout = require('../../Shared/Toolbar/ToolbarLayout');
@ -38,7 +39,6 @@ module.exports = Marionette.Layout.extend({
label : 'Title',
cell : MovieTitleCell,
cellValue : 'this',
sortValue : 'sortTitle'
},
{
name : 'profileId',
@ -56,6 +56,11 @@ module.exports = Marionette.Layout.extend({
cell : MovieLinksCell,
className : "movie-links-cell"
},
{
name : "this",
label : "Status",
cell : MovieDownloadStatusCell,
},
{
name : 'this',
label : '',
@ -123,25 +128,17 @@ module.exports = Marionette.Layout.extend({
title : 'Title',
name : 'title'
},
{
title : 'Seasons',
name : 'seasonCount'
},
{
title : 'Quality',
name : 'profileId'
},
{
title : 'Network',
name : 'network'
title : 'In Cinemas',
name : 'inCinemas'
},
{
title : 'Next Airing',
name : 'nextAiring'
},
{
title : 'Episodes',
name : 'percentOfEpisodes'
title : "Status",
name : "status",
}
]
};
@ -165,27 +162,6 @@ module.exports = Marionette.Layout.extend({
tooltip : 'Monitored Only',
icon : 'icon-sonarr-monitored',
callback : this._setFilter
},
{
key : 'continuing',
title : '',
tooltip : 'Continuing Only',
icon : 'icon-sonarr-series-continuing',
callback : this._setFilter
},
{
key : 'ended',
title : '',
tooltip : 'Ended Only',
icon : 'icon-sonarr-series-ended',
callback : this._setFilter
},
{
key : 'missing',
title : '',
tooltip : 'Missing',
icon : 'icon-sonarr-missing',
callback : this._setFilter
}
]
};

View File

@ -40,6 +40,8 @@
<span class="label label-default">{{inCinemas}}</span>
{{profile profileId}}
<span class="label label-{{DownloadedStatusColor}}">{{DownloadedStatus}}</span>
</div>
<div class="col-md-4 col-xs-4">
<span class="movie-info-links">

View File

@ -15,10 +15,10 @@ var Collection = PageableCollection.extend({
tableName : 'movie',
state : {
sortKey : 'sortTitle',
order : -1,
sortKey : 'title',
order : 1,
pageSize : 100000,
secondarySortKey : 'sortTitle',
secondarySortKey : 'title',
secondarySortOrder : -1
},
@ -73,7 +73,7 @@ var Collection = PageableCollection.extend({
sortMappings : {
title : {
sortKey : 'sortTitle'
sortKey : 'title'
},
nextAiring : {

View File

@ -41,7 +41,7 @@ module.exports = Marionette.AppRouter.extend({
var label = window.location.pathname === window.NzbDrone.UrlBase + '/system/updates' ? 'Reload' : 'View Changes';
Messenger.show({
message : 'Sonarr has been updated',
message : 'Radarr has been updated',
hideAfter : 0,
id : 'sonarrUpdated',
actions : {

View File

@ -67,4 +67,4 @@ module.exports = Marionette.ItemView.extend({
_removeSortIcon : function() {
this.ui.icon.removeClass('icon-sonarr-sort-asc icon-sonarr-sort-desc');
}
});
});