private async Task DifferenceWebResources(SelectedFile selectedFile, bool isCustom, ConnectionData connectionData, CommonConfiguration commonConfig) { if (connectionData == null) { this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.NoCurrentCRMConnection); return; } if (!File.Exists(selectedFile.FilePath)) { this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.FileNotExistsFormat1, selectedFile.FilePath); return; } this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.ConnectingToCRM); this._iWriteToOutput.WriteToOutput(connectionData, connectionData.GetConnectionDescription()); // Подключаемся к CRM. var service = await QuickConnection.ConnectAsync(connectionData); if (service == null) { _iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.ConnectionFailedFormat1, connectionData.Name); return; } this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.CurrentServiceEndpointFormat1, service.CurrentServiceEndpoint); // Репозиторий для работы с веб-ресурсами WebResourceRepository webResourceRepository = new WebResourceRepository(service); WebResource webresource = null; if (isCustom) { Guid?webId = connectionData.GetLastLinkForFile(selectedFile.FriendlyFilePath); bool?dialogResult = null; Guid?selectedWebResourceId = null; string selectedPath = string.Empty; var t = new Thread(() => { try { var form = new Views.WindowWebResourceSelectOrCreate(this._iWriteToOutput, service, connectionData, selectedFile, webId); dialogResult = form.ShowDialog(); selectedWebResourceId = form.SelectedWebResourceId; } catch (Exception ex) { DTEHelper.WriteExceptionToOutput(connectionData, ex); } }); t.SetApartmentState(ApartmentState.STA); t.Start(); t.Join(); if (dialogResult.GetValueOrDefault() == false) { this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.DifferenceWasCancelled); return; } if (selectedWebResourceId.HasValue) { this._iWriteToOutput.WriteToOutput(connectionData, "Custom Web-resource is selected."); webresource = await webResourceRepository.GetByIdAsync(selectedWebResourceId.Value); connectionData.AddMapping(webresource.Id, selectedFile.FriendlyFilePath); connectionData.Save(); } else { this._iWriteToOutput.WriteToOutput(connectionData, "!Warning. WebResource not exists. name: {0}.", selectedFile.Name); } } else { webresource = await webResourceRepository.FindByNameAsync(selectedFile.FriendlyFilePath, selectedFile.Extension); if (webresource != null) { this._iWriteToOutput.WriteToOutput(connectionData, "Web-resource founded by name."); connectionData.AddMapping(webresource.Id, selectedFile.FriendlyFilePath); connectionData.Save(); } else { Guid?webId = connectionData.GetLastLinkForFile(selectedFile.FriendlyFilePath); if (webId.HasValue) { webresource = await webResourceRepository.GetByIdAsync(webId.Value); } if (webresource != null) { this._iWriteToOutput.WriteToOutput(connectionData, "Web-resource not founded by name. Last link web-resource is selected for difference."); connectionData.AddMapping(webresource.Id, selectedFile.FriendlyFilePath); connectionData.Save(); } else { this._iWriteToOutput.WriteToOutput(connectionData, "Web-resource not founded by name and has not Last link."); this._iWriteToOutput.WriteToOutput(connectionData, "Starting Custom Web-resource selection form."); bool?dialogResult = null; Guid?selectedWebResourceId = null; string selectedPath = string.Empty; var t = new Thread(() => { try { var form = new Views.WindowWebResourceSelectOrCreate(this._iWriteToOutput, service, connectionData, selectedFile, webId); dialogResult = form.ShowDialog(); selectedWebResourceId = form.SelectedWebResourceId; } catch (Exception ex) { DTEHelper.WriteExceptionToOutput(connectionData, ex); } }); t.SetApartmentState(ApartmentState.STA); t.Start(); t.Join(); if (dialogResult.GetValueOrDefault()) { if (selectedWebResourceId.HasValue) { this._iWriteToOutput.WriteToOutput(connectionData, "Custom Web-resource is selected."); webresource = await webResourceRepository.GetByIdAsync(selectedWebResourceId.Value); connectionData.AddMapping(webresource.Id, selectedFile.FriendlyFilePath); connectionData.Save(); } else { this._iWriteToOutput.WriteToOutput(connectionData, "!Warning. WebResource not exists. name: {0}.", selectedFile.Name); } } else { this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.DifferenceWasCancelled); return; } } } } if (webresource == null) { this._iWriteToOutput.WriteToOutput(connectionData, "Web-resource not founded in CRM: {0}", selectedFile.FileName); return; } string filePath1 = selectedFile.FilePath; string fileTitle1 = selectedFile.FileName; string filePath2 = string.Empty; string fileTitle2 = string.Empty; { var contentWebResource = webresource.Content ?? string.Empty; var array = Convert.FromBase64String(contentWebResource); filePath2 = FileOperations.GetNewTempFilePath(webresource.Name, selectedFile.Extension); File.WriteAllBytes(filePath2, array); fileTitle2 = connectionData.Name + "." + selectedFile.FileName + " - " + filePath2; } this._iWriteToOutput.ProcessStartProgramComparer(filePath1, filePath2, fileTitle1, fileTitle2); }
private async Task OpeningWebResource(CommonConfiguration commonConfig, ConnectionData connectionData, SelectedFile selectedFile, ActionOpenComponent action) { if (!File.Exists(selectedFile.FilePath)) { this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.FileNotExistsFormat1, selectedFile.FilePath); return; } var service = await ConnectAndWriteToOutputAsync(connectionData); if (service == null) { return; } // Репозиторий для работы с веб-ресурсами WebResourceRepository webResourceRepository = new WebResourceRepository(service); WebResource webresource = await webResourceRepository.FindByNameAsync(selectedFile.FriendlyFilePath, selectedFile.Extension); if (webresource != null) { this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.WebResourceFoundedByNameFormat2, webresource.Id.ToString(), webresource.Name); connectionData.AddMapping(webresource.Id, selectedFile.FriendlyFilePath); connectionData.Save(); } else { Guid?webId = connectionData.GetLastLinkForFile(selectedFile.FriendlyFilePath); if (webId.HasValue) { webresource = await webResourceRepository.GetByIdAsync(webId.Value); } if (webresource != null) { this._iWriteToOutput.WriteToOutput(connectionData, "Web-resource not founded by name. Last link web-resource is selected for opening."); connectionData.AddMapping(webresource.Id, selectedFile.FriendlyFilePath); connectionData.Save(); } else { this._iWriteToOutput.WriteToOutput(connectionData, "Web-resource not founded by name and has not Last link."); this._iWriteToOutput.WriteToOutput(connectionData, "Starting Custom Web-resource selection form."); bool?dialogResult = null; Guid?selectedWebResourceId = null; string selectedPath = string.Empty; var t = new Thread((ThreadStart)(() => { try { var form = new Views.WindowWebResourceSelectOrCreate(this._iWriteToOutput, service, selectedFile, webId); dialogResult = form.ShowDialog(); selectedWebResourceId = form.SelectedWebResourceId; } catch (Exception ex) { DTEHelper.WriteExceptionToOutput(connectionData, ex); } })); t.SetApartmentState(ApartmentState.STA); t.Start(); t.Join(); if (dialogResult.GetValueOrDefault()) { if (selectedWebResourceId.HasValue) { this._iWriteToOutput.WriteToOutput(connectionData, "Custom Web-resource is selected."); webresource = await webResourceRepository.GetByIdAsync(selectedWebResourceId.Value); connectionData.AddMapping(webresource.Id, selectedFile.FriendlyFilePath); connectionData.Save(); } else { this._iWriteToOutput.WriteToOutput(connectionData, "!Warning. WebResource not exists. name: {0}.", selectedFile.Name); } } else { this._iWriteToOutput.WriteToOutput(connectionData, "Opening was cancelled."); return; } } } if (webresource == null) { this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.WebResourceNotFoundedByNameFormat1, selectedFile.FileName); return; } if (action == ActionOpenComponent.OpenInWeb) { service.UrlGenerator.OpenSolutionComponentInWeb(Entities.ComponentType.WebResource, webresource.Id); } else if (action == ActionOpenComponent.OpenDependentComponentsInWeb) { connectionData.OpenSolutionComponentDependentComponentsInWeb(Entities.ComponentType.WebResource, webresource.Id); } else if (action == ActionOpenComponent.OpenDependentComponentsInExplorer) { WindowHelper.OpenSolutionComponentDependenciesExplorer( _iWriteToOutput , service , null , commonConfig , (int)ComponentType.WebResource , webresource.Id , null); } else if (action == ActionOpenComponent.OpenSolutionsContainingComponentInExplorer) { WindowHelper.OpenExplorerSolutionExplorer( _iWriteToOutput , service , commonConfig , (int)ComponentType.WebResource , webresource.Id , null ); } }
private async Task ThreeFileDifferenceWebResources(SelectedFile selectedFile, ConnectionData connectionData1, ConnectionData connectionData2, ShowDifferenceThreeFileType differenceType, CommonConfiguration commonConfig) { if (connectionData1 == null) { this._iWriteToOutput.WriteToOutput(null, Properties.OutputStrings.NoCRMConnection1); return; } if (connectionData2 == null) { this._iWriteToOutput.WriteToOutput(null, Properties.OutputStrings.NoCRMConnection2); return; } if (differenceType == ShowDifferenceThreeFileType.ThreeWay) { if (!File.Exists(selectedFile.FilePath)) { this._iWriteToOutput.WriteToOutput(null, Properties.OutputStrings.FileNotExistsFormat1, selectedFile.FilePath); return; } } this._iWriteToOutput.WriteToOutput(null, Properties.OutputStrings.ConnectingToCRM); this._iWriteToOutput.WriteToOutput(null, string.Empty); this._iWriteToOutput.WriteToOutput(null, connectionData1.GetConnectionDescription()); this._iWriteToOutput.WriteToOutput(null, string.Empty); this._iWriteToOutput.WriteToOutput(null, connectionData2.GetConnectionDescription()); var task1 = QuickConnection.ConnectAsync(connectionData1); var task2 = QuickConnection.ConnectAsync(connectionData2); var service1 = await task1; var service2 = await task2; if (service1 == null) { _iWriteToOutput.WriteToOutput(connectionData1, Properties.OutputStrings.ConnectionFailedFormat1, connectionData1.Name); return; } if (service2 == null) { _iWriteToOutput.WriteToOutput(connectionData2, Properties.OutputStrings.ConnectionFailedFormat1, connectionData2.Name); return; } this._iWriteToOutput.WriteToOutput(null, Properties.OutputStrings.CurrentServiceEndpointConnectionFormat2, connectionData1.Name, service1.CurrentServiceEndpoint); this._iWriteToOutput.WriteToOutput(null, Properties.OutputStrings.CurrentServiceEndpointConnectionFormat2, connectionData2.Name, service2.CurrentServiceEndpoint); // Репозиторий для работы с веб-ресурсами WebResourceRepository webResourceRepository1 = new WebResourceRepository(service1); WebResourceRepository webResourceRepository2 = new WebResourceRepository(service2); var taskWebResource1 = webResourceRepository1.FindByNameAsync(selectedFile.FriendlyFilePath, selectedFile.Extension); var taskWebResource2 = webResourceRepository2.FindByNameAsync(selectedFile.FriendlyFilePath, selectedFile.Extension); WebResource webresource1 = await taskWebResource1; WebResource webresource2 = await taskWebResource2; if (webresource1 != null) { this._iWriteToOutput.WriteToOutput(null, "{0}: WebResource founded by name.", connectionData1.Name); connectionData1.AddMapping(webresource1.Id, selectedFile.FriendlyFilePath); connectionData1.Save(); } else { Guid?webId = connectionData1.GetLastLinkForFile(selectedFile.FriendlyFilePath); if (webId.HasValue) { webresource1 = await webResourceRepository1.GetByIdAsync(webId.Value); if (webresource1 != null) { this._iWriteToOutput.WriteToOutput(null, "{0}: WebResource not founded by name. Last link WebResource is selected for difference.", connectionData1.Name); connectionData1.AddMapping(webresource1.Id, selectedFile.FriendlyFilePath); connectionData1.Save(); } } } if (webresource2 != null) { this._iWriteToOutput.WriteToOutput(null, "{0}: WebResource founded by name.", connectionData2.Name); connectionData2.AddMapping(webresource2.Id, selectedFile.FriendlyFilePath); connectionData2.Save(); } else { Guid?webId = connectionData2.GetLastLinkForFile(selectedFile.FriendlyFilePath); if (webId.HasValue) { webresource2 = await webResourceRepository2.GetByIdAsync(webId.Value); if (webresource2 != null) { this._iWriteToOutput.WriteToOutput(null, "{0}: WebResource not founded by name. Last link WebResource is selected for difference.", connectionData2.Name); connectionData2.AddMapping(webresource2.Id, selectedFile.FriendlyFilePath); connectionData2.Save(); } } } if (!File.Exists(selectedFile.FilePath)) { this._iWriteToOutput.WriteToOutput(null, Properties.OutputStrings.FileNotExistsFormat1, selectedFile.FilePath); } if (webresource1 == null) { this._iWriteToOutput.WriteToOutput(null, Properties.OutputStrings.WebResourceNotFoundedInConnectionFormat2, connectionData1.Name, selectedFile.FileName); } if (webresource2 == null) { this._iWriteToOutput.WriteToOutput(null, Properties.OutputStrings.WebResourceNotFoundedInConnectionFormat2, connectionData2.Name, selectedFile.FileName); } // string fileLocalPath, string fileLocalTitle, string filePath1, string fileTitle1, string filePath2, string fileTitle2, string fileLocalPath = selectedFile.FilePath; string fileLocalTitle = selectedFile.FileName; string filePath1 = string.Empty; string fileTitle1 = string.Empty; string filePath2 = string.Empty; string fileTitle2 = string.Empty; if (webresource1 != null) { var contentWebResource1 = webresource1.Content ?? string.Empty; var array = Convert.FromBase64String(contentWebResource1); filePath1 = FileOperations.GetNewTempFilePath(webresource1.Name, selectedFile.Extension); fileTitle1 = connectionData1.Name + "." + selectedFile.FileName + " - " + filePath1; File.WriteAllBytes(filePath1, array); } if (webresource2 != null) { var contentWebResource2 = webresource2.Content ?? string.Empty; var array = Convert.FromBase64String(contentWebResource2); filePath2 = FileOperations.GetNewTempFilePath(webresource2.Name, selectedFile.Extension); fileTitle2 = connectionData2.Name + "." + selectedFile.FileName + " - " + filePath2; File.WriteAllBytes(filePath2, array); } switch (differenceType) { case ShowDifferenceThreeFileType.OneByOne: ShowDifferenceOneByOne(commonConfig, fileLocalPath, fileLocalTitle, filePath1, fileTitle1, filePath2, fileTitle2); break; case ShowDifferenceThreeFileType.TwoConnections: this._iWriteToOutput.ProcessStartProgramComparer(filePath1, filePath2, fileTitle1, fileTitle2); break; case ShowDifferenceThreeFileType.ThreeWay: ShowDifferenceThreeWay(commonConfig, fileLocalPath, fileLocalTitle, filePath1, fileTitle1, filePath2, fileTitle2); break; default: break; } }