public IActionResult UpdateSegment([FromBody] Segment segment)
        {
            if (segment == null)
            {
                return(Ok(new APIResponse()
                {
                    status = APIStatus.FAIL.ToString(), response = $"{nameof(segment)} cannot be null"
                }));
            }
            try
            {
                if (segment == null)
                {
                    return(BadRequest($"{nameof(segment)} cannot be null"));
                }

                var result = SegmentHelper.UpdateSegment(segment);
                if (result != null)
                {
                    return(Ok(new APIResponse()
                    {
                        status = APIStatus.PASS.ToString(), response = result
                    }));
                }

                return(Ok(new APIResponse()
                {
                    status = APIStatus.FAIL.ToString(), response = "Registration Failed."
                }));
            }
            catch (Exception ex)
            {
                return(Ok(new APIResponse()
                {
                    status = APIStatus.FAIL.ToString(), response = ex.Message
                }));
            }
        }
Beispiel #2
0
        public override IEnumerable <PSObject> GetItems(Segment segment)
        {
            segment.GetProvider().WriteDebug("DriveItems.Projects.Git.Items.GetItems(Segment)");
            GitHttpClient httpClient = this.GetHttpClient(segment) as GitHttpClient;

            return(this.Wrap(
                       segment,
                       () =>
            {
                GitVersionDescriptor versionDescriptor = new GitVersionDescriptor();
                versionDescriptor.Version = SegmentHelper.GetBranchName(segment);
                versionDescriptor.VersionType = GitVersionType.Branch;
                return httpClient
                .GetItemsAsync(
                    project: SegmentHelper.GetProjectName(segment),
                    repositoryId: SegmentHelper.GetRepoName(segment),
                    recursionLevel: VersionControlRecursionType.Full,
                    versionDescriptor: versionDescriptor)
                .Result
                .Select(x => this.ConvertToChildDriveItem(segment, x))
                .ToArray();
            }));
        }
