Return TypeFunction nameArguments
hzEcodehzWebhost::getRss_r(HttpRC&,const hzUrl&,unsigned int,)

Declared in file: hzHttpClient.h
Defined in file : hzHttpClient.cpp

Function Logic:

0:START 1:hzWebhost::Download pDoc 2:rc!=E_OK 3:Return rc 4:pDoc->Whatami()!=DOCTYPE_XML 5:Return E_TYPE 6:items hzDocXml::Load rc 7:rc!=E_OK 8:Return hzerr(rc,Could not load feed %s,*feed) 9:hzDocXml::FindNodes rc hzVect::Count 10:rc!=E_OK 11:Return rc 12:nIndex 13:pN1 title desc page uqid dstr hzXmlNode::GetFirstChild hzXmlNode::Sibling pN1 pN2 14:pN2; 15:hzXmlNode::NameEQ 16:pN2->NameEQ(*m_tagTitl.m_Slct) 17:title 18:pN2->NameEQ(*m_tagDesc.m_Slct) 19:desc 20:pN2->NameEQ(*m_tagLink.m_Slct) 21:page 22:pN2->NameEQ(*m_tagUqid.m_Slct) 23:uqid 24:pN2->NameEQ(*m_tagDate.m_Slct) 25:dstr 26:!page 27:page 28:!page 29:hzMapS::Exists 30:m_mapHist.Exists(page) 31:pMark pMark pMark pMark 32:dstr 33:hzXDate::SetDateTime 34:hzVect::Add 35:nIndex 36:page hzWebhost::getRss_r rc 37:Return rc

Function body:

hzEcode hzWebhost::getRss_r (HttpRC& hRet, const hzUrl& feed, unsigned int nLevel)
{
   _hzfunc("hzWebhost::getRss_r") ;
   hzVect<hzXmlNode*>  linx ;
   hzVect<hzUrl>       todo ;
   hzDocXml        X ;
   hzXmlNode*      pN1 ;
   hzXmlNode*      pN2 ;
   hzDocMeta*      pMark ;
   hzDocument*     pDoc ;
   hzUrl           page ;
   hzString        desc ;
   hzString        dstr ;
   hzString        uqid ;
   hzString        title ;
   uint32_t        nIndex ;
   hzEcode         rc = E_OK ;
   pDoc = Download(feed) ;
   if (rc != E_OK)
       { threadLog("Could not fetch URL %s\n", *feed) ; return rc ; }
   if (pDoc->Whatami() != DOCTYPE_XML)
       { threadLog("case 1. Fetched feed (%s) is not of doctype XML\n", *feed) ; return E_TYPE ; }
   nLevel++ ;
   rc = X.Load(HC.m_Content) ;
   if (rc != E_OK)
       return hzerr(rc, "Could not load feed %s", *feed) ;
   rc = X.FindNodes(linx, m_tagItem.m_Slct) ;
   threadLog("Found %d <item> tags in feed %s\n", linx.Count(), *feed) ;
   if (rc != E_OK)
       return rc ;
   for (nIndex = 0; nIndex < linx.Count() ; nIndex++)
   {
       threadLog("case 1\n") ;
       pN1 = linx[nIndex] ;
       title = (char*) 0; desc = (char*) 0; page = (char*) 0; uqid = (char*) 0; dstr = (char*) 0;
       for (pN2 = pN1->GetFirstChild() ; pN2 ; pN2 = pN2->Sibling())
       {
           threadLog("case 2\n") ;
           if (pN2->NameEQ(*m_tagTitl.m_Slct)) { title = pN2->m_fixContent ; continue ; }
           if (pN2->NameEQ(*m_tagDesc.m_Slct)) { desc = pN2->m_fixContent ; continue ; }
           if (pN2->NameEQ(*m_tagLink.m_Slct)) { page = pN2->m_fixContent ; continue ; }
           if (pN2->NameEQ(*m_tagUqid.m_Slct)) { uqid = pN2->m_fixContent ; continue ; }
           if (pN2->NameEQ(*m_tagDate.m_Slct)) { dstr = pN2->m_fixContent ; continue ; }
       }
       threadLog("case 3\n") ;
       if (!page)
           { threadLog("case 1: title=%s; link=null uqid=%s\n", *title, *uqid) ; page = uqid ; }
       if (!page)
           { threadLog("case 2: title=%s; link=null uqid=%s\n", *title, *uqid) ; continue ; }
       threadLog("title=%s; link=%s\n", *title, *page) ;
       if (m_mapHist.Exists(page))
           threadLog("Exists in history, page %s\n", *page) ;
       else
       {
           pMark = new hzDocMeta() ;
           pMark->m_Title = title ;
           pMark->m_Desc = desc ;
           pMark->m_urlReq = page ;
           if (dstr)
               pMark->m_Modified.SetDateTime(*dstr) ;
           todo.Add(page) ;
           threadLog("Adding to history, page %s\n", *page) ;
       }
   }
   for (nIndex = 0; nIndex < todo.Count() ; nIndex++)
   {
       page = todo[nIndex] ;
       threadLog("Processing %s\n", *page) ;
       rc = getRss_r(hRet, page, nLevel) ;
   }
   return rc ;
}