@@ -16,6 +16,7 @@ public static class ProjectPersister
1616
1717 /// <summary>
1818 /// Loads the project session data from a specified file, including validation of referenced files.
19+ /// Resolves .lxp persistence files to actual .log files before validation.
1920 /// </summary>
2021 /// <param name="projectFileName">The path to the project file (.lxj)</param>
2122 /// <param name="pluginRegistry">The plugin registry for file system validation</param>
@@ -35,13 +36,32 @@ public static ProjectLoadResult LoadProjectData (string projectFileName, IPlugin
3536 // Set project file path for alternative file search
3637 projectData . ProjectFilePath = projectFileName ;
3738
38- // Validate all files referenced in the project
39- var validationResult = ProjectFileValidator . ValidateProject ( projectData , pluginRegistry ) ;
39+ // Resolve .lxp files to actual .log files
40+ var resolvedFiles = ProjectFileResolver . ResolveProjectFiles ( projectData , pluginRegistry ) ;
41+
42+ // Create mapping: logFile → originalFile
43+ var logToOriginalMapping = new Dictionary < string , string > ( ) ;
44+ foreach ( var ( logFile , originalFile ) in resolvedFiles )
45+ {
46+ logToOriginalMapping [ logFile ] = originalFile ;
47+ }
48+
49+ // Create new ProjectData with resolved log file paths
50+ var resolvedProjectData = new ProjectData
51+ {
52+ FileNames = [ .. resolvedFiles . Select ( r => r . LogFile ) ] ,
53+ TabLayoutXml = projectData . TabLayoutXml ,
54+ ProjectFilePath = projectData . ProjectFilePath
55+ } ;
56+
57+ // Validate the actual log files (not .lxp files)
58+ var validationResult = ProjectFileValidator . ValidateProject ( resolvedProjectData , pluginRegistry ) ;
4059
4160 return new ProjectLoadResult
4261 {
43- ProjectData = projectData ,
44- ValidationResult = validationResult
62+ ProjectData = resolvedProjectData ,
63+ ValidationResult = validationResult ,
64+ LogToOriginalFileMapping = logToOriginalMapping
4565 } ;
4666 }
4767 catch ( Exception ex ) when ( ex is UnauthorizedAccessException or
@@ -55,13 +75,29 @@ IOException or
5575 // Set project file path for alternative file search
5676 projectData . ProjectFilePath = projectFileName ;
5777
58- // Validate files from XML fallback as well
59- var validationResult = ProjectFileValidator . ValidateProject ( projectData , pluginRegistry ) ;
78+ // Resolve .lxp files for XML fallback as well
79+ var resolvedFiles = ProjectFileResolver . ResolveProjectFiles ( projectData , pluginRegistry ) ;
80+
81+ var logToOriginalMapping = new Dictionary < string , string > ( ) ;
82+ foreach ( var ( logFile , originalFile ) in resolvedFiles )
83+ {
84+ logToOriginalMapping [ logFile ] = originalFile ;
85+ }
86+
87+ var resolvedProjectData = new ProjectData
88+ {
89+ FileNames = [ .. resolvedFiles . Select ( r => r . LogFile ) ] ,
90+ TabLayoutXml = projectData . TabLayoutXml ,
91+ ProjectFilePath = projectData . ProjectFilePath
92+ } ;
93+
94+ var validationResult = ProjectFileValidator . ValidateProject ( resolvedProjectData , pluginRegistry ) ;
6095
6196 return new ProjectLoadResult
6297 {
63- ProjectData = projectData ,
64- ValidationResult = validationResult
98+ ProjectData = resolvedProjectData ,
99+ ValidationResult = validationResult ,
100+ LogToOriginalFileMapping = logToOriginalMapping
65101 } ;
66102 }
67103 }
0 commit comments