<html>
 <body>
  <div style="font-family: Verdana, Arial, Helvetica, Sans-Serif;">
   <table bgcolor="#f9f3c9" width="100%" cellpadding="12" style="border: 1px #c9c399 solid; border-radius: 6px; -moz-border-radius: 6px; -webkit-border-radius: 6px;">
    <tr>
     <td>
      This is an automatically generated e-mail. To reply, visit:
      <a href="https://git.reviewboard.kde.org/r/120927/">https://git.reviewboard.kde.org/r/120927/</a>
     </td>
    </tr>
   </table>
   <br />





<table bgcolor="#fefadf" width="100%" cellspacing="0" cellpadding="12" style="border: 1px #888a85 solid; border-radius: 6px; -moz-border-radius: 6px; -webkit-border-radius: 6px;">
 <tr>
  <td>

<div>Review request for KDevelop.</div>
<div>By Jakub Caban.</div>










<div style="margin-top: 1.5em;">
 <b style="color: #575012; font-size: 10pt;">Repository: </b>
kdev-upload
</div>


<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Description </h1>
 <table width="100%" bgcolor="#ffffff" cellspacing="0" cellpadding="10" style="border: 1px solid #b8b5a0">
 <tr>
  <td>
   <pre style="margin: 0; padding: 0; white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;"><p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">That one was actually bothering me for a long time. As in the files dialog when choosing large directory or using "select all" KDevelop hunged to the point it had to be killed. In the best case scenario after long waiting it could respond. Took me some time to figure out the culprint.</p>
<p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">In the current situation recursive file selecting worked like that:
- go into foo/
- emit dataChanged for foo/
- go into foo/bar/
- emit dataChanged for foo/bar/
- emit dataChanged for foo/
- take file foo/bar/file.txt
- emit dataChanged for foo/bar/file.txt
- emit dataChanged for foo/bar/
- emit dataChanged for foo/
- ...</p>
<p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">...and so on - I think you see what's going on there already. Things got extremely wrong with deeply nested directories and many files in them.</p>
<p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">As a solution I've removed this "look back" mechanism and am acutally emiting signal only for currently analyzed entry. So example looks like:
- go into foo/
- emit dataChanged for foo/
- go into foo/bar/
- emit dataChanged for foo/bar/
- take file foo/bar/file.txt
- emit dataChanged for foo/bar/file.txt
- ...</p>
<p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">So that for each file or dir dataChanged is emitted at most once.</p>
<p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">This have changed time of selecting all project files for upload at my random project from infinity to less than blink of an eye.</p></pre>
  </td>
 </tr>
</table>


<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Testing </h1>
<table width="100%" bgcolor="#ffffff" cellspacing="0" cellpadding="10" style="border: 1px solid #b8b5a0">
 <tr>
  <td>
   <pre style="margin: 0; padding: 0; white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;"><p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">Code compiles and works in every scenario that came to my head:
- selecting all files and uploading them 
- selecting only one file (nested or not) and uploading it (as upload process actually takes care of creating directories).
- selecting all directory or subdirectory inside project folder for uploading
- using quick upload</p></pre>
  </td>
 </tr>
</table>


<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Diffs</b> </h1>
<ul style="margin-left: 3em; padding-left: 0;">

 <li>uploadprojectmodel.cpp <span style="color: grey">(b6d2d9d)</span></li>

</ul>

<p><a href="https://git.reviewboard.kde.org/r/120927/diff/" style="margin-left: 3em;">View Diff</a></p>






  </td>
 </tr>
</table>




  </div>
 </body>
</html>