コード例 #1
0
        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);;
        }
コード例 #2
0
        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++;
            }
        }