Beispiel #3
0
    /// <summary>
    /// 秀图 消息段
    /// </summary>
    /// <param name="data">图片名/绝对路径/URL/base64</param>
    /// <param name="useCache">通过URL发送时有效,是否使用已缓存的文件</param>
    /// <param name="threadCount">通过URL发送时有效,通过网络下载图片时的线程数,默认单线程</param>
    /// <param name="id">秀图特效id,默认为40000</param>
    public static SoraSegment ShowImage(string data, int id = 40000, bool useCache = true,
                                        int?threadCount     = null)
    {
        if (string.IsNullOrEmpty(data))
        {
            throw new NullReferenceException(nameof(data));
        }
        (string dataStr, bool isDataStr) = SegmentHelper.ParseDataStr(data);
        if (!isDataStr)
        {
            Log.Error("SoraSegment|ShowImage", $"非法数据字符串({data}),已忽略消息段");
            return(IllegalSegment());
        }

        return(new SoraSegment(SegmentType.Image,
                               new ImageSegment
        {
            ImgFile = dataStr,
            ImgType = "show",
            UseCache = useCache ? 1 : null,
            Id = id,
            ThreadCount = threadCount
        }));
    }
        public override void ProcessParagraphUnit(IParagraphUnit paragraphUnit)
        {
            ISegment sourceSegment;
            string   sourceText;

            ISegment         targetSegment;
            string           targetText;
            List <IndexData> targetLContent;
            SegmentData      segmentSearch;

            ConfirmationLevel itemStatus;

            if (paragraphUnit.IsStructure)
            {
                base.ProcessParagraphUnit(paragraphUnit);
                return;
            }

            foreach (ISegmentPair item in paragraphUnit.SegmentPairs)
            {
                sourceSegment = item.Source;
                targetSegment = item.Target;
                itemStatus    = item.Properties.ConfirmationLevel;
                if (_searcher.checkSegment(item.Properties.IsLocked, itemStatus))
                {
                    _dataExtractor.Process(targetSegment);
                    targetText     = _dataExtractor.PlainText.ToString();
                    targetLContent = _dataExtractor.LockedContent;
                    if (targetText.Length > 0)
                    {
                        // do search & save found results
                        _searcher.SearchInSegment(targetText, targetLContent);

                        // if matches in target were found
                        if (SegmentHelper.ContainMatches(_searcher.resultsInText))
                        {
                            #region extract source text
                            _dataExtractor.Process(sourceSegment);
                            sourceText = _dataExtractor.PlainText.ToString();
                            #endregion
                            CollectResults(item.Properties.Id.Id, sourceText, itemStatus, sourceSegment, null, true);
                            CollectResults(item.Properties.Id.Id, targetText, itemStatus, targetSegment, _searcher.resultsInText, false);

                            segmentSearch = _resultTrg[_resultTrg.Count - 1];

                            ISegment originalSegment = (ISegment)targetSegment.Clone();
                            // unlock selections
                            if (_searchSettings.UnlockContent)
                            {
                                StatusUpdateHelper.UnlockContent(targetSegment, ItemFactory, PropertiesFactory);
                            }

                            #region REPLACE Logic
                            int textLoc = 0;
                            int cnt     = 0;
                            int status  = 0;
                            for (int i = segmentSearch.SearchResults.Count - 1; i >= 0; i--)
                            {
                                // add warning - cannot be replaced
                                if (segmentSearch.SearchResults[i].IsIndexOverlap)
                                {
                                    status = -4;
                                    _resultWarnings.Add(new WarningData(segmentSearch.Sid,
                                                                        segmentSearch.SearchResults[i],
                                                                        WarningData.WarningType.IndexOverlap));
                                }
                                else
                                {
                                    // DO REPLACE - success
                                    status = PerformReplace(targetSegment, segmentSearch.SearchResults[i], ref textLoc);
                                    #region report warning - fail
                                    if (status != 0)
                                    {
                                        if (status == -1)
                                        {
                                            _resultWarnings.Add(new WarningData(segmentSearch.Sid,
                                                                                segmentSearch.SearchResults[i],
                                                                                WarningData.WarningType.TagFound,
                                                                                segmentSearch.SearchResults[i].Length + textLoc));
                                        }
                                        else if (status == -2)
                                        {
                                            _resultWarnings.Add(new WarningData(segmentSearch.Sid,
                                                                                segmentSearch.SearchResults[i],
                                                                                WarningData.WarningType.ContainLContent,
                                                                                segmentSearch.SearchResults[i].Length + textLoc));
                                        }
                                        else if (status == -3)
                                        {
                                            _resultWarnings.Add(new WarningData(segmentSearch.Sid,
                                                                                segmentSearch.SearchResults[i],
                                                                                WarningData.WarningType.ContainComment,
                                                                                segmentSearch.SearchResults[i].Length + textLoc));
                                        }
                                        else
                                        {
                                            _resultWarnings.Add(new WarningData(segmentSearch.Sid,
                                                                                segmentSearch.SearchResults[i],
                                                                                WarningData.WarningType.Other));
                                        }
                                    }
                                    #endregion
                                }

                                if (i == segmentSearch.SearchResults.Count - 1)
                                {
                                    // collect results
                                    _resultReplace.Add(new SegmentData(_resultReplace.Count,
                                                                       segmentSearch.SegmentId,
                                                                       segmentSearch.SegmentText,
                                                                       segmentSearch.SegmentStatus,
                                                                       segmentSearch.SegmentContent));
                                    _resultReplace[_resultReplace.Count - 1].SearchResults = new List <IndexData>();
                                }

                                // if replace was successful
                                if (status == 0)
                                {
                                    _resultReplace[_resultReplace.Count - 1].SearchResults.Add(segmentSearch.SearchResults[i]);
                                    _resultReplace[_resultReplace.Count - 1].SearchResults[cnt++].RealStartIndex = textLoc;
                                }
                            }
                            #endregion

                            #region UPDATE STATUSES Logic
                            // if replace occured
                            if (_resultReplace[_resultReplace.Count - 1].IndexMatchesCount > 0)
                            {
                                // update segment properties
                                StatusUpdateHelper.UpdateSegmentProperties(item, _searchSettings);
                            }
                            else
                            {
                                item.Target.Clear();
                                originalSegment.MoveAllItemsTo(item.Target);
                            }
                            #endregion
                        }
                    }
                }
            }

            base.ProcessParagraphUnit(paragraphUnit);
        }
        public override void ProcessParagraphUnit(IParagraphUnit paragraphUnit)
        {
            ISegment         sourceSegment;
            string           sourceText;
            List <TagData>   sourceTags;
            List <IndexData> sourceLContent;
            List <IndexData> sourceResult;

            ISegment         targetSegment;
            string           targetText;
            List <TagData>   targetTags;
            List <IndexData> targetLContent;
            List <IndexData> targetResult;

            ConfirmationLevel itemStatus;

            if (!paragraphUnit.IsStructure)
            {
                foreach (ISegmentPair item in paragraphUnit.SegmentPairs)
                {
                    itemStatus   = item.Properties.ConfirmationLevel;
                    sourceTags   = null;
                    sourceResult = null;
                    targetTags   = null;
                    targetResult = null;

                    // extract text and tags from Segment
                    sourceSegment = item.Source;
                    _dataExtractor.Process(sourceSegment);
                    sourceTags     = _dataExtractor.Tags;
                    sourceText     = _dataExtractor.PlainText.ToString();
                    sourceLContent = _dataExtractor.LockedContent;

                    targetSegment = item.Target;
                    _dataExtractor.Process(targetSegment);
                    targetText     = _dataExtractor.PlainText.ToString();
                    targetTags     = _dataExtractor.Tags;
                    targetLContent = _dataExtractor.LockedContent;

                    // perform search
                    if (_searcher.checkSegment(item.Properties.IsLocked, item.Properties.ConfirmationLevel))
                    {
                        if (_searchSettings.SearchInSource && (sourceText.Length > 0 || sourceTags.Count > 0))
                        {
                            _searcher.SearchInSegment(sourceText, sourceTags, sourceLContent);
                            sourceResult = _searcher.resultsInText;
                            sourceTags   = _searcher.resultsInTags;
                        }

                        if (_searchSettings.SearchInTarget && (targetText.Length > 0 || targetTags.Count > 0))
                        {
                            _searcher.SearchInSegment(targetText, targetTags, targetLContent);
                            targetResult = _searcher.resultsInText;
                            targetTags   = _searcher.resultsInTags;
                        }

                        // collect results
                        if (SegmentHelper.ContainMatches(sourceResult, sourceTags) || SegmentHelper.ContainMatches(targetResult, targetTags))
                        {
                            CollectResults(item.Properties.Id.Id, sourceText, itemStatus, sourceSegment, sourceResult, sourceTags, true);
                            CollectResults(item.Properties.Id.Id, targetText, itemStatus, targetSegment, targetResult, targetTags, false);
                        }
                    }

                    // TODO - REMOVE
                    //// process source
                    //if (_searchSettings.SearchInSource)
                    //{
                    //    sSegment = item.Source;
                    //    if (_searcher.checkSegment(sSegment.Properties.IsLocked, sSegment.Properties.ConfirmationLevel))
                    //    {
                    //        _dataExtractor.Process(sSegment, _searchSettings.SearchInLocked);
                    //        sText = _dataExtractor.PlainText.ToString();
                    //        sTags = _dataExtractor.Tags;
                    //        if (sText.Length > 0 || sTags.Count > 0)
                    //        {
                    //            _searcher.SearchInSegment(sText, sTags);
                    //            sResult = _searcher.resultsInText;
                    //            sTags = _searcher.resultsInTags;
                    //            CollectResults(sSegment.Properties.Id.Id, sText, sSegment, sResult, sTags, true);
                    //        }
                    //    }
                    //}

                    //// process target
                    //if (_searchSettings.SearchInTarget)
                    //{
                    //    sSegment = item.Target;
                    //    if (_searcher.checkSegment(sSegment.Properties.IsLocked, sSegment.Properties.ConfirmationLevel))
                    //    {
                    //        _dataExtractor.Process(sSegment, _searchSettings.SearchInLocked);
                    //        sText = _dataExtractor.PlainText.ToString();
                    //        sTags = _dataExtractor.Tags;
                    //        if (sText.Length > 0 || sTags.Count > 0)
                    //        {
                    //            _searcher.SearchInSegment(sText, sTags);
                    //            sResult = _searcher.resultsInText;
                    //            sTags = _searcher.resultsInTags;
                    //            CollectResults(sSegment.Properties.Id.Id, sText, sSegment, sResult, sTags, false);
                    //        }
                    //    }
                    //}
                }
            }
        }
        public override void ProcessParagraphUnit(IParagraphUnit paragraphUnit)
        {
            var sourceResult = new List <IndexData>();
            var targetResult = new List <IndexData>();

            if (!paragraphUnit.IsStructure)
            {
                foreach (var item in paragraphUnit.SegmentPairs)
                {
                    var itemStatus = item.Properties.ConfirmationLevel;

                    // extract text and tags from Segment
                    var sourceSegment = item.Source;
                    _dataExtractor.Process(sourceSegment);
                    var sourceTags = _dataExtractor.Tags;
                    //we need to add a space before the soft return so the soft return is highlightable when searching for it
                    var sourceText     = _dataExtractor.PlainText.ToString().Replace("\n", " \n");
                    var sourceLContent = _dataExtractor.LockedContent;

                    var targetSegment = item.Target;
                    _dataExtractor.Process(targetSegment);
                    //we need to add a space before the soft return so the soft return is highlightable when searching for it
                    var targetText     = _dataExtractor.PlainText.ToString().Replace("\n", " \n");
                    var targetTags     = _dataExtractor.Tags;
                    var targetLContent = _dataExtractor.LockedContent;

                    // perform search
                    if (_searcher.CheckSegment(item.Properties.IsLocked, item.Properties.ConfirmationLevel))
                    {
                        if (_searchSettings.SearchInSource && (sourceText.Length > 0 || sourceTags.Count > 0))
                        {
                            _searcher.SearchInSegment(sourceText, sourceTags, sourceLContent);
                            sourceResult = _searcher.ResultsInText;
                            sourceTags   = _searcher.ResultsInTags;
                        }

                        if (_searchSettings.SearchInTarget && (targetText.Length > 0 || targetTags.Count > 0))
                        {
                            _searcher.SearchInSegment(targetText, targetTags, targetLContent);
                            targetResult = _searcher.ResultsInText;
                            targetTags   = _searcher.ResultsInTags;
                        }

                        // collect results
                        if (SegmentHelper.ContainMatches(sourceResult, sourceTags) || SegmentHelper.ContainMatches(targetResult, targetTags))
                        {
                            CollectResults(item.Properties.Id.Id, sourceText, itemStatus, sourceSegment, sourceResult, sourceTags, true);
                            CollectResults(item.Properties.Id.Id, targetText, itemStatus, targetSegment, targetResult, targetTags, false);
                        }
                    }
                }
            }
        }
        public void calcOrthogonalFor2Polygons(bool xAxis = true)
        {
            var hh = dataModel.SelectedItems.OfType <PolygonHelper>().ToArray();
            var p1 = hh[0] as PolygonHelper;
            var p2 = hh[1] as PolygonHelper;

            List <SegmentHelper> s1 = new List <SegmentHelper>();
            List <SegmentHelper> s2 = new List <SegmentHelper>();

            //skip all segments outside boundingBox

            var tr1 = p1.GetTrasformed(p1.Polygon);
            var tr2 = p2.GetTrasformed(p2.Polygon);

            for (int i = 1; i < tr1.Points.Length; i++)
            {
                var p00 = tr1.Points[i - 1];
                var p11 = tr1.Points[i];
                s1.Add(new SegmentHelper()
                {
                    Point = new Vector2d(p00.X, p00.Y), Point2 = new Vector2d(p11.X, p11.Y)
                });
            }
            for (int i = 1; i < tr2.Points.Length; i++)
            {
                var p00 = tr2.Points[i - 1];
                var p11 = tr2.Points[i];
                s2.Add(new SegmentHelper()
                {
                    Point = new Vector2d(p00.X, p00.Y), Point2 = new Vector2d(p11.X, p11.Y)
                });
            }

            double        mindist = double.MaxValue;
            SegmentHelper mins1   = null;
            SegmentHelper minss1  = null;
            SegmentHelper minss2  = null;

            foreach (var seg1 in s1)
            {
                foreach (var seg2 in s2)
                {
                    SegmentHelper dist = null;
                    if (xAxis)
                    {
                        dist = OrthogonalDist2Segments.SegmentsXDist(seg1, seg2);
                    }
                    else
                    {
                        dist = OrthogonalDist2Segments.SegmentsYDist(seg1, seg2);
                    }

                    if (dist != null)
                    {
                        if (mindist > dist.Length)
                        {
                            minss1  = seg1;
                            minss2  = seg2;
                            mindist = dist.Length;
                            mins1   = dist;
                        }
                    }
                }
            }
            if (mins1 != null)
            {
                mins1.Reverse();
                double reqDist = (mins1.Point.X > mins1.Point2.X ? -1 : 1) * mins1.Length;
                if (!xAxis)
                {
                    reqDist = (mins1.Point.Y > mins1.Point2.Y ? -1 : 1) * mins1.Length;
                }
                dataModel.AddItem(new OrthogonalDist2Segments()
                {
                    Name        = $"{p1.Name} --> {p2.Name}",
                    Segment1    = minss1.Clone(),
                    Segment2    = minss2.Clone(),
                    DistSegment = mins1
                    ,
                    RequiredOffset = reqDist
                });
                //p1.OffsetX += (mins1.Point.X > mins1.Point2.X ? 1 : -1) * mins1.Length;
            }
            else
            {
                dataModel.ParentForm.StatusMessage("no orthogonal intersection", StatusMessageType.Warning);
            }
        }
