Ejemplo n.º 1
0
        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();
                }
            }
        }
Ejemplo n.º 2
0
        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());
            });
        }
Ejemplo n.º 3
0
 public void QueueContentUpdateRequest(ContentUpdateRequestFromMQ request)
 {
     lock (this)
     {
         callbackActions.Enqueue(() => previewToolCallback.HandleContentUpdateRequest(request));
         callbackEnqueued.Set();
     }
 }
Ejemplo n.º 4
0
 public void HandleDisconnect()
 {
     lock (this)
     {
         externalToolAddress        = null;
         previewPartIdRegex         = null;
         lastContentUpdateRequest   = null;
         lastChangeHighlightRequest = null;
         handleDisconnect();
     }
 }
Ejemplo n.º 5
0
        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;
                }
            }
        }
Ejemplo n.º 6
0
        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);
        }
Ejemplo n.º 7
0
        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);
                }
            });
        }
Ejemplo n.º 8
0
 public void HandleContentUpdateRequest(ContentUpdateRequestFromMQ contentUpdateRequest)
 {
     logRequest("Content update request", contentUpdateRequest);
 }
Ejemplo n.º 9
0
 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()));
 }
Ejemplo n.º 10
0
 public HttpResponseMessage UpdateContent(ContentUpdateRequestFromMQ request)
 {
     getCallbackHandler().HandleContentUpdateRequest(request, getMessagePartInfo());
     return(new HttpResponseMessage(HttpStatusCode.OK));
 }