(trunk) #1400, #2308: differentiate warnings and errors; differentiate between local messages and messages from the tracker

This commit is contained in:
Charles Kerr 2009-08-05 01:25:36 +00:00
parent c86d2cc871
commit a4767894e7
11 changed files with 92 additions and 38 deletions

View File

@ -439,6 +439,9 @@ main( int argc,
{
char line[LINEWIDTH];
const tr_stat * st;
const char * messageName[] = { NULL, "Tracker returned a warning:",
"Tracker returned an error:",
"Error:" };
tr_wait( 200 );
@ -470,8 +473,9 @@ main( int argc,
getStatusStr( st, line, sizeof( line ) );
printf( "\r%-*s", LINEWIDTH, line );
if( st->error )
fprintf( stderr, "\n%s\n", st->errorString );
if( messageName[st->error] )
fprintf( stderr, "\n%s: %s\n", messageName[st->error], st->errorString );
}
cleanup:

View File

@ -253,6 +253,7 @@ static const char * details_keys[] = {
"doneDate",
"downloadDir",
"downloadedEver",
"error",
"errorString",
"eta",
"hashString",
@ -1005,9 +1006,16 @@ printDetails( tr_benc * top )
strlsize( buf, i, sizeof( buf ) );
printf( " Corrupt DL: %s\n", buf );
}
if( tr_bencDictFindStr( t, "errorString", &str ) && str && *str )
printf( " Error: %s\n", str );
if( tr_bencDictFindStr( t, "errorString", &str ) && str && *str &&
tr_bencDictFindInt( t, "error", &i ) && i )
{
switch( i ) {
case TR_STAT_TRACKER_WARNING: printf( " Tracker returned a warning: %s\n", str ); break;
case TR_STAT_TRACKER_ERROR: printf( " Tracker returned an error: %s\n", str ); break;
case TR_STAT_LOCAL_ERROR: printf( " Error: %s\n", str ); break;
default: break; /* no error */
}
}
if( tr_bencDictFindInt( t, "peersConnected", &i )
&& tr_bencDictFindInt( t, "peersGettingFromUs", &j )
&& tr_bencDictFindInt( t, "peersSendingToUs", &k ) )

View File

@ -213,7 +213,10 @@ getStatusString( const tr_stat * torStat )
if( torStat->error )
{
g_string_assign( gstr, torStat->errorString );
const char * fmt[] = { NULL, N_( "Tracker returned a warning: \"%s\"" ),
N_( "Tracker returned an error: \"%s\"" ),
N_( "Error: \"%s\"" ) };
g_string_append_printf( gstr, _( fmt[torStat->error] ), torStat->errorString );
}
else switch( torStat->activity )
{

View File

@ -1172,9 +1172,9 @@ peerCallbackFunc( void * vpeer, void * vevent, void * vt )
}
else /* a local error, such as an IO error */
{
t->tor->error = e->err;
t->tor->error = TR_STAT_LOCAL_ERROR;
tr_strlcpy( t->tor->errorString,
tr_strerror( t->tor->error ),
tr_strerror( e->err ),
sizeof( t->tor->errorString ) );
tr_torrentStop( t->tor );
}

View File

@ -285,20 +285,18 @@ onTrackerResponse( void * tracker UNUSED,
case TR_TRACKER_WARNING:
tr_torerr( tor, _( "Tracker warning: \"%s\"" ), event->text );
tor->error = -1;
tr_strlcpy( tor->errorString, event->text,
sizeof( tor->errorString ) );
tor->error = TR_STAT_TRACKER_WARNING;
tr_strlcpy( tor->errorString, event->text, sizeof( tor->errorString ) );
break;
case TR_TRACKER_ERROR:
tr_torerr( tor, _( "Tracker error: \"%s\"" ), event->text );
tor->error = -2;
tr_strlcpy( tor->errorString, event->text,
sizeof( tor->errorString ) );
tor->error = TR_STAT_TRACKER_ERROR;
tr_strlcpy( tor->errorString, event->text, sizeof( tor->errorString ) );
break;
case TR_TRACKER_ERROR_CLEAR:
tor->error = 0;
tor->error = TR_STAT_OK;
tor->errorString[0] = '\0';
break;
}
@ -604,7 +602,7 @@ torrentRealInit( tr_torrent * tor, const tr_ctor * ctor )
tr_ctorInitTorrentWanted( ctor, tor );
tor->error = 0;
tor->error = TR_STAT_OK;
tr_bitfieldConstruct( &tor->checkedPieces, tor->info.pieceCount );
tr_torrentUncheck( tor );
@ -859,9 +857,8 @@ tr_torrentStat( tr_torrent * tor )
s = &tor->stats;
s->id = tor->uniqueId;
s->activity = tr_torrentGetActivity( tor );
s->error = tor->error;
memcpy( s->errorString, tor->errorString,
sizeof( s->errorString ) );
s->error = tor->error;
memcpy( s->errorString, tor->errorString, sizeof( s->errorString ) );
tc = tor->tracker;
ti = tr_trackerGetAddress( tor->tracker, tor );
@ -1247,7 +1244,8 @@ checkAndStartImpl( void * vtor )
now = time( NULL );
tor->isRunning = TRUE;
tor->needsSeedRatioCheck = TRUE;
*tor->errorString = '\0';
tor->error = TR_STAT_OK;
tor->errorString[0] = '\0';
tr_torrentResetTransferStats( tor );
tor->completeness = tr_cpGetStatus( &tor->completion );
tr_torrentSaveResume( tor );

View File

@ -140,7 +140,7 @@ struct tr_torrent
int magicNumber;
int error;
tr_stat_errtype error;
char errorString[128];
uint8_t obfuscatedHash[SHA_DIGEST_LENGTH];

View File

@ -1364,8 +1364,14 @@ enum
TR_PEER_FROM__MAX
};
/** Can be used as a mnemonic for "no error" errno */
#define TR_OK 0
typedef enum
{
TR_STAT_OK = 0,
TR_STAT_TRACKER_WARNING = 1,
TR_STAT_TRACKER_ERROR = 2,
TR_STAT_LOCAL_ERROR = 3
}
tr_stat_errtype;
/**
* The current status of a torrent.
@ -1392,11 +1398,13 @@ typedef struct tr_stat
becomes unreachable. */
char * scrapeURL;
/** The errno status for this torrent. 0 means everything's fine. */
int error;
/** Defines what kind of text is in errorString.
@see errorString */
tr_stat_errtype error;
/** Typically an error string returned from the tracker. */
char errorString[128];
/** A warning or error message regarding the torrent.
@see error */
char errorString[128];
/** When tr_stat.status is TR_STATUS_CHECK or TR_STATUS_CHECK_WAIT,
this is the percentage of how much of the files has been

View File

@ -59,7 +59,8 @@ Torrent :: myProperties[] =
{ DOWNLOAD_DIR, "downloadDir", QVariant::String, STAT },
{ ACTIVITY, "status", QVariant::Int, STAT },
{ NAME, "name", QVariant::String, INFO },
{ ERROR, "errorString", QVariant::String, STAT },
{ ERROR, "error", QVariant::Int, STAT },
{ ERROR_STRING, "errorString", QVariant::String, STAT },
{ SIZE_WHEN_DONE, "sizeWhenDone", QVariant::ULongLong, STAT },
{ LEFT_UNTIL_DONE, "leftUntilDone", QVariant::ULongLong, STAT },
{ HAVE_UNCHECKED, "haveUnchecked", QVariant::ULongLong, STAT },
@ -620,3 +621,19 @@ Torrent :: activityString( ) const
return str;
}
QString
Torrent :: getError( ) const
{
QString s = getString( ERROR_STRING );
switch( getInt( ERROR ) )
{
case TR_STAT_TRACKER_WARNING: s = tr( "Tracker returned a warning: %1" ).arg( s ); break;
case TR_STAT_TRACKER_ERROR: s = tr( "Tracker returned an error: %1" ).arg( s ); break;
case TR_STAT_LOCAL_ERROR: s = tr( "Error: %1" ).arg( s ); break;
default: s.clear(); break;
}
return s;
}

View File

@ -90,6 +90,7 @@ class Torrent: public QObject
ACTIVITY,
NAME,
ERROR,
ERROR_STRING,
SIZE_WHEN_DONE,
LEFT_UNTIL_DONE,
HAVE_UNCHECKED,
@ -207,7 +208,7 @@ class Torrent: public QObject
QString creator( ) const { return getString( CREATOR ); }
QString comment( ) const { return getString( COMMENT ); }
QString getPath( ) const { return getString( DOWNLOAD_DIR ); }
QString getError( ) const { return getString( ERROR ); }
QString getError( ) const;
QString hashString( ) const { return getString( HASH_STRING ); }
QString scrapeResponse( ) const { return getString( SCRAPE_RESPONSE ); }
QString announceResponse( ) const { return getString( ANNOUNCE_RESPONSE ); }

View File

@ -22,6 +22,11 @@ Torrent._RatioUseGlobal = 0;
Torrent._RatioUseLocal = 1;
Torrent._RatioUnlimited = 2;
Torrent._ErrNone = 0;
Torrent._ErrTrackerWarning = 1;
Torrent._ErrTrackerError = 2;
Torrent._ErrLocalError = 3;
Torrent.prototype =
{
/*
@ -162,7 +167,6 @@ Torrent.prototype =
dateAdded: function() { return this._date; },
downloadSpeed: function() { return this._download_speed; },
downloadTotal: function() { return this._download_total; },
errorMessage: function() { return this._error_message; },
hash: function() { return this._hashString; },
id: function() { return this._id; },
isActive: function() { return this.state() != Torrent._StatusPaused; },
@ -316,7 +320,7 @@ Torrent.prototype =
this._sizeWhenDone = data.sizeWhenDone;
this._recheckProgress = data.recheckProgress;
this._error = data.error;
this._error_message = data.errorString;
this._error_string = data.errorString;
this._eta = data.eta;
this._swarm_speed = data.swarmSpeed;
this._total_leechers = Math.max( 0, data.leechers );
@ -340,14 +344,24 @@ Torrent.prototype =
}
},
getErrorMessage: function()
{
if( this._error == Torrent._ErrTrackerWarning )
return 'Tracker returned a warning: ' + this._error_string;
if( this._error == Torrent._ErrTrackerError )
return 'Tracker returned an error: ' + this._error_string;
if( this._error == Torrent._ErrLocalError )
return 'Error: ' + this._error_string;
return null;
},
getPeerDetails: function()
{
if( this._error_message &&
this._error_message !== '' &&
this._error_message !== 'other' )
return this._error_message;
var c;
if(( c = this.getErrorMessage( )))
return c;
var st = this.state( );
switch( st )
{

View File

@ -991,8 +991,9 @@ Transmission.prototype =
if( torrents.length == 1 )
{
var t = torrents[0];
if( t._error_message )
error = t._error_message ;
var err = t.getErrorMessage( );
if( err )
error = err;
if( t._comment)
comment = t._comment ;
if( t._creator )