public void GetDataFromDisk() { CreateCollectionsIfNeeded(); var task = Task.Run(() => { string directoryConnection = FileOperations.GetConnectionIntellisenseDataFolderPath(this.ConnectionId); var applicationRibbonFilePath = Path.Combine(directoryConnection, "ApplicationRibbon.zip"); if (File.Exists(applicationRibbonFilePath)) { var ribbonData = RibbonIntellisenseData.Get(applicationRibbonFilePath, string.Empty); if (ribbonData != null) { this.ApplicationRibbonData = ribbonData; } } }); string directoryEntityRibbons = FileOperations.GetConnectionIntellisenseDataFolderPathRibbons(this.ConnectionId); var directoryInfo = new DirectoryInfo(directoryEntityRibbons); if (directoryInfo.Exists) { var files = directoryInfo.GetFiles("*.zip"); Parallel.ForEach(files, file => { string entityName = Path.GetFileNameWithoutExtension(file.FullName).ToLower(); var ribbonData = RibbonIntellisenseData.Get(file.FullName, entityName); if (ribbonData != null) { if (!this.EntitiesRibbonData.ContainsKey(ribbonData.EntityLogicalName)) { this.EntitiesRibbonData.TryAdd(ribbonData.EntityLogicalName, ribbonData); } else { this.EntitiesRibbonData[ribbonData.EntityLogicalName] = ribbonData; } } }); } }
public static RibbonIntellisenseData Get(string filePath, string entityName) { RibbonIntellisenseData result = null; if (File.Exists(filePath)) { using (Mutex mutex = new Mutex(false, FileOperations.GetMutexName(filePath))) { try { mutex.WaitOne(); var arrayXml = File.ReadAllBytes(filePath); arrayXml = FileOperations.UnzipRibbon(arrayXml); using (var memStream = new MemoryStream()) { memStream.Write(arrayXml, 0, arrayXml.Length); memStream.Position = 0; XDocument doc = XDocument.Load(memStream); result = new RibbonIntellisenseData(entityName); result.LoadDataFromRibbon(doc); } } catch (Exception ex) { DTEHelper.WriteExceptionToLog(ex); FileOperations.CreateBackUpFile(filePath, ex); } finally { mutex.ReleaseMutex(); } } } return(result); }