private ExtensionDataItem TransformToExtensionDataItem(PublishedExtension publishedExtension) { ExtensionDataItem extensionDataItem = new ExtensionDataItem(); extensionDataItem.ExtensionId = publishedExtension.ExtensionId; extensionDataItem.Description = publishedExtension.ShortDescription; extensionDataItem.Title = publishedExtension.DisplayName; extensionDataItem.Version = publishedExtension.Versions[0].Version; foreach (KeyValuePair <string, string> keyValuePair in publishedExtension.Versions[0].Properties) { if (keyValuePair.Key.Equals("VsixVersion")) { extensionDataItem.Version = keyValuePair.Value; } else if (keyValuePair.Key.Equals("DownloadUrl")) //how does it work for updates? { extensionDataItem.Installer = keyValuePair.Value; } else if (keyValuePair.Key.Equals("MoreInfoUrl")) // marketplace page { extensionDataItem.Link = keyValuePair.Value; } else if (keyValuePair.Key.Equals("Author")) { extensionDataItem.Author = keyValuePair.Value; } else if (keyValuePair.Key.Equals("VsixId")) { extensionDataItem.VsixId = keyValuePair.Value; } } return(extensionDataItem);; }
public void GetMarketplaceDataItems( String vsVersion, IEnumerable <string> skus, DateTime baseTimeStamp, Func <IEnumerable <ExtensionDataItem>, bool> callback) { bool fetchNextPage = true; int pageNumber = 1; int pageSize = 500; List <ExtensionDataItem> extensionDataItems = new List <ExtensionDataItem>(); while (fetchNextPage) { List <PublishedExtension> extensionsPage = GetNextPageFromMarketplace(pageNumber, pageSize, vsVersion, skus); if (extensionsPage == null) { //some error occured break; } if (extensionsPage.Count != pageSize) { fetchNextPage = false; } foreach (PublishedExtension publishedExtension in extensionsPage) { if (publishedExtension.LastUpdated > baseTimeStamp) { ExtensionDataItem transformedDataItem = TransformToExtensionDataItem(publishedExtension); extensionDataItems.Add(transformedDataItem); if (transformedDataItem.Installer == null) { _paidExtension.Add(transformedDataItem); } else { _extensionDataItems.Add(transformedDataItem); string downloadUrl = transformedDataItem.Installer; string fileName = "C:\\ExtensionsFromMarketplace\\" + transformedDataItem.ExtensionId.ToString() + ".zip"; try { using (var webClient = new WebClient()) webClient.DownloadFile(downloadUrl, fileName); } catch (WebException ex) { Console.WriteLine("Error downloading {0}: {1}", downloadUrl, ex); } } } else { fetchNextPage = false; break; } } if (callback != null) { callback(extensionDataItems); } pageNumber++; } }