Ticket #2347: completion.diff

File completion.diff, 2.0 KB (added by mortennorby, 13 years ago)

A more accurate percent-wise progress measurement.

Line 
1292a293,294
2>         const tr_piece_index_t piece = i * interval;
3>
4295c297
5<         else if( isSeed )
6---
7>         else if( isSeed || tr_cpPieceIsComplete( cp, piece ) )
8298,357c300,301
9<               {                       
10<                       int first_piece = i * interval;
11<                       
12<                       // Last piece of last interval is also the last piece of the torrent
13<                       int last_piece =  i < tabCount - 1 ? ( i + 1 ) * interval : tor->info.pieceCount - 1;
14<                       
15<                       float lower_piece_fract = 1.0f - ((float)i * interval - first_piece );
16<                       float upper_piece_fract = ((float)(i + 1) * interval -  last_piece );
17<                       
18<                       float sum = 0.0f, avg;
19<                       
20<                       tr_bool complete = TRUE;
21<                       
22<                       if ( first_piece == last_piece ) {
23<                               if ( !tr_cpPieceIsComplete( cp, first_piece ) ) {
24<                                       avg =  (float)cp->completeBlocks[first_piece] /
25<                                       tr_torPieceCountBlocks( tor, first_piece );
26<                                       complete = FALSE;
27<                               }
28<                               else {
29<                                       avg = 1.0;
30<                               }
31<                       }
32<                       else {
33<                               if ( !tr_cpPieceIsComplete( cp, first_piece ) ) {
34<                                       sum += (float)cp->completeBlocks[first_piece] /
35<                                               tr_torPieceCountBlocks( tor, first_piece ) * lower_piece_fract;
36<                                       complete = FALSE;
37<                               }
38<                               else {
39<                                       sum += lower_piece_fract;
40<                               }
41<                               
42<                               if ( !tr_cpPieceIsComplete( cp, last_piece ) ) {                               
43<                                       sum += (float)cp->completeBlocks[last_piece] /
44<                                               tr_torPieceCountBlocks( tor, last_piece ) * upper_piece_fract;
45<                                       complete = FALSE;
46<                               }
47<                               else {
48<                                       sum += upper_piece_fract;
49<                               }
50<                               
51<                               int j;
52<                               for ( j = first_piece + 1; j < last_piece; j++ ) {
53<                                       if ( !tr_cpPieceIsComplete( cp, j ) ) {
54<                                               sum += (float)cp->completeBlocks[j] /
55<                                                       tr_torPieceCountBlocks( tor, j );
56<                                               complete = FALSE;
57<                                       }
58<                                       else {
59<                                               sum += 1.0f;
60<                                       }
61<                                       
62<                               }
63<                               
64<                               avg = sum / interval;
65<                       }
66<                       
67<                       tab[i] = complete ? 1.0f : avg;
68<               }
69---
70>             tab[i] = (float)cp->completeBlocks[piece] /
71>                      tr_torPieceCountBlocks( tor, piece );