Exemple #1
0
        // 装入检索命中记录到浏览列表中
        int LoadResults(XmlDocument response_dom,
            // bool bDisplayInfo,
            Delegate_appendBrowseLine appendBrowseLineProc,
            object param,
            bool bAutoSetFocus,
            out string strError)
        {
            strError = "";
            int nRet = 0;

            // string strElementSet = "";

            // 建立 ASIN --> ListViewItem 对照表
            Hashtable table = new Hashtable();
#if NO
            if (this.m_reloadInfo != null)
            {
                foreach (ListViewItem item in this.m_reloadInfo.CurrentItems)
                {
                    table[item.Text] = item;
                }
                strElementSet = this.m_reloadInfo.ElementSet;
            }
            else
            {
                if (bUseFullElementSet == true)
                    strElementSet = "F";
                else
                    strElementSet = "B";
            }
#endif

            XmlNamespaceManager nsmgr = new XmlNamespaceManager(new NameTable());
            nsmgr.AddNamespace("amazon", NAMESPACE);

            XmlNodeList items = response_dom.DocumentElement.SelectNodes("amazon:Items/amazon:Item", nsmgr);

            foreach (XmlNode item in items)
            {
                var element = item as XmlElement;

                List<string> cols = null;
                string strASIN = "";
                string strCoverImageUrl = "";
                nRet = ParseItemXml(element,
                    nsmgr,
                    out strASIN,
                    out strCoverImageUrl,
                    out cols,
                    out strError);
                if (nRet == -1)
                    return -1;
                nRet = appendBrowseLineProc("", element.OuterXml, param, bAutoSetFocus, out strError);
                if (nRet == -1)
                    return -1;
                if (nRet == 1)
                    break;

#if NO
                if (info.EelementSet == "B")
                    listitem.ImageIndex = BROWSE_TYPE_BRIEF;
                else
                    listitem.ImageIndex = BROWSE_TYPE_FULL;
#endif
            }

#if NO
            if (this.m_reloadInfo == null)
            {
                if (bDisplayInfo == true)
                {
                    this.amazonSimpleQueryControl_simple.Comment = "命中记录:\t" + m_nTotalResults.ToString()
                    + "\r\n已装入浏览记录:\t" + this.listView_browse.Items.Count.ToString();
                }
            }
            else
            {
                if (table.Count != 0)
                {
                    strError = "下列事项没有被重新装载 '" + Join(table.Keys) + "'";
                    return -1;
                }
            }
#endif

            return 0;
        }
Exemple #2
0
        // return:
        //      -1  出错
        //      >=0 命中的记录数
        public int LoadBrowseLines(Delegate_appendBrowseLine appendBrowseLineProc,
            object param,
            bool bAutoSetFocus,
            out string strError)
        {
            strError = "";

            XmlDocument doc = new XmlDocument();
            doc.Load(this.TempFilename);

            XmlNamespaceManager nsmgr = new XmlNamespaceManager(new NameTable());
            nsmgr.AddNamespace("amazon", NAMESPACE);

            XmlNodeList errors = doc.DocumentElement.SelectNodes("amazon:Items/amazon:Request/amazon:Errors/amazon:Error", nsmgr);
            if (errors.Count > 0)
            {
                string strCode = DomUtil.GetElementText(errors[0], "amazon:Code", nsmgr);
                string strMessage = DomUtil.GetElementText(errors[0], "amazon:Message", nsmgr);
                if (strCode == "AWS.ECommerceService.NoExactMatches")
                {
                    strError = strCode;
                    goto ERROR1;
                }
                strError = strMessage;
                goto ERROR1;
            }

            int nHitCount = 0;

            if (this.m_reloadInfo == null)
            {
                // Items/TotalResults
                string strTotalResults = DomUtil.GetElementText(doc.DocumentElement,
                    "amazon:Items/amazon:TotalResults", nsmgr);
                Int64.TryParse(strTotalResults, out this.m_nTotalResults);

                // Items/TotalPages
                string strTotalPages = DomUtil.GetElementText(doc.DocumentElement,
                    "amazon:Items/amazon:TotalPages", nsmgr);
                Int64.TryParse(strTotalPages, out this.m_nTotalPages);

                nHitCount = (int)Math.Min(m_nTotalResults, 10);

#if NO
                // TODO: 显示单行命中的消息
                if (m_nTotalResults > 0)
                {
                    int nHitCount = (int)Math.Min(m_nTotalResults, 10);
                    this.m_multiSearchInfo.HitWords.Add(this.m_multiSearchInfo.CurrentWord + "\t" + nHitCount.ToString());
                    this.m_multiSearchInfo.HitCount += nHitCount;
                }
                else
                    this.m_multiSearchInfo.NotHitWords.Add(this.m_multiSearchInfo.CurrentWord);
#endif

                // this.amazonSimpleQueryControl_simple.Comment = "命中记录:\t" + m_nTotalResults.ToString();
            }

            int nRet = LoadResults(doc,
                // _userFullElementSet,
                appendBrowseLineProc,
                param,
                bAutoSetFocus,
                out strError);
            if (nRet == -1)
                goto ERROR1;

            if (this.m_reloadInfo == null)
            {
                this.m_nCurrentPageNo++;    // 第一次 从 -1 ++ 正好等于 0
            }
            return nHitCount;
        ERROR1:
            if (this.m_reloadInfo != null)
                this.m_reloadInfo.Cancel = true;

            this.DeleteTempFile();

            if (strError == "AWS.ECommerceService.NoExactMatches")
            {
                // TODO: 显示单行没有命中的消息
                ////this.m_multiSearchInfo.NotHitWords.Add(this.m_multiSearchInfo.CurrentWord);
                return 0;
            }
            // TODO: 显示单行检索出错的消息
            // this.amazonSimpleQueryControl_simple.Comment = "检索发生错误:\r\n" + strError;
            this.m_bError = true;
            this.m_strError = strError;
            return -1;
        }