aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2015-01-13 00:40:27 -0500
committerLuke Pulverenti <luke.pulverenti@gmail.com>2015-01-13 00:40:27 -0500
commit87c23f145c2154c6af8f24f06ce0788b85024767 (patch)
tree890d51b02ef0d506fc38877e6340b789d5268056
parentd8d5dd487326dd3fccf4e9f30cd8f7e3783fcfda (diff)
kick off sync right after creating job
-rw-r--r--MediaBrowser.Model/ApiClient/IApiClient.cs7
-rw-r--r--MediaBrowser.Providers/Manager/ImageSaver.cs8
-rw-r--r--MediaBrowser.Server.Implementations/Library/LibraryManager.cs18
-rw-r--r--MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs32
-rw-r--r--MediaBrowser.Server.Implementations/Sync/SyncManager.cs11
-rw-r--r--Nuget/MediaBrowser.Common.Internal.nuspec4
-rw-r--r--Nuget/MediaBrowser.Common.nuspec2
-rw-r--r--Nuget/MediaBrowser.Model.Signed.nuspec2
-rw-r--r--Nuget/MediaBrowser.Server.Core.nuspec4
9 files changed, 63 insertions, 25 deletions
diff --git a/MediaBrowser.Model/ApiClient/IApiClient.cs b/MediaBrowser.Model/ApiClient/IApiClient.cs
index 9faa8fced..bcba9230f 100644
--- a/MediaBrowser.Model/ApiClient/IApiClient.cs
+++ b/MediaBrowser.Model/ApiClient/IApiClient.cs
@@ -1440,5 +1440,12 @@ namespace MediaBrowser.Model.ApiClient
/// <param name="request">The request.</param>
/// <returns>Task&lt;SyncDataResponse&gt;.</returns>
Task<SyncDataResponse> SyncData(SyncDataRequest request);
+
+ /// <summary>
+ /// Gets the synchronize job item file URL.
+ /// </summary>
+ /// <param name="id">The identifier.</param>
+ /// <returns>System.String.</returns>
+ string GetSyncJobItemFileUrl(string id);
}
} \ No newline at end of file
diff --git a/MediaBrowser.Providers/Manager/ImageSaver.cs b/MediaBrowser.Providers/Manager/ImageSaver.cs
index 6175587a7..c5c6880e1 100644
--- a/MediaBrowser.Providers/Manager/ImageSaver.cs
+++ b/MediaBrowser.Providers/Manager/ImageSaver.cs
@@ -233,7 +233,8 @@ namespace MediaBrowser.Providers.Manager
using (var fs = _fileSystem.GetFileStream(path, FileMode.Create, FileAccess.Write, FileShare.Read, true))
{
- await source.CopyToAsync(fs, StreamDefaults.DefaultCopyToBufferSize, cancellationToken).ConfigureAwait(false);
+ await source.CopyToAsync(fs, StreamDefaults.DefaultCopyToBufferSize, cancellationToken)
+ .ConfigureAwait(false);
}
if (_config.Configuration.SaveMetadataHidden)
@@ -244,6 +245,11 @@ namespace MediaBrowser.Providers.Manager
file.Attributes |= FileAttributes.Hidden;
}
}
+ catch (UnauthorizedAccessException ex)
+ {
+ _logger.Error("Error saving image to {0}", ex, path);
+ throw new Exception(string.Format("Error saving image to {0}", path), ex);
+ }
finally
{
_libraryMonitor.ReportFileSystemChangeComplete(path, false);
diff --git a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs
index cceccceac..6a999a7f4 100644
--- a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs
+++ b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs
@@ -909,14 +909,6 @@ namespace MediaBrowser.Server.Implementations.Library
return obj as T;
}
- /// <summary>
- /// Creates an IBN item based on a given path
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name="path">The path.</param>
- /// <param name="name">The name.</param>
- /// <returns>Task{``0}.</returns>
- /// <exception cref="System.IO.IOException">Path not created: + path</exception>
private T CreateItemByName<T>(string path, string name, Guid id)
where T : BaseItem, new()
{
@@ -942,7 +934,15 @@ namespace MediaBrowser.Server.Implementations.Library
if (!fileInfo.Exists)
{
- fileInfo = Directory.CreateDirectory(path);
+ try
+ {
+ fileInfo = Directory.CreateDirectory(path);
+ }
+ catch (UnauthorizedAccessException ex)
+ {
+ _logger.Error("Error creating directory {0}", ex, path);
+ throw new Exception(string.Format("Error creating directory {0}", path), ex);
+ }
isNew = true;
}
diff --git a/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs b/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs
index 698806d09..7fa563889 100644
--- a/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs
+++ b/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs
@@ -326,13 +326,17 @@ namespace MediaBrowser.Server.Implementations.Sync
Statuses = new List<SyncJobItemStatus> { SyncJobItemStatus.Queued, SyncJobItemStatus.Converting }
});
- var jobItems = result.Items;
+ await SyncJobItems(result.Items, true, progress, cancellationToken).ConfigureAwait(false);
+ }
+
+ public async Task SyncJobItems(SyncJobItem[] items, bool enableConversion, IProgress<double> progress, CancellationToken cancellationToken)
+ {
var index = 0;
- foreach (var item in jobItems)
+ foreach (var item in items)
{
double percent = index;
- percent /= result.TotalRecordCount;
+ percent /= items.Length;
progress.Report(100 * percent);
@@ -341,7 +345,7 @@ namespace MediaBrowser.Server.Implementations.Sync
var innerProgress = new ActionableProgress<double>();
var job = _syncRepo.GetJob(item.JobId);
- await ProcessJobItem(job, item, innerProgress, cancellationToken).ConfigureAwait(false);
+ await ProcessJobItem(job, item, enableConversion, innerProgress, cancellationToken).ConfigureAwait(false);
job = _syncRepo.GetJob(item.JobId);
await UpdateJobStatus(job).ConfigureAwait(false);
@@ -350,7 +354,7 @@ namespace MediaBrowser.Server.Implementations.Sync
}
}
- private async Task ProcessJobItem(SyncJob job, SyncJobItem jobItem, IProgress<double> progress, CancellationToken cancellationToken)
+ private async Task ProcessJobItem(SyncJob job, SyncJobItem jobItem, bool enableConversion, IProgress<double> progress, CancellationToken cancellationToken)
{
var item = _libraryManager.GetItemById(jobItem.ItemId);
if (item == null)
@@ -378,12 +382,12 @@ namespace MediaBrowser.Server.Implementations.Sync
var video = item as Video;
if (video != null)
{
- await Sync(jobItem, video, user, deviceProfile, progress, cancellationToken).ConfigureAwait(false);
+ await Sync(jobItem, video, user, deviceProfile, enableConversion, progress, cancellationToken).ConfigureAwait(false);
}
else if (item is Audio)
{
- await Sync(jobItem, (Audio)item, user, deviceProfile, progress, cancellationToken).ConfigureAwait(false);
+ await Sync(jobItem, (Audio)item, user, deviceProfile, enableConversion, progress, cancellationToken).ConfigureAwait(false);
}
else if (item is Photo)
@@ -397,7 +401,7 @@ namespace MediaBrowser.Server.Implementations.Sync
}
}
- private async Task Sync(SyncJobItem jobItem, Video item, User user, DeviceProfile profile, IProgress<double> progress, CancellationToken cancellationToken)
+ private async Task Sync(SyncJobItem jobItem, Video item, User user, DeviceProfile profile, bool enableConversion, IProgress<double> progress, CancellationToken cancellationToken)
{
var options = new VideoOptions
{
@@ -415,6 +419,11 @@ namespace MediaBrowser.Server.Implementations.Sync
if (streamInfo.PlayMethod == PlayMethod.Transcode)
{
+ if (!enableConversion)
+ {
+ return;
+ }
+
jobItem.Status = SyncJobItemStatus.Converting;
jobItem.RequiresConversion = true;
await _syncRepo.Update(jobItem).ConfigureAwait(false);
@@ -463,7 +472,7 @@ namespace MediaBrowser.Server.Implementations.Sync
await _syncRepo.Update(jobItem).ConfigureAwait(false);
}
- private async Task Sync(SyncJobItem jobItem, Audio item, User user, DeviceProfile profile, IProgress<double> progress, CancellationToken cancellationToken)
+ private async Task Sync(SyncJobItem jobItem, Audio item, User user, DeviceProfile profile, bool enableConversion, IProgress<double> progress, CancellationToken cancellationToken)
{
var options = new AudioOptions
{
@@ -481,6 +490,11 @@ namespace MediaBrowser.Server.Implementations.Sync
if (streamInfo.PlayMethod == PlayMethod.Transcode)
{
+ if (!enableConversion)
+ {
+ return;
+ }
+
jobItem.Status = SyncJobItemStatus.Converting;
jobItem.RequiresConversion = true;
await _syncRepo.Update(jobItem).ConfigureAwait(false);
diff --git a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs b/MediaBrowser.Server.Implementations/Sync/SyncManager.cs
index 33db54ee1..6843fb604 100644
--- a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs
+++ b/MediaBrowser.Server.Implementations/Sync/SyncManager.cs
@@ -23,6 +23,7 @@ using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
+using System.Threading;
using System.Threading.Tasks;
namespace MediaBrowser.Server.Implementations.Sync
@@ -126,6 +127,16 @@ namespace MediaBrowser.Server.Implementations.Sync
await _repo.Create(job).ConfigureAwait(false);
await processor.EnsureJobItems(job).ConfigureAwait(false);
+
+ // If it already has a converting status then is must have been aborted during conversion
+ var jobItemsResult = _repo.GetJobItems(new SyncJobItemQuery
+ {
+ Statuses = new List<SyncJobItemStatus> { SyncJobItemStatus.Queued, SyncJobItemStatus.Converting },
+ JobId = jobId
+ });
+
+ await processor.SyncJobItems(jobItemsResult.Items, false, new Progress<double>(), CancellationToken.None)
+ .ConfigureAwait(false);
return new SyncJobCreationResult
{
diff --git a/Nuget/MediaBrowser.Common.Internal.nuspec b/Nuget/MediaBrowser.Common.Internal.nuspec
index d7d4a2120..b2e8ce207 100644
--- a/Nuget/MediaBrowser.Common.Internal.nuspec
+++ b/Nuget/MediaBrowser.Common.Internal.nuspec
@@ -2,7 +2,7 @@
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
<metadata>
<id>MediaBrowser.Common.Internal</id>
- <version>3.0.540</version>
+ <version>3.0.541</version>
<title>MediaBrowser.Common.Internal</title>
<authors>Luke</authors>
<owners>ebr,Luke,scottisafool</owners>
@@ -12,7 +12,7 @@
<description>Contains common components shared by Media Browser Theater and Media Browser Server. Not intended for plugin developer consumption.</description>
<copyright>Copyright © Media Browser 2013</copyright>
<dependencies>
- <dependency id="MediaBrowser.Common" version="3.0.540" />
+ <dependency id="MediaBrowser.Common" version="3.0.541" />
<dependency id="NLog" version="3.1.0.0" />
<dependency id="SimpleInjector" version="2.6.1" />
</dependencies>
diff --git a/Nuget/MediaBrowser.Common.nuspec b/Nuget/MediaBrowser.Common.nuspec
index c8f2f24cb..06fbc750f 100644
--- a/Nuget/MediaBrowser.Common.nuspec
+++ b/Nuget/MediaBrowser.Common.nuspec
@@ -2,7 +2,7 @@
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
<metadata>
<id>MediaBrowser.Common</id>
- <version>3.0.540</version>
+ <version>3.0.541</version>
<title>MediaBrowser.Common</title>
<authors>Media Browser Team</authors>
<owners>ebr,Luke,scottisafool</owners>
diff --git a/Nuget/MediaBrowser.Model.Signed.nuspec b/Nuget/MediaBrowser.Model.Signed.nuspec
index c79313850..c11f886c1 100644
--- a/Nuget/MediaBrowser.Model.Signed.nuspec
+++ b/Nuget/MediaBrowser.Model.Signed.nuspec
@@ -2,7 +2,7 @@
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
<metadata>
<id>MediaBrowser.Model.Signed</id>
- <version>3.0.540</version>
+ <version>3.0.541</version>
<title>MediaBrowser.Model - Signed Edition</title>
<authors>Media Browser Team</authors>
<owners>ebr,Luke,scottisafool</owners>
diff --git a/Nuget/MediaBrowser.Server.Core.nuspec b/Nuget/MediaBrowser.Server.Core.nuspec
index 807e49e7f..d183c9931 100644
--- a/Nuget/MediaBrowser.Server.Core.nuspec
+++ b/Nuget/MediaBrowser.Server.Core.nuspec
@@ -2,7 +2,7 @@
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
<id>MediaBrowser.Server.Core</id>
- <version>3.0.540</version>
+ <version>3.0.541</version>
<title>Media Browser.Server.Core</title>
<authors>Media Browser Team</authors>
<owners>ebr,Luke,scottisafool</owners>
@@ -12,7 +12,7 @@
<description>Contains core components required to build plugins for Media Browser Server.</description>
<copyright>Copyright © Media Browser 2013</copyright>
<dependencies>
- <dependency id="MediaBrowser.Common" version="3.0.540" />
+ <dependency id="MediaBrowser.Common" version="3.0.541" />
</dependencies>
</metadata>
<files>