mirror of
https://github.com/tomahawk-player/tomahawk.git
synced 2025-08-05 21:57:41 +02:00
Weaken references to PeerInfos
This commit is contained in:
@@ -922,6 +922,11 @@ XmppSipPlugin::onNewIq( const Jreen::IQ& iq )
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
peerInfo->setSipInfos( sipMessage->sipInfos() );
|
peerInfo->setSipInfos( sipMessage->sipInfos() );
|
||||||
|
// If we stored a reference for this peer in our sip-waiting-queue, remove it.
|
||||||
|
if ( peersWaitingForSip.contains( iq.from().full() ) )
|
||||||
|
{
|
||||||
|
peersWaitingForSip.remove( iq.from().full() );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -964,6 +969,11 @@ XmppSipPlugin::handlePeerStatus( const Jreen::JID& jid, Jreen::Presence::Type pr
|
|||||||
if ( !peerInfo.isNull() )
|
if ( !peerInfo.isNull() )
|
||||||
{
|
{
|
||||||
peerInfo->setStatus( PeerInfo::Offline );
|
peerInfo->setStatus( PeerInfo::Offline );
|
||||||
|
// If we stored a reference for this peer in our sip-waiting-queue, remove it.
|
||||||
|
if ( peersWaitingForSip.contains( fulljid ) )
|
||||||
|
{
|
||||||
|
peersWaitingForSip.remove( fulljid );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
@@ -981,6 +991,7 @@ XmppSipPlugin::handlePeerStatus( const Jreen::JID& jid, Jreen::Presence::Type pr
|
|||||||
peerInfo->setContactId( jid.bare() );
|
peerInfo->setContactId( jid.bare() );
|
||||||
peerInfo->setStatus( PeerInfo::Online );
|
peerInfo->setStatus( PeerInfo::Online );
|
||||||
peerInfo->setFriendlyName( m_jidsNames.value( jid.bare() ) );
|
peerInfo->setFriendlyName( m_jidsNames.value( jid.bare() ) );
|
||||||
|
peersWaitingForSip[fulljid] = peerInfo;
|
||||||
|
|
||||||
#ifndef ENABLE_HEADLESS
|
#ifndef ENABLE_HEADLESS
|
||||||
if ( !m_avatarManager->avatar( jid.bare() ).isNull() )
|
if ( !m_avatarManager->avatar( jid.bare() ).isNull() )
|
||||||
|
@@ -153,6 +153,7 @@ private:
|
|||||||
enum IqContext { NoContext, RequestDisco, RequestedDisco, SipMessageSent, RequestedVCard, RequestVersion, RequestedVersion };
|
enum IqContext { NoContext, RequestDisco, RequestedDisco, SipMessageSent, RequestedVCard, RequestVersion, RequestedVersion };
|
||||||
AvatarManager* m_avatarManager;
|
AvatarManager* m_avatarManager;
|
||||||
Jreen::PubSub::Manager* m_pubSubManager;
|
Jreen::PubSub::Manager* m_pubSubManager;
|
||||||
|
QMap<QString, Tomahawk::peerinfo_ptr> peersWaitingForSip;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@@ -311,11 +311,28 @@ Servent::registerOffer( const QString& key, Connection* conn )
|
|||||||
m_offers[key] = QPointer<Connection>(conn);
|
m_offers[key] = QPointer<Connection>(conn);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Servent::registerLazyOffer(const QString &key, const peerinfo_ptr &peerInfo, const QString &nodeid )
|
void
|
||||||
|
Servent::registerLazyOffer(const QString &key, const peerinfo_ptr &peerInfo, const QString &nodeid, const int timeout )
|
||||||
{
|
{
|
||||||
m_lazyoffers[key] = QPair< peerinfo_ptr, QString >( peerInfo, nodeid );
|
m_lazyoffers[key] = QPair< peerinfo_ptr, QString >( peerInfo, nodeid );
|
||||||
|
QTimer* timer = new QTimer( this );
|
||||||
|
timer->setSingleShot( true );
|
||||||
|
NewClosure( timer, SIGNAL( timeout() ), this, SLOT( deleteLazyOffer( const QString& ) ), key );
|
||||||
|
timer->start();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Servent::deleteLazyOffer( const QString& key )
|
||||||
|
{
|
||||||
|
m_lazyoffers.remove( key );
|
||||||
|
|
||||||
|
// Cleanup.
|
||||||
|
QTimer* timer = (QTimer*)sender();
|
||||||
|
if ( timer )
|
||||||
|
{
|
||||||
|
timer->deleteLater();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Servent::registerControlConnection( ControlConnection* conn )
|
Servent::registerControlConnection( ControlConnection* conn )
|
||||||
@@ -464,8 +481,9 @@ Servent::registerPeer( const Tomahawk::peerinfo_ptr& peerInfo )
|
|||||||
QString key = uuid();
|
QString key = uuid();
|
||||||
const QString& nodeid = Database::instance()->impl()->dbid();
|
const QString& nodeid = Database::instance()->impl()->dbid();
|
||||||
|
|
||||||
registerLazyOffer( key, peerInfo, nodeid );
|
|
||||||
QList<SipInfo> sipInfos = getLocalSipInfos( nodeid, key );
|
QList<SipInfo> sipInfos = getLocalSipInfos( nodeid, key );
|
||||||
|
// The offer should be removed after some time or we will build up a heap of unused PeerInfos
|
||||||
|
registerLazyOffer( key, peerInfo, nodeid, sipInfos.length() * 1.5 * CONNECT_TIMEOUT );
|
||||||
// SipInfos were single-value before 0.7.999
|
// SipInfos were single-value before 0.7.999
|
||||||
if ( !peerInfo->versionString().isEmpty() && TomahawkUtils::compareVersionStrings( peerInfo->versionString(), "Tomahawk Player EmptyOS 0.7.99" ) < 0)
|
if ( !peerInfo->versionString().isEmpty() && TomahawkUtils::compareVersionStrings( peerInfo->versionString(), "Tomahawk Player EmptyOS 0.7.99" ) < 0)
|
||||||
{
|
{
|
||||||
|
@@ -77,7 +77,7 @@ public:
|
|||||||
QString createConnectionKey( const QString& name = "", const QString &nodeid = "", const QString &key = "", bool onceOnly = true );
|
QString createConnectionKey( const QString& name = "", const QString &nodeid = "", const QString &key = "", bool onceOnly = true );
|
||||||
|
|
||||||
void registerOffer( const QString& key, Connection* conn );
|
void registerOffer( const QString& key, Connection* conn );
|
||||||
void registerLazyOffer( const QString& key, const Tomahawk::peerinfo_ptr& peerInfo, const QString &nodeid );
|
void registerLazyOffer( const QString& key, const Tomahawk::peerinfo_ptr& peerInfo, const QString &nodeid , const int timeout );
|
||||||
|
|
||||||
void registerControlConnection( ControlConnection* conn );
|
void registerControlConnection( ControlConnection* conn );
|
||||||
void unregisterControlConnection( ControlConnection* conn );
|
void unregisterControlConnection( ControlConnection* conn );
|
||||||
@@ -156,6 +156,7 @@ public slots:
|
|||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void readyRead();
|
void readyRead();
|
||||||
|
void deleteLazyOffer( const QString& key );
|
||||||
|
|
||||||
Connection* claimOffer( ControlConnection* cc, const QString &nodeid, const QString &key, const QHostAddress peer = QHostAddress::Any );
|
Connection* claimOffer( ControlConnection* cc, const QString &nodeid, const QString &key, const QHostAddress peer = QHostAddress::Any );
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user