------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.
         
http://bugs.kde.org/show_bug.cgi?id=132101         
andre duffeck de changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |RESOLVED
         Resolution|                            |FIXED



------- Additional Comments From andre duffeck de  2006-08-19 19:34 -------
SVN commit 574652 by duffeck:

Handle simultaneous filetransfers properly.
NOTE: filetransfers containing several files at once are still not supported.
BUG: 132101


 M  +7 -1      libkyahoo/receivefiletask.cpp  
 M  +35 -14    yahooaccount.cpp  
 M  +1 -0      yahooaccount.h  


--- 
branches/KDE/3.5/kdenetwork/kopete/protocols/yahoo/libkyahoo/receivefiletask.cpp
 #574651:574652
 @ -107,7 +107,13  @
 
 
        if( t->service() == Yahoo::ServiceFileTransfer7Info )
-               return true;
+       {
+               // Only take this transfer if we are the corresponding task (in 
case of simultaneous file transfers)
+               if( t->firstParam( 265 ) == m_remoteUrl.url().local8Bit() )
+                       return true;
+               else
+                       return false;
+       }       
        else
                return false;
 }
--- branches/KDE/3.5/kdenetwork/kopete/protocols/yahoo/yahooaccount.cpp 
#574651:574652
 @ -1361,35 +1361,56  @
        kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << "Filename :" << fname << " 
size:" << fesize << endl;
        
        Kopete::TransferManager::transferManager()->askIncomingTransfer( 
contact( who ) , fname, fesize, msg, url );    
-       QObject::connect( Kopete::TransferManager::transferManager(), SIGNAL( 
accepted( Kopete::Transfer *, const QString& ) ),
-                                       this, SLOT( slotReceiveFileAccepted( 
Kopete::Transfer *, const QString& ) ) );
-       QObject::connect( Kopete::TransferManager::transferManager(), SIGNAL( 
refused(const Kopete::FileTransferInfo& ) ),
-                         this, SLOT( slotReceiveFileRefused( const 
Kopete::FileTransferInfo& ) ) );
+       
+       if( m_pendingFileTransfers.empty() )
+       {
+               QObject::connect( Kopete::TransferManager::transferManager(), 
SIGNAL( accepted( Kopete::Transfer *, const QString& ) ),
+                                               this, SLOT( 
slotReceiveFileAccepted( Kopete::Transfer *, const QString& ) ) );
+               QObject::connect( Kopete::TransferManager::transferManager(), 
SIGNAL( refused(const Kopete::FileTransferInfo& ) ),
+                                               this, SLOT( 
slotReceiveFileRefused( const Kopete::FileTransferInfo& ) ) );
+       }
+       m_pendingFileTransfers.append( url );
 }
 
 void YahooAccount::slotReceiveFileAccepted(Kopete::Transfer *transfer, const 
QString& fileName)
 {      
-       m_session->receiveFile( transfer->info().transferId(), 
transfer->info().contact()->contactId(), transfer->info().internalId(), 
fileName );
-       QObject::disconnect( Kopete::TransferManager::transferManager(), 
SIGNAL( accepted( Kopete::Transfer *, const QString& ) ),
-                            this, SLOT( slotReceiveFileAccepted( 
Kopete::Transfer *, const QString& ) ) );
-       QObject::disconnect( Kopete::TransferManager::transferManager(), 
SIGNAL( refused(const Kopete::FileTransferInfo& ) ),
-                         this, SLOT( slotReceiveFileRefused( const 
Kopete::FileTransferInfo& ) ) );
+       if( !m_pendingFileTransfers.contains( transfer->info().internalId() ) )
+               return;
        
+       m_pendingFileTransfers.remove( transfer->info().internalId() );
+       m_session->receiveFile( transfer->info().transferId(), 
transfer->info().contact()->contactId(), transfer->info().internalId(), 
fileName );      
        m_fileTransfers.insert( transfer->info().transferId(), transfer );
        QObject::connect( transfer, SIGNAL(result( KIO::Job * )), this, 
SLOT(slotFileTransferResult( KIO::Job * )) );
+       
+       if( m_pendingFileTransfers.empty() )
+       {
+               QObject::disconnect( 
Kopete::TransferManager::transferManager(), SIGNAL( accepted( Kopete::Transfer 
*, const QString& ) ),
+                                                       this, SLOT( 
slotReceiveFileAccepted( Kopete::Transfer *, const QString& ) ) );
+               QObject::disconnect( 
Kopete::TransferManager::transferManager(), SIGNAL( refused(const 
Kopete::FileTransferInfo& ) ),
+                                               this, SLOT( 
slotReceiveFileRefused( const Kopete::FileTransferInfo& ) ) );
+       }       
 }
 
 void YahooAccount::slotReceiveFileRefused( const Kopete::FileTransferInfo& 
info )
-{      
+{              
+       if( !m_pendingFileTransfers.contains( info.internalId() ) )
+               return;
+       
+       m_pendingFileTransfers.remove( info.internalId() );
        m_session->rejectFile( info.contact()->contactId(), info.internalId() );
-       QObject::disconnect( Kopete::TransferManager::transferManager(), 
SIGNAL( accepted( Kopete::Transfer *, const QString& ) ),
-                            this, SLOT( slotReceiveFileAccepted( 
Kopete::Transfer *, const QString& ) ) );
-       QObject::disconnect( Kopete::TransferManager::transferManager(), 
SIGNAL( refused(const Kopete::FileTransferInfo& ) ),
-                         this, SLOT( slotReceiveFileRefused( const 
Kopete::FileTransferInfo& ) ) );
+       
+       if( m_pendingFileTransfers.empty() )
+       {
+               QObject::disconnect( 
Kopete::TransferManager::transferManager(), SIGNAL( accepted( Kopete::Transfer 
*, const QString& ) ),
+                                                       this, SLOT( 
slotReceiveFileAccepted( Kopete::Transfer *, const QString& ) ) );
+               QObject::disconnect( 
Kopete::TransferManager::transferManager(), SIGNAL( refused(const 
Kopete::FileTransferInfo& ) ),
+                                               this, SLOT( 
slotReceiveFileRefused( const Kopete::FileTransferInfo& ) ) );
+       }
 }
 
 void YahooAccount::slotFileTransferBytesProcessed( unsigned int transferId, 
unsigned int bytes )
 {
+       kdDebug(YAHOO_GEN_DEBUG) << k_funcinfo << "Transfer: " << transferId << 
" Bytes:" << bytes << endl;
        Kopete::Transfer *t = m_fileTransfers[transferId];
        if( !t )
                return;
--- branches/KDE/3.5/kdenetwork/kopete/protocols/yahoo/yahooaccount.h 
#574651:574652
 @ -266,6 +266,7  @
        QMap<QString, YahooConferenceChatSession *> m_conferences;
        QStringList m_pendingConfInvites;
        QStringList m_pendingWebcamInvites;
+       QStringList m_pendingFileTransfers;
 
        QMap<unsigned int, Kopete::Transfer *> m_fileTransfers;
_______________________________________________
kopete-devel mailing list
kopete-devel@kde.org
https://mail.kde.org/mailman/listinfo/kopete-devel

Reply via email to