mirror of
https://github.com/Radarr/Radarr.git
synced 2024-09-11 12:02:35 +02:00
Fixed: A lot of small ui errors (e.g. More not showing) (Revert of #1959)
This commit is contained in:
parent
38af8edd59
commit
a5823bb15f
@ -1,4 +1,4 @@
|
||||
using NzbDrone.Common.EnvironmentInfo;
|
||||
using NzbDrone.Common.EnvironmentInfo;
|
||||
using NzbDrone.Common.Extensions;
|
||||
|
||||
namespace NzbDrone.Core.HealthCheck.Checks
|
||||
@ -11,13 +11,13 @@ public AppDataLocationCheck(IAppFolderInfo appFolderInfo)
|
||||
{
|
||||
_appFolderInfo = appFolderInfo;
|
||||
}
|
||||
|
||||
|
||||
public override HealthCheck Check()
|
||||
{
|
||||
if (_appFolderInfo.StartUpFolder.IsParentPath(_appFolderInfo.AppDataFolder) ||
|
||||
_appFolderInfo.StartUpFolder.PathEquals(_appFolderInfo.AppDataFolder))
|
||||
{
|
||||
return new HealthCheck(GetType(), HealthCheckResult.Warning, "Updating will not be possible to prevent deleting AppData on update");
|
||||
return new HealthCheck(GetType(), HealthCheckResult.Warning, "Updating will not be possible to prevent deleting AppData on Update");
|
||||
}
|
||||
|
||||
return new HealthCheck(GetType());
|
||||
|
@ -1,4 +1,4 @@
|
||||
using System;
|
||||
using System;
|
||||
using System.Linq;
|
||||
using NLog;
|
||||
using NzbDrone.Core.Download;
|
||||
@ -22,7 +22,7 @@ public override HealthCheck Check()
|
||||
|
||||
if (!downloadClients.Any())
|
||||
{
|
||||
return new HealthCheck(GetType(), HealthCheckResult.Warning, "No download client is available.");
|
||||
return new HealthCheck(GetType(), HealthCheckResult.Warning, "No download client is available");
|
||||
}
|
||||
|
||||
foreach (var downloadClient in downloadClients)
|
||||
|
@ -1,4 +1,4 @@
|
||||
using NzbDrone.Common.Disk;
|
||||
using NzbDrone.Common.Disk;
|
||||
using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Core.Configuration;
|
||||
|
||||
@ -26,12 +26,12 @@ public override HealthCheck Check()
|
||||
|
||||
if (!_diskProvider.FolderExists(droneFactoryFolder))
|
||||
{
|
||||
return new HealthCheck(GetType(), HealthCheckResult.Error, "Drone Factory folder does not exist.");
|
||||
return new HealthCheck(GetType(), HealthCheckResult.Error, "Drone factory folder does not exist");
|
||||
}
|
||||
|
||||
|
||||
if (!_diskProvider.FolderWritable(droneFactoryFolder))
|
||||
{
|
||||
return new HealthCheck(GetType(), HealthCheckResult.Error, "Unable to write to Drone Factory folder");
|
||||
return new HealthCheck(GetType(), HealthCheckResult.Error, "Unable to write to drone factory folder");
|
||||
}
|
||||
|
||||
//Todo: Unable to import one or more files/folders from
|
||||
|
@ -1,4 +1,4 @@
|
||||
using System;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using NzbDrone.Common.Disk;
|
||||
@ -51,7 +51,7 @@ public override HealthCheck Check()
|
||||
// Migration helper logic
|
||||
if (!downloadClientIsLocalHost)
|
||||
{
|
||||
return new HealthCheck(GetType(), HealthCheckResult.Warning, "Enable completed download handling if possible (Multi-Computer unsupported).", "Migrating-to-Completed-Download-Handling#Unsupported-download-client-on-different-computer");
|
||||
return new HealthCheck(GetType(), HealthCheckResult.Warning, "Enable Completed Download Handling if possible (Multi-Computer unsupported)", "Migrating-to-Completed-Download-Handling#Unsupported-download-client-on-different-computer");
|
||||
}
|
||||
|
||||
if (downloadClients.All(v => v.DownloadClient is Sabnzbd))
|
||||
@ -59,10 +59,10 @@ public override HealthCheck Check()
|
||||
// With Sabnzbd we can check if the category should be changed.
|
||||
if (downloadClientOutputInDroneFactory)
|
||||
{
|
||||
return new HealthCheck(GetType(), HealthCheckResult.Warning, "Enable completed download handling if possible (SABnzbd - conflicting category).", "Migrating-to-Completed-Download-Handling#sabnzbd-conflicting-download-client-category");
|
||||
return new HealthCheck(GetType(), HealthCheckResult.Warning, "Enable Completed Download Handling if possible (Sabnzbd - Conflicting Category)", "Migrating-to-Completed-Download-Handling#sabnzbd-conflicting-download-client-category");
|
||||
}
|
||||
|
||||
return new HealthCheck(GetType(), HealthCheckResult.Warning, "Enable completed download handling if possible (SABnzbd).", "Migrating-to-Completed-Download-Handling#sabnzbd-enable-completed-download-handling");
|
||||
return new HealthCheck(GetType(), HealthCheckResult.Warning, "Enable Completed Download Handling if possible (Sabnzbd)", "Migrating-to-Completed-Download-Handling#sabnzbd-enable-completed-download-handling");
|
||||
}
|
||||
|
||||
if (downloadClients.All(v => v.DownloadClient is Nzbget))
|
||||
@ -70,18 +70,18 @@ public override HealthCheck Check()
|
||||
// With Nzbget we can check if the category should be changed.
|
||||
if (downloadClientOutputInDroneFactory)
|
||||
{
|
||||
return new HealthCheck(GetType(), HealthCheckResult.Warning, "Enable completed download handling if possible (NZBGet - conflicting category).", "Migrating-to-Completed-Download-Handling#nzbget-conflicting-download-client-category");
|
||||
return new HealthCheck(GetType(), HealthCheckResult.Warning, "Enable Completed Download Handling if possible (Nzbget - Conflicting Category)", "Migrating-to-Completed-Download-Handling#nzbget-conflicting-download-client-category");
|
||||
}
|
||||
|
||||
return new HealthCheck(GetType(), HealthCheckResult.Warning, "Enable completed download handling if possible (NZBGet).", "Migrating-to-Completed-Download-Handling#nzbget-enable-completed-download-handling");
|
||||
return new HealthCheck(GetType(), HealthCheckResult.Warning, "Enable Completed Download Handling if possible (Nzbget)", "Migrating-to-Completed-Download-Handling#nzbget-enable-completed-download-handling");
|
||||
}
|
||||
|
||||
return new HealthCheck(GetType(), HealthCheckResult.Warning, "Enable completed download handling if possible.", "Migrating-to-Completed-Download-Handling");
|
||||
return new HealthCheck(GetType(), HealthCheckResult.Warning, "Enable Completed Download Handling if possible", "Migrating-to-Completed-Download-Handling");
|
||||
}
|
||||
|
||||
if (!_configService.EnableCompletedDownloadHandling && droneFactoryFolder.IsEmpty)
|
||||
{
|
||||
return new HealthCheck(GetType(), HealthCheckResult.Warning, "Enable completed download handling or configure Drone Factory.");
|
||||
return new HealthCheck(GetType(), HealthCheckResult.Warning, "Enable Completed Download Handling or configure Drone factory");
|
||||
}
|
||||
|
||||
return new HealthCheck(GetType());
|
||||
|
@ -1,4 +1,4 @@
|
||||
using System.Linq;
|
||||
using System.Linq;
|
||||
using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Core.Indexers;
|
||||
|
||||
@ -19,14 +19,14 @@ public override HealthCheck Check()
|
||||
|
||||
if (enabled.Empty())
|
||||
{
|
||||
return new HealthCheck(GetType(), HealthCheckResult.Error, "No indexers available with RSS sync enabled, Radarr will not grab new releases automatically.");
|
||||
return new HealthCheck(GetType(), HealthCheckResult.Error, "No indexers available with RSS sync enabled, Radarr will not grab new releases automatically");
|
||||
}
|
||||
|
||||
var active = _indexerFactory.RssEnabled(true);
|
||||
|
||||
if (active.Empty())
|
||||
{
|
||||
return new HealthCheck(GetType(), HealthCheckResult.Warning, "All RSS capable indexers are temporarily unavailable due to recent indexer errors.");
|
||||
return new HealthCheck(GetType(), HealthCheckResult.Warning, "All rss-capable indexers are temporarily unavailable due to recent indexer errors");
|
||||
}
|
||||
|
||||
return new HealthCheck(GetType());
|
||||
|
@ -1,4 +1,4 @@
|
||||
using System.Linq;
|
||||
using System.Linq;
|
||||
using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Core.Indexers;
|
||||
|
||||
@ -19,14 +19,14 @@ public override HealthCheck Check()
|
||||
|
||||
if (enabled.Empty())
|
||||
{
|
||||
return new HealthCheck(GetType(), HealthCheckResult.Warning, "No indexers available with search enabled, Radarr will not provide any search results.");
|
||||
return new HealthCheck(GetType(), HealthCheckResult.Warning, "No indexers available with Search enabled, Radarr will not provide any search results");
|
||||
}
|
||||
|
||||
var active = _indexerFactory.SearchEnabled(true);
|
||||
|
||||
if (active.Empty())
|
||||
{
|
||||
return new HealthCheck(GetType(), HealthCheckResult.Warning, "All search-capable indexers are temporarily unavailable due to recent indexer errors.");
|
||||
return new HealthCheck(GetType(), HealthCheckResult.Warning, "All search-capable indexers are temporarily unavailable due to recent indexer errors");
|
||||
}
|
||||
|
||||
return new HealthCheck(GetType());
|
||||
|
@ -1,4 +1,4 @@
|
||||
using System;
|
||||
using System;
|
||||
using System.Linq;
|
||||
using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Core.Indexers;
|
||||
@ -33,7 +33,7 @@ public override HealthCheck Check()
|
||||
|
||||
if (backOffIndexers.Count == enabledIndexers.Count)
|
||||
{
|
||||
return new HealthCheck(GetType(), HealthCheckResult.Error, "All indexers are unavailable due to failures.", "#indexers-are-unavailable-due-to-failures");
|
||||
return new HealthCheck(GetType(), HealthCheckResult.Error, "All indexers are unavailable due to failures", "#indexers-are-unavailable-due-to-failures");
|
||||
}
|
||||
|
||||
return new HealthCheck(GetType(), HealthCheckResult.Warning, string.Format("Indexers unavailable due to failures: {0}", string.Join(", ", backOffIndexers.Select(v => v.Indexer.Definition.Name))), "#indexers-are-unavailable-due-to-failures");
|
||||
|
@ -1,4 +1,4 @@
|
||||
using System;
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Text.RegularExpressions;
|
||||
@ -35,24 +35,24 @@ public override HealthCheck Check()
|
||||
|
||||
if (version == new Version(3, 4, 0) && HasMonoBug18599())
|
||||
{
|
||||
_logger.Debug("Mono version 3.4.0, checking for mono bug #18599 returned positive.");
|
||||
return new HealthCheck(GetType(), HealthCheckResult.Error, "your Mono version 3.4.0 has a critical bug, you should upgrade to a higher version.");
|
||||
_logger.Debug("mono version 3.4.0, checking for mono bug #18599 returned positive.");
|
||||
return new HealthCheck(GetType(), HealthCheckResult.Error, "your mono version 3.4.0 has a critical bug, you should upgrade to a higher version");
|
||||
}
|
||||
|
||||
if (version == new Version(4, 4, 0) || version == new Version(4, 4, 1))
|
||||
{
|
||||
_logger.Debug("Mono version {0}", version);
|
||||
return new HealthCheck(GetType(), HealthCheckResult.Error, $"your Mono version {version} has a bug that causes issues connecting to indexers/download clients.");
|
||||
_logger.Debug("mono version {0}", version);
|
||||
return new HealthCheck(GetType(), HealthCheckResult.Error, $"your mono version {version} has a bug that causes issues connecting to indexers/download clients");
|
||||
}
|
||||
|
||||
if (version >= new Version(3, 10))
|
||||
{
|
||||
_logger.Debug("Mono version is 3.10 or better: {0}.", version.ToString());
|
||||
_logger.Debug("mono version is 3.10 or better: {0}", version.ToString());
|
||||
return new HealthCheck(GetType());
|
||||
}
|
||||
}
|
||||
|
||||
return new HealthCheck(GetType(), HealthCheckResult.Warning, "Mono version is less than 3.10, upgrade for improved stability.");
|
||||
return new HealthCheck(GetType(), HealthCheckResult.Warning, "mono version is less than 3.10, upgrade for improved stability");
|
||||
}
|
||||
|
||||
public override bool CheckOnConfigChange => false;
|
||||
@ -61,7 +61,7 @@ public override HealthCheck Check()
|
||||
|
||||
private bool HasMonoBug18599()
|
||||
{
|
||||
_logger.Debug("Mono version 3.4.0, checking for mono bug #18599.");
|
||||
_logger.Debug("mono version 3.4.0, checking for mono bug #18599.");
|
||||
var numberFormatterType = Type.GetType("System.NumberFormatter");
|
||||
|
||||
if (numberFormatterType == null)
|
||||
|
@ -1,4 +1,4 @@
|
||||
using NLog;
|
||||
using NLog;
|
||||
using NzbDrone.Common.Http;
|
||||
using NzbDrone.Core.Configuration;
|
||||
using System;
|
||||
@ -32,7 +32,7 @@ public override HealthCheck Check()
|
||||
var addresses = Dns.GetHostAddresses(_configService.ProxyHostname);
|
||||
if(!addresses.Any())
|
||||
{
|
||||
return new HealthCheck(GetType(), HealthCheckResult.Error, string.Format("Failed to resolve the IP address for the configured proxy host {0}.", _configService.ProxyHostname));
|
||||
return new HealthCheck(GetType(), HealthCheckResult.Error, string.Format("Failed to resolve the IP Address for the Configured Proxy Host {0}", _configService.ProxyHostname));
|
||||
}
|
||||
|
||||
var request = _cloudRequestBuilder.Create()
|
||||
@ -43,17 +43,17 @@ public override HealthCheck Check()
|
||||
{
|
||||
var response = _client.Execute(request);
|
||||
|
||||
// We only care about 400 responses, other error codes can be ignored
|
||||
// We only care about 400 responses, other error codes can be ignored
|
||||
if (response.StatusCode == HttpStatusCode.BadRequest)
|
||||
{
|
||||
_logger.Error("Proxy Health Check failed: {0}", response.StatusCode);
|
||||
return new HealthCheck(GetType(), HealthCheckResult.Error, string.Format("Failed to test proxy: StatusCode {1}.", request.Url, response.StatusCode));
|
||||
return new HealthCheck(GetType(), HealthCheckResult.Error, string.Format("Failed to test proxy: StatusCode {1}", request.Url, response.StatusCode));
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.Error(ex, "Proxy Health Check failed: {0}", ex.Message);
|
||||
return new HealthCheck(GetType(), HealthCheckResult.Error, string.Format("Failed to test proxy: {1}.", request.Url, ex.Message));
|
||||
return new HealthCheck(GetType(), HealthCheckResult.Error, string.Format("Failed to test proxy: {1}", request.Url, ex.Message));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
using System.Linq;
|
||||
using System.Linq;
|
||||
using NzbDrone.Common.Disk;
|
||||
using NzbDrone.Core.Tv;
|
||||
|
||||
@ -30,7 +30,7 @@ public override HealthCheck Check()
|
||||
return new HealthCheck(GetType(), HealthCheckResult.Error, "Missing root folder: " + missingRootFolders.First(), "#missing-root-folder");
|
||||
}
|
||||
|
||||
var message = string.Format("Multiple root folders are missing: {0}.", string.Join(" | ", missingRootFolders));
|
||||
var message = string.Format("Multiple root folders are missing: {0}", string.Join(" | ", missingRootFolders));
|
||||
return new HealthCheck(GetType(), HealthCheckResult.Error, message, "#missing-root-folder");
|
||||
}
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
using System;
|
||||
using System;
|
||||
using System.IO;
|
||||
using NzbDrone.Common.Disk;
|
||||
using NzbDrone.Common.EnvironmentInfo;
|
||||
@ -45,14 +45,14 @@ public override HealthCheck Check()
|
||||
{
|
||||
return new HealthCheck(GetType(), HealthCheckResult.Error,
|
||||
string.Format("Cannot install update because startup folder '{0}' is not writable by the user '{1}'.", startupFolder, Environment.UserName),
|
||||
"Cannot install update because startup folder is not writable by the user.");
|
||||
"Cannot install update because startup folder is not writable by the user");
|
||||
}
|
||||
|
||||
if (!_diskProvider.FolderWritable(uiFolder))
|
||||
{
|
||||
return new HealthCheck(GetType(), HealthCheckResult.Error,
|
||||
string.Format("Cannot install update because UI folder '{0}' is not writable by the user '{1}'.", uiFolder, Environment.UserName),
|
||||
"Cannot install update because UI folder is not writable by the user.");
|
||||
"Cannot install update because UI folder is not writable by the user");
|
||||
}
|
||||
}
|
||||
|
||||
@ -60,7 +60,7 @@ public override HealthCheck Check()
|
||||
{
|
||||
if (_checkUpdateService.AvailableUpdate() != null)
|
||||
{
|
||||
return new HealthCheck(GetType(), HealthCheckResult.Warning, "New update is available.");
|
||||
return new HealthCheck(GetType(), HealthCheckResult.Warning, "New update is available");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
using FluentValidation;
|
||||
using FluentValidation;
|
||||
using NzbDrone.Core.Annotations;
|
||||
using NzbDrone.Core.ThingiProvider;
|
||||
using NzbDrone.Core.Validation;
|
||||
@ -17,7 +17,7 @@ public class BoxcarSettings : IProviderConfig
|
||||
{
|
||||
private static readonly BoxcarSettingsValidator Validator = new BoxcarSettingsValidator();
|
||||
|
||||
[FieldDefinition(0, Label = "Access Token", HelpText = "Your access token, from your Boxcar account settings.", HelpLink = "https://new.boxcar.io/account/edit")]
|
||||
[FieldDefinition(0, Label = "Access Token", HelpText = "Your Access Token, from your Boxcar account settings: https://new.boxcar.io/account/edit", HelpLink = "https://new.boxcar.io/account/edit")]
|
||||
public string Token { get; set; }
|
||||
|
||||
public NzbDroneValidationResult Validate()
|
||||
|
@ -1,4 +1,4 @@
|
||||
using FluentValidation;
|
||||
using FluentValidation;
|
||||
using NzbDrone.Core.Annotations;
|
||||
using NzbDrone.Core.ThingiProvider;
|
||||
using NzbDrone.Core.Validation;
|
||||
@ -21,7 +21,7 @@ public class CustomScriptSettings : IProviderConfig
|
||||
[FieldDefinition(0, Label = "Path", Type = FieldType.FilePath)]
|
||||
public string Path { get; set; }
|
||||
|
||||
[FieldDefinition(1, Label = "Arguments", HelpText = "Arguments to pass to the script.")]
|
||||
[FieldDefinition(1, Label = "Arguments", HelpText = "Arguments to pass to the script")]
|
||||
public string Arguments { get; set; }
|
||||
|
||||
public NzbDroneValidationResult Validate()
|
||||
|
@ -1,4 +1,4 @@
|
||||
using FluentValidation;
|
||||
using FluentValidation;
|
||||
using NzbDrone.Core.Annotations;
|
||||
using NzbDrone.Core.ThingiProvider;
|
||||
using NzbDrone.Core.Validation;
|
||||
@ -27,7 +27,7 @@ public EmailSettings()
|
||||
Ssl = true;
|
||||
}
|
||||
|
||||
[FieldDefinition(0, Label = "Server", HelpText = "Hostname or IP address of the email server")]
|
||||
[FieldDefinition(0, Label = "Server", HelpText = "Hostname or IP of Email server")]
|
||||
public string Server { get; set; }
|
||||
|
||||
[FieldDefinition(1, Label = "Port")]
|
||||
|
@ -1,4 +1,4 @@
|
||||
using FluentValidation;
|
||||
using FluentValidation;
|
||||
using Newtonsoft.Json;
|
||||
using NzbDrone.Core.Annotations;
|
||||
using NzbDrone.Core.ThingiProvider;
|
||||
@ -33,10 +33,10 @@ public MediaBrowserSettings()
|
||||
[FieldDefinition(2, Label = "API Key")]
|
||||
public string ApiKey { get; set; }
|
||||
|
||||
[FieldDefinition(3, Label = "Send Notifications", HelpText = "Should MediaBrowser send notfications to configured providers?", Type = FieldType.Checkbox)]
|
||||
[FieldDefinition(3, Label = "Send Notifications", HelpText = "Have MediaBrowser send notfications to configured providers", Type = FieldType.Checkbox)]
|
||||
public bool Notify { get; set; }
|
||||
|
||||
[FieldDefinition(4, Label = "Update Library", HelpText = "Update library on download & rename?", Type = FieldType.Checkbox)]
|
||||
[FieldDefinition(4, Label = "Update Library", HelpText = "Update Library on Download & Rename?", Type = FieldType.Checkbox)]
|
||||
public bool UpdateLibrary { get; set; }
|
||||
|
||||
[JsonIgnore]
|
||||
|
@ -1,4 +1,4 @@
|
||||
using FluentValidation;
|
||||
using FluentValidation;
|
||||
using NzbDrone.Core.Annotations;
|
||||
using NzbDrone.Core.ThingiProvider;
|
||||
using NzbDrone.Core.Validation;
|
||||
@ -40,7 +40,7 @@ public PlexServerSettings()
|
||||
[FieldDefinition(4, Label = "Update Library", Type = FieldType.Checkbox)]
|
||||
public bool UpdateLibrary { get; set; }
|
||||
|
||||
[FieldDefinition(5, Label = "Use SSL", Type = FieldType.Checkbox, HelpText = "Connect to Plex over HTTPS instead of HTTP?")]
|
||||
[FieldDefinition(5, Label = "Use SSL", Type = FieldType.Checkbox, HelpText = "Connect to Plex over HTTPS instead of HTTP")]
|
||||
public bool UseSsl { get; set; }
|
||||
|
||||
public bool IsValid => !string.IsNullOrWhiteSpace(Host);
|
||||
|
@ -1,4 +1,4 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Generic;
|
||||
using FluentValidation;
|
||||
using NzbDrone.Core.Annotations;
|
||||
using NzbDrone.Core.ThingiProvider;
|
||||
@ -27,13 +27,13 @@ public PushBulletSettings()
|
||||
[FieldDefinition(0, Label = "API Key", HelpLink = "https://www.pushbullet.com/")]
|
||||
public string ApiKey { get; set; }
|
||||
|
||||
[FieldDefinition(1, Label = "Device IDs", HelpText = "List of device IDs, use device_iden in the device's URL on pushbullet.com (leave blank to send to all devices).", Type = FieldType.Tag)]
|
||||
[FieldDefinition(1, Label = "Device IDs", HelpText = "List of device IDs, use device_iden in the device's URL on pushbullet.com (leave blank to send to all devices)", Type = FieldType.Tag)]
|
||||
public IEnumerable<string> DeviceIds { get; set; }
|
||||
|
||||
[FieldDefinition(2, Label = "Channel Tags", HelpText = "List of channel tags to send notifications to.", Type = FieldType.Tag)]
|
||||
[FieldDefinition(2, Label = "Channel Tags", HelpText = "List of Channel Tags to send notifications to", Type = FieldType.Tag)]
|
||||
public IEnumerable<string> ChannelTags { get; set; }
|
||||
|
||||
[FieldDefinition(3, Label = "Sender ID", HelpText = "The device ID to send notifications from, use device_iden in the device's URL on pushbullet.com (leave blank to send from yourself).")]
|
||||
[FieldDefinition(3, Label = "Sender ID", HelpText = "The device ID to send notifications from, use device_iden in the device's URL on pushbullet.com (leave blank to send from yourself)")]
|
||||
public string SenderId { get; set; }
|
||||
|
||||
public NzbDroneValidationResult Validate()
|
||||
|
@ -1,4 +1,4 @@
|
||||
using FluentValidation;
|
||||
using FluentValidation;
|
||||
using NzbDrone.Core.Annotations;
|
||||
using NzbDrone.Core.ThingiProvider;
|
||||
using NzbDrone.Core.Validation;
|
||||
@ -28,7 +28,7 @@ public PushalotSettings()
|
||||
[FieldDefinition(1, Label = "Priority", Type = FieldType.Select, SelectOptions = typeof(PushalotPriority))]
|
||||
public int Priority { get; set; }
|
||||
|
||||
[FieldDefinition(2, Label = "Image", Type = FieldType.Checkbox, HelpText = "Include Radarr logo with notifications?")]
|
||||
[FieldDefinition(2, Label = "Image", Type = FieldType.Checkbox, HelpText = "Include Radarr logo with notifications")]
|
||||
public bool Image { get; set; }
|
||||
|
||||
public bool IsValid => !string.IsNullOrWhiteSpace(AuthToken);
|
||||
|
@ -1,4 +1,4 @@
|
||||
using FluentValidation;
|
||||
using FluentValidation;
|
||||
using NzbDrone.Core.Annotations;
|
||||
using NzbDrone.Core.ThingiProvider;
|
||||
using NzbDrone.Core.Validation;
|
||||
@ -34,13 +34,13 @@ public PushoverSettings()
|
||||
[FieldDefinition(2, Label = "Priority", Type = FieldType.Select, SelectOptions = typeof(PushoverPriority) )]
|
||||
public int Priority { get; set; }
|
||||
|
||||
[FieldDefinition(3, Label = "Retry", Type = FieldType.Textbox, HelpText = "Interval to retry emergency alerts, minimum 30 seconds.")]
|
||||
[FieldDefinition(3, Label = "Retry", Type = FieldType.Textbox, HelpText = "Interval to retry Emergency alerts, minimum 30 seconds")]
|
||||
public int Retry { get; set; }
|
||||
|
||||
[FieldDefinition(4, Label = "Expire", Type = FieldType.Textbox, HelpText = "Maximum time to retry emergency alerts, maximum 86400 seconds.")]
|
||||
[FieldDefinition(4, Label = "Expire", Type = FieldType.Textbox, HelpText = "Maximum time to retry Emergency alerts, maximum 86400 seconds")]
|
||||
public int Expire { get; set; }
|
||||
|
||||
[FieldDefinition(5, Label = "Sound", Type = FieldType.Textbox, HelpText = "Notification sound, leave blank to use the default.", HelpLink = "https://pushover.net/api#sounds")]
|
||||
[FieldDefinition(5, Label = "Sound", Type = FieldType.Textbox, HelpText = "Notification sound, leave blank to use the default", HelpLink = "https://pushover.net/api#sounds")]
|
||||
public string Sound { get; set; }
|
||||
|
||||
public bool IsValid => !string.IsNullOrWhiteSpace(UserKey) && Priority >= -1 && Priority <= 2;
|
||||
|
@ -1,4 +1,4 @@
|
||||
using FluentValidation;
|
||||
using FluentValidation;
|
||||
using NzbDrone.Core.Annotations;
|
||||
using NzbDrone.Core.ThingiProvider;
|
||||
using NzbDrone.Core.Validation;
|
||||
@ -18,13 +18,13 @@ public class SlackSettings : IProviderConfig
|
||||
{
|
||||
private static readonly SlackSettingsValidator Validator = new SlackSettingsValidator();
|
||||
|
||||
[FieldDefinition(0, Label = "Webhook URL", HelpText = "Slack channel webhook url.", Type = FieldType.Url, HelpLink = "https://my.slack.com/services/new/incoming-webhook/")]
|
||||
[FieldDefinition(0, Label = "Webhook URL", HelpText = "Slack channel webhook url", Type = FieldType.Url, HelpLink = "https://my.slack.com/services/new/incoming-webhook/")]
|
||||
public string WebHookUrl { get; set; }
|
||||
|
||||
[FieldDefinition(1, Label = "Username", HelpText = "Choose the username that this integration will post as.", Type = FieldType.Textbox)]
|
||||
[FieldDefinition(1, Label = "Username", HelpText = "Choose the username that this integration will post as", Type = FieldType.Textbox)]
|
||||
public string Username { get; set; }
|
||||
|
||||
[FieldDefinition(2, Label = "Icon", HelpText = "Change the icon that is used for messages from this integration (Emoji or URL).", Type = FieldType.Textbox, HelpLink = "http://www.emoji-cheat-sheet.com/")]
|
||||
[FieldDefinition(2, Label = "Icon", HelpText = "Change the icon that is used for messages from this integration (Emoji or URL)", Type = FieldType.Textbox, HelpLink = "http://www.emoji-cheat-sheet.com/")]
|
||||
public string Icon { get; set; }
|
||||
|
||||
public NzbDroneValidationResult Validate()
|
||||
|
@ -1,4 +1,4 @@
|
||||
using FluentValidation;
|
||||
using FluentValidation;
|
||||
using NzbDrone.Core.Annotations;
|
||||
using NzbDrone.Core.ThingiProvider;
|
||||
using NzbDrone.Core.Validation;
|
||||
@ -22,7 +22,7 @@ public SynologyIndexerSettings()
|
||||
UpdateLibrary = true;
|
||||
}
|
||||
|
||||
[FieldDefinition(0, Label = "Update Library", Type = FieldType.Checkbox, HelpText = "Call synoindex on localhost to update a library file.")]
|
||||
[FieldDefinition(0, Label = "Update Library", Type = FieldType.Checkbox, HelpText = "Call synoindex on localhost to update a library file")]
|
||||
public bool UpdateLibrary { get; set; }
|
||||
|
||||
public NzbDroneValidationResult Validate()
|
||||
|
@ -1,4 +1,4 @@
|
||||
using FluentValidation;
|
||||
using FluentValidation;
|
||||
using NzbDrone.Core.Annotations;
|
||||
using NzbDrone.Core.ThingiProvider;
|
||||
using NzbDrone.Core.Validation;
|
||||
@ -21,7 +21,7 @@ public class TelegramSettings : IProviderConfig
|
||||
[FieldDefinition(0, Label = "Bot Token", HelpLink = "https://core.telegram.org/bots")]
|
||||
public string BotToken { get; set; }
|
||||
|
||||
[FieldDefinition(1, Label = "Chat ID", HelpLink = "http://stackoverflow.com/a/37396871/882971", HelpText = "You must start a conversation with the bot or add it to your group before you can receive messages.")]
|
||||
[FieldDefinition(1, Label = "Chat ID", HelpLink = "http://stackoverflow.com/a/37396871/882971", HelpText = "You must start a conversation with the bot or add it to your group to receive messages")]
|
||||
public string ChatId { get; set; }
|
||||
|
||||
public bool IsValid => !string.IsNullOrWhiteSpace(ChatId) && !string.IsNullOrWhiteSpace(BotToken);
|
||||
|
@ -1,4 +1,4 @@
|
||||
using FluentValidation;
|
||||
using FluentValidation;
|
||||
using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Core.Annotations;
|
||||
using NzbDrone.Core.ThingiProvider;
|
||||
@ -18,7 +18,7 @@ public TwitterSettingsValidator()
|
||||
RuleFor(c => c.Mention).NotEmpty().When(c => c.DirectMessage);
|
||||
|
||||
RuleFor(c => c.DirectMessage).Equal(true)
|
||||
.WithMessage("Using direct messaging is recommended, or use a private account.")
|
||||
.WithMessage("Using Direct Messaging is recommended, or use a private account.")
|
||||
.AsWarning();
|
||||
|
||||
RuleFor(c => c.AuthorizeNotification).Empty()
|
||||
@ -37,10 +37,10 @@ public TwitterSettings()
|
||||
AuthorizeNotification = "step1";
|
||||
}
|
||||
|
||||
[FieldDefinition(0, Label = "Consumer Key", HelpText = "Consumer key from a Twitter application.", HelpLink = "https://github.com/Radarr/Radarr/wiki/Twitter-Notifications")]
|
||||
[FieldDefinition(0, Label = "Consumer Key", HelpText = "Consumer key from a Twitter application", HelpLink = "https://github.com/Radarr/Radarr/wiki/Twitter-Notifications")]
|
||||
public string ConsumerKey { get; set; }
|
||||
|
||||
[FieldDefinition(1, Label = "Consumer Secret", HelpText = "Consumer secret from a Twitter application.", HelpLink = "https://github.com/Radarr/Radarr/wiki/Twitter-Notifications")]
|
||||
[FieldDefinition(1, Label = "Consumer Secret", HelpText = "Consumer secret from a Twitter application", HelpLink = "https://github.com/Radarr/Radarr/wiki/Twitter-Notifications")]
|
||||
public string ConsumerSecret { get; set; }
|
||||
|
||||
[FieldDefinition(2, Label = "Access Token", Advanced = true)]
|
||||
@ -49,10 +49,10 @@ public TwitterSettings()
|
||||
[FieldDefinition(3, Label = "Access Token Secret", Advanced = true)]
|
||||
public string AccessTokenSecret { get; set; }
|
||||
|
||||
[FieldDefinition(4, Label = "Mention", HelpText = "Mention this user in sent tweets.")]
|
||||
[FieldDefinition(4, Label = "Mention", HelpText = "Mention this user in sent tweets")]
|
||||
public string Mention { get; set; }
|
||||
|
||||
[FieldDefinition(5, Label = "Direct Message", Type = FieldType.Checkbox, HelpText = "Send a direct message instead of a public message.")]
|
||||
[FieldDefinition(5, Label = "Direct Message", Type = FieldType.Checkbox, HelpText = "Send a direct message instead of a public message")]
|
||||
public bool DirectMessage { get; set; }
|
||||
|
||||
[FieldDefinition(6, Label = "Connect to twitter", Type = FieldType.Action)]
|
||||
|
@ -1,4 +1,4 @@
|
||||
using System;
|
||||
using System;
|
||||
using FluentValidation;
|
||||
using NzbDrone.Core.Annotations;
|
||||
using NzbDrone.Core.ThingiProvider;
|
||||
@ -26,7 +26,7 @@ public WebhookSettings()
|
||||
[FieldDefinition(0, Label = "URL", Type = FieldType.Url)]
|
||||
public string Url { get; set; }
|
||||
|
||||
[FieldDefinition(1, Label = "Method", Type = FieldType.Select, SelectOptions = typeof(WebhookMethod), HelpText = "Which HTTP method to use submit to the web service.")]
|
||||
[FieldDefinition(1, Label = "Method", Type = FieldType.Select, SelectOptions = typeof(WebhookMethod), HelpText = "Which HTTP method to use submit to the Webservice")]
|
||||
public int Method { get; set; }
|
||||
|
||||
public NzbDroneValidationResult Validate()
|
||||
|
@ -1,4 +1,4 @@
|
||||
using System.ComponentModel;
|
||||
using System.ComponentModel;
|
||||
using FluentValidation;
|
||||
using Newtonsoft.Json;
|
||||
using NzbDrone.Core.Annotations;
|
||||
@ -39,19 +39,19 @@ public XbmcSettings()
|
||||
public string Password { get; set; }
|
||||
|
||||
[DefaultValue(5)]
|
||||
[FieldDefinition(4, Label = "Display Time", HelpText = "How long the notification will be displayed for (in seconds).")]
|
||||
[FieldDefinition(4, Label = "Display Time", HelpText = "How long the notification will be displayed for (In seconds)")]
|
||||
public int DisplayTime { get; set; }
|
||||
|
||||
[FieldDefinition(5, Label = "GUI Notification", Type = FieldType.Checkbox)]
|
||||
public bool Notify { get; set; }
|
||||
|
||||
[FieldDefinition(6, Label = "Update Library", HelpText = "Update library on download & rename?", Type = FieldType.Checkbox)]
|
||||
[FieldDefinition(6, Label = "Update Library", HelpText = "Update Library on Download & Rename?", Type = FieldType.Checkbox)]
|
||||
public bool UpdateLibrary { get; set; }
|
||||
|
||||
[FieldDefinition(7, Label = "Clean Library", HelpText = "Clean library after update?", Type = FieldType.Checkbox)]
|
||||
[FieldDefinition(7, Label = "Clean Library", HelpText = "Clean Library after update?", Type = FieldType.Checkbox)]
|
||||
public bool CleanLibrary { get; set; }
|
||||
|
||||
[FieldDefinition(8, Label = "Always Update", HelpText = "Update library even when a video is playing?", Type = FieldType.Checkbox)]
|
||||
[FieldDefinition(8, Label = "Always Update", HelpText = "Update Library even when a video is playing?", Type = FieldType.Checkbox)]
|
||||
public bool AlwaysUpdate { get; set; }
|
||||
|
||||
[JsonIgnore]
|
||||
|
@ -8,4 +8,4 @@
|
||||
<div class="tab-pane" id="queue"></div>
|
||||
<div class="tab-pane" id="history"></div>
|
||||
<div class="tab-pane" id="blacklist"></div>
|
||||
</div>
|
||||
</div>
|
@ -82,7 +82,7 @@ module.exports = Marionette.Layout.extend({
|
||||
storeState : false,
|
||||
items : [
|
||||
{
|
||||
title : 'Clear blacklist',
|
||||
title : 'Clear Blacklist',
|
||||
icon : 'icon-sonarr-clear',
|
||||
command : 'clearBlacklist'
|
||||
}
|
||||
|
@ -1,11 +1,11 @@
|
||||
<div id="x-toolbar"></div>
|
||||
<div id="x-toolbar"/>
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div id="x-blacklist" class="table-responsive"></div>
|
||||
<div id="x-blacklist" class="table-responsive"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div id="x-pager"></div>
|
||||
<div id="x-pager"/>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -1,10 +1,16 @@
|
||||
<div class="modal-content">
|
||||
<div class="history-detail-modal">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="close">×</button>
|
||||
<h3>Blacklisted</h3>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
|
||||
|
||||
<h3>
|
||||
Blacklisted
|
||||
</h3>
|
||||
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
|
||||
</div>
|
||||
<div class="modal-body"></div>
|
||||
<div class="modal-footer">
|
||||
<button class="btn" data-dismiss="modal">Close</button>
|
||||
</div>
|
||||
|
@ -1,21 +1,23 @@
|
||||
<dl class="dl-horizontal info">
|
||||
|
||||
<dt>Name:</dt>
|
||||
<dd>{{sourceTitle}}</dd>
|
||||
|
||||
{{#if protocol}}
|
||||
{{#unless_eq protocol compare="unknown"}}
|
||||
<dt>Protocol:</dt>
|
||||
<dd>{{protocol}}</dd>
|
||||
{{/unless_eq}}
|
||||
{{#unless_eq protocol compare="unknown"}}
|
||||
<dt>Protocol:</dt>
|
||||
<dd>{{protocol}}</dd>
|
||||
{{/unless_eq}}
|
||||
{{/if}}
|
||||
|
||||
{{#if indexer}}
|
||||
<dt>Indexer:</dt>
|
||||
<dd>{{indexer}}</dd>
|
||||
<dt>Indexer:</dt>
|
||||
<dd>{{indexer}}</dd>
|
||||
{{/if}}
|
||||
|
||||
|
||||
{{#if message}}
|
||||
<dt>Message:</dt>
|
||||
<dd>{{message}}</dd>
|
||||
<dt>Message:</dt>
|
||||
<dd>{{message}}</dd>
|
||||
{{/if}}
|
||||
</dl>
|
||||
|
@ -1,19 +1,21 @@
|
||||
<div class="modal-content">
|
||||
<div class="history-detail-modal">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="close">×</button>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
|
||||
|
||||
<h3>
|
||||
{{#if_eq eventType compare="grabbed"}}Grabbed{{/if_eq}}
|
||||
{{#if_eq eventType compare="downloadFailed"}}Download failed{{/if_eq}}
|
||||
{{#if_eq eventType compare="downloadFolderImported"}}Movie imported{{/if_eq}}
|
||||
{{#if_eq eventType compare="episodeFileDeleted"}}Movie file deleted{{/if_eq}}
|
||||
{{#if_eq eventType compare="downloadFailed"}}Download Failed{{/if_eq}}
|
||||
{{#if_eq eventType compare="downloadFolderImported"}}Episode Imported{{/if_eq}}
|
||||
{{#if_eq eventType compare="episodeFileDeleted"}}Episode File Deleted{{/if_eq}}
|
||||
</h3>
|
||||
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
|
||||
</div>
|
||||
<div class="modal-body"></div>
|
||||
<div class="modal-footer">
|
||||
{{#if_eq eventType compare="grabbed"}}
|
||||
<button class="btn btn-danger x-mark-as-failed">Mark as failed</button>
|
||||
{{/if_eq}}
|
||||
{{#if_eq eventType compare="grabbed"}}<button class="btn btn-danger x-mark-as-failed">Mark As Failed</button>{{/if_eq}}
|
||||
<button class="btn" data-dismiss="modal">Close</button>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -1,101 +1,103 @@
|
||||
{{#if_eq eventType compare="grabbed"}}
|
||||
<dl class="dl-horizontal info">
|
||||
<dt>Name:</dt>
|
||||
<dd>{{sourceTitle}}</dd>
|
||||
<dl class="dl-horizontal info">
|
||||
|
||||
{{#with data}}
|
||||
{{#if indexer}}
|
||||
<dt>Indexer:</dt>
|
||||
<dd>{{indexer}}</dd>
|
||||
{{/if}}
|
||||
<dt>Name:</dt>
|
||||
<dd>{{sourceTitle}}</dd>
|
||||
|
||||
{{#if releaseGroup}}
|
||||
<dt>Release group:</dt>
|
||||
<dd>{{releaseGroup}}</dd>
|
||||
{{/if}}
|
||||
{{#with data}}
|
||||
{{#if indexer}}
|
||||
<dt>Indexer:</dt>
|
||||
<dd>{{indexer}}</dd>
|
||||
{{/if}}
|
||||
|
||||
{{#if nzbInfoUrl}}
|
||||
<dt>Info:</dt>
|
||||
<dd><a href="{{nzbInfoUrl}}">{{nzbInfoUrl}}</a></dd>
|
||||
{{/if}}
|
||||
{{#if releaseGroup}}
|
||||
<dt>Release Group:</dt>
|
||||
<dd>{{releaseGroup}}</dd>
|
||||
{{/if}}
|
||||
|
||||
{{#if downloadClient}}
|
||||
<dt>Download client:</dt>
|
||||
<dd>{{downloadClient}}</dd>
|
||||
{{/if}}
|
||||
{{#if nzbInfoUrl}}
|
||||
<dt>Info:</dt>
|
||||
<dd><a href="{{nzbInfoUrl}}">{{nzbInfoUrl}}</a></dd>
|
||||
{{/if}}
|
||||
|
||||
{{#if downloadId}}
|
||||
<dt>Grab ID:</dt>
|
||||
<dd>{{downloadId}}</dd>
|
||||
{{/if}}
|
||||
{{#if downloadClient}}
|
||||
<dt>Download Client:</dt>
|
||||
<dd>{{downloadClient}}</dd>
|
||||
{{/if}}
|
||||
|
||||
{{#if age}}
|
||||
{{historyAge}}
|
||||
{{/if}}
|
||||
{{#if downloadId}}
|
||||
<dt>Grab ID:</dt>
|
||||
<dd>{{downloadId}}</dd>
|
||||
{{/if}}
|
||||
|
||||
{{#if publishedDate}}
|
||||
<dt>Published date:</dt>
|
||||
<dd>{{ShortDate publishedDate}} {{LTS publishedDate}}</dd>
|
||||
{{/if}}
|
||||
{{/with}}
|
||||
</dl>
|
||||
{{#if age}}
|
||||
{{historyAge}}
|
||||
{{/if}}
|
||||
|
||||
{{#if publishedDate}}
|
||||
<dt>Published Date:</dt>
|
||||
<dd>{{ShortDate publishedDate}} {{LTS publishedDate}}</dd>
|
||||
{{/if}}
|
||||
{{/with}}
|
||||
</dl>
|
||||
{{/if_eq}}
|
||||
|
||||
{{#if_eq eventType compare="downloadFailed"}}
|
||||
<dl class="dl-horizontal">
|
||||
<dl class="dl-horizontal">
|
||||
|
||||
<dt>Name:</dt>
|
||||
<dd>{{sourceTitle}}</dd>
|
||||
<dt>Name:</dt>
|
||||
<dd>{{sourceTitle}}</dd>
|
||||
|
||||
{{#with data}}
|
||||
<dt>Message:</dt>
|
||||
<dd>{{message}}</dd>
|
||||
{{/with}}
|
||||
</dl>
|
||||
{{#with data}}
|
||||
<dt>Message:</dt>
|
||||
<dd>{{message}}</dd>
|
||||
{{/with}}
|
||||
</dl>
|
||||
{{/if_eq}}
|
||||
|
||||
{{#if_eq eventType compare="downloadFolderImported"}}
|
||||
<dl class="dl-horizontal">
|
||||
<dl class="dl-horizontal">
|
||||
|
||||
{{#if sourceTitle}}
|
||||
<dt>Name:</dt>
|
||||
<dd>{{sourceTitle}}</dd>
|
||||
{{/if}}
|
||||
{{#if sourceTitle}}
|
||||
<dt>Name:</dt>
|
||||
<dd>{{sourceTitle}}</dd>
|
||||
{{/if}}
|
||||
|
||||
{{#with data}}
|
||||
{{#if droppedPath}}
|
||||
<dt>Source:</dt>
|
||||
<dd>{{droppedPath}}</dd>
|
||||
{{/if}}
|
||||
{{#with data}}
|
||||
{{#if droppedPath}}
|
||||
<dt>Source:</dt>
|
||||
<dd>{{droppedPath}}</dd>
|
||||
{{/if}}
|
||||
|
||||
{{#if importedPath}}
|
||||
<dt>Imported to:</dt>
|
||||
<dd>{{importedPath}}</dd>
|
||||
{{/if}}
|
||||
{{/with}}
|
||||
</dl>
|
||||
{{#if importedPath}}
|
||||
<dt>Imported To:</dt>
|
||||
<dd>{{importedPath}}</dd>
|
||||
{{/if}}
|
||||
{{/with}}
|
||||
</dl>
|
||||
{{/if_eq}}
|
||||
|
||||
{{#if_eq eventType compare="episodeFileDeleted"}}
|
||||
<dl class="dl-horizontal">
|
||||
<dt>Path:</dt>
|
||||
<dd>{{sourceTitle}}</dd>
|
||||
<dl class="dl-horizontal">
|
||||
|
||||
{{#with data}}
|
||||
<dt>Reason:</dt>
|
||||
<dd>
|
||||
{{#if_eq reason compare="Manual"}}
|
||||
File was deleted by via UI.
|
||||
{{/if_eq}}
|
||||
<dt>Path:</dt>
|
||||
<dd>{{sourceTitle}}</dd>
|
||||
|
||||
{{#if_eq reason compare="MissingFromDisk"}}
|
||||
Radarr was unable to find the file on disk so it was removed.
|
||||
{{/if_eq}}
|
||||
{{#with data}}
|
||||
<dt>Reason:</dt>
|
||||
<dd>
|
||||
{{#if_eq reason compare="Manual"}}
|
||||
File was deleted by via UI
|
||||
{{/if_eq}}
|
||||
|
||||
{{#if_eq reason compare="Upgrade"}}
|
||||
File was deleted to import an upgrade.
|
||||
{{/if_eq}}
|
||||
</dd>
|
||||
{{/with}}
|
||||
</dl>
|
||||
{{/if_eq}}
|
||||
{{#if_eq reason compare="MissingFromDisk"}}
|
||||
Radarr was unable to find the file on disk so it was removed
|
||||
{{/if_eq}}
|
||||
|
||||
{{#if_eq reason compare="Upgrade"}}
|
||||
File was deleted to import an upgrade
|
||||
{{/if_eq}}
|
||||
</dd>
|
||||
{{/with}}
|
||||
</dl>
|
||||
{{/if_eq}}
|
@ -28,7 +28,7 @@ module.exports = Marionette.Layout.extend({
|
||||
},
|
||||
{
|
||||
name : 'movie',
|
||||
label : 'Movie title',
|
||||
label : 'Movie Title',
|
||||
cell : MovieTitleCell,
|
||||
},
|
||||
{
|
||||
|
@ -1,11 +1,11 @@
|
||||
<div id="x-history-toolbar"></div>
|
||||
<div id="x-history-toolbar"/>
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div id="x-history" class="table-responsive"></div>
|
||||
<div id="x-history" class="table-responsive"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div id="x-history-pager"></div>
|
||||
<div id="x-history-pager"/>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -1,12 +1,12 @@
|
||||
{{#if_eq status compare="Completed"}}
|
||||
{{#if_eq trackedDownloadStatus compare="Warning"}}
|
||||
<i class="icon-sonarr-import-manual x-manual-import" title="Manual import."></i>
|
||||
<i class="icon-sonarr-import-manual x-manual-import" title="Manual import"></i>
|
||||
{{/if_eq}}
|
||||
{{/if_eq}}
|
||||
|
||||
{{#if_eq status compare="Pending"}}
|
||||
<i class="icon-sonarr-download x-grab" title="Add to download queue (overrides delay profile)."></i>
|
||||
<i class="icon-sonarr-delete x-remove" title="Remove pending release."></i>
|
||||
<i class="icon-sonarr-download x-grab" title="Add to download queue (Override Delay Profile)"></i>
|
||||
<i class="icon-sonarr-delete x-remove" title="Remove pending release"></i>
|
||||
{{else}}
|
||||
<i class="icon-sonarr-delete x-remove" title="Remove from download client."></i>
|
||||
<i class="icon-sonarr-delete x-remove" title="Remove from download client"></i>
|
||||
{{/if_eq}}
|
||||
|
@ -56,7 +56,7 @@ module.exports = Marionette.Layout.extend({
|
||||
},
|
||||
{
|
||||
name : 'timeleft',
|
||||
label : 'Time left',
|
||||
label : 'Time Left',
|
||||
cell : TimeleftCell,
|
||||
cellValue : 'this'
|
||||
},
|
||||
|
@ -1,11 +1,11 @@
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div id="x-queue" class="queue table-responsive"></div>
|
||||
<div id="x-queue" class="queue table-responsive"/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div id="x-queue-pager"></div>
|
||||
<div id="x-queue-pager"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
@ -5,4 +5,4 @@
|
||||
<li>{{this}}</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
{{/each}}
|
||||
{{/each}}
|
@ -1,45 +1,48 @@
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="close">×</button>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
|
||||
<h3>{{title}}</h3>
|
||||
</div>
|
||||
<div class="modal-body remove-from-queue-modal">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
Are you sure you want to remove '{{title}}'?
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{#if showBlacklist}}
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
<div class="form-horizontal">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-4 control-label">Blacklist release</label>
|
||||
<div class="col-sm-8">
|
||||
<div class="input-group">
|
||||
<label class="checkbox toggle well">
|
||||
<input type="checkbox" class="x-blacklist">
|
||||
<p>
|
||||
<span>Yes</span>
|
||||
<span>No</span>
|
||||
</p>
|
||||
<div class="btn slide-button btn-danger"></div>
|
||||
</label>
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
<div class="form-horizontal">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-4 control-label">Blacklist release</label>
|
||||
|
||||
<div class="col-sm-8">
|
||||
<div class="input-group">
|
||||
<label class="checkbox toggle well">
|
||||
<input type="checkbox" class="x-blacklist"/>
|
||||
<p>
|
||||
<span>Yes</span>
|
||||
<span>No</span>
|
||||
</p>
|
||||
|
||||
<div class="btn slide-button btn-danger"/>
|
||||
</label>
|
||||
|
||||
<span class="help-inline-checkbox">
|
||||
<i class="icon-sonarr-form-info" title="Do you want to blacklist this release?"></i>
|
||||
<i class="icon-sonarr-form-info" title="Do you want to blacklist this release?"/>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<span class="indicator x-indicator">
|
||||
<i class="icon-sonarr-spinner fa-spin" aria-hidden="true"></i>
|
||||
</span>
|
||||
<span class="indicator x-indicator"><i class="icon-sonarr-spinner fa-spin"></i></span>
|
||||
<button class="btn" data-dismiss="modal">Cancel</button>
|
||||
<button class="btn btn-danger x-confirm-remove">Remove</button>
|
||||
</div>
|
||||
|
@ -1,43 +1,34 @@
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div class="btn-group add-movies-btn-group btn-group-lg btn-block btn-group-collapse">
|
||||
<button class="btn btn-default col-md-3 col-xs-12 x-bulk-import">
|
||||
<i class="icon-sonarr-view-list hidden-xs"></i>
|
||||
Bulk import movies
|
||||
</button>
|
||||
<button type="button" class="btn btn-default col-md-4 col-xs-12 add-movies-import-btn x-discover">
|
||||
<i class="icon-sonarr-star hidden-xs" aria-hidden="true"></i>
|
||||
Discover new movies
|
||||
</button>
|
||||
<button class="btn btn-default col-md-2 col-xs-12 x-add-new">
|
||||
<i class="icon-sonarr-active hidden-xs" aria-hidden="true"></i>
|
||||
Add new movie
|
||||
</button>
|
||||
<button class="btn btn-default col-md-3 col-xs-12 x-add-lists">
|
||||
<i class="icon-sonarr-active hidden-xs" aria-hidden="true"></i>
|
||||
Add movies from lists
|
||||
</button>
|
||||
<div class="col-md-12">
|
||||
<div class="btn-group add-movies-btn-group btn-group-lg btn-block btn-group-collapse">
|
||||
<button class="btn btn-default col-md-3 col-xs-12 x-bulk-import"><i class="icon-sonarr-view-list hidden-xs"></i> Bulk Import Movies</button>
|
||||
<button type="button" class="btn btn-default col-md-4 col-xs-12 add-movies-import-btn x-discover"><i class="icon-sonarr-star"/> Discover new movies</button>
|
||||
<button class="btn btn-default col-md-2 col-xs-12 x-add-new"><i class="icon-sonarr-active hidden-xs"></i> Add New Movie</button>
|
||||
<button class="btn btn-default col-md-3 col-xs-12 x-add-lists"><i class="icon-sonarr-active hidden-xs"></i> Add Movies from Lists</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div class="form-horizontal" style="margin-top: 15px;">
|
||||
<div id="show-existing-movies-toggle">
|
||||
<div class="form-group" style="margin-bottom: 0px;">
|
||||
<label class="col-sm-3 control-label">Display existing movies</label>
|
||||
<label class="col-sm-3 control-label">Display Existing Movies</label>
|
||||
|
||||
<div class="col-sm-8">
|
||||
<div class="input-group">
|
||||
<label class="checkbox toggle well">
|
||||
<input class="x-show-existing" type="checkbox" checked="checked" name="showExisting">
|
||||
<input class="x-show-existing" type="checkbox" checked="checked" name="showExisting"/>
|
||||
<p>
|
||||
<span>Yes</span>
|
||||
<span>No</span>
|
||||
<span>Yes</span>
|
||||
<span>No</span>
|
||||
</p>
|
||||
<div class="btn btn-primary slide-button"></div>
|
||||
|
||||
<div class="btn btn-primary slide-button"/>
|
||||
</label>
|
||||
|
||||
<span class="help-inline-checkbox">
|
||||
<i class="icon-sonarr-form-info" title="Should Radarr display movies already in your collection?"></i>
|
||||
<i class="icon-sonarr-form-info" title="Should Radarr display movies already in your collection?"/>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
@ -47,7 +38,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div id="add-movies-workspace"></div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div id="add-movies-workspace"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -294,7 +294,7 @@ module.exports = Marionette.Layout.extend({
|
||||
|
||||
_discoverList : function(options) {
|
||||
this.ui.discoverLists.tab("show");
|
||||
this.ui.discoverHeader.html("Showing movies from list: " + options.target.textContent);
|
||||
this.ui.discoverHeader.html("Showing movies from list: "+options.target.textContent);
|
||||
|
||||
this.collection.reset();
|
||||
this.collection = new AddFromListCollection();
|
||||
|
@ -1,43 +1,43 @@
|
||||
{{#if folder.path}}
|
||||
<div class="unmapped-folder-path">
|
||||
<div class="col-md-12">
|
||||
{{folder.path}}
|
||||
</div>
|
||||
<div class="unmapped-folder-path">
|
||||
<div class="col-md-12">
|
||||
{{folder.path}}
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>{{/if}}
|
||||
|
||||
<div class="x-discover-before">
|
||||
<ul class="nav nav-tabs nav-justified settings-tabs">
|
||||
<li><a href="#media-management" class="x-recommendations-tab no-router">Recommendations</a></li>
|
||||
<li><a href="#popular" class="x-popular-tab no-router">Popular</a></li>
|
||||
<li><a href="#upcoming" class="x-upcoming-tab no-router">Upcoming</a></li>
|
||||
<li role="presentation" class="dropdown">
|
||||
<a class="dropdown-toggle x-lists-tab" data-toggle="dropdown" href="#" role="button" aria-haspopup="true" aria-expanded="false">
|
||||
Lists <span class="caret"></span>
|
||||
</a>
|
||||
<ul id="list-dropdown" class="dropdown-menu">
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<h2 class="x-discover-header">Recommendations by The Movie Database based on your library:</h2>
|
||||
<ul class="nav nav-tabs nav-justified settings-tabs">
|
||||
<li><a href="#media-management" class="x-recommendations-tab no-router">Recommendations</a></li>
|
||||
<li><a href="#popular" class="x-popular-tab no-router">Popular</a></li>
|
||||
<li><a href="#upcoming" class="x-upcoming-tab no-router">Upcoming</a></li>
|
||||
<li role="presentation" class="dropdown">
|
||||
<a class="dropdown-toggle x-lists-tab" data-toggle="dropdown" href="#" role="button" aria-haspopup="true" aria-expanded="false">
|
||||
Lists <span class="caret"></span>
|
||||
</a>
|
||||
<ul id="list-dropdown" class="dropdown-menu">
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<h2 class="x-discover-header">
|
||||
Recommendations by The Movie Database based on your library:
|
||||
</h2>
|
||||
</div>
|
||||
|
||||
<div class="x-search-bar">
|
||||
<div class="input-group input-group-lg add-movies-search">
|
||||
<span class="input-group-addon">
|
||||
<i class="icon-sonarr-search" title="Search for movie."></i>
|
||||
</span>
|
||||
<span class="input-group-addon"><i class="icon-sonarr-search"/></span>
|
||||
|
||||
{{#if folder}}
|
||||
<input type="text" class="form-control x-movies-search" value="{{folder.name}}">
|
||||
<input type="text" class="form-control x-movies-search" value="{{folder.name}}">
|
||||
{{else}}
|
||||
<input type="text" class="form-control x-movies-search" placeholder="Start typing the name of the movie you want to add…">
|
||||
<input type="text" class="form-control x-movies-search" placeholder="Start typing the name of the movie you want to add ...">
|
||||
{{/if}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div id="search-result" class="result-list col-md-12"></div>
|
||||
<div id="search-result" class="result-list col-md-12"/>
|
||||
</div>
|
||||
<div class="btn btn-block text-center new-movies-loadmore x-load-more hidden">
|
||||
<i class="icon-sonarr-load-more" aria-hidden="true"></i>
|
||||
<div class="btn btn-block text-center new-movies-loadmore x-load-more" style="display: none;">
|
||||
<i class="icon-sonarr-load-more"/>
|
||||
more
|
||||
</div>
|
||||
|
@ -1,5 +1,5 @@
|
||||
<select class="col-md-2 form-control x-profile">
|
||||
{{#each this}}
|
||||
<option value="{{id}}">{{name}}</option>
|
||||
<option value="{{id}}">{{name}}</option>
|
||||
{{/each}}
|
||||
</select>
|
||||
|
@ -85,7 +85,7 @@ module.exports = Marionette.Layout.extend({
|
||||
},
|
||||
{
|
||||
name : 'tmdbId',
|
||||
label : 'TMDb Id',
|
||||
label : 'Tmdb Id',
|
||||
cell : TmdbIdCell,
|
||||
cellValue : 'this',
|
||||
sortable: false
|
||||
|
@ -1,17 +1,20 @@
|
||||
<div id="x-toolbar"></div>
|
||||
<div id="x-toolbar"/>
|
||||
{{> PageSizePartial }}
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<strong>Disabled movies are possible duplicates. If the match is incorrect, update the TMDb ID cell to import the proper movie.</strong>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<span><b>Disabled movies are possible duplicates. If the match is incorrect, update the Tmdb Id cell to import the proper movie.</b><span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div id="x-movies-bulk" class="queue table-responsive"></div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div id="x-movies-bulk" class="queue table-responsive"/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div id="x-movies-bulk-pager"></div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div id="x-movies-bulk-pager"/>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -1,3 +1,3 @@
|
||||
<div class="text-center hint col-md-12">
|
||||
<span>No movies found in folder {{folder}}. Have you already added all of them?</span>
|
||||
<span>No movies found in folder {{folder}}. Have you already added all of them?</span>
|
||||
</div>
|
||||
|
@ -1,9 +1,2 @@
|
||||
{{path}}
|
||||
<br>
|
||||
<span title="{{#if movieFile.relativePath}} {{movieFile.relativePath}}{{/if}}" class="hint small">
|
||||
{{#if movieFile.relativePath}}
|
||||
{{movieFile.relativePath}}
|
||||
{{else}}
|
||||
Movie file not found
|
||||
{{/if}}
|
||||
</span>
|
||||
{{path}}<br>
|
||||
<span title="{{#if movieFile.relativePath}} {{movieFile.relativePath}}{{/if}}" class="hint" style="font-size: 12px;">{{#if movieFile.relativePath}} {{movieFile.relativePath}}{{else}} Movie File Not Found{{/if}}</span>
|
||||
|
@ -1,5 +1,5 @@
|
||||
{{#if_gt proper compare="1"}}
|
||||
<span class="badge badge-info" title="Proper">{{movieFile.quality.quality.name}}</span>
|
||||
<span class="badge badge-info" title="PROPER">{{movieFile.quality.quality.name}}</span>
|
||||
{{else}}
|
||||
<span class="badge" title="{{#if movieFile.quality.hardcodedSubs}}Warning: {{movieFile.quality.hardcodedSubs}}{{/if}}">{{movieFile.quality.quality.name}}</span>
|
||||
<span class="badge" title="{{#if movieFile.quality.hardcodedSubs}}Warning: {{movieFile.quality.hardcodedSubs}}{{/if}}">{{movieFile.quality.quality.name}}</span>
|
||||
{{/if_gt}}
|
||||
|
@ -1,3 +1,6 @@
|
||||
<div class="text-center col-md-12">
|
||||
<h3>No movies left to discover. Come back at another time</h3>
|
||||
<h3>
|
||||
No movies left to discover. Come back at another time :)
|
||||
</h3>
|
||||
|
||||
</div>
|
||||
|
@ -1,3 +1,3 @@
|
||||
{{#each this}}
|
||||
<option value="{{id}}" class="clickable discoverable-list-item">{{name}}</option>
|
||||
<li value="{{id}}" class="clickable discoverable-list-item">{{name}}</option>
|
||||
{{/each}}
|
||||
|
@ -1,3 +1,3 @@
|
||||
<div class="text-center hint col-md-12">
|
||||
<p><strong>Hint:</strong> You can also search by IMDb ID using the imdb: prefix. e.g. imdb:tt0829482</p>
|
||||
<span>You can also search by imdbid using the imdb: prefixes.</span>
|
||||
</div>
|
||||
|
@ -1,5 +1,7 @@
|
||||
<div class="text-center col-md-12">
|
||||
<p class="lead">There was an error searching for '{{term}}'.</p>
|
||||
<h3>
|
||||
There was an error searching for '{{term}}'.
|
||||
</h3>
|
||||
|
||||
<p>If the movie title contains non-alphanumeric characters try removing them, otherwise try your search again later.</p>
|
||||
If the movie title contains non-alphanumeric characters try removing them, otherwise try your search again later.
|
||||
</div>
|
||||
|
@ -1,5 +1,5 @@
|
||||
<div class="x-existing-folders">
|
||||
<div class="loading-folders x-loading-folders">
|
||||
Loading search results from TMDb for your movies, this may take a few minutes.
|
||||
Loading search results from TheTVDB for your movies, this may take a few minutes.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
@ -1,3 +1,4 @@
|
||||
<div class="x-list">
|
||||
<div class="x-loading-list"></div>
|
||||
<div class="x-list">
|
||||
<div class="x-loading-list">
|
||||
</div>
|
||||
</div>
|
||||
|
@ -185,7 +185,7 @@ module.exports = Marionette.Layout.extend({
|
||||
this.ui.importSelected.addClass('disabled');
|
||||
|
||||
Messenger.show({
|
||||
message: "Importing {0} movies. Don't close this browser window until it has finished.".format(selected.length),
|
||||
message: "Importing {0} movies. Don't close this browser window until it has finished".format(selected.length),
|
||||
hideOnNavigate: false,
|
||||
hideAfter: 30,
|
||||
type: "error"
|
||||
|
@ -1,20 +1,18 @@
|
||||
<div class="x-search-bar">
|
||||
<div class="form-group" style="margin-bottom: 0px;">
|
||||
<label class="col-sm-1 control-label">List</label>
|
||||
<div class="col-sm-8">
|
||||
{{> ListSelectionPartial lists}}
|
||||
</div>
|
||||
<div class="col-sm-1">
|
||||
<button class="btn btn-info x-fetch-list">Fetch list</button>
|
||||
</div>
|
||||
<div class="col-sm-2">
|
||||
<button class="btn btn-success x-import-selected">
|
||||
<i class="icon-sonarr-add" aria-hidden="true"></i>
|
||||
Import selected
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group" style="margin-bottom: 0px;">
|
||||
<label class="col-sm-1 control-label">List</label>
|
||||
|
||||
<div class="col-sm-8">
|
||||
{{> ListSelectionPartial lists}}
|
||||
</div>
|
||||
<div class="col-sm-1">
|
||||
<button class="btn btn-info x-fetch-list">Fetch List</button>
|
||||
</div>
|
||||
<div class="col-sm-2">
|
||||
<button class="btn btn-success x-import-selected"><i class="icon-sonarr-add"></i> Import Selected</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div id="fetch-result" class="result-list col-md-12"></div>
|
||||
<div id="fetch-result" class="result-list col-md-12"/>
|
||||
</div>
|
||||
|
@ -11,7 +11,9 @@ require('jquery.dotdotdot');
|
||||
|
||||
var view = Marionette.ItemView.extend({
|
||||
|
||||
template : 'AddMovies/SearchResultViewTemplate'
|
||||
template : 'AddMovies/SearchResultViewTemplate',
|
||||
|
||||
|
||||
});
|
||||
|
||||
|
||||
|
@ -1,3 +1,3 @@
|
||||
<div class="fetch-item">
|
||||
ASDF
|
||||
ASDF
|
||||
</div>
|
||||
|
@ -1,10 +0,0 @@
|
||||
<dl class="minimumavailability-tooltip-contents">
|
||||
<dt>Announced</dt>
|
||||
<dd>Consider the movie available after it has been announced.</dd>
|
||||
<dt>In cinemas</dt>
|
||||
<dd>Consider the movie available once it is in cinemas/theaters.</dd>
|
||||
<dt>Physical/web</dt>
|
||||
<dd>Consider the movie available after physical/web release.</dd>
|
||||
<dt>PreDB</dt>
|
||||
<dd>Consider the movie available if PreDB contains at least one entry.</dd>
|
||||
</dl>
|
10
src/UI/AddMovies/MinimumavailabilityTooltipTemplate.hbs
Normal file
10
src/UI/AddMovies/MinimumavailabilityTooltipTemplate.hbs
Normal file
@ -0,0 +1,10 @@
|
||||
<dl class="minimumavailability-tooltip-contents">
|
||||
<dt>Announced</dt>
|
||||
<dd>Consider the movie available after it has been announced</dd>
|
||||
<dt>In Cinemas</dt>
|
||||
<dd>Consider the movie available once it is In Cinemas</dd>
|
||||
<dt>Physical/Web</dt>
|
||||
<dd>Consider the movie available after Physical/Web release</dd>
|
||||
<dt>PreDB</dt>
|
||||
<dd>Consider the movie available if preDB contains at least one entry</dd>
|
||||
</dl>
|
@ -1,6 +1,6 @@
|
||||
<dl class="monitor-tooltip-contents">
|
||||
<dt>Yes</dt>
|
||||
<dd>Monitor for new releases.</dd>
|
||||
<dd>Monitor for new releases</dd>
|
||||
<dt>No</dt>
|
||||
<dd>Do not monitor for new releases.</dd>
|
||||
</dl>
|
||||
<dd>Do not monitor for new releases</dd>
|
||||
</dl>
|
@ -1,4 +1,7 @@
|
||||
<div class="text-center col-md-12">
|
||||
<h3>Sorry. We couldn't find any movies matching '{{term}}'</h3>
|
||||
<h3>
|
||||
Sorry. We couldn't find any movies matching '{{term}}'
|
||||
</h3>
|
||||
<a href="https://github.com/Radarr/Radarr/wiki/FAQ#why-cant-i-add-a-new-movie-to-radarr-its-on-tmdb">Why can't I find my movie?</a>
|
||||
|
||||
</div>
|
||||
|
@ -1,9 +1,13 @@
|
||||
<table class="table table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="col-md-10">Path</th>
|
||||
<th class="col-md-3">Free space</th>
|
||||
<th class="col-md-10 ">
|
||||
Path
|
||||
</th>
|
||||
<th class="col-md-3">
|
||||
Free Space
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody class="x-root-folders"></tbody>
|
||||
</table>
|
||||
</table>
|
@ -5,5 +5,5 @@
|
||||
<span>{{Bytes freeSpace}}</span>
|
||||
</td>
|
||||
<td class="col-md-1">
|
||||
<i class="icon-sonarr-delete x-delete" title="Delete folder path."></i>
|
||||
<i class="icon-sonarr-delete x-delete"></i>
|
||||
</td>
|
||||
|
@ -1,41 +1,38 @@
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="close">×</button>
|
||||
<h3>Select folder</h3>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
|
||||
<h3>Select Folder</h3>
|
||||
</div>
|
||||
<div class="modal-body root-folders-modal">
|
||||
<div class="validation-errors"></div>
|
||||
<div class="alert alert-info">
|
||||
Enter the path that contains some or all of your movies, you will be able to choose which movies you want to import.
|
||||
<button type="button" class="close" data-dismiss="alert" aria-label="close">×</button>
|
||||
</div>
|
||||
<div class="alert alert-info">Enter the path that contains some or all of your movies, you will be able to choose which movies you want to import<button type="button" class="close" data-dismiss="alert">×</button></div>
|
||||
|
||||
<div class="row">
|
||||
<div class="form-group">
|
||||
|
||||
<div class="col-md-12">
|
||||
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon">
|
||||
<i class="icon-sonarr-folder-open" title="Browse folder path."></i>
|
||||
</span>
|
||||
<input class="form-control x-path" type="text" validation-name="path" placeholder="Enter the path to the folder that contains your movies.">
|
||||
<span class="input-group-btn">
|
||||
<button class="btn btn-success x-add">
|
||||
<i class="icon-sonarr-ok" title="Add folder path."></i>
|
||||
</button>
|
||||
</span>
|
||||
<span class="input-group-addon"> <i class="icon-sonarr-folder-open"></i></span>
|
||||
<input class="form-control x-path" type="text" validation-name="path" placeholder="Enter path to folder that contains your movies">
|
||||
<span class="input-group-btn"><button class="btn btn-success x-add"><i class="icon-sonarr-ok"/></button></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row root-folders">
|
||||
<div class="col-md-12">
|
||||
{{#if items}}
|
||||
<h4>Recent folders</h4>
|
||||
<h4>Recent Folders</h4>
|
||||
{{/if}}
|
||||
<div id="current-dirs" class="root-folders-list"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
|
||||
|
||||
<button class="btn" data-dismiss="modal">Close</button>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -1,10 +1,10 @@
|
||||
<select class="col-md-4 form-control x-root-folder" validation-name="RootFolderPath">
|
||||
{{#if this}}
|
||||
{{#each this}}
|
||||
<option value="{{id}}">{{path}}</option>
|
||||
{{/each}}
|
||||
{{#each this}}
|
||||
<option value="{{id}}">{{path}}</option>
|
||||
{{/each}}
|
||||
{{else}}
|
||||
<option value="">Select path</option>
|
||||
<option value="">Select Path</option>
|
||||
{{/if}}
|
||||
<option value="addNew">Add a different path</option>
|
||||
</select>
|
||||
|
@ -23,8 +23,8 @@ var view = Marionette.ItemView.extend({
|
||||
rootFolder : '.x-root-folder',
|
||||
seasonFolder : '.x-season-folder',
|
||||
monitor : '.x-monitor',
|
||||
minimumAvailability : '.x-minimumavailability',
|
||||
minimumAvailabilityTooltip : '.x-minimumavailability-tooltip',
|
||||
minimumAvailability : '.x-minimumavailability',
|
||||
minimumAvailabilityTooltip : '.x-minimumavailability-tooltip',
|
||||
monitorTooltip : '.x-monitor-tooltip',
|
||||
addButton : '.x-add',
|
||||
addSearchButton : '.x-add-search',
|
||||
@ -91,7 +91,7 @@ var view = Marionette.ItemView.extend({
|
||||
content : content,
|
||||
html : true,
|
||||
trigger : 'hover',
|
||||
title : 'Movie monitoring options',
|
||||
title : 'Movie Monitoring Options',
|
||||
placement : 'right',
|
||||
container : this.$el
|
||||
});
|
||||
@ -103,7 +103,7 @@ var view = Marionette.ItemView.extend({
|
||||
content : content1,
|
||||
html :true,
|
||||
trigger : 'hover',
|
||||
title : 'When to consider a movie available',
|
||||
title : 'When to Consider a Movie Available',
|
||||
placement : 'right',
|
||||
container : this.$el
|
||||
});
|
||||
|
@ -14,31 +14,30 @@
|
||||
<div class="col-md-12">
|
||||
<h2 class="movies-title">
|
||||
{{titleWithYear}}
|
||||
|
||||
<span class="labels">
|
||||
<span class="label label-default">{{network}}</span>
|
||||
|
||||
{{#if_eq status compare="announced"}}
|
||||
<span class="label label-default">Announced</span>
|
||||
{{/if_eq}}
|
||||
|
||||
{{#if_eq status compare="released"}}
|
||||
<span class="label label-success">Released</span>
|
||||
{{/if_eq}}
|
||||
|
||||
{{#if_eq status compare="inCinemas"}}
|
||||
<span class="label label-warning">In cinemas</span>
|
||||
<span class="label label-warning">In Cinemas</span>
|
||||
{{/if_eq}}
|
||||
|
||||
<span class="label label-default" title="{{ratings.votes}} Vote(s)">{{ratings.value}}</span>
|
||||
|
||||
{{#if youTubeTrailerId}}
|
||||
<a href="{{youTubeTrailerUrl}}" class="label label-info trailer">Trailer</a>
|
||||
<span class="label label-info"><a href="{{youTubeTrailerUrl}}" style="color: white;">Trailer</a></span>
|
||||
{{/if}}
|
||||
|
||||
{{#if physicalRelease}}
|
||||
<span class="label label-info" title="{{physicalReleaseNote}}">{{inCinemas}}</span>
|
||||
<span class="label label-info" title="{{physicalReleaseNote}}">{{inCinemas}}</span>
|
||||
{{/if}}
|
||||
</span>
|
||||
|
||||
|
||||
</h2>
|
||||
</div>
|
||||
</div>
|
||||
@ -55,62 +54,81 @@
|
||||
{{> RootFolderSelectionPartial rootFolders}}
|
||||
</div>
|
||||
{{/unless}}
|
||||
|
||||
<div class="form-group col-md-2">
|
||||
<label>
|
||||
<i class="icon-sonarr-form-info monitor-tooltip x-monitor-tooltip" aria-hidden="true"></i>
|
||||
Monitor
|
||||
</label>
|
||||
<label>Monitor <i class="icon-sonarr-form-info monitor-tooltip x-monitor-tooltip"></i></label>
|
||||
<select class="form-control col-md-2 x-monitor">
|
||||
<option value="all">Yes</option>
|
||||
<!-- <option value="missing">Missing</option> -->
|
||||
<option value="none">No</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="form-group col-md-2">
|
||||
<label>
|
||||
<i class="icon-sonarr-form-info minimumavailability-tooltip x-minimumavailability-tooltip" aria-hidden="true"></i>
|
||||
Availability
|
||||
</label>
|
||||
<select class="form-control col-md-2 x-minimumavailability">
|
||||
<option value="announced">Announced</option>
|
||||
<option value="inCinemas">In cinemas</option>
|
||||
<option value="released">Physical/web</option>
|
||||
<option value="preDB">PreDB</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="form-group col-md-2">
|
||||
<label>Min Availability <i class="icon-sonarr-form-info minimumavailability-tooltip x-minimumavailability-tooltip"></i></label>
|
||||
<select class="form-control col-md-2 x-minimumavailability">
|
||||
<option value="announced">Announced</option>
|
||||
<option value="inCinemas">In Cinemas</option>
|
||||
<option value="released">Physical/Web</option>
|
||||
<option value="preDB">PreDB</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="form-group col-md-2">
|
||||
<label>Profile</label>
|
||||
{{> ProfileSelectionPartial profiles}}
|
||||
</div>
|
||||
|
||||
{{!--<div class="form-group col-md-2">
|
||||
<label>Season Folders</label>
|
||||
|
||||
<div class="input-group">
|
||||
<label class="checkbox toggle well">
|
||||
<input type="checkbox" class="x-season-folder"/>
|
||||
<p>
|
||||
<span>Yes</span>
|
||||
<span>No</span>
|
||||
</p>
|
||||
<div class="btn btn-primary slide-button"/>
|
||||
</label>
|
||||
</div>
|
||||
</div>--}}
|
||||
{{/unless}}
|
||||
|
||||
{{#unless existing}}
|
||||
{{#if title}}
|
||||
<div class="form-group col-md-2">
|
||||
<label class="invisible">Add</label>
|
||||
<div class="btn-group">
|
||||
<button class="btn btn-success add x-add" title="Add this movie to your library.">
|
||||
<i class="icon-sonarr-add" aria-hidden="true"></i>
|
||||
</button>
|
||||
<div class="form-group col-md-2">
|
||||
<!--Uncomment if we need to add even more controls to add Movies-->
|
||||
<label style="visibility: hidden">Add</label>
|
||||
<div class="btn-group">
|
||||
<button class="btn btn-success add x-add" title="Add">
|
||||
<i class="icon-sonarr-add"></i>
|
||||
</button>
|
||||
|
||||
<button class="btn btn-success add x-add-search" title="Search for this movie after adding it.">
|
||||
<i class="icon-sonarr-search" aria-hidden="true"></i>
|
||||
</button>
|
||||
<button class="btn btn-success add x-add-search" title="Add and Search for movie">
|
||||
<i class="icon-sonarr-search"></i>
|
||||
</button>
|
||||
|
||||
<button class="btn btn-warning ignore x-ignore" title="Ignore this movie, so it does not show up anymore.">
|
||||
<i class="icon-sonarr-ignore" aria-hidden="true"></i>
|
||||
</button>
|
||||
</div>
|
||||
<button class="btn btn-warning ignore x-ignore" title="Ignore this movie, so it does not show up anymore">
|
||||
<i class="icon-sonarr-ignore"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
{{else}}
|
||||
<label class="invisible">Add</label>
|
||||
<div class="col-md-2" title="Movies require an English title.">
|
||||
<button class="btn add-movies disabled">Add</button>
|
||||
<label style="visibility: hidden">Add</label>
|
||||
<div class="col-md-2" title="Movies require an English title">
|
||||
<button class="btn add-movies disabled">
|
||||
Add
|
||||
</button>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{else}}
|
||||
<label class="invisible">Add</label>
|
||||
<div class="col-md-2 col-md-offset-10">
|
||||
<a class="btn btn-default" href="{{route}}">Already exists</a>
|
||||
</div>
|
||||
{{else}}
|
||||
<label style="visibility: hidden">Add</label>
|
||||
<div class="col-md-2 col-md-offset-10">
|
||||
<a class="btn btn-default" href="{{route}}">
|
||||
Already Exists
|
||||
</a>
|
||||
</div>
|
||||
{{/unless}}
|
||||
</div>
|
||||
</div>
|
||||
|
@ -1,4 +1,6 @@
|
||||
<select class="form-control col-md-2 starting-season x-starting-season">
|
||||
|
||||
|
||||
{{#each this}}
|
||||
{{#if_eq seasonNumber compare="0"}}
|
||||
<option value="{{seasonNumber}}">Specials</option>
|
||||
@ -6,5 +8,6 @@
|
||||
<option value="{{seasonNumber}}">Season {{seasonNumber}}</option>
|
||||
{{/if_eq}}
|
||||
{{/each}}
|
||||
|
||||
<option value="5000000">None</option>
|
||||
</select>
|
||||
|
@ -1,4 +1,4 @@
|
||||
@import "../Shared/Styles/card.less";
|
||||
@import "../Shared/Styles/card.less";
|
||||
@import "../Shared/Styles/clickable.less";
|
||||
|
||||
.inline {
|
||||
@ -66,10 +66,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
a.trailer {
|
||||
color : white;
|
||||
}
|
||||
|
||||
.year {
|
||||
font-style : italic;
|
||||
color : #aaaaaa;
|
||||
|
@ -1,56 +1,57 @@
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="close">×</button>
|
||||
<h3>Movies calendar feed</h3>
|
||||
</div>
|
||||
<div class="modal-body edit-series-modal">
|
||||
<div class="form-horizontal">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-3 control-label">Include unmonitored</label>
|
||||
<div class="col-sm-4">
|
||||
<div class="input-group">
|
||||
<label class="checkbox toggle well">
|
||||
<input type="checkbox" name="includeUnmonitored" class="form-control x-includeUnmonitored">
|
||||
<p>
|
||||
<span>Yes</span>
|
||||
<span>No</span>
|
||||
</p>
|
||||
<div class="btn btn-primary slide-button"></div>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-sm-3 control-label">Tags</label>
|
||||
<div class="col-sm-1 col-sm-push-5 help-inline">
|
||||
<i class="icon-sonarr-form-info" title="One or more tags only show matching movies."></i>
|
||||
</div>
|
||||
<div class="col-sm-5 col-sm-pull-1">
|
||||
<input type="text" class="form-control x-tags">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-sm-3 control-label">Calendar feed URL</label>
|
||||
<div class="col-sm-1 col-sm-push-8 help-inline">
|
||||
<i class="icon-sonarr-form-info" title="Copy this URL into your clients subscription form or use the subscribe button if your browser supports webcal."></i>
|
||||
</div>
|
||||
<div class="col-sm-8 col-sm-pull-1">
|
||||
<div class="input-group ical-url">
|
||||
<input type="text" class="form-control x-ical-url" readonly="readonly">
|
||||
<div class="input-group-btn">
|
||||
<button class="btn btn-icon-only x-ical-copy" title="Copy calendar feed to clipboard.">
|
||||
<i class="icon-sonarr-copy" aria-hidden="true"></i>
|
||||
</button>
|
||||
<button class="btn btn-icon-only no-router x-ical-webcal" title="Subscribe" target="_blank">
|
||||
<i class="icon-sonarr-calendar-o" aria-hidden="true"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button class="btn" data-dismiss="modal">Close</button>
|
||||
</div>
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
|
||||
<h3>Radarr Calendar feed</h3>
|
||||
</div>
|
||||
<div class="modal-body edit-series-modal">
|
||||
<div class="form-horizontal">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-3 control-label">Include Unmonitored</label>
|
||||
|
||||
<div class="col-sm-4">
|
||||
<div class="input-group">
|
||||
<label class="checkbox toggle well">
|
||||
<input type="checkbox" name="includeUnmonitored" class="form-control x-includeUnmonitored"/>
|
||||
|
||||
<p>
|
||||
<span>Yes</span>
|
||||
<span>No</span>
|
||||
</p>
|
||||
|
||||
<div class="btn btn-primary slide-button"/>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-sm-3 control-label">Tags</label>
|
||||
|
||||
<div class="col-sm-1 col-sm-push-5 help-inline">
|
||||
<i class="icon-sonarr-form-info" title="One or more tags only show matching series" />
|
||||
</div>
|
||||
|
||||
<div class="col-sm-5 col-sm-pull-1">
|
||||
<input type="text" class="form-control x-tags">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-sm-3 control-label">iCal feed</label>
|
||||
<div class="col-sm-1 col-sm-push-8 help-inline">
|
||||
<i class="icon-sonarr-form-info" title="Copy this url into your clients subscription form or use the subscribe button if your browser support webcal" />
|
||||
</div>
|
||||
<div class="col-sm-8 col-sm-pull-1">
|
||||
<div class="input-group ical-url">
|
||||
<input type="text" class="form-control x-ical-url" readonly="readonly" />
|
||||
<div class="input-group-btn">
|
||||
<button class="btn btn-icon-only x-ical-copy"><i class="icon-sonarr-copy"></i></button>
|
||||
<button class="btn btn-icon-only no-router x-ical-webcal" title="Subscribe" target="_blank"><i class="icon-sonarr-calendar-o"></i></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button class="btn" data-dismiss="modal">Close</button>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -41,7 +41,7 @@ module.exports = Marionette.Layout.extend({
|
||||
storeState : false,
|
||||
items : [
|
||||
{
|
||||
title : 'Movies calendar link',
|
||||
title : 'Get iCal Link',
|
||||
icon : 'icon-sonarr-calendar-o',
|
||||
callback : this._showiCal,
|
||||
ownerContext : this
|
||||
@ -58,14 +58,14 @@ module.exports = Marionette.Layout.extend({
|
||||
{
|
||||
key : 'all',
|
||||
title : '',
|
||||
tooltip : 'All movies',
|
||||
tooltip : 'All',
|
||||
icon : 'icon-sonarr-all',
|
||||
callback : this._setCalendarFilter
|
||||
},
|
||||
{
|
||||
key : 'monitored',
|
||||
title : '',
|
||||
tooltip : 'Monitored only',
|
||||
tooltip : 'Monitored Only',
|
||||
icon : 'icon-sonarr-monitored',
|
||||
callback : this._setCalendarFilter
|
||||
}
|
||||
@ -93,4 +93,4 @@ module.exports = Marionette.Layout.extend({
|
||||
this.upcomingView.setShowUnmonitored(false);
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
@ -3,37 +3,19 @@
|
||||
<div class="pull-left">
|
||||
<h4>Upcoming</h4>
|
||||
</div>
|
||||
<div id="x-upcoming"></div>
|
||||
<div id="x-upcoming"/>
|
||||
</div>
|
||||
<div class="col-md-9 col-xs-12">
|
||||
<div id="x-toolbar" class="calendar-toolbar"></div>
|
||||
<div id="x-calendar" class="calendar"></div>
|
||||
<div id="x-toolbar" class="calendar-toolbar"/>
|
||||
<div id="x-calendar" class="calendar"/>
|
||||
<div class="legend calendar">
|
||||
<ul class='legend-labels'>
|
||||
<li class="legend-label">
|
||||
<span class="premiere" title="This movie is still in cinemas and hasn't been released yet. Only poor qualities will be available."></span>
|
||||
In cinemas
|
||||
</li>
|
||||
<li class="legend-label">
|
||||
<span class="primary" title="This movie has only been announced."></span>
|
||||
Announced
|
||||
</li>
|
||||
<li class="legend-label">
|
||||
<span class="purple" title="Movie is currently downloading."></span>
|
||||
Downloading
|
||||
</li>
|
||||
<li class="legend-label">
|
||||
<span class="danger" title="Movie file has not been found."></span>
|
||||
Missing
|
||||
</li>
|
||||
<li class="legend-label">
|
||||
<span class="success" title="Movie was downloaded and sorted."></span>
|
||||
Downloaded
|
||||
</li>
|
||||
<li class="legend-label">
|
||||
<span class="unmonitored" title="Movie is unmonitored."></span>
|
||||
Unmonitored
|
||||
</li>
|
||||
<li class="legend-label"><span class="premiere" title="This Movie is still in cinemas and hasn't been released yet. Only poor qualities will be available"></span>In Cinemas</li>
|
||||
<li class="legend-label"><span class="primary" title="This movie has only been announced yet."></span>Announced</li>
|
||||
<li class="legend-label"><span class="purple" title="Movie is currently downloading"></span>Downloading</li>
|
||||
<li class="legend-label"><span class="danger" title="Movie file has not been found"></span>Missing</li>
|
||||
<li class="legend-label"><span class="success" title="Movie was downloaded and sorted"></span>Downloaded</li>
|
||||
<li class="legend-label"><span class="unmonitored" title="Movie is unmonitored"></span>Unmonitored</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -69,11 +69,11 @@ module.exports = Marionette.ItemView.extend({
|
||||
}
|
||||
|
||||
else if (status === 'failed') {
|
||||
this._addStatusIcon(element, 'icon-sonarr-download-failed', 'Download failed: check download client for more details.');
|
||||
this._addStatusIcon(element, 'icon-sonarr-download-failed', 'Download failed: check download client for more details');
|
||||
}
|
||||
|
||||
else if (status === 'warning') {
|
||||
this._addStatusIcon(element, 'icon-sonarr-download-warning', 'Download warning: check download client for more details.');
|
||||
this._addStatusIcon(element, 'icon-sonarr-download-warning', 'Download warning: check download client for more details');
|
||||
}
|
||||
|
||||
else {
|
||||
|
@ -4,19 +4,15 @@
|
||||
<h4>{{Month airDateUtc}}</h4>
|
||||
</div>
|
||||
{{#with series}}
|
||||
<a href="{{route}}">
|
||||
<h4>{{title}}</h4>
|
||||
</a>
|
||||
<a href="{{route}}">
|
||||
<h4>{{title}}</h4>
|
||||
</a>
|
||||
{{/with}}
|
||||
<p>
|
||||
{{StartTime airDateUtc}} {{#unless_today airDateUtc}}{{ShortDate airDateUtc}}{{/unless_today}}
|
||||
</p>
|
||||
<p>{{StartTime airDateUtc}} {{#unless_today airDateUtc}}{{ShortDate airDateUtc}}{{/unless_today}}</p>
|
||||
<p>
|
||||
<span class="episode-title x-episode-title">
|
||||
{{title}}
|
||||
</span>
|
||||
<span class="pull-right">
|
||||
{{seasonNumber}}x{{Pad2 episodeNumber}}
|
||||
</span>
|
||||
<span class="pull-right">{{seasonNumber}}x{{Pad2 episodeNumber}}</span>
|
||||
</p>
|
||||
</div>
|
||||
|
@ -36,10 +36,6 @@
|
||||
font-size : 17.5px;
|
||||
}
|
||||
|
||||
.fc-button {
|
||||
text-transform: capitalize;
|
||||
}
|
||||
|
||||
.fc-state-highlight {
|
||||
background : #dbdbdb;
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
<ul>
|
||||
<li>
|
||||
{{this}}
|
||||
{{this}}
|
||||
</li>
|
||||
</ul>
|
||||
|
@ -1,5 +1,5 @@
|
||||
{{#if_gt proper compare="1"}}
|
||||
<span class="badge badge-info" title="Proper">{{quality.name}}</span>
|
||||
<span class="badge badge-info" title="PROPER">{{quality.name}}</span>
|
||||
{{else}}
|
||||
<span class="badge" title="{{#if hardcodedSubs}}Warning: {{hardcodedSubs}}{{/if}}">{{quality.name}}</span>
|
||||
{{/if_gt}}
|
||||
|
15
src/UI/Content/Overrides/bootstrap.less
vendored
15
src/UI/Content/Overrides/bootstrap.less
vendored
@ -73,23 +73,10 @@
|
||||
}
|
||||
}
|
||||
|
||||
/* Capitalise various layout elements */
|
||||
h3, label, legend, select, .btn, table th, dt,
|
||||
.advanced-settings-toggle span, option,
|
||||
.legend-label, .nav-tabs a, .popover-title {
|
||||
.btn {
|
||||
text-transform: capitalize;
|
||||
}
|
||||
|
||||
.table-responsive {
|
||||
overflow-x: visible;
|
||||
}
|
||||
|
||||
.navbar-nav {
|
||||
margin-bottom : 20px;
|
||||
}
|
||||
|
||||
.navbar-brand {
|
||||
@media (min-width: @screen-md-min) and (max-width: @screen-md-max) {
|
||||
padding : 22px 15px !important;
|
||||
}
|
||||
}
|
||||
|
@ -12,5 +12,6 @@ a:focus {
|
||||
}
|
||||
|
||||
body h1, body h2, body h3, body h4, body h5, body h6 {
|
||||
text-transform : capitalize;
|
||||
font-weight : 300;
|
||||
}
|
||||
|
@ -6,7 +6,6 @@
|
||||
src: local('Open Sans Light'),
|
||||
local('OpenSans-Light'),
|
||||
url('./fonts/opensans-light.eot?#iefix') format('embedded-opentype'),
|
||||
url('./fonts/opensans-light.woff2') format('woff2'),
|
||||
url('./fonts/opensans-light.woff') format('woff'),
|
||||
url('./fonts/opensans-light.ttf') format('truetype');
|
||||
}
|
||||
@ -19,7 +18,6 @@
|
||||
src: local('Open Sans'),
|
||||
local('OpenSans'),
|
||||
url('./fonts/opensans-regular.eot?#iefix') format('embedded-opentype'),
|
||||
url('./fonts/opensans-regular.woff2') format('woff2'),
|
||||
url('./fonts/opensans-regular.woff') format('woff'),
|
||||
url('./fonts/opensans-regular.ttf') format('truetype')
|
||||
}
|
||||
@ -32,7 +30,6 @@
|
||||
src: local('Open Sans SemiBold'),
|
||||
local('OpenSans-SemiBold'),
|
||||
url('./fonts/opensans-semibold.eot?#iefix') format('embedded-opentype'),
|
||||
url('./fonts/opensans-semibold.woff2') format('woff2'),
|
||||
url('./fonts/opensans-semibold.woff') format('woff'),
|
||||
url('./fonts/opensans-semibold.ttf') format('truetype')
|
||||
}
|
||||
@ -42,9 +39,9 @@
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: url('./fonts/ubuntumono-regular.eot');
|
||||
src: local('Ubuntu Mono'),
|
||||
src: local('Open Sans'),
|
||||
local('OpenSans'),
|
||||
url('./fonts/ubuntumono-regular.eot?#iefix') format('embedded-opentype'),
|
||||
url('./fonts/ubuntumono-regular.woff2') format('woff2'),
|
||||
url('./fonts/ubuntumono-regular.woff') format('woff'),
|
||||
url('./fonts/ubuntumono-regular.ttf') format('truetype')
|
||||
}
|
||||
}
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,4 +1,4 @@
|
||||
@import "prefixer";
|
||||
@import "prefixer";
|
||||
@import "variables";
|
||||
|
||||
@grid-float-breakpoint: @screen-xs-min;
|
||||
@ -24,7 +24,7 @@
|
||||
.icon-sonarr-navbar-icon {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
|
||||
.navbar-nav, .navbar-nav>li {
|
||||
float : none;
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
@import "Bootstrap/variables";
|
||||
@import "Bootstrap/variables";
|
||||
@import "Bootstrap/mixins";
|
||||
@import "Bootstrap/type";
|
||||
@import "font";
|
||||
@ -20,6 +20,7 @@
|
||||
@import "../Shared/FileBrowser/filebrowser";
|
||||
@import "badges";
|
||||
@import "../ManualImport/manualimport";
|
||||
@import "../SeasonPass/seasonpass";
|
||||
|
||||
.main-region {
|
||||
@media (min-width : @screen-lg-min) {
|
||||
@ -85,7 +86,7 @@
|
||||
position : fixed;
|
||||
z-index : 9999;
|
||||
bottom : 30px;
|
||||
right : 0;
|
||||
right : 0px;
|
||||
display : none;
|
||||
font-size : 56px;
|
||||
color : gray;
|
||||
|
@ -1,19 +1,15 @@
|
||||
<div class="form-group {{#if advanced}}advanced-setting{{/if}}">
|
||||
<label class="col-sm-3 control-label">{{label}}</label>
|
||||
|
||||
<div class="col-sm-5">
|
||||
<div class="input-group">
|
||||
<input type="text" name="fields.{{order}}.value"
|
||||
validation-name="{{name}}" spellcheck="false"
|
||||
class="form-control x-captcha" readonly placeholder="(optional)">
|
||||
<span class="input-group-btn">
|
||||
<button class="btn btn-primary x-captcha-refresh" title="Refresh CAPTCHA Token.">
|
||||
<i class="icon-sonarr-refresh" aria-hidden="true"></i>
|
||||
</button>
|
||||
</span>
|
||||
<input type="text" name="fields.{{order}}.value" validation-name="{{name}}" spellcheck="false" class="form-control x-captcha" readonly placeholder="(optional)" />
|
||||
<span class="input-group-btn"><button class="btn btn-primary x-captcha-refresh" title="Refresh CAPTCHA Token"><i class="icon-sonarr-refresh" /></button></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<span class="col-sm-1 help-inline">
|
||||
<i class="icon-sonarr-form-warning" title="Expires periodically and will need to be refreshed."></i>
|
||||
<i class="icon-sonarr-form-warning" title="Refreshing the reCAPTCHA token will temporarily embed a Google reCAPTCHA widget on this page."></i>
|
||||
<i class="icon-sonarr-form-warning" title="Expires periodically and will need to be refreshed."/>
|
||||
<i class="icon-sonarr-form-warning" title="Refreshing the CAPTCHA Token will embed a temporary Google reCaptcha widget on this page."/>
|
||||
</span>
|
||||
</div>
|
||||
|
@ -1,18 +1,21 @@
|
||||
<div class="form-group {{#if advanced}}advanced-setting{{/if}}">
|
||||
<label class="col-sm-3 control-label">{{label}}</label>
|
||||
|
||||
<div class="col-sm-5">
|
||||
<div class="input-group">
|
||||
<label class="checkbox toggle well">
|
||||
<input type="checkbox" name="fields.{{order}}.value">
|
||||
<input type="checkbox" name="fields.{{order}}.value"/>
|
||||
<p>
|
||||
<span>Yes</span>
|
||||
<span>No</span>
|
||||
</p>
|
||||
<div class="btn btn-primary slide-button"></div>
|
||||
|
||||
<div class="btn btn-primary slide-button"/>
|
||||
</label>
|
||||
|
||||
{{#if helpText}}
|
||||
<span class="help-inline-checkbox">
|
||||
<i class="icon-sonarr-form-info" title="{{helpText}}"></i>
|
||||
<i class="icon-sonarr-form-info" title="{{helpText}}"/>
|
||||
</span>
|
||||
{{/if}}
|
||||
</div>
|
||||
|
@ -1,10 +1,8 @@
|
||||
<span class="col-sm-1 help-inline">
|
||||
{{#if helpText}}
|
||||
<i class="icon-sonarr-form-info" title="{{helpText}}"></i>
|
||||
<i class="icon-sonarr-form-info" title="{{helpText}}"/>
|
||||
{{/if}}
|
||||
{{#if helpLink}}
|
||||
<a href="{{helpLink}}" class="help-link">
|
||||
<i class="icon-sonarr-form-info-link"></i>
|
||||
</a>
|
||||
<a href="{{helpLink}}" class="help-link"><i class="icon-sonarr-form-info-link"/></a>
|
||||
{{/if}}
|
||||
</span>
|
||||
|
@ -1 +1 @@
|
||||
<input type="hidden" name="fields.{{order}}.value" validation-name="{{name}}" spellcheck="false">
|
||||
<input type="hidden" name="fields.{{order}}.value" validation-name="{{name}}" spellcheck="false"/>
|
@ -1,7 +1,8 @@
|
||||
<div class="form-group {{#if advanced}}advanced-setting{{/if}}">
|
||||
<label class="col-sm-3 control-label">{{label}}</label>
|
||||
|
||||
<div class="col-sm-5">
|
||||
<input type="password" name="fields.{{order}}.value" validation-name="{{name}}" autocomplete="new-password" class="form-control">
|
||||
<input type="password" name="fields.{{order}}.value" validation-name="{{name}}" autocomplete="new-password" class="form-control"/>
|
||||
</div>
|
||||
{{> FormHelpPartial}}
|
||||
</div>
|
||||
|
@ -1,7 +1,8 @@
|
||||
<div class="form-group {{#if advanced}}advanced-setting{{/if}}">
|
||||
<label class="col-sm-3 control-label">{{label}}</label>
|
||||
|
||||
<div class="col-sm-5">
|
||||
<input type="text" name="fields.{{order}}.value" validation-name="{{name}}" class="form-control x-path {{#if_eq type compare="filepath"}}x-filepath{{/if_eq}}">
|
||||
<input type="text" name="fields.{{order}}.value" validation-name="{{name}}" class="form-control x-path {{#if_eq type compare="filepath"}}x-filepath{{/if_eq}}"/>
|
||||
</div>
|
||||
{{> FormHelpPartial}}
|
||||
</div>
|
||||
|
@ -1,5 +1,6 @@
|
||||
<div class="form-group {{#if advanced}}advanced-setting{{/if}}">
|
||||
<label class="col-sm-3 control-label">{{label}}</label>
|
||||
|
||||
<div class="col-sm-5">
|
||||
<select name="fields.{{order}}.value" class="form-control">
|
||||
{{#each selectOptions}}
|
||||
|
@ -1,7 +1,9 @@
|
||||
<div class="form-group {{#if advanced}}advanced-setting{{/if}}">
|
||||
<div class="form-group {{#if advanced}}advanced-setting{{/if}}">
|
||||
<label class="col-sm-3 control-label">{{label}}</label>
|
||||
|
||||
<div class="col-sm-5">
|
||||
<input type="text" name="fields.{{order}}.value" validation-name="{{name}}" tag-source="{{json selectOptions}}" class="form-control x-form-tag">
|
||||
<input type="text" name="fields.{{order}}.value" validation-name="{{name}}" tag-source="{{json selectOptions}}" class="form-control x-form-tag"/>
|
||||
</div>
|
||||
|
||||
{{> FormHelpPartial}}
|
||||
</div>
|
||||
</div>
|
@ -1,7 +1,8 @@
|
||||
<div class="form-group {{#if advanced}}advanced-setting{{/if}}">
|
||||
<label class="col-sm-3 control-label">{{label}}</label>
|
||||
|
||||
<div class="col-sm-5">
|
||||
<input type="text" name="fields.{{order}}.value" validation-name="{{name}}" spellcheck="false" class="form-control">
|
||||
<input type="text" name="fields.{{order}}.value" validation-name="{{name}}" spellcheck="false" class="form-control"/>
|
||||
</div>
|
||||
{{> FormHelpPartial}}
|
||||
</div>
|
||||
|
@ -1,7 +1,8 @@
|
||||
<div class="form-group {{#if advanced}}advanced-setting{{/if}}">
|
||||
<label class="col-sm-3 control-label">{{label}}</label>
|
||||
|
||||
<div class="col-sm-5">
|
||||
<input type="url" name="fields.{{order}}.value" validation-name="{{name}}" spellcheck="false" class="form-control">
|
||||
<input type="url" name="fields.{{order}}.value" validation-name="{{name}}" spellcheck="false" class="form-control"/>
|
||||
</div>
|
||||
{{> FormHelpPartial}}
|
||||
</div>
|
||||
|
@ -1,22 +1,22 @@
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="close">×</button>
|
||||
<h3>Keyboard shortcuts</h3>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
|
||||
<h3>Keyboard Shortcuts</h3>
|
||||
</div>
|
||||
<div class="modal-body hotkeys-modal">
|
||||
<div class="row hotkey-group">
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<div class="col-md-5 col-md-offset-1">
|
||||
<h3>Focus search box</h3>
|
||||
<h3>Focus Search Box</h3>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<kbd class="hotkey">T</kbd>
|
||||
<kbd class="hotkey">t</kbd>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-11 col-md-offset-1">
|
||||
Pressing 'T' puts the cursor in the search box below the navigation links
|
||||
Pressing 't' puts the cursor in the search box below the navigation links
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -25,15 +25,15 @@
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<div class="col-md-5 col-md-offset-1">
|
||||
<h3>Save settings</h3>
|
||||
<h3>Save Settings</h3>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<kbd class="hotkey">Ctrl + S</kbd>
|
||||
<kbd class="hotkey">ctrl + s</kbd>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-11 col-md-offset-1">
|
||||
Pressing Ctrl + 'S' saves your settings (only available on the settings page)
|
||||
Pressing ctrl + 's' saves your settings (only in settings)
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -8,41 +8,36 @@
|
||||
</div>
|
||||
<div class="recent-folders">
|
||||
{{#if recentFolders}}
|
||||
<h4>Recent folders</h4>
|
||||
<table class="table table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Path</th>
|
||||
<th>Last used</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{{#each recentFolders}}
|
||||
<tr class="recent-folder x-recent-folder" data-path="{{path}}">
|
||||
<td>{{path}}</td>
|
||||
<td>{{RelativeDate lastUsed}}</td>
|
||||
</tr>
|
||||
{{/each}}
|
||||
</tbody>
|
||||
</table>
|
||||
<h4>Recent Folders</h4>
|
||||
|
||||
<table class="table table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Path</th>
|
||||
<th>Last Used</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{{#each recentFolders}}
|
||||
<tr class="recent-folder x-recent-folder" data-path="{{path}}">
|
||||
<td>{{path}}</td>
|
||||
<td>{{RelativeDate lastUsed}}</td>
|
||||
</tr>
|
||||
{{/each}}
|
||||
</tbody>
|
||||
</table>
|
||||
{{/if}}
|
||||
</div>
|
||||
<div class="buttons">
|
||||
<div class="row">
|
||||
<div class="col-md-4 col-md-offset-4">
|
||||
<button class="btn btn-primary btn-lg btn-block x-automatic-import x-button">
|
||||
<i class="icon-sonarr-search-automatic" aria-hidden="true"></i>
|
||||
Import file(s) automatically
|
||||
</button>
|
||||
<button class="btn btn-primary btn-lg btn-block x-automatic-import x-button"><i class="icon-sonarr-search-automatic"></i> Import File(s) Automatically</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-4 col-md-offset-4">
|
||||
<button class="btn btn-primary btn-lg btn-block x-manual-import x-button">
|
||||
<i class="icon-sonarr-search-manual" aria-hidden="true"></i>
|
||||
Manual import
|
||||
</button>
|
||||
<button class="btn btn-primary btn-lg btn-block x-manual-import x-button"><i class="icon-sonarr-search-manual"></i> Manual Import</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
@ -1,10 +1,12 @@
|
||||
<div class="modal-content">
|
||||
<div class="manual-import-modal">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="close">×</button>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
|
||||
|
||||
<h3>
|
||||
Manual import - {{#if title}}{{title}}{{else}}<span>Select folder</span>{{/if}}
|
||||
Manual Import - {{#if title}}{{title}}{{else}}Select Folder{{/if}}
|
||||
</h3>
|
||||
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="x-workspace"></div>
|
||||
@ -13,8 +15,8 @@
|
||||
<div class="modal-footer">
|
||||
<div class="col-md-2 pull-left">
|
||||
<select class="form-control x-importmode">
|
||||
<option value="Move">Move files</option>
|
||||
<option value="Copy">Copy files</option>
|
||||
<option value="Move">Move Files</option>
|
||||
<option value="Copy">Copy Files</option>
|
||||
</select>
|
||||
</div>
|
||||
<button class="btn btn-default" data-dismiss="modal">Cancel</button>
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user