Changeset 11109
- Timestamp:
- Aug 4, 2010, 1:56:52 PM (13 years ago)
- Location:
- trunk/qt
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/qt/session.cc
r11092 r11109 235 235 myPrefs( prefs ), 236 236 mySession( 0 ), 237 myConfigDir( configDir ) 237 myConfigDir( configDir ), 238 myNAM( 0 ) 238 239 { 239 240 myStats.ratio = TR_RATIO_NA; … … 245 246 myCumulativeStats = myStats; 246 247 247 connect( &myNAM, SIGNAL(finished(QNetworkReply*)), this, SLOT(onFinished(QNetworkReply*)) );248 connect( &myNAM, SIGNAL(authenticationRequired(QNetworkReply*,QAuthenticator*)), this, SIGNAL(httpAuthenticationRequired()) );249 248 connect( &myPrefs, SIGNAL(changed(int)), this, SLOT(updatePref(int)) ); 250 249 } … … 253 252 { 254 253 stop( ); 254 } 255 256 QNetworkAccessManager * 257 Session :: networkAccessManager( ) 258 { 259 if( myNAM == 0 ) 260 { 261 myNAM = new QNetworkAccessManager; 262 263 connect( myNAM, SIGNAL(finished(QNetworkReply*)), 264 this, SLOT(onFinished(QNetworkReply*)) ); 265 266 connect( myNAM, SIGNAL(authenticationRequired(QNetworkReply*,QAuthenticator*)), 267 this, SIGNAL(httpAuthenticationRequired()) ); 268 } 269 270 return myNAM; 255 271 } 256 272 … … 262 278 Session :: stop( ) 263 279 { 264 foreach( Reply myReply, myReplies ) 265 myReply.networkReply->abort(); 280 if( myNAM != 0 ) 281 { 282 myNAM->deleteLater( ); 283 myNAM = 0; 284 } 285 266 286 myUrl.clear( ); 267 287 … … 285 305 if( myPrefs.get<bool>(Prefs::SESSION_IS_REMOTE) ) 286 306 { 287 const int port( myPrefs.get<int>(Prefs::SESSION_REMOTE_PORT) );288 const bool auth( myPrefs.get<bool>(Prefs::SESSION_REMOTE_AUTH) );289 const QString host( myPrefs.get<QString>(Prefs::SESSION_REMOTE_HOST) );290 const QString user( myPrefs.get<QString>(Prefs::SESSION_REMOTE_USERNAME) );291 const QString pass( myPrefs.get<QString>(Prefs::SESSION_REMOTE_PASSWORD) );292 293 307 QUrl url; 294 308 url.setScheme( "http" ); 295 url.setHost( host);296 url.setPort( port);309 url.setHost( myPrefs.get<QString>(Prefs::SESSION_REMOTE_HOST) ); 310 url.setPort( myPrefs.get<int>(Prefs::SESSION_REMOTE_PORT) ); 297 311 url.setPath( "/transmission/rpc" ); 298 if( auth ) { 299 url.setUserName( user ); 300 url.setPassword( pass ); 312 if( myPrefs.get<bool>(Prefs::SESSION_REMOTE_AUTH) ) 313 { 314 url.setUserName( myPrefs.get<QString>(Prefs::SESSION_REMOTE_USERNAME) ); 315 url.setPassword( myPrefs.get<QString>(Prefs::SESSION_REMOTE_PASSWORD) ); 301 316 } 302 317 myUrl = url; … … 603 618 } 604 619 620 #define REQUEST_DATA_PROPERTY_KEY "requestData" 621 605 622 void 606 623 Session :: exec( const char * json ) … … 619 636 request.setRawHeader( TR_RPC_SESSION_ID_HEADER, mySessionId.toAscii() ); 620 637 621 QBuffer * reqbuf = new QBuffer; 622 reqbuf->setData( QByteArray( json ) ); 623 624 QNetworkReply * reply = myNAM.post( request, reqbuf ); 638 const QByteArray requestData( json ); 639 QNetworkReply * reply = networkAccessManager()->post( request, requestData ); 640 reply->setProperty( REQUEST_DATA_PROPERTY_KEY, requestData ); 625 641 connect( reply, SIGNAL(downloadProgress(qint64,qint64)), this, SIGNAL(dataReadProgress())); 626 642 connect( reply, SIGNAL(uploadProgress(qint64,qint64)), this, SIGNAL(dataSendProgress())); 627 643 628 Reply myReply;629 myReply.networkReply = reply;630 myReply.buffer = reqbuf;631 myReplies << myReply;632 644 #ifdef DEBUG_HTTP 633 645 std::cerr << "sending " << "POST " << qPrintable( myUrl.path() ) << std::endl; … … 645 657 Session :: onFinished( QNetworkReply * reply ) 646 658 { 647 QBuffer * buffer;648 for( QList<Reply>::iterator i = myReplies.begin(); i != myReplies.end(); ++i )649 {650 if( reply == i->networkReply )651 {652 buffer = i->buffer;653 myReplies.erase( i );654 break;655 }656 }657 658 659 #ifdef DEBUG_HTTP 659 660 std::cerr << "http response header: " << std::endl; … … 672 673 // update it and resubmit the request. 673 674 mySessionId = QString( reply->rawHeader( TR_RPC_SESSION_ID_HEADER ) ); 674 exec( buffer->buffer().constData() );675 exec( reply->property( REQUEST_DATA_PROPERTY_KEY ).toByteArray( ).constData( ) ); 675 676 } 676 677 else if( reply->error() != QNetworkReply::NoError ) … … 687 688 } 688 689 689 delete buffer;690 690 reply->deleteLater(); 691 691 } -
trunk/qt/session.h
r11092 r11109 34 34 35 35 class Prefs; 36 37 struct Reply38 {39 QNetworkReply * networkReply;40 QBuffer * buffer;41 };42 typedef QList<Reply> ReplyList;43 36 44 37 class Session: public QObject … … 97 90 static void updateStats( struct tr_benc * d, struct tr_session_stats * stats ); 98 91 void refreshTorrents( const QSet<int>& torrentIds ); 92 QNetworkAccessManager * networkAccessManager( ); 99 93 100 94 public: … … 150 144 QString mySessionId; 151 145 QUrl myUrl; 152 QNetworkAccessManager myNAM; 153 ReplyList myReplies; 146 QNetworkAccessManager * myNAM; 154 147 struct tr_session_stats myStats; 155 148 struct tr_session_stats myCumulativeStats;
Note: See TracChangeset
for help on using the changeset viewer.