diff --git a/TAS.Client/ViewModels/EngineViewmodel.cs b/TAS.Client/ViewModels/EngineViewmodel.cs index 1a32fb5d..008ffe6c 100644 --- a/TAS.Client/ViewModels/EngineViewmodel.cs +++ b/TAS.Client/ViewModels/EngineViewmodel.cs @@ -1213,10 +1213,15 @@ private void _mediaSearchViewModelMediaChoosen(object o, MediaSearchEventArgs e) } newEvent.Media = e.Media; - if (mediaSearchVm.NewEventStartType == TStartType.After) - mediaSearchVm.BaseEvent.InsertAfter(newEvent); - if (mediaSearchVm.NewEventStartType == TStartType.WithParent) - mediaSearchVm.BaseEvent.InsertUnder(newEvent, (e.Media as ITemplated)?.StartType == TStartType.WithParentFromEnd); + switch (mediaSearchVm.NewEventStartType) + { + case TStartType.After: + mediaSearchVm.BaseEvent.InsertAfter(newEvent); + break; + case TStartType.WithParent: + mediaSearchVm.BaseEvent.InsertUnder(newEvent, (e.Media as ITemplated)?.StartType == TStartType.WithParentFromEnd); + break; + } mediaSearchVm.NewEventStartType = TStartType.After; mediaSearchVm.BaseEvent = newEvent; LastAddedEvent = newEvent; diff --git a/TAS.Client/ViewModels/EventEditViewmodel.cs b/TAS.Client/ViewModels/EventEditViewmodel.cs index 7c57f1ad..45422128 100644 --- a/TAS.Client/ViewModels/EventEditViewmodel.cs +++ b/TAS.Client/ViewModels/EventEditViewmodel.cs @@ -733,7 +733,7 @@ private void ModelPropertyChanged(object sender, PropertyChangedEventArgs e) break; case nameof(IEvent.IsEnabled): _isEnabled = s.IsEnabled; - NotifyPropertyChanged(nameof(_isEnabled)); + NotifyPropertyChanged(nameof(IsEnabled)); break; case nameof(IEvent.IsHold): _isHold = s.IsHold; diff --git a/TAS.Remoting.Proxy/Model/LoudnessOperation.cs b/TAS.Remoting.Proxy/Model/LoudnessOperation.cs index 56c55e3e..6eb94dd0 100644 --- a/TAS.Remoting.Proxy/Model/LoudnessOperation.cs +++ b/TAS.Remoting.Proxy/Model/LoudnessOperation.cs @@ -19,8 +19,9 @@ public class LoudnessOperation : FileOperation, ILoudnessOperation private event EventHandler _audioVolumeMeasured; - public TimeSpan MeasureDuration { get => Get(); set => Set(value); } - public TimeSpan MeasureStart { get => Get(); set => Set(value); } + public TimeSpan MeasureDuration { get => _measureDuration; set => Set(value); } + + public TimeSpan MeasureStart { get => _measureStart; set => Set(value); } public event EventHandler AudioVolumeMeasured { diff --git a/TAS.Server/CasparServerChannel.cs b/TAS.Server/CasparServerChannel.cs index 1e8911f9..2fda6b90 100644 --- a/TAS.Server/CasparServerChannel.cs +++ b/TAS.Server/CasparServerChannel.cs @@ -318,16 +318,16 @@ public void ReStart(Event ev) && ev != null) { CasparItem item = _getItem(ev); - if (item != null) - { - if (ev.EventType == TEventType.Movie && ev.Media != null) - item.Seek = (int)ev.Position + (int)((ev.ScheduledTc.Ticks - ev.Media.TcPlay.Ticks) / ev.Engine.FrameTicks); - item.Transition.Duration = 3; - item.Transition.Type = TransitionType.MIX; - channel.LoadBG(item); - channel.Play(item.VideoLayer); - Debug.WriteLine("CasparChanner.ReStart: restarted {0} from frame {1}", item.Clipname, item.Seek); - } + if (item == null) + return; + var media = ev.Media; + if (ev.EventType == TEventType.Movie && media != null) + item.Seek = (int)ev.Position + (int)((ev.ScheduledTc.Ticks - media.TcPlay.Ticks) / ev.Engine.FrameTicks); + item.Transition.Duration = 3; + item.Transition.Type = TransitionType.MIX; + channel.LoadBG(item); + channel.Play(item.VideoLayer); + Debug.WriteLine("CasparChanner.ReStart: restarted {0} from frame {1}", item.Clipname, item.Seek); } } diff --git a/TAS.Server/Engine.cs b/TAS.Server/Engine.cs index ea6aeb93..7332c400 100644 --- a/TAS.Server/Engine.cs +++ b/TAS.Server/Engine.cs @@ -974,16 +974,16 @@ internal void RemoveFixedTimeEvent(Event e) } } - internal void RemoveEvent(Event @event) + internal void RemoveEvent(Event ev) { - RemoveRootEvent(@event); - if (@event.StartType == TStartType.OnFixedTime) - RemoveFixedTimeEvent(@event); - if (@event.Id != 0) - _events.TryRemove(@event.Id, out _); + RemoveRootEvent(ev); + if (ev.StartType == TStartType.OnFixedTime) + RemoveFixedTimeEvent(ev); + if (ev.Id != 0) + _events.TryRemove(ev.Id, out _); - if (@event.Media is ServerMedia media - && @event.PlayState == TPlayState.Played + if (ev.Media is ServerMedia media + && ev.PlayState == TPlayState.Played && media.MediaType == TMediaType.Movie && ArchivePolicy == TArchivePolicyType.ArchivePlayedAndNotUsedWhenDeleteEvent && _mediaManager.ArchiveDirectory != null diff --git a/TAS.Server/MediaManager.cs b/TAS.Server/MediaManager.cs index fea82a85..a821d651 100644 --- a/TAS.Server/MediaManager.cs +++ b/TAS.Server/MediaManager.cs @@ -20,9 +20,9 @@ public class MediaManager : DtoBase, IMediaManager { private static readonly NLog.Logger Logger = NLog.LogManager.GetLogger(nameof(MediaManager)); - [JsonProperty(nameof(Engine), TypeNameHandling = TypeNameHandling.Objects, IsReference = true)] + [JsonProperty(nameof(Engine))] private readonly Engine _engine; - [JsonProperty(nameof(FileManager), TypeNameHandling = TypeNameHandling.Objects, IsReference = true)] + [JsonProperty(nameof(FileManager))] private readonly FileManager _fileManager; private readonly List _recorders; private readonly object _lockSynchronizeMediaSecToPri = new object(); @@ -43,25 +43,25 @@ public MediaManager(Engine engine) public IEngine Engine => _engine; - [JsonProperty(TypeNameHandling = TypeNameHandling.Objects)] + [JsonProperty] public IServerDirectory MediaDirectoryPRI { get; private set; } - [JsonProperty(TypeNameHandling = TypeNameHandling.Objects)] + [JsonProperty] public IServerDirectory MediaDirectorySEC { get; private set; } - [JsonProperty(TypeNameHandling = TypeNameHandling.Objects)] + [JsonProperty] public IServerDirectory MediaDirectoryPRV { get; private set; } - [JsonProperty(TypeNameHandling = TypeNameHandling.Objects)] + [JsonProperty] public IAnimationDirectory AnimationDirectoryPRI { get; private set; } - [JsonProperty(TypeNameHandling = TypeNameHandling.Objects)] + [JsonProperty] public IAnimationDirectory AnimationDirectorySEC { get; private set; } - [JsonProperty(TypeNameHandling = TypeNameHandling.Objects)] + [JsonProperty] public IAnimationDirectory AnimationDirectoryPRV { get; private set; } - [JsonProperty(TypeNameHandling = TypeNameHandling.Objects)] + [JsonProperty] public IArchiveDirectory ArchiveDirectory { get; private set; } public ICGElementsController CGElementsController => _engine.CGElementsController; @@ -505,7 +505,7 @@ private MediaDeleteResult _deleteMedia(IMedia media, bool forceDelete) } else { - MediaDeleteResult reason = media is PersistentMedia pm ? _engine.CanDeleteMedia(pm) : MediaDeleteResult.NoDeny; + var reason = media is PersistentMedia pm ? _engine.CanDeleteMedia(pm) : MediaDeleteResult.NoDeny; if (reason.Result == MediaDeleteResult.MediaDeleteResultEnum.Success) _fileManager.Queue(new FileOperation(_fileManager) { Kind = TFileOperationKind.Delete, Source = media }); return reason; @@ -561,7 +561,7 @@ private void _mediaPRIRemoved(object o, MediaEventArgs e) && MediaDirectorySEC != MediaDirectoryPRI && MediaDirectorySEC.IsInitialized) { - IMedia mediaToDelete = ((MediaDirectory)MediaDirectorySEC).FindMediaByMediaGuid(e.Media.MediaGuid); + var mediaToDelete = ((MediaDirectory)MediaDirectorySEC).FindMediaByMediaGuid(e.Media.MediaGuid); if (mediaToDelete != null && mediaToDelete.FileExists()) FileManager.Queue(new FileOperation(_fileManager) { Kind = TFileOperationKind.Delete, Source = mediaToDelete }, false); }