(trunk) #1400, #2308: differentiate warnings and errors; differentiate between local messages and messages from the tracker
This commit is contained in:
parent
c86d2cc871
commit
a4767894e7
|
@ -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:
|
||||
|
|
|
@ -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 ) )
|
||||
|
|
|
@ -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 )
|
||||
{
|
||||
|
|
|
@ -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 );
|
||||
}
|
||||
|
|
|
@ -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 );
|
||||
|
|
|
@ -140,7 +140,7 @@ struct tr_torrent
|
|||
|
||||
int magicNumber;
|
||||
|
||||
int error;
|
||||
tr_stat_errtype error;
|
||||
char errorString[128];
|
||||
|
||||
uint8_t obfuscatedHash[SHA_DIGEST_LENGTH];
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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 ); }
|
||||
|
|
|
@ -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 )
|
||||
{
|
||||
|
|
|
@ -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 )
|
||||
|
|
Loading…
Reference in New Issue