sync updates

This commit is contained in:
Luke Pulverenti 2015-02-08 13:21:24 -05:00
parent 067b18d067
commit ac68e0ba41
4 changed files with 75 additions and 12 deletions

View File

@ -4,7 +4,6 @@ using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Net;
using MediaBrowser.Controller.Persistence;
using MediaBrowser.Model.Dto;
using MediaBrowser.Model.Querying;
using ServiceStack;
using System;
using System.Collections.Generic;

View File

@ -335,12 +335,30 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks
trigger.Start(false);
}
private Task _currentTask;
/// <summary>
/// Executes the task
/// </summary>
/// <returns>Task.</returns>
/// <exception cref="System.InvalidOperationException">Cannot execute a Task that is already running</exception>
public async Task Execute()
{
var task = ExecuteInternal();
_currentTask = task;
try
{
await task.ConfigureAwait(false);
}
finally
{
_currentTask = null;
}
}
private async Task ExecuteInternal()
{
// Cancel the current execution, if any
if (CurrentCancellationTokenSource != null)
@ -585,14 +603,60 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks
{
DisposeTriggers();
if (State == TaskState.Running)
var wassRunning = State == TaskState.Running;
var startTime = CurrentExecutionStartTime;
var token = CurrentCancellationTokenSource;
if (token != null)
{
OnTaskCompleted(CurrentExecutionStartTime, DateTime.UtcNow, TaskCompletionStatus.Aborted, null);
try
{
Logger.Debug(Name + ": Cancelling");
token.Cancel();
}
catch (Exception ex)
{
Logger.ErrorException("Error calling CancellationToken.Cancel();", ex);
}
}
var task = _currentTask;
if (task != null)
{
try
{
Logger.Debug(Name + ": Waiting on Task");
var exited = Task.WaitAll(new[] { task }, 2000);
if (exited)
{
Logger.Debug(Name + ": Task exited");
}
else
{
Logger.Debug(Name + ": Timed out waiting for task to stop");
}
}
catch (Exception ex)
{
Logger.ErrorException("Error calling Task.WaitAll();", ex);
}
}
if (CurrentCancellationTokenSource != null)
if (token != null)
{
CurrentCancellationTokenSource.Dispose();
try
{
Logger.Debug(Name + ": Disposing CancellationToken");
token.Dispose();
}
catch (Exception ex)
{
Logger.ErrorException("Error calling CancellationToken.Dispose();", ex);
}
}
if (wassRunning)
{
OnTaskCompleted(startTime, DateTime.UtcNow, TaskCompletionStatus.Aborted, null);
}
}
}

View File

@ -1098,7 +1098,7 @@ namespace MediaBrowser.Server.Implementations.Library
try
{
await task.Run(innerProgress, cancellationToken);
await task.Run(innerProgress, cancellationToken).ConfigureAwait(false);
}
catch (OperationCanceledException)
{

View File

@ -285,10 +285,10 @@
"ButtonHelp": "Help",
"OptionAllowUserToManageServer": "Allow this user to manage the server",
"HeaderFeatureAccess": "Feature Access",
"OptionAllowMediaPlayback": "Media playback",
"OptionAllowBrowsingLiveTv": "Live TV",
"OptionAllowDeleteLibraryContent": "Media deletion",
"OptionAllowManageLiveTv": "Live TV recording management",
"OptionAllowMediaPlayback": "Allow media playback",
"OptionAllowBrowsingLiveTv": "Allow Live TV access",
"OptionAllowDeleteLibraryContent": "Allow media deletion",
"OptionAllowManageLiveTv": "Allow Live TV recording management",
"OptionAllowRemoteControlOthers": "Allow remote control of other users",
"OptionAllowRemoteSharedDevices": "Allow remote control of shared devices",
"OptionAllowRemoteSharedDevicesHelp": "Dlna devices are considered shared until a user begins controlling it.",
@ -1362,8 +1362,8 @@
"LabelEnableSingleImageInDidlLimitHelp": "Some devices will not render properly if multiple images are embedded within Didl.",
"TabActivity": "Activity",
"TitleSync": "Sync",
"OptionAllowSyncContent": "Sync",
"OptionAllowContentDownloading": "Media downloading",
"OptionAllowSyncContent": "Allow Sync",
"OptionAllowContentDownloading": "Allow media downloading",
"NameSeasonUnknown": "Season Unknown",
"NameSeasonNumber": "Season {0}",
"LabelNewUserNameHelp": "Usernames can contain letters (a-z), numbers (0-9), dashes (-), underscores (_), apostrophes ('), and periods (.)",