(trunk) #2096 "magnet links": in libT, cleanup. in GTK+ client, add different status text in the main window for magnet torrents: "downloading .torrent data"

This commit is contained in:
Charles Kerr 2009-11-24 15:51:16 +00:00
parent 68f853cdb5
commit d5ae900e4e
6 changed files with 85 additions and 77 deletions

View File

@ -129,15 +129,17 @@ getProgressString( const tr_torrent * tor,
}
static char*
getShortTransferString( const tr_stat * torStat,
double uploadSpeed,
double downloadSpeed,
char * buf,
size_t buflen )
getShortTransferString( const tr_torrent * tor,
const tr_stat * torStat,
double uploadSpeed,
double downloadSpeed,
char * buf,
size_t buflen )
{
char downStr[32], upStr[32];
const int haveDown = torStat->peersSendingToUs > 0;
const int haveUp = torStat->peersGettingFromUs > 0;
char downStr[32], upStr[32];
const int haveMeta = tr_torrentHasMetadata( tor );
const int haveDown = haveMeta && torStat->peersSendingToUs > 0;
const int haveUp = haveMeta && torStat->peersGettingFromUs > 0;
if( haveDown )
tr_strlspeed( downStr, downloadSpeed, sizeof( downStr ) );
@ -145,28 +147,31 @@ getShortTransferString( const tr_stat * torStat,
tr_strlspeed( upStr, uploadSpeed, sizeof( upStr ) );
if( haveDown && haveUp )
/* Translators: "speed|" is here for disambiguation. Please remove it from your translation.
%1$s is the download speed
/* Translators: "speed|" is here for disambiguation.
* Please remove it from your translation.
* %1$s is the download speed
%2$s is the upload speed */
g_snprintf( buf, buflen, Q_(
"speed|Down: %1$s, Up: %2$s" ), downStr, upStr );
g_snprintf( buf, buflen, Q_( "speed|Down: %1$s, Up: %2$s" ), downStr, upStr );
else if( haveDown )
/* download speed */
g_snprintf( buf, buflen, _( "Down: %s" ), downStr );
else if( haveUp )
/* upload speed */
g_snprintf( buf, buflen, _( "Up: %s" ), upStr );
else
else if( tr_torrentHasMetadata( tor ) )
/* the torrent isn't uploading or downloading */
g_strlcpy( buf, _( "Idle" ), buflen );
else
*buf = '\0';
return buf;
}
static char*
getShortStatusString( const tr_stat * torStat,
double uploadSpeed,
double downloadSpeed )
getShortStatusString( const tr_torrent * tor,
const tr_stat * torStat,
double uploadSpeed,
double downloadSpeed )
{
GString * gstr = g_string_new( NULL );
@ -196,7 +201,7 @@ getShortStatusString( const tr_stat * torStat,
g_string_append_printf( gstr, _( "Ratio: %s" ), buf );
g_string_append( gstr, ", " );
}
getShortTransferString( torStat, uploadSpeed, downloadSpeed, buf, sizeof( buf ) );
getShortTransferString( tor, torStat, uploadSpeed, downloadSpeed, buf, sizeof( buf ) );
g_string_append( gstr, buf );
break;
}
@ -209,9 +214,10 @@ getShortStatusString( const tr_stat * torStat,
}
static char*
getStatusString( const tr_stat * torStat,
const double uploadSpeed,
const double downloadSpeed )
getStatusString( const tr_torrent * tor,
const tr_stat * torStat,
const double uploadSpeed,
const double downloadSpeed )
{
const int isActive = torStat->activity != TR_STATUS_STOPPED;
const int isChecking = torStat->activity == TR_STATUS_CHECK
@ -227,18 +233,21 @@ getStatusString( const tr_stat * torStat,
g_string_append_printf( gstr, _( fmt[torStat->error] ), torStat->errorString );
}
else switch( torStat->activity )
{
case TR_STATUS_STOPPED:
case TR_STATUS_CHECK_WAIT:
case TR_STATUS_CHECK:
{
case TR_STATUS_STOPPED:
case TR_STATUS_CHECK_WAIT:
case TR_STATUS_CHECK:
{
char * pch = getShortStatusString( torStat, uploadSpeed, downloadSpeed );
g_string_assign( gstr, pch );
g_free( pch );
break;
}
char * pch = getShortStatusString( tor, torStat, uploadSpeed, downloadSpeed );
g_string_assign( gstr, pch );
g_free( pch );
break;
}
case TR_STATUS_DOWNLOAD:
case TR_STATUS_DOWNLOAD:
{
if( tr_torrentHasMetadata( tor ) )
{
g_string_append_printf( gstr,
ngettext( "Downloading from %1$'d of %2$'d connected peer",
"Downloading from %1$'d of %2$'d connected peers",
@ -247,23 +256,35 @@ getStatusString( const tr_stat * torStat,
torStat->webseedsSendingToUs,
torStat->peersConnected +
torStat->webseedsSendingToUs );
break;
case TR_STATUS_SEED:
}
else
{
g_string_append_printf( gstr,
ngettext( "Seeding to %1$'d of %2$'d connected peer",
"Seeding to %1$'d of %2$'d connected peers",
ngettext( "Downloading .torrent data from %1$'d peer",
"Downloading .torrent data from %1$'d peers",
torStat->peersConnected ),
torStat->peersGettingFromUs,
torStat->peersConnected );
break;
torStat->peersConnected +
torStat->webseedsSendingToUs );
}
break;
}
case TR_STATUS_SEED:
g_string_append_printf( gstr,
ngettext( "Seeding to %1$'d of %2$'d connected peer",
"Seeding to %1$'d of %2$'d connected peers",
torStat->peersConnected ),
torStat->peersGettingFromUs,
torStat->peersConnected );
break;
}
if( isActive && !isChecking )
{
char buf[256];
getShortTransferString( torStat, uploadSpeed, downloadSpeed, buf, sizeof( buf ) );
g_string_append_printf( gstr, " - %s", buf );
getShortTransferString( tor, torStat, uploadSpeed, downloadSpeed, buf, sizeof( buf ) );
if( *buf )
g_string_append_printf( gstr, " - %s", buf );
}
return g_string_free( gstr, FALSE );
@ -347,7 +368,7 @@ get_size_minimal( TorrentCellRenderer * cell,
icon = get_icon( tor, MINIMAL_ICON_SIZE, widget );
name = tr_torrentInfo( tor )->name;
status = getShortStatusString( st, p->upload_speed, p->download_speed );
status = getShortStatusString( tor, st, p->upload_speed, p->download_speed );
/* get the idealized cell dimensions */
g_object_set( p->icon_renderer, "pixbuf", icon, NULL );
@ -404,7 +425,7 @@ get_size_full( TorrentCellRenderer * cell,
icon = get_icon( tor, FULL_ICON_SIZE, widget );
name = inf->name;
status = getStatusString( st, p->upload_speed, p->download_speed );
status = getStatusString( tor, st, p->upload_speed, p->download_speed );
progress = getProgressString( tor, inf, st );
/* get the idealized cell dimensions */
@ -508,7 +529,7 @@ render_minimal( TorrentCellRenderer * cell,
icon = get_icon( tor, MINIMAL_ICON_SIZE, widget );
name = tr_torrentInfo( tor )->name;
status = getShortStatusString( st, p->upload_speed, p->download_speed );
status = getShortStatusString( tor, st, p->upload_speed, p->download_speed );
/* get the cell dimensions */
g_object_set( p->icon_renderer, "pixbuf", icon, NULL );
@ -604,7 +625,7 @@ render_full( TorrentCellRenderer * cell,
icon = get_icon( tor, FULL_ICON_SIZE, widget );
name = inf->name;
status = getStatusString( st, p->upload_speed, p->download_speed );
status = getStatusString( tor, st, p->upload_speed, p->download_speed );
progress = getProgressString( tor, inf, st );
/* get the idealized cell dimensions */

View File

@ -513,8 +513,11 @@ tr_peerMgrFree( tr_peerMgr * manager )
}
static int
clientIsDownloadingFrom( const tr_peer * peer )
clientIsDownloadingFrom( const tr_torrent * tor, const tr_peer * peer )
{
if( !tr_torrentHasMetadata( tor ) )
return TRUE;
return peer->clientIsInterested && !peer->clientIsChoked;
}
@ -2013,7 +2016,7 @@ tr_peerMgrTorrentStats( tr_torrent * tor,
++setmePeersFrom[atom->from];
if( clientIsDownloadingFrom( peer ) )
if( clientIsDownloadingFrom( tor, peer ) )
++*setmePeersSendingToUs;
if( clientIsUploadingTo( peer ) )
@ -2124,7 +2127,7 @@ tr_peerMgrPeerStats( const tr_torrent * tor,
stat->clientIsChoked = peer->clientIsChoked;
stat->clientIsInterested = peer->clientIsInterested;
stat->isIncoming = tr_peerIoIsIncoming( peer->io );
stat->isDownloadingFrom = clientIsDownloadingFrom( peer );
stat->isDownloadingFrom = clientIsDownloadingFrom( tor, peer );
stat->isUploadingTo = clientIsUploadingTo( peer );
stat->isSeed = ( atom->uploadOnly == UPLOAD_ONLY_YES ) || ( peer->progress >= 1.0 );

View File

@ -177,7 +177,6 @@ struct tr_peermsgs
tr_bool peerSupportsMetadataXfer;
tr_bool clientSentLtepHandshake;
tr_bool peerSentLtepHandshake;
tr_bool requestingMetadataFromPeer;
/*tr_bool haveFastSet;*/
@ -749,9 +748,8 @@ popNextMetadataRequest( tr_peermsgs * msgs, int * piece )
*piece = msgs->peerAskedForMetadata[0];
memmove( msgs->peerAskedForMetadata,
msgs->peerAskedForMetadata + 1,
sizeof( int ) * --msgs->peerAskedForMetadataCount );
tr_removeElementFromArray( msgs->peerAskedForMetadata, 0, sizeof( int ),
msgs->peerAskedForMetadataCount-- );
return TRUE;
}
@ -764,9 +762,8 @@ popNextRequest( tr_peermsgs * msgs, struct peer_request * setme )
*setme = msgs->peerAskedFor[0];
memmove( msgs->peerAskedFor,
msgs->peerAskedFor + 1,
sizeof( struct peer_request ) * --msgs->peerAskedForCount );
tr_removeElementFromArray( msgs->peerAskedFor, 0, sizeof( struct peer_request ),
msgs->peerAskedForCount-- );
return TRUE;
}
@ -1040,8 +1037,6 @@ parseUtMetadata( tr_peermsgs * msgs, int msglen, struct evbuffer * inbuf )
&& ( piece * METADATA_PIECE_SIZE + (msg_end - benc_end) <= total_size ) )
{
const int pieceLen = msg_end - benc_end;
dbgmsg( msgs, "got a metadata piece... calling tr_torrentSetMetadataPiece" );
msgs->requestingMetadataFromPeer = FALSE;
tr_torrentSetMetadataPiece( msgs->torrent, piece, benc_end, pieceLen );
}
@ -1142,9 +1137,7 @@ parseUtPex( tr_peermsgs * msgs, int msglen, struct evbuffer * inbuf )
static void sendPex( tr_peermsgs * msgs );
static void
parseLtep( tr_peermsgs * msgs,
int msglen,
struct evbuffer * inbuf )
parseLtep( tr_peermsgs * msgs, int msglen, struct evbuffer * inbuf )
{
uint8_t ltep_msgid;
@ -1203,14 +1196,12 @@ readBtLength( tr_peermsgs * msgs,
return READ_NOW;
}
static int readBtMessage( tr_peermsgs * msgs,
static int readBtMessage( tr_peermsgs * msgs,
struct evbuffer * inbuf,
size_t inlen );
static int
readBtId( tr_peermsgs * msgs,
struct evbuffer * inbuf,
size_t inlen )
readBtId( tr_peermsgs * msgs, struct evbuffer * inbuf, size_t inlen )
{
uint8_t id;
@ -1477,9 +1468,8 @@ readBtMessage( tr_peermsgs * msgs, struct evbuffer * inbuf, size_t inlen )
}
if( i < msgs->peerAskedForCount )
memmove( msgs->peerAskedFor+i,
msgs->peerAskedFor+i+1,
sizeof(struct peer_request) *( --msgs->peerAskedForCount-i) );
tr_removeElementFromArray( msgs->peerAskedFor, i, sizeof( struct peer_request ),
msgs->peerAskedForCount-- );
break;
}
@ -1746,7 +1736,6 @@ updateMetadataRequests( tr_peermsgs * msgs, time_t now )
int piece;
if( msgs->peerSupportsMetadataXfer
&& !msgs->requestingMetadataFromPeer
&& tr_torrentGetNextMetadataRequest( msgs->torrent, now, &piece ) )
{
tr_benc tmp;
@ -1772,8 +1761,6 @@ updateMetadataRequests( tr_peermsgs * msgs, time_t now )
pokeBatchPeriod( msgs, HIGH_PRIORITY_INTERVAL_SECS );
dbgOutMessageLen( msgs );
msgs->requestingMetadataFromPeer = TRUE;
tr_free( payload );
}
}

View File

@ -93,12 +93,6 @@ tr_torrentSetMetadataSizeHint( tr_torrent * tor, int size )
}
}
tr_bool
tr_torrentHasMetadata( const tr_torrent * tor )
{
return tor->info.fileCount > 0;
}
void*
tr_torrentGetMetadataPiece( const tr_torrent * tor, int piece, int * len )
{

View File

@ -25,8 +25,6 @@ enum
METADATA_PIECE_SIZE = ( 1024 * 16 )
};
tr_bool tr_torrentHasMetadata( const tr_torrent * tor );
void* tr_torrentGetMetadataPiece( const tr_torrent * tor, int piece, int * len );
void tr_torrentSetMetadataPiece( tr_torrent * tor, int piece, const void * data, int len );

View File

@ -1552,6 +1552,11 @@ struct tr_info
tr_bool isMultifile;
};
static TR_INLINE tr_bool tr_torrentHasMetadata( const tr_torrent * tor )
{
return tr_torrentInfo( tor )->fileCount > 0;
}
/**
* What the torrent is doing right now.
*