aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2013-12-29 09:54:11 -0500
committerLuke Pulverenti <luke.pulverenti@gmail.com>2013-12-29 09:54:11 -0500
commit30b29f63c470eb0e92c53ad7df67d6bcf8a25914 (patch)
tree91b4dc888dcb33e026af264be5db768a5b19de1e
parent3488cfecbd54eaaf917d853664f68cac84d472e9 (diff)
be more tolerant of media folder names with invalid url chars
-rw-r--r--MediaBrowser.Api/Library/LibraryStructureService.cs50
-rw-r--r--MediaBrowser.Controller/Entities/User.cs1
-rw-r--r--MediaBrowser.Providers/MediaBrowser.Providers.csproj2
-rw-r--r--MediaBrowser.Providers/Studios/StudioImageProvider.cs19
-rw-r--r--MediaBrowser.Providers/Studios/StudiosManualImageProvider.cs2
-rw-r--r--MediaBrowser.Providers/Studios/thumbs.txt (renamed from MediaBrowser.Providers/Studios/backdrops.txt)0
-rw-r--r--MediaBrowser.WebDashboard/ApiClient.js22
-rw-r--r--MediaBrowser.WebDashboard/packages.config2
8 files changed, 69 insertions, 29 deletions
diff --git a/MediaBrowser.Api/Library/LibraryStructureService.cs b/MediaBrowser.Api/Library/LibraryStructureService.cs
index c964b5517..775907379 100644
--- a/MediaBrowser.Api/Library/LibraryStructureService.cs
+++ b/MediaBrowser.Api/Library/LibraryStructureService.cs
@@ -28,8 +28,8 @@ namespace MediaBrowser.Api.Library
public string UserId { get; set; }
}
- [Route("/Library/VirtualFolders/{Name}", "POST")]
- [Route("/Users/{UserId}/VirtualFolders/{Name}", "POST")]
+ [Route("/Library/VirtualFolders", "POST")]
+ [Route("/Users/{UserId}/VirtualFolders", "POST")]
public class AddVirtualFolder : IReturnVoid
{
/// <summary>
@@ -57,8 +57,8 @@ namespace MediaBrowser.Api.Library
public bool RefreshLibrary { get; set; }
}
- [Route("/Library/VirtualFolders/{Name}", "DELETE")]
- [Route("/Users/{UserId}/VirtualFolders/{Name}", "DELETE")]
+ [Route("/Library/VirtualFolders", "DELETE")]
+ [Route("/Users/{UserId}/VirtualFolders", "DELETE")]
public class RemoveVirtualFolder : IReturnVoid
{
/// <summary>
@@ -80,8 +80,8 @@ namespace MediaBrowser.Api.Library
public bool RefreshLibrary { get; set; }
}
- [Route("/Library/VirtualFolders/{Name}/Name", "POST")]
- [Route("/Users/{UserId}/VirtualFolders/{Name}/Name", "POST")]
+ [Route("/Library/VirtualFolders/Name", "POST")]
+ [Route("/Users/{UserId}/VirtualFolders/Name", "POST")]
public class RenameVirtualFolder : IReturnVoid
{
/// <summary>
@@ -109,8 +109,8 @@ namespace MediaBrowser.Api.Library
public bool RefreshLibrary { get; set; }
}
- [Route("/Library/VirtualFolders/{Name}/Paths", "POST")]
- [Route("/Users/{UserId}/VirtualFolders/{Name}/Paths", "POST")]
+ [Route("/Library/VirtualFolders/Paths", "POST")]
+ [Route("/Users/{UserId}/VirtualFolders/Paths", "POST")]
public class AddMediaPath : IReturnVoid
{
/// <summary>
@@ -138,8 +138,8 @@ namespace MediaBrowser.Api.Library
public bool RefreshLibrary { get; set; }
}
- [Route("/Library/VirtualFolders/{Name}/Paths", "DELETE")]
- [Route("/Users/{UserId}/VirtualFolders/{Name}/Paths", "DELETE")]
+ [Route("/Library/VirtualFolders/Paths", "DELETE")]
+ [Route("/Users/{UserId}/VirtualFolders/Paths", "DELETE")]
public class RemoveMediaPath : IReturnVoid
{
/// <summary>
@@ -243,6 +243,11 @@ namespace MediaBrowser.Api.Library
/// <param name="request">The request.</param>
public void Post(AddVirtualFolder request)
{
+ if (string.IsNullOrWhiteSpace(request.Name))
+ {
+ throw new ArgumentNullException("request");
+ }
+
var name = _fileSystem.GetValidFilename(request.Name);
string rootFolderPath;
@@ -307,6 +312,16 @@ namespace MediaBrowser.Api.Library
/// <param name="request">The request.</param>
public void Post(RenameVirtualFolder request)
{
+ if (string.IsNullOrWhiteSpace(request.Name))
+ {
+ throw new ArgumentNullException("request");
+ }
+
+ if (string.IsNullOrWhiteSpace(request.NewName))
+ {
+ throw new ArgumentNullException("request");
+ }
+
string rootFolderPath;
if (string.IsNullOrEmpty(request.UserId))
@@ -380,6 +395,11 @@ namespace MediaBrowser.Api.Library
/// <param name="request">The request.</param>
public void Delete(RemoveVirtualFolder request)
{
+ if (string.IsNullOrWhiteSpace(request.Name))
+ {
+ throw new ArgumentNullException("request");
+ }
+
string rootFolderPath;
if (string.IsNullOrEmpty(request.UserId))
@@ -435,6 +455,11 @@ namespace MediaBrowser.Api.Library
/// <param name="request">The request.</param>
public void Post(AddMediaPath request)
{
+ if (string.IsNullOrWhiteSpace(request.Name))
+ {
+ throw new ArgumentNullException("request");
+ }
+
_directoryWatchers.Stop();
try
@@ -476,6 +501,11 @@ namespace MediaBrowser.Api.Library
/// <param name="request">The request.</param>
public void Delete(RemoveMediaPath request)
{
+ if (string.IsNullOrWhiteSpace(request.Name))
+ {
+ throw new ArgumentNullException("request");
+ }
+
_directoryWatchers.Stop();
try
diff --git a/MediaBrowser.Controller/Entities/User.cs b/MediaBrowser.Controller/Entities/User.cs
index a2c7bcb57..0a935cd0d 100644
--- a/MediaBrowser.Controller/Entities/User.cs
+++ b/MediaBrowser.Controller/Entities/User.cs
@@ -1,5 +1,4 @@
using MediaBrowser.Common.Configuration;
-using MediaBrowser.Controller.IO;
using MediaBrowser.Controller.Library;
using MediaBrowser.Model.Configuration;
using MediaBrowser.Model.Serialization;
diff --git a/MediaBrowser.Providers/MediaBrowser.Providers.csproj b/MediaBrowser.Providers/MediaBrowser.Providers.csproj
index 60a3ec163..94d171ce1 100644
--- a/MediaBrowser.Providers/MediaBrowser.Providers.csproj
+++ b/MediaBrowser.Providers/MediaBrowser.Providers.csproj
@@ -168,7 +168,7 @@
<None Include="packages.config" />
</ItemGroup>
<ItemGroup>
- <EmbeddedResource Include="Studios\backdrops.txt" />
+ <EmbeddedResource Include="Studios\thumbs.txt" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Studios\posters.txt" />
diff --git a/MediaBrowser.Providers/Studios/StudioImageProvider.cs b/MediaBrowser.Providers/Studios/StudioImageProvider.cs
index 7bb98a87c..6a351b688 100644
--- a/MediaBrowser.Providers/Studios/StudioImageProvider.cs
+++ b/MediaBrowser.Providers/Studios/StudioImageProvider.cs
@@ -49,7 +49,7 @@ namespace MediaBrowser.Providers.Studios
protected override bool NeedsRefreshInternal(BaseItem item, BaseProviderInfo providerInfo)
{
- if (!string.IsNullOrEmpty(item.PrimaryImagePath) && item.BackdropImagePaths.Count == 0)
+ if (item.HasImage(ImageType.Primary) && item.HasImage(ImageType.Thumb))
{
return false;
}
@@ -75,13 +75,16 @@ namespace MediaBrowser.Providers.Studios
public override async Task<bool> FetchAsync(BaseItem item, bool force, BaseProviderInfo providerInfo, CancellationToken cancellationToken)
{
- if (string.IsNullOrEmpty(item.PrimaryImagePath) || item.BackdropImagePaths.Count == 0)
+ if (item.HasImage(ImageType.Primary) && item.HasImage(ImageType.Thumb))
{
- var images = await _providerManager.GetAvailableRemoteImages(item, cancellationToken, StudiosManualImageProvider.ProviderName).ConfigureAwait(false);
-
- await DownloadImages(item, images.ToList(), cancellationToken).ConfigureAwait(false);
+ SetLastRefreshed(item, DateTime.UtcNow, providerInfo);
+ return true;
}
+ var images = await _providerManager.GetAvailableRemoteImages(item, cancellationToken, StudiosManualImageProvider.ProviderName).ConfigureAwait(false);
+
+ await DownloadImages(item, images.ToList(), cancellationToken).ConfigureAwait(false);
+
SetLastRefreshed(item, DateTime.UtcNow, providerInfo);
return true;
}
@@ -96,6 +99,12 @@ namespace MediaBrowser.Providers.Studios
{
await SaveImage(item, images, ImageType.Primary, cancellationToken).ConfigureAwait(false);
}
+ cancellationToken.ThrowIfCancellationRequested();
+
+ if (!item.HasImage(ImageType.Thumb))
+ {
+ await SaveImage(item, images, ImageType.Thumb, cancellationToken).ConfigureAwait(false);
+ }
}
if (!item.LockedFields.Contains(MetadataFields.Backdrops))
diff --git a/MediaBrowser.Providers/Studios/StudiosManualImageProvider.cs b/MediaBrowser.Providers/Studios/StudiosManualImageProvider.cs
index 8255c6d56..49f552093 100644
--- a/MediaBrowser.Providers/Studios/StudiosManualImageProvider.cs
+++ b/MediaBrowser.Providers/Studios/StudiosManualImageProvider.cs
@@ -51,7 +51,7 @@ namespace MediaBrowser.Providers.Studios
if (backdrops)
{
- //list.Add(GetImage(item, "backdrops.txt", ImageType.Backdrop, "backdrop"));
+ list.Add(GetImage(item, "thumbs.txt", ImageType.Thumb, "thumb"));
}
return Task.FromResult(list.Where(i => i != null));
diff --git a/MediaBrowser.Providers/Studios/backdrops.txt b/MediaBrowser.Providers/Studios/thumbs.txt
index 0d3ad4611..0d3ad4611 100644
--- a/MediaBrowser.Providers/Studios/backdrops.txt
+++ b/MediaBrowser.Providers/Studios/thumbs.txt
diff --git a/MediaBrowser.WebDashboard/ApiClient.js b/MediaBrowser.WebDashboard/ApiClient.js
index 18c007962..274be16b9 100644
--- a/MediaBrowser.WebDashboard/ApiClient.js
+++ b/MediaBrowser.WebDashboard/ApiClient.js
@@ -1328,10 +1328,9 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, wi
var url = userId ? "Users/" + userId + "/VirtualFolders" : "Library/VirtualFolders";
- url += "/" + name;
-
url = self.getUrl(url, {
- refreshLibrary: refreshLibrary ? true : false
+ refreshLibrary: refreshLibrary ? true : false,
+ name: name
});
return self.ajax({
@@ -1357,10 +1356,10 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, wi
}
options.refreshLibrary = refreshLibrary ? true : false;
+ options.name = name;
var url = userId ? "Users/" + userId + "/VirtualFolders" : "Library/VirtualFolders";
- url += "/" + name;
url = self.getUrl(url, options);
return self.ajax({
@@ -1381,11 +1380,12 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, wi
var url = userId ? "Users/" + userId + "/VirtualFolders" : "Library/VirtualFolders";
- url += "/" + name + "/Name";
+ url += "/Name";
url = self.getUrl(url, {
refreshLibrary: refreshLibrary ? true : false,
- newName: newName
+ newName: newName,
+ name: name
});
return self.ajax({
@@ -1410,11 +1410,12 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, wi
var url = userId ? "Users/" + userId + "/VirtualFolders" : "Library/VirtualFolders";
- url += "/" + virtualFolderName + "/Paths";
+ url += "/Paths";
url = self.getUrl(url, {
refreshLibrary: refreshLibrary ? true : false,
- path: mediaPath
+ path: mediaPath,
+ name: virtualFolderName
});
return self.ajax({
@@ -1439,11 +1440,12 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, wi
var url = userId ? "Users/" + userId + "/VirtualFolders" : "Library/VirtualFolders";
- url += "/" + virtualFolderName + "/Paths";
+ url += "/Paths";
url = self.getUrl(url, {
refreshLibrary: refreshLibrary ? true : false,
- path: mediaPath
+ path: mediaPath,
+ name: virtualFolderName
});
return self.ajax({
diff --git a/MediaBrowser.WebDashboard/packages.config b/MediaBrowser.WebDashboard/packages.config
index e36a72adf..4cc0c4d55 100644
--- a/MediaBrowser.WebDashboard/packages.config
+++ b/MediaBrowser.WebDashboard/packages.config
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
- <package id="MediaBrowser.ApiClient.Javascript" version="3.0.212" targetFramework="net45" />
+ <package id="MediaBrowser.ApiClient.Javascript" version="3.0.213" targetFramework="net45" />
</packages> \ No newline at end of file