DCCollection FIX

After you have edited the source code, post your patch here.
Forum rules
Home | Wiki | Rules

DCCollection FIX

Postby ivan386 » 14 Jan 2016 20:58

При попытке открыть коллекцию из DC Shareaza зависает. Происходит это на последнем этапе когда результат загружается в браузер. Решением проблемы оказалась XSLT. Я отдаю xml из архива предварив строчкой:
----------------------------------
When you try to open a collection of DC Shareaza freezes. This occurs at the last stage when the result is loaded into the browser. The solution proved to XSLT. I give xml archive prefacing lines:
Code: Select all
               CString strTemp;
               strTemp.Format(   _T("<?xml-stylesheet type=\"text/xsl\" href=\"style.xsl\"?>") );
               oBuffer.Print( strTemp , CP_UTF8 );
               oBuffer.AddBuffer( &pDCBuffer );


And then XSL:
Code: Select all
               if (strURL.Find(_T("/style.xsl")) > 0){
                  CString strTemp;
                  strTemp.Format(   _T("<?xml version=\"1.0\" encoding=\"utf-8\"?>")
                              _T("<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">")
                              _T("   <xsl:template match=\"/\">")
                              _T("      <html>")
                              _T("         <head>")
                              _T("            <style>")
                              _T("            body")
                              _T("            {")
                              _T("               font-family:verdana;")
                              _T("            }")
                              _T("            </style>")
                              _T("         </head>")
                              _T("         <body>")
                              _T("            <ul>")
                              _T("            <xsl:apply-templates/>")
                              _T("            </ul>")
                              _T("         </body>")
                              _T("      </html>")
                              _T("   </xsl:template>")
                              _T("   <xsl:template match=\"Directory\">")
                              _T("      <li>")
                              _T("         <xsl:value-of select=\"@Name\"/>")
                              _T("         <ul><xsl:apply-templates/></ul>")
                              _T("      </li>")
                              _T("      ")
                              _T("      ")
                              _T("   </xsl:template>")
                              _T("   <xsl:template match=\"File\">")
                              _T("      <li>")
                              _T("         <a>")
                              _T("            <xsl:attribute name=\"href\">")
                              _T("               ")
                              _T("               magnet:?xl=<xsl:value-of select=\"@Size\"/>&amp;xs=urn:tree:tiger:<xsl:value-of select=\"@TTH\"/><xsl:apply-templates select=\"@BR\"/>&amp;dn=<xsl:value-of select=\"@Name\"/>")
                              _T("            </xsl:attribute>")
                              _T("            <xsl:value-of select=\"@Name\"/>")
                              _T("         </a>")
                              _T("      </li>")
                              _T("   </xsl:template>")
                              _T("   <xsl:template match=\"@BR\">")
                              _T("      &amp;br=<xsl:value-of select=\".\"/>000")
                              _T("   </xsl:template>")
                              _T("</xsl:stylesheet>")
                  );
                  oBuffer.Print( strTemp , CP_UTF8 );
                  return S_OK;
               }


Браузер сам формирует HTML.

Я также заметил что Shareaza два раза обрабатывает файл DC коллекции. Возможно в данном варианте от этого можно отказаться.

Тестировал на коллекции в 42МБ xml (13 МБ xml.bz2). При тесте Shareaza съела 1.5 ГБ памяти.
----------------------------------------
The browser itself generates HTML.

I also noticed that Shareaza handles twice the DC file collection. Perhaps, in this embodiment, this can be dispensed with.

Tested on collection 42MB xml (13 MB xml.bz2)


Shareaza took 1.5 GB of memory.

Sorry for GT.

UPD: Теперь не должно быть ошибки.
Attachments
DCCollections.zip
(12.77 KiB) Downloaded 97 times
Last edited by ivan386 on 19 Jan 2016 01:58, edited 3 times in total.
data:application/exe,%B4%09%BA%0D%01%CD%21%B4%08%CD%21%CD%20Hello,World!$
ivan386
 
Posts: 260
Joined: 17 Jun 2009 14:08

Re: DCCollection FIX

Postby raspopov » 15 Jan 2016 17:18

Why it freezes exactly?

UPD:
IMHO also XSL must be included as resource.

UPD:
VS2015 compiler produces next error:
Code: Select all
ieprotocol.cpp(494): error C2280: 'CFile::CFile(const CFile &)': attempting to reference a deleted function
User avatar
raspopov
Project Admin
 
Posts: 944
Joined: 13 Jun 2009 12:30
Location: Russian Federation

Re: DCCollection FIX

Postby ivan386 » 19 Jan 2016 01:49

Воспроизвести баг:
  • Убрать из шары папку с загрузками Shareaza.
  • Нажать Просмотр хоста на любом DC пользователе. Скачается файл лист но не откроется.
  • Открыть в ручную. Добавится новая коллекция.
  • Открыть коллекцию. Если коллекция достаточно большая Shareaza подвиснет надолго.

Коллекция загружается дважды. После этого генерируется большой HTML и после передачи его в браузер тот вешается вместе со всем интерфейсом Shareaza.
-------------------------------------------------------

Play bug :
  • Unshare Shareaza download folder.
  • Click View Host on any DC user. Download the file list but will not open.
  • Open manually. Added a new collection .
  • View the collection . If the collection is large enough Shareaza hangs long.

The collection is loaded twice. After that generated large HTML and then transfer it to the browser that hangs together with all interface Shareaza.
GT
data:application/exe,%B4%09%BA%0D%01%CD%21%B4%08%CD%21%CD%20Hello,World!$
ivan386
 
Posts: 260
Joined: 17 Jun 2009 14:08

Re: DCCollection FIX

Postby raspopov » 19 Jan 2016 04:52

I need sample file.
User avatar
raspopov
Project Admin
 
Posts: 944
Joined: 13 Jun 2009 12:30
Location: Russian Federation

Re: DCCollection FIX

Postby ivan386 » 20 Jan 2016 18:27

Sample filelist: magnet url
data:application/exe,%B4%09%BA%0D%01%CD%21%B4%08%CD%21%CD%20Hello,World!$
ivan386
 
Posts: 260
Joined: 17 Jun 2009 14:08

Re: DCCollection FIX

Postby raspopov » 20 Jan 2016 18:57

350 000 files?!

I think problem is a
Code: Select all
CList< File* > CCollectionFile::m_pFiles;
and 350 000 files in collection compared (inside CCollectionFile::FindFile) to every Library file i.e. without indexes.
User avatar
raspopov
Project Admin
 
Posts: 944
Joined: 13 Jun 2009 12:30
Location: Russian Federation

Re: DCCollection FIX

Postby ivan386 » 20 Jan 2016 19:36

Да. Я взял один из настоящих скачанных файл листов и заменил в нём имена и TTH файлов. Также у меня есть файл лист на 200МБ(xml) но этот ни Shareaza ни IE не открыл.
data:application/exe,%B4%09%BA%0D%01%CD%21%B4%08%CD%21%CD%20Hello,World!$
ivan386
 
Posts: 260
Joined: 17 Jun 2009 14:08


Return to Code Submission

Who is online

Users browsing this forum: No registered users and 1 guest

cron