// Step though all packages and read info from <catalogPath>\ContentStore\<locale>\<packageName>.metadata // <?xml version="1.0" encoding="utf-8"?> // <Metadata> // <ETag>31fa5d6a-3352-37e3-21ad-d2d97e597cbb</ETag> // <Date>08/05/2011 19:58:28</Date> // <Url>http://packages.mtps.microsoft.com/visual_studio_27029139_vs_100_en-us_1(31fa5d6a-3352-37e3-21ad-d2d97e597cbb).cab</Url> // <Size>7429904</Size> // <PackageType>content</PackageType> // <VendorName>Microsoft</VendorName> // </Metadata> public Dictionary<String, PackageMetaData> GetPackageMetaData() { Dictionary<String, PackageMetaData> metadataDictionary = new Dictionary<String, PackageMetaData>(); if (_installedBooks == null) { return metadataDictionary; } foreach (LocaleListItem localeListItem in _installedBooks.localeList) { // <catalogPath>\ContentStore\<locale>\<packageName>.metadata String localeDir = Path.Combine(CatalogLocation, "ContentStore", localeListItem.locale); if (!Directory.Exists(localeDir)) continue; foreach (BookListItem book in localeListItem.bookList) { //Each book hasa list of packages for (int i = 0; i < book.packageList.Length; i++) { String packageName = book.packageList[i]; if (metadataDictionary.ContainsKey(packageName)) //Do we already have this package meta info? continue; String baseFilePath = Path.Combine(localeDir, packageName + ".metadata"); String metaDataFile = FileUtility.GetFileName(baseFilePath); if (File.Exists(metaDataFile)) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(metaDataFile); XmlNode nodeMetaData = xmlDoc.SelectSingleNode("//Metadata"); //root node if (nodeMetaData != null) { PackageMetaData metaData = new PackageMetaData(); foreach (XmlNode node in nodeMetaData.ChildNodes) { if (node.Name == "ETag") metaData.ETag = node.InnerXml; else if (node.Name == "Date") metaData.Date = node.InnerXml; else if (node.Name == "Url") metaData.Url = node.InnerXml; else if (node.Name == "Size") metaData.Size = node.InnerXml; else if (node.Name == "PackageType") metaData.PackageType = node.InnerXml; else if (node.Name == "VendorName") metaData.VendorName = node.InnerXml; } metadataDictionary.Add(packageName, metaData); } } } } } return metadataDictionary; }
// Step though all packages and read info from <catalogPath>\ContentStore\<locale>\<packageName>.metadata // <?xml version="1.0" encoding="utf-8"?> // <Metadata> // <ETag>31fa5d6a-3352-37e3-21ad-d2d97e597cbb</ETag> // <Date>08/05/2011 19:58:28</Date> // <Url>http://packages.mtps.microsoft.com/visual_studio_27029139_vs_100_en-us_1(31fa5d6a-3352-37e3-21ad-d2d97e597cbb).cab</Url> // <Size>7429904</Size> // <PackageType>content</PackageType> // <VendorName>Microsoft</VendorName> // </Metadata> public Dictionary <String, PackageMetaData> GetPackageMetaData() { Dictionary <String, PackageMetaData> metadataDictionary = new Dictionary <String, PackageMetaData>(); if (_installedBooks == null) { return(metadataDictionary); } foreach (LocaleListItem localeListItem in _installedBooks.localeList) { // <catalogPath>\ContentStore\<locale>\<packageName>.metadata String localeDir = Path.Combine(CatalogLocation, "ContentStore", localeListItem.locale); if (!Directory.Exists(localeDir)) { continue; } foreach (BookListItem book in localeListItem.bookList) { //Each book hasa list of packages for (int i = 0; i < book.packageList.Length; i++) { String packageName = book.packageList[i]; if (metadataDictionary.ContainsKey(packageName)) //Do we already have this package meta info? { continue; } String baseFilePath = Path.Combine(localeDir, packageName + ".metadata"); String metaDataFile = FileUtility.GetFileName(baseFilePath); if (File.Exists(metaDataFile)) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(metaDataFile); XmlNode nodeMetaData = xmlDoc.SelectSingleNode("//Metadata"); //root node if (nodeMetaData != null) { PackageMetaData metaData = new PackageMetaData(); foreach (XmlNode node in nodeMetaData.ChildNodes) { if (node.Name == "ETag") { metaData.ETag = node.InnerXml; } else if (node.Name == "Date") { metaData.Date = node.InnerXml; } else if (node.Name == "Url") { metaData.Url = node.InnerXml; } else if (node.Name == "Size") { metaData.Size = node.InnerXml; } else if (node.Name == "PackageType") { metaData.PackageType = node.InnerXml; } else if (node.Name == "VendorName") { metaData.VendorName = node.InnerXml; } } metadataDictionary.Add(packageName, metaData); } } } } } return(metadataDictionary); }