protected override string GetCatalog()
        {
            string result = "\n" + CatalogFilename + ": ";
            string tempDisplay = ProgressText;
            ProgressText += result + "Exporting catalog...";
            StopWatch exportWatch = new StopWatch(true);

            Mage_Api_Model_Server_V2_HandlerPortTypeClient Mclient = new Mage_Api_Model_Server_V2_HandlerPortTypeClient();
            string MsessionId = "";

            //---------------------CATALOG EXPORT----------------------------
            //errors caught by calling function

            //login
            MsessionId = Mclient.login(m_apiUserName, m_apiKey);

            //Set product attributes to fetch
            catalogProductRequestAttributes prodAttributes = new catalogProductRequestAttributes();
            string[] attributes = { "sku", "url_key", "price", "special_price", "special_from_date", "special_to_date", "parent_item_id" };
            prodAttributes.attributes = attributes;

            //loop through all products to build the list
            var products = new List<ProductRecord>();
            catalogProductEntity[] plist;
            Mclient.catalogProductList(out plist, MsessionId, null, "");
            int maxCid = 0;
            foreach (catalogProductEntity product in plist)
            {
                var p = new ProductRecord
                {
                    ProductId = product.product_id,
                    Name = product.name,
                };
                p.Att1Id = "";
                bool first = true;
                foreach (string cid in product.category_ids)
                {
                    if (first) first = false;
                    else p.Att1Id += ",";
                    p.Att1Id += cid;
                    int id = Convert.ToInt32(cid);
                    if (id > maxCid) maxCid = id;
                }

                p.Att2Id = "";
                catalogProductReturnEntity pinfo = Mclient.catalogProductInfo(MsessionId, p.ProductId, "", prodAttributes, "id");
                p.Price = pinfo.price; ;
                if ((pinfo.special_from_date != null) && (pinfo.special_to_date != null))
                {
                    DateTime saleStart = DateTime.Parse(pinfo.special_from_date);
                    DateTime saleEnd = DateTime.Parse(pinfo.special_to_date);
                    DateTime now = DateTime.Now;
                    if (now >= saleStart && now <= saleEnd)
                        p.Price = pinfo.special_price;
                }
                p.Filter = "";
                p.Link = pinfo.url_key;
                p.ImageLink = "";
                catalogProductImageEntity[] pimageinfo = null;
                try
                {
                    pimageinfo = Mclient.catalogProductAttributeMediaList(MsessionId, pinfo.sku, "default", null);
                }
                catch { }
                if ((pimageinfo != null) && (pimageinfo.Length > 0))
                    p.ImageLink = pimageinfo[0].url;
                else
                {
                    p.ImageLink = string.Format(m_thumbnailFormat, pinfo.sku);
                }
                p.StandardCode = pinfo.sku;

            }

            ProgressText = tempDisplay + string.Format("Completed ({0}){1}Uploading to server...",
                                                                                                    exportWatch.Lap(), Environment.NewLine);
            var sb = new StringBuilder(CommonHeader + ProductRecord.Header());
            foreach (var product in products)
            {
                sb.Append(string.Format("{0}\t", product.ProductId));
                sb.Append(string.Format("{0}\t", product.Name));
                sb.Append(string.Format("{0}\t", product.Att1Id));
                sb.Append(string.Format("{0}\t", product.Att2Id));
                sb.Append(string.Format("{0}\t", product.Price));
                sb.Append(string.Format("{0}\t", product.SalePrice));
                sb.Append(string.Format("{0}\t", product.Rating));
                sb.Append(string.Format("{0}\t", product.Filter));
                sb.Append(string.Format("{0}\t", product.Link));
                sb.Append(string.Format("{0}\t", product.ImageLink));
                sb.Append(string.Format("{0}\r\n", product.StandardCode));
            }
            result += m_boostService.WriteTable(m_alias, CatalogFilename, sb);

            //get cat info
            result += "\n" + Att1Filename + ": ";
            ProgressText = tempDisplay + result + "Exporting category names...";
            catalogCategoryInfo cinfo;
            StringBuilder csb = new StringBuilder(CommonHeader + AttributeRecord.Header());
            for (int cid = 1; cid <= maxCid; cid++)
            {
                try
                {
                    cinfo = Mclient.catalogCategoryInfo(MsessionId, cid, "", null);
                    csb.Append(cid.ToString() + "\t" + cinfo.name + "\r\n");
                }
                catch
                {
                    csb.Append(cid.ToString() + "\t" + cid.ToString() + "\r\n");
                }
            }
            result += m_boostService.WriteTable(m_alias, Att1Filename, csb);
            ProgressText = tempDisplay + result;

            return result;
        }