private void UpdateStepDescription(XamlFileDescription xamlFileDescription) { var fileName = xamlFileDescription.Name; if (fileName.StartsWith(solutionFolder, StringComparison.OrdinalIgnoreCase)) { fileName = fileName.Substring(solutionFolder.Length + 1); } StepDescription = String.Format("Processing file: {0}", fileName); }
private static string GetBamlName(XamlFileDescription xamlFileDescription) { var projectDir = Path.GetDirectoryName(xamlFileDescription.ProjectDescription.FullName); var xamlFile = xamlFileDescription.Name; if (xamlFile.StartsWith(projectDir, StringComparison.InvariantCultureIgnoreCase)) { xamlFile = xamlFile.Substring(projectDir.Length + 1).ToLowerInvariant(); return(xamlFile.Substring(0, xamlFile.Length - 5).Replace('\\', '/')); } throw new NotSupportedException("Xaml file not inside project folder"); }
private void ManageFileUids(XamlFileDescription xamlFileDescription) { using (var textReader = visualStudioAdapter.GetXamlFileContent(xamlFileDescription)) { var uidCollector = new UidManager(xamlFileDescription.Name, textReader, localizabilityChecker).ParseFileSmart(); if (uidCollector.Count > 0) { switch (ManageUidOperation) { case ManageUidOperation.CheckUid: var fvm = new XamlFileViewModel(solutionFolder, xamlFileDescription, uidCollector); ThreadTools.InvokeInUIThread(Window, () => InvalidFiles.Add(fvm)); break; case ManageUidOperation.UpdateUid: if (!uidCollector.AllAreValid()) { //TODO: resolve duplicates UpdateFileUids(xamlFileDescription, uidCollector); var fvm1 = new XamlFileViewModel(solutionFolder, xamlFileDescription, null); ThreadTools.InvokeInUIThread(Window, () => InvalidFiles.Add(fvm1)); } break; case ManageUidOperation.RemoveUid: if (!uidCollector.AllAreAbsent()) { UpdateFileUids(xamlFileDescription, uidCollector); var fvm2 = new XamlFileViewModel(solutionFolder, xamlFileDescription, null); ThreadTools.InvokeInUIThread(Window, () => InvalidFiles.Add(fvm2)); } break; case ManageUidOperation.PrepareTranslation: bamlResourceCollector.Add(xamlFileDescription, uidCollector); break; default: throw new ArgumentOutOfRangeException(); } } } }
private void UpdateFileUids(XamlFileDescription xamlFileDescription, UidCollector uidCollector) { CorrectUids(uidCollector); using (var textReader = visualStudioAdapter.GetXamlFileContent(xamlFileDescription)) { var target = new StringWriter(); var uidWriter = new UidWriter(uidCollector, textReader, target); if (uidWriter.UpdateUidWrite(uidUpdateHandleStrategy)) { visualStudioAdapter.SetXamlFileContent(xamlFileDescription, target.ToString()); } else { //TODO: notify failure } } }
public void Add(XamlFileDescription xamlFileDescription, UidCollector uidCollector) { if (uidCollector == null) { return; } List <BamlResourceEntry> list; if (!resources.TryGetValue(xamlFileDescription.ProjectDescription.UniqueName, out list)) { list = new List <BamlResourceEntry>(); resources.Add(xamlFileDescription.ProjectDescription.UniqueName, list); } var bamlName = GetBamlName(xamlFileDescription); for (int i = 0; i < uidCollector.Count; i++) { var uid = uidCollector[i]; if (uid.Status != UidStatus.Valid) { continue; } if (uid.Entries != null) { foreach (var entry in uid.Entries) { var key = new BamlLocalizableResourceKey(uid.Value, uid.ElementName, GetPropertyName(entry)); var resource = new BamlLocalizableResource { Content = entry.LocalizableString, Category = LocalizationCategory.Text }; list.Add(new BamlResourceEntry(bamlName, key, resource)); } } } }
public XamlFileViewModel(string solutionFolder, XamlFileDescription xamlFileDescription, UidCollector uidCollector) { string fileName = xamlFileDescription.Name; Name = Path.GetFileName(fileName); if (fileName.StartsWith(solutionFolder, StringComparison.InvariantCultureIgnoreCase)) { SolutionPath = fileName.Substring(solutionFolder.Length + 1); } else { SolutionPath = fileName; } ProjectName = xamlFileDescription.ProjectDescription.Name; string projFolder = Path.GetDirectoryName(xamlFileDescription.ProjectDescription.FullName); if (fileName.StartsWith(projFolder, StringComparison.InvariantCultureIgnoreCase)) { ProjectPath = fileName.Substring(projFolder.Length + 1); } else { ProjectPath = fileName; } if (uidCollector != null) { UidEntries = new List <UidEntryViewModel>(uidCollector.Count); for (int i = 0; i < uidCollector.Count; i++) { var uid = uidCollector[i]; UidEntries.Add(new UidEntryViewModel(uid)); } AllAreValid = uidCollector.AllAreValid(); } }