Beispiel #8
0
        public override void ProcessParagraphUnit(IParagraphUnit paragraphUnit)
        {
            ISegment         sourceSegment;
            string           sourceText;
            List <TagData>   sourceTags;
            List <IndexData> sourceLContent;
            List <IndexData> sourceResult;

            ISegment         targetSegment;
            string           targetText;
            List <TagData>   targetTags;
            List <IndexData> targetLContent;
            List <IndexData> targetResult;

            ConfirmationLevel itemStatus;

            if (!paragraphUnit.IsStructure)
            {
                foreach (ISegmentPair item in paragraphUnit.SegmentPairs)
                {
                    sourceTags   = null;
                    sourceResult = null;
                    targetTags   = null;
                    targetResult = null;

                    // extract text and tags from Segment
                    sourceSegment = item.Source;
                    _dataExtractor.Process(sourceSegment);
                    sourceText     = _dataExtractor.PlainText.ToString();
                    sourceTags     = _dataExtractor.Tags;
                    sourceLContent = _dataExtractor.LockedContent;

                    targetSegment = item.Target;
                    _dataExtractor.Process(targetSegment);
                    targetText     = _dataExtractor.PlainText.ToString();
                    targetTags     = _dataExtractor.Tags;
                    targetLContent = _dataExtractor.LockedContent;

                    // perform search
                    if (_searcher.checkSegment(item.Properties.IsLocked, item.Properties.ConfirmationLevel))
                    {
                        if (_searchSettings.SearchInSource && (sourceText.Length > 0 || sourceTags.Count > 0))
                        {
                            _searcher.SearchInSegment(sourceText, sourceTags, sourceLContent);
                            sourceResult = _searcher.resultsInText;
                            sourceTags   = _searcher.resultsInTags;
                        }

                        if (_searchSettings.SearchInTarget && (targetText.Length > 0 || targetTags.Count > 0))
                        {
                            _searcher.SearchInSegment(targetText, targetTags, targetLContent);
                            targetResult = _searcher.resultsInText;
                            targetTags   = _searcher.resultsInTags;
                        }

                        // collect results
                        if (SegmentHelper.ContainMatches(sourceResult, sourceTags) || SegmentHelper.ContainMatches(targetResult, targetTags))
                        {
                            itemStatus = (_searchSettings.UpdateStatus ? _searchSettings.NewStatus : item.Properties.ConfirmationLevel);

                            CollectResults(item.Properties.Id.Id, sourceText, itemStatus, sourceSegment, sourceResult, sourceTags, true);
                            CollectResults(item.Properties.Id.Id, targetText, itemStatus, targetSegment, targetResult, targetTags, false);

                            // unlock selections
                            if (_searchSettings.UnlockContent)
                            {
                                StatusUpdateHelper.UnlockContent(targetSegment, ItemFactory, PropertiesFactory);
                            }

                            // update segment properties
                            StatusUpdateHelper.UpdateSegmentProperties(item, _searchSettings);
                        }
                    }
                }
            }

            base.ProcessParagraphUnit(paragraphUnit);
        }
Beispiel #9
0
        /// <summary>
        /// Could be done at the same time as objects collisions,
        /// A wall could be an object with a resistance force emited on impact
        /// </summary>
        private void DetectWallColisions()
        {
            foreach (var physicalView in _physicalViews)
            {
                foreach (var collisionPoint in physicalView.CollisionPoints)
                {
                    var cornerX = physicalView.RealX + collisionPoint.X;
                    var cornerY = physicalView.RealY + collisionPoint.Y;
                    var blockX  = (int)Math.Round(cornerX / _blockSize);
                    var blockY  = (int)Math.Round(cornerY / _blockSize);

                    var block = _mapData.GetBlockByCoordinates(blockX, blockY);

                    if (block != null)
                    {
                        var previousCornerX = cornerX - physicalView.V.X;
                        var previousCornerY = cornerY - physicalView.V.Y;

                        var finalCornerVector          = new SVector(cornerX, cornerY);
                        var previousVectorCornerVector = new SVector(previousCornerX, previousCornerY);

                        var topLeftVector     = new SVector((blockX - 0.5) * _blockSize, (blockY - 0.5) * _blockSize);
                        var topRightVector    = new SVector((blockX + 0.5) * _blockSize, (blockY - 0.5) * _blockSize);
                        var bottomRightVector = new SVector((blockX + 0.5) * _blockSize, (blockY + 0.5) * _blockSize);
                        var bottomLeftVector  = new SVector((blockX - 0.5) * _blockSize, (blockY + 0.5) * _blockSize);

                        SVector intersectionVector;

                        if (SegmentHelper.LineSegementsIntersect(previousVectorCornerVector, finalCornerVector,
                                                                 topLeftVector, topRightVector, out intersectionVector))
                        {
                            _logger.Log($"intersection ! {intersectionVector.X} | {intersectionVector.Y}");
                            HandleCollisionWithBlock(physicalView, intersectionVector);
                            physicalView.V.Y    = -physicalView.V.Y;
                            physicalView.RealX += (float)(finalCornerVector.X - intersectionVector.X);
                            physicalView.RealY += (float)(finalCornerVector.Y - intersectionVector.Y);
                        }
                        else if (SegmentHelper.LineSegementsIntersect(previousVectorCornerVector, finalCornerVector,
                                                                      topRightVector, bottomRightVector, out intersectionVector))
                        {
                            _logger.Log($"intersection ! {intersectionVector.X} | {intersectionVector.Y}");
                            HandleCollisionWithBlock(physicalView, intersectionVector);
                            physicalView.V.X    = -physicalView.V.X;
                            physicalView.RealX += (float)(finalCornerVector.X - intersectionVector.X);
                            physicalView.RealY += (float)(finalCornerVector.Y - intersectionVector.Y);
                        }
                        else if (SegmentHelper.LineSegementsIntersect(previousVectorCornerVector, finalCornerVector,
                                                                      bottomRightVector, bottomLeftVector, out intersectionVector))
                        {
                            _logger.Log($"intersection ! {intersectionVector.X} | {intersectionVector.Y}");
                            HandleCollisionWithBlock(physicalView, intersectionVector);
                            physicalView.V.Y    = -physicalView.V.Y;
                            physicalView.RealX += (float)(finalCornerVector.X - intersectionVector.X);
                            physicalView.RealY += (float)(finalCornerVector.Y - intersectionVector.Y);
                        }
                        else if (SegmentHelper.LineSegementsIntersect(previousVectorCornerVector, finalCornerVector,
                                                                      bottomLeftVector, topLeftVector, out intersectionVector))
                        {
                            _logger.Log($"intersection ! {intersectionVector.X} | {intersectionVector.Y}");
                            HandleCollisionWithBlock(physicalView, intersectionVector);
                            physicalView.V.X    = -physicalView.V.X;
                            physicalView.RealX += (float)(finalCornerVector.X - intersectionVector.X);
                            physicalView.RealY += (float)(finalCornerVector.Y - intersectionVector.Y);
                        }
                    }
                }
            }
        }
 public static string GetUnescapedPSVstsChildName(this PSObject psObject)
 {
     return(SegmentHelper.Unescape(psObject.GetPSVstsChildName()));
 }
 public static void EscapeAndAddPSVstsChildName(this PSObject psObject, string value)
 {
     psObject.AddEscapedPSVstsChildName(SegmentHelper.Escape(value));
 }