Skip to content

Commit 7f039f3

Browse files
authored
Enhance PEC (#1704)
* Add HttpListener:enable control of project from report * HttpListener: Respond better to difrerent scenarios * HttpListener: Add ChangeStatus endpoint * Two way interaction - first steps * Add Post-Edit Report Viewer * ReportExplorer: convert to MVVM * Report-Studio Integration: Use webView2 messaging instead of HTTP * Sync report and editor comments * Refactoring * Handle multiple target files * Added updateSegmentStatus JS function Added sync buttons in ribbon * Comment update in Studio Editor reflects in report * Move JS functions outside of the XSLT * Add comment functionality (both ways) finished ChangeStatus finished * SyncOn -> No other report selectable * Add actions: Save, Export, Open Report Folder to Ribbon Move Refresh Report List action to ribbon * Export action: delete interactivity elements before exporting * Remove WinForms report Stop autostarting HTML report in browser * Remove WinForms report 2 Stop autostarting HTML report in browser 2 * Remove WinForms report 3 Stop autostarting HTML report in browser 3 * Extend Comparison Report Settings: Add FuzzyMatch bands * Extend Comparison Report Settings: Take FuzzyMatch settings into account * Add ReportViewFilter * Add ReportViewFilter Functionality * ReportFilter: Add fuzzy bands when fuzzy matches selected * Refactoring * Correct solution structure * Fix issues discovered in testing Add Scripts.js as resource * Create Report Wizard: Add more details to error * Enhance filter functionality * ReportViewer: Export to Excel * Excel export: add style for headers and percentages * Add all tables as sheets to excel report * Refactor Try infer original project path when not set Add ErrorHandler Backup synchronized report Change style of excel report * Report Comparison Window: Close after a report has been created * Navigate to report: ask user * Enhance report * Enhance Excel report * Enhance Excel report * Create excel report: Add error handling * Excel report: statuses shown on separate lines Sync ribbon: correct status of SyncOn button
1 parent cbd446a commit 7f039f3

File tree

175 files changed

+4248
-1589
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

175 files changed

+4248
-1589
lines changed

Post Edit Compare/Build/SolutionInfo.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,4 @@
1717
// by using the '*' as shown below:
1818
// [assembly: AssemblyVersion("1.0.*")]
1919
[assembly: AssemblyVersion("8.0.0.0")]
20-
[assembly: AssemblyFileVersion("8.0.4.0")]
20+
[assembly: AssemblyFileVersion("8.0.5.16")]

Post Edit Compare/Sdl.Community.PostEdit.Compare.Core/AppInitializer.cs

Lines changed: 0 additions & 18 deletions
This file was deleted.

Post Edit Compare/Sdl.Community.PostEdit.Compare.Core/Comparison/Comparer.cs

Lines changed: 33 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22
using System.Collections.Generic;
33
using System.IO;
44
using System.Linq;
5-
using System.Text;
6-
using System.Text.RegularExpressions;
75
using Sdl.Community.PostEdit.Compare.Core.Comparison.Text;
6+
using Sdl.Community.PostEdit.Compare.Core.Helper;
87
using Sdl.Community.PostEdit.Compare.Core.Reports;
98
using Sdl.Community.PostEdit.Compare.Core.SDLXLIFF;
9+
using Convert = System.Convert;
1010

1111
namespace Sdl.Community.PostEdit.Compare.Core.Comparison
1212
{
@@ -84,9 +84,9 @@ internal Dictionary<string, Dictionary<string, ComparisonParagraphUnit>> GetComp
8484
}
8585

8686
var fileParagraphUnitUpdated = xFileParagraphUnitsUpdated[fileParagraphUnitOriginal.Key];
87-
if ((from paragraphUnitOriginalPair in fileParagraphUnitOriginal.Value
88-
select paragraphUnitOriginalPair.Value into paragraphUnitOriginal
89-
let paragraphUnitUpdated = new ParagraphUnit(paragraphUnitOriginal.ParagraphUnitId, new List<SegmentPair>())
87+
if ((from paragraphUnitOriginalPair in fileParagraphUnitOriginal.Value
88+
select paragraphUnitOriginalPair.Value into paragraphUnitOriginal
89+
let paragraphUnitUpdated = new ParagraphUnit(paragraphUnitOriginal.ParagraphUnitId, new List<SegmentPair>())
9090
select paragraphUnitOriginal).Any(paragraphUnitOriginal => !fileParagraphUnitUpdated.ContainsKey(paragraphUnitOriginal.ParagraphUnitId)))
9191
{
9292
errorMatchingParagraphLevel = true;
@@ -115,8 +115,9 @@ select paragraphUnitOriginalPair.Value into paragraphUnitOriginal
115115

116116

117117
var nameOriginal = Path.GetFileName(fileParagraphUnitOriginal.Key);
118-
var fileParagraphUnitUpdated = (from kvp in xFileParagraphUnitsUpdated let fileNameUpdated = Path.GetFileName(kvp.Key)
119-
where string.Compare(nameOriginal, fileNameUpdated, StringComparison.OrdinalIgnoreCase) == 0
118+
var fileParagraphUnitUpdated = (from kvp in xFileParagraphUnitsUpdated
119+
let fileNameUpdated = Path.GetFileName(kvp.Key)
120+
where string.Compare(nameOriginal, fileNameUpdated, StringComparison.OrdinalIgnoreCase) == 0
120121
select kvp.Value).FirstOrDefault();
121122

122123
if (fileParagraphUnitUpdated == null)
@@ -308,7 +309,7 @@ where string.Compare(nameOriginal, fileNameUpdated, StringComparison.OrdinalIgno
308309

309310
return comparisonFileParagraphUnits;
310311
}
311-
312+
312313
private void AddToComparision(ref ComparisonParagraphUnit comparisonParagraphUnit
313314
, ComparisonSegmentUnit comparisonSegmentUnit
314315
, SegmentPair segmentPairOriginal
@@ -317,6 +318,13 @@ private void AddToComparision(ref ComparisonParagraphUnit comparisonParagraphUni
317318
comparisonSegmentUnit.SegmentStatusOriginal = segmentPairOriginal.SegmentStatus;
318319
comparisonSegmentUnit.SegmentStatusUpdated = segmentPairUpdated.SegmentStatus;
319320

321+
322+
if (Processor.Settings.ReportFilterTranslationMatchValuesOriginal == SharedStrings.FuzzyMatch)
323+
if (!FuzzyRange.IsInFuzzyRange(segmentPairOriginal.TranslationOrigin.MatchPercentage, Processor.Settings.FuzzyMatchValuesOriginal)) return;
324+
325+
if (Processor.Settings.ReportFilterTranslationMatchValuesUpdated == SharedStrings.FuzzyMatch)
326+
if (!FuzzyRange.IsInFuzzyRange(segmentPairUpdated.TranslationOrigin.MatchPercentage, Processor.Settings.FuzzyMatchValuesUpdated)) return;
327+
320328
comparisonSegmentUnit.TranslationStatusOriginal = GetTranslationStatus(segmentPairOriginal);
321329
comparisonSegmentUnit.TranslationStatusUpdated = GetTranslationStatus(segmentPairUpdated);
322330

@@ -334,7 +342,7 @@ private void AddToComparision(ref ComparisonParagraphUnit comparisonParagraphUni
334342
comparisonSegmentUnit.ComparisonTextUnits = GetComparisonTextUnits(segmentPairOriginal.TargetSections, segmentPairUpdated.TargetSections);
335343

336344
comparisonSegmentUnit.SegmentTextUpdated = true;
337-
comparisonParagraphUnit.ParagraphIsUpdated = true;
345+
comparisonParagraphUnit.ParagraphIsUpdated = true;
338346
}
339347

340348
comparisonSegmentUnit.SourceWordsOriginal = segmentPairOriginal.SourceWords;
@@ -379,7 +387,7 @@ private void AddToComparision(ref ComparisonParagraphUnit comparisonParagraphUni
379387
comparisonParagraphUnit.ComparisonSegmentUnits.Add(comparisonSegmentUnit);
380388
}
381389

382-
390+
383391
private static string GetTranslationStatus(SegmentPair segmentPair)
384392
{
385393
var match = string.Empty;
@@ -395,24 +403,24 @@ private static string GetTranslationStatus(SegmentPair segmentPair)
395403
match = "CM";
396404
}
397405
else if (string.Compare(segmentPair.TranslationOrigin.OriginType, "mt", StringComparison.OrdinalIgnoreCase) == 0
398-
|| string.Compare(segmentPair.TranslationOrigin.OriginType, "nmt", StringComparison.OrdinalIgnoreCase) == 0
399-
|| string.Compare(segmentPair.TranslationOrigin.OriginType, "amt", StringComparison.OrdinalIgnoreCase) == 0)
406+
|| string.Compare(segmentPair.TranslationOrigin.OriginType, "nmt", StringComparison.OrdinalIgnoreCase) == 0
407+
|| string.Compare(segmentPair.TranslationOrigin.OriginType, "amt", StringComparison.OrdinalIgnoreCase) == 0)
400408
{
401409
match = "AT";
402410
}
403-
404-
else
411+
412+
else
405413
{
406414
match = segmentPair.TranslationOrigin.MatchPercentage + "%";
407415
}
408416
}
409417
else if (string.Compare(segmentPair.TranslationOrigin.OriginType, "mt", StringComparison.OrdinalIgnoreCase) == 0
410-
|| string.Compare(segmentPair.TranslationOrigin.OriginType, "nmt", StringComparison.OrdinalIgnoreCase) == 0
411-
|| string.Compare(segmentPair.TranslationOrigin.OriginType, "amt", StringComparison.OrdinalIgnoreCase) == 0)
418+
|| string.Compare(segmentPair.TranslationOrigin.OriginType, "nmt", StringComparison.OrdinalIgnoreCase) == 0
419+
|| string.Compare(segmentPair.TranslationOrigin.OriginType, "amt", StringComparison.OrdinalIgnoreCase) == 0)
412420
{
413421
match = "AT";
414-
}
415-
else if (segmentPair.TranslationOrigin.MatchPercentage > 0)
422+
}
423+
else if (segmentPair.TranslationOrigin.MatchPercentage > 0)
416424
{
417425
match = segmentPair.TranslationOrigin.MatchPercentage + "%";
418426
}
@@ -509,24 +517,24 @@ private static List<string> GetSectionsList(IReadOnlyList<SegmentSection> segmen
509517
}
510518
}
511519
return items;
512-
520+
513521
}
514522
internal static int DamerauLevenshteinDistanceFromObject(List<SegmentSection> source, List<SegmentSection> target)
515523
{
516524

517525
var sourceLen = 0;
518526
var sourceItems = GetSectionsList(source, ref sourceLen);
519-
527+
520528
var targetLen = 0;
521529
var targetItems = GetSectionsList(target, ref targetLen);
522-
523530

524-
if (sourceLen == 0)
531+
532+
if (sourceLen == 0)
525533
return targetLen == 0 ? 0 : targetLen;
526-
527-
if (targetLen == 0)
534+
535+
if (targetLen == 0)
528536
return sourceLen;
529-
537+
530538

531539
var score = new int[sourceLen + 2, targetLen + 2];
532540

Post Edit Compare/Sdl.Community.PostEdit.Compare.Core/Comparison/ComparisonFileUnit.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ public class FileUnitProperties
133133
public decimal TotalSourceFuzzy74Tags { get; set; }
134134
public decimal TotalSourceNewTags { get; set; }
135135

136-
private Dictionary<string, Dictionary<string, ComparisonParagraphUnit>> ComparisonFileParagraphUnits { get; set; }
136+
public Dictionary<string, Dictionary<string, ComparisonParagraphUnit>> ComparisonFileParagraphUnits { get; set; }
137137
public FileUnitProperties(FileUnitProperties fileUnitProperties, Dictionary<string, Dictionary<string, ComparisonParagraphUnit>> comparisonFileParagraphUnits)
138138
{
139139
SourceLanguageIdOriginal = fileUnitProperties.SourceLanguageIdOriginal;

Post Edit Compare/Sdl.Community.PostEdit.Compare.Core/Helper/ChangeTracker.cs

Lines changed: 0 additions & 30 deletions
This file was deleted.
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
using Sdl.Community.PostEdit.Compare.Core;
2+
using Sdl.Desktop.IntegrationApi.Interfaces;
3+
using Sdl.TranslationStudioAutomation.IntegrationApi;
4+
using System;
5+
6+
namespace Sdl.Community.PostEdit.Compare.Core.Helper;
7+
8+
public static class EventAggregator
9+
{
10+
private static IStudioEventAggregator StudioEventAggregator => SdlTradosStudio.Application.GetService<IStudioEventAggregator>();
11+
12+
public static void PublishEvent<T>(T message)
13+
{
14+
StudioEventAggregator.Publish(message);
15+
}
16+
17+
public static void Subscribe<T>(Action<T> action)
18+
{
19+
StudioEventAggregator.GetEvent<T>().Subscribe(action);
20+
}
21+
}

Post Edit Compare/Sdl.Community.PostEdit.Compare.Core/Helper/ExcelReportHelper.cs

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -45,20 +45,27 @@ public static void CreateReportHeader(ExcelPackage xlPackage, ExcelWorksheet wor
4545

4646
public static void CreateExcelReport(string filePath,string sheetName)
4747
{
48-
var newFile = new FileInfo(filePath);
49-
if (newFile.Exists)
50-
{
51-
newFile.Delete(); // ensures we create a new workbook
52-
newFile = new FileInfo(filePath);
53-
}
54-
using (var package = new ExcelPackage(newFile))
55-
{
56-
// Add a new worksheet to the empty workbook
57-
var worksheet = package.Workbook.Worksheets.Add(NormalizeWorksheetName(sheetName));
58-
package.Save();
59-
}
60-
61-
}
48+
try
49+
{
50+
var newFile = new FileInfo(filePath);
51+
if (newFile.Exists)
52+
{
53+
newFile.Delete(); // ensures we create a new workbook
54+
newFile = new FileInfo(filePath);
55+
}
56+
57+
using (var package = new ExcelPackage(newFile))
58+
{
59+
// Add a new worksheet to the empty workbook
60+
var worksheet = package.Workbook.Worksheets.Add(NormalizeWorksheetName(sheetName));
61+
package.Save();
62+
}
63+
}
64+
catch (Exception ex)
65+
{
66+
throw new Exception($"{nameof(CreateExcelReport)}: An error occurred while creating the Excel report", ex);
67+
}
68+
}
6269

6370
public static string NormalizeWorksheetName(string sheetName)
6471
{
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
using System.IO;
2+
using System.Windows;
3+
using System.Xml;
4+
5+
namespace Sdl.Community.PostEdit.Compare.Core.Helper
6+
{
7+
public static class FileIdentifier
8+
{
9+
public static string GetFileInfo(string filepath)
10+
{
11+
if (string.IsNullOrEmpty(filepath) || !File.Exists(filepath))
12+
{
13+
MessageBox.Show($"{nameof(GetFileInfo)}: Original project filepath missing. ");
14+
return null;
15+
}
16+
var filename = Path.GetFileName(filepath);
17+
var currentFileParentDirName = Directory.GetParent(filepath)?.Name;
18+
var fileInfo = $"{currentFileParentDirName}//{filename}";
19+
return fileInfo;
20+
}
21+
22+
public static string GetProjectId(string projectFilePath)
23+
{
24+
var filepath = GetSdlProjFilePathFromProjectFile(projectFilePath);
25+
return ReadProjectId(filepath);
26+
}
27+
28+
public static string GetSdlProjFilePathFromProjectFile(string projectFilePath)
29+
{
30+
if (string.IsNullOrEmpty(projectFilePath) || !File.Exists(projectFilePath))
31+
{
32+
MessageBox.Show($"{nameof(ReadProjectId)}: Original project filepath missing. ");
33+
return null;
34+
}
35+
36+
var projectFolderPath = Directory.GetParent(Path.GetDirectoryName(projectFilePath));
37+
while (projectFolderPath is not null)
38+
{
39+
var sdlProjFiles = Directory.GetFiles(projectFolderPath.FullName, "*.sdlproj",
40+
SearchOption.TopDirectoryOnly);
41+
42+
if (sdlProjFiles.Length == 1) return sdlProjFiles[0];
43+
44+
projectFolderPath = projectFolderPath.Parent;
45+
}
46+
47+
return null;
48+
}
49+
50+
private static string ReadProjectId(string projectFilePath)
51+
{
52+
if (string.IsNullOrWhiteSpace(projectFilePath)) return null;
53+
54+
var doc = new XmlDocument();
55+
doc.Load(projectFilePath);
56+
57+
var root = doc.DocumentElement;
58+
59+
return root.Attributes["Guid"].Value;
60+
}
61+
}
62+
}

0 commit comments

Comments
 (0)