public void OnPreviewToolRegistrationReceivedFromWebApp(Regex regex) { lock (this) { previewPartIdRegex = regex; if (lastContentUpdateRequest != null) { var contentUpdateParams = lastContentUpdateRequest.ConvertRequestToContentUpdateParams(previewPartIdRegex); if (contentUpdateParams.PreviewParts.Length > 0) { var postMessage = new ContentUpdateMessage(contentUpdateParams).SerializeToPostMessage(); executeJavaScriptAsync(postMessage); lastContentUpdateRequest = null; } if (lastChangeHighlightRequest != null) { var changeHighlightParams = lastChangeHighlightRequest.ConvertRequestToChangeHighlightParams(previewPartIdRegex); if (changeHighlightParams.ActivePreviewParts.Length > 0) { var postMessage = new ChangeHighlightInPreviewMessage(changeHighlightParams).SerializeToPostMessage(); executeJavaScriptAsync(postMessage); lastChangeHighlightRequest = null; } } } else { requestPreviewPartIdUpdate(); } } }
void ICallbackHandler.HandleContentUpdateRequest(ContentUpdateRequestFromMQ contentUpdateRequest, MessagePartInfo messagePartInfo) { onRequestReceived(); assembleMessageParts( ref contentUpdateMessagePartInfo, ref contentUpdateMessageParts, messagePartInfo, contentUpdateRequest, () => { List <PreviewPart> previewParts = new List <PreviewPart>(); foreach (var messagePart in contentUpdateMessageParts) { previewParts.AddRange(messagePart.PreviewParts); } var request = new ContentUpdateRequestFromMQ() { PreviewParts = previewParts.ToArray() }; callbackHandler.QueueContentUpdateRequest(request.Convert()); }); }
public void QueueContentUpdateRequest(ContentUpdateRequestFromMQ request) { lock (this) { callbackActions.Enqueue(() => previewToolCallback.HandleContentUpdateRequest(request)); callbackEnqueued.Set(); } }
public void HandleDisconnect() { lock (this) { externalToolAddress = null; previewPartIdRegex = null; lastContentUpdateRequest = null; lastChangeHighlightRequest = null; handleDisconnect(); } }
public void HandleContentUpdateRequest(ContentUpdateRequestFromMQ contentUpdateRequest) { lock (this) { if (externalToolAddress == null) { foreach (var previewPart in contentUpdateRequest.PreviewParts) { if (updateExternalToolAddress(previewPart.PreviewProperties)) { break; } } } if (previewPartIdRegex != null) { var contentUpdateParams = contentUpdateRequest.ConvertRequestToContentUpdateParams(previewPartIdRegex); if (contentUpdateParams.PreviewParts.Length > 0) { var postMessage = new ContentUpdateMessage(contentUpdateParams).SerializeToPostMessage(); executeJavaScriptAsync(postMessage); } if (lastChangeHighlightRequest != null) { var changeHighlightParams = lastChangeHighlightRequest.ConvertRequestToChangeHighlightParams(previewPartIdRegex); if (changeHighlightParams.ActivePreviewParts.Length > 0) { var postMessage = new ChangeHighlightInPreviewMessage(changeHighlightParams).SerializeToPostMessage(); executeJavaScriptAsync(postMessage); lastChangeHighlightRequest = null; } } } else { lastContentUpdateRequest = contentUpdateRequest; } } }
private bool updateExternalToolAddress(PreviewProperty[] previewProperties) { for (int i = 0; i < previewProperties.Length; i++) { if (previewProperties[i].Name == PropertyNames.WebPreviewBaseUrl) { if (externalToolAddress != (string)previewProperties[i].Value) { externalToolAddress = (string)previewProperties[i].Value; previewPartIdRegex = null; lastContentUpdateRequest = null; lastChangeHighlightRequest = null; handlePreviewUrlChange(externalToolAddress); return(true); } return(false); } } return(false); }
public void HandleContentUpdateRequest(ContentUpdateRequestFromMQ contentUpdateRequest) { if (!contentUpdateRequest.PreviewParts.Any()) { return; } Log.Instance.WriteMessage($"Content updated in memoQ.", SeverityOption.Info); this.InvokeIfRequired(_ => { bool isFirstPreviewPart = true; bool docWasEmpty = mainViewModel.VideoViewModel.Document.Id == Guid.Empty; var newDocuments = new List <Document>(); foreach (var previewPart in contentUpdateRequest.PreviewParts) { var previewIdParts = previewPart.PreviewPartId.Split('|'); long start = 0; long end = 0; if (!string.IsNullOrEmpty(previewIdParts[1])) { start = TimeSpan.Parse(previewIdParts[1], CultureInfo.InvariantCulture).Ticks / TimeSpan.TicksPerMillisecond; } else { Log.Instance.WriteMessage("Start time was given probably not in the right format (hh:mm:ss.fff).", SeverityOption.Warning); } if (!string.IsNullOrEmpty(previewIdParts[1])) { end = TimeSpan.Parse(previewIdParts[2], CultureInfo.InvariantCulture).Ticks / TimeSpan.TicksPerMillisecond; } else { Log.Instance.WriteMessage("End time was given probably not in the right format (hh:mm:ss.fff).", SeverityOption.Warning); } var docGuid = previewPart.SourceDocument.DocumentGuid; var sourceContent = previewPart.SourceContent.Content; var targetContent = previewPart.TargetContent.Content; var content = string.IsNullOrEmpty(targetContent) ? sourceContent : targetContent; var segmentPart = new SegmentPart(previewPart.PreviewPartId, previewPart.PreviewProperties, previewPart.SourceLangCode, previewPart.TargetLangCode, sourceContent, targetContent, new Subtitle(start, end, content)); var segmentKey = Tuple.Create(docGuid, start, end); segmentParts[segmentKey] = segmentPart; var sourceDocument = previewPart.SourceDocument; var document = addMediaToDocumentIfNeeded(sourceDocument.DocumentGuid, sourceDocument.DocumentName, sourceDocument.ImportPath); if (isFirstPreviewPart) { if (!segmentPartsToLoop.Any()) { segmentPartsToLoop.Add(segmentPart); } if (mainViewModel.VideoViewModel.Document.Id == Guid.Empty) { mainViewModel.VideoViewModel.Document = document; } isFirstPreviewPart = false; } if (!mainViewModel.VideoViewModel.DocumentsWithSameMedia.Any(d => d.Id == document.Id)) { // collect unique documents that have the same media (e.g. a view could contain multiple documents) if (!newDocuments.Any() || (!newDocuments.Any(d => d.Id == document.Id) && newDocuments.Any(d => d.Media == document.Media))) { newDocuments.Add(document); } } } if (newDocuments.Any()) { mainViewModel.VideoViewModel.DocumentsWithSameMedia = newDocuments; } if (Settings.Instance.PlayMode == PlayMode.All) { // open video file if it wasn't if (docWasEmpty) { var firstDoc = contentUpdateRequest.PreviewParts.First().SourceDocument; var firstDocument = addMediaToDocumentIfNeeded(firstDoc.DocumentGuid, firstDoc.DocumentName, firstDoc.ImportPath); mainViewModel.VideoViewModel.Document = firstDocument; reinitVideoPlayer(); startVideo(); } } else { reinitVideoPlayer(); loopVideo(segmentPartsToLoop.First().Subtitle.Start - Settings.Instance.TimePaddingForLoop, segmentPartsToLoop.Last().Subtitle.End + Settings.Instance.TimePaddingForLoop); } }); }
public void HandleContentUpdateRequest(ContentUpdateRequestFromMQ contentUpdateRequest) { logRequest("Content update request", contentUpdateRequest); }
public static ContentUpdateParams ConvertRequestToContentUpdateParams(this ContentUpdateRequestFromMQ contentUpdateRequest, Regex previewPartIdRegex) { return(new ContentUpdateParams(contentUpdateRequest.PreviewParts.Where(p => previewPartIdRegex.IsMatch(p.PreviewPartId)).Select(p => p.Convert()).ToArray())); }
public HttpResponseMessage UpdateContent(ContentUpdateRequestFromMQ request) { getCallbackHandler().HandleContentUpdateRequest(request, getMessagePartInfo()); return(new HttpResponseMessage(HttpStatusCode.OK)); }