diff --git a/ChangeLog b/ChangeLog index 8393fc358..8adda394a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -9,10 +9,8 @@ Version 0.1.0: added to or removed from folders; it is not watch individual files as most OSes can't support enough file watches to handle a normal-sized music collection. - -Version 0.0.4: * Fixed crash that could occur when playing a track from a browser. - * Fixed a crash situation caused by sources going on- or offline. + * Fixed a crash caused by sources going on- or offline. Version 0.0.3: * Show spinner while resolving playlists. diff --git a/src/libtomahawk/audio/audioengine.cpp b/src/libtomahawk/audio/audioengine.cpp index dd11b622b..a64c8abac 100644 --- a/src/libtomahawk/audio/audioengine.cpp +++ b/src/libtomahawk/audio/audioengine.cpp @@ -185,7 +185,6 @@ AudioEngine::loadTrack( const Tomahawk::result_ptr& result ) err = true; } } - } if ( !err ) @@ -195,15 +194,19 @@ AudioEngine::loadTrack( const Tomahawk::result_ptr& result ) if ( !m_input.isNull() || m_isPlayingHttp ) { + if ( !m_input.isNull() ) + { + m_input->close(); + m_input.clear(); + } + m_expectStop = true; } - - m_mediaObject->currentSource().setAutoDelete( true ); - if ( !isHttpResult( m_currentTrack->url() ) ) { m_mediaObject->setCurrentSource( io.data() ); + m_mediaObject->currentSource().setAutoDelete( false ); m_isPlayingHttp = false; } else @@ -216,6 +219,7 @@ AudioEngine::loadTrack( const Tomahawk::result_ptr& result ) qDebug() << Q_FUNC_INFO << furl; } m_mediaObject->setCurrentSource( furl ); + m_mediaObject->currentSource().setAutoDelete( true ); m_isPlayingHttp = true; } diff --git a/src/libtomahawk/network/controlconnection.cpp b/src/libtomahawk/network/controlconnection.cpp index 2d143d0f7..b260179cf 100644 --- a/src/libtomahawk/network/controlconnection.cpp +++ b/src/libtomahawk/network/controlconnection.cpp @@ -56,7 +56,8 @@ ControlConnection::~ControlConnection() delete m_pingtimer; m_servent->unregisterControlConnection( this ); - delete m_dbsyncconn; + if ( m_dbsyncconn ) + m_dbsyncconn->deleteLater(); } diff --git a/src/libtomahawk/network/dbsyncconnection.cpp b/src/libtomahawk/network/dbsyncconnection.cpp index b3559088f..4b6fa6ea1 100644 --- a/src/libtomahawk/network/dbsyncconnection.cpp +++ b/src/libtomahawk/network/dbsyncconnection.cpp @@ -1,5 +1,5 @@ /* === This file is part of Tomahawk Player - <http://tomahawk-player.org> === - * + * * Copyright 2010-2011, Christian Muehlhaeuser <muesli@tomahawk-player.org> * * Tomahawk is free software: you can redistribute it and/or modify @@ -69,6 +69,7 @@ DBSyncConnection::DBSyncConnection( Servent* s, source_ptr src ) DBSyncConnection::~DBSyncConnection() { qDebug() << "DTOR" << Q_FUNC_INFO; + m_state = SHUTDOWN; } @@ -83,6 +84,9 @@ DBSyncConnection::idleTimeout() void DBSyncConnection::changeState( State newstate ) { + if ( m_state == SHUTDOWN ) + return; + State s = m_state; m_state = newstate; qDebug() << "DBSYNC State changed from" << s << "to" << newstate; @@ -124,6 +128,12 @@ DBSyncConnection::check() qDebug() << "Syncing in progress already."; return; } + if ( m_state == SHUTDOWN ) + { + qDebug() << "Aborting sync due to shutdown."; + return; + } + m_uscache.clear(); m_themcache.clear(); m_us.clear(); diff --git a/src/libtomahawk/network/dbsyncconnection.h b/src/libtomahawk/network/dbsyncconnection.h index f97c633d5..4fbccdcc5 100644 --- a/src/libtomahawk/network/dbsyncconnection.h +++ b/src/libtomahawk/network/dbsyncconnection.h @@ -1,5 +1,5 @@ /* === This file is part of Tomahawk Player - <http://tomahawk-player.org> === - * + * * Copyright 2010-2011, Christian Muehlhaeuser <muesli@tomahawk-player.org> * * Tomahawk is free software: you can redistribute it and/or modify @@ -41,7 +41,8 @@ public: PARSING, SAVING, SYNCED, - SCANNING + SCANNING, + SHUTDOWN }; explicit DBSyncConnection( Servent* s, Tomahawk::source_ptr src ); @@ -81,7 +82,6 @@ private: QString m_lastSentOp; QTimer m_timer; - }; #endif // DBSYNCCONNECTION_H diff --git a/src/libtomahawk/sip/SipHandler.cpp b/src/libtomahawk/sip/SipHandler.cpp index 13d326c81..167a288cb 100644 --- a/src/libtomahawk/sip/SipHandler.cpp +++ b/src/libtomahawk/sip/SipHandler.cpp @@ -30,16 +30,12 @@ #include "network/controlconnection.h" #include "sourcelist.h" #include "tomahawksettings.h" -//#include "tomahawk/tomahawkapp.h" #include "config.h" - -//remove -#include <QLabel> - SipHandler* SipHandler::s_instance = 0; + SipHandler* SipHandler::instance() { @@ -163,6 +159,7 @@ SipHandler::loadPluginFactories( const QStringList& paths ) } } + SipPlugin* SipHandler::createPlugin( const QString& factoryId ) { @@ -175,6 +172,7 @@ SipHandler::createPlugin( const QString& factoryId ) return sip; } + SipPlugin* SipHandler::loadPlugin( const QString& pluginId ) { @@ -188,6 +186,7 @@ SipHandler::loadPlugin( const QString& pluginId ) return sip; } + void SipHandler::removePlugin( SipPlugin* p ) { @@ -263,6 +262,7 @@ SipHandler::checkSettings() } } + void SipHandler::addSipPlugin( SipPlugin* p, bool enabled, bool startup ) { @@ -278,6 +278,7 @@ SipHandler::addSipPlugin( SipPlugin* p, bool enabled, bool startup ) emit pluginAdded( p ); } + void SipHandler::removeSipPlugin( SipPlugin* p ) { @@ -290,6 +291,7 @@ SipHandler::removeSipPlugin( SipPlugin* p ) m_enabledPlugins.removeAll( p ); } + bool SipHandler::hasPluginType( const QString& factoryId ) const { @@ -318,6 +320,7 @@ SipHandler::loadFromConfig( bool startup ) m_connected = true; } + void SipHandler::connectAll() { @@ -339,6 +342,7 @@ SipHandler::disconnectAll() m_connected = false; } + void SipHandler::disablePlugin( SipPlugin* p ) { @@ -350,6 +354,7 @@ SipHandler::disablePlugin( SipPlugin* p ) m_enabledPlugins.removeAll( p ); } + void SipHandler::enablePlugin( SipPlugin* p ) { @@ -401,24 +406,28 @@ SipHandler::disconnectPlugin( const QString &pluginName ) } } + QList< SipPlugin* > SipHandler::allPlugins() const { return m_allPlugins; } + QList< SipPlugin* > SipHandler::enabledPlugins() const { return m_enabledPlugins; } + QList< SipPlugin* > SipHandler::connectedPlugins() const { return m_connectedPlugins; } + QList< SipPluginFactory* > SipHandler::pluginFactories() const { @@ -435,6 +444,7 @@ SipHandler::toggleConnect() connectAll(); } + void SipHandler::setProxy( const QNetworkProxy& proxy ) { @@ -500,6 +510,7 @@ SipHandler::onPeerOffline( const QString& jid ) qDebug() << "SIP offline:" << jid; } + void SipHandler::onSipInfo( const QString& peerId, const SipInfo& info ) { @@ -565,6 +576,7 @@ SipHandler::onError( int code, const QString& msg ) } } + void SipHandler::onStateChanged( SipPlugin::ConnectionState state ) { @@ -619,6 +631,7 @@ SipHandler::onAvatarReceived( const QString& from, const QPixmap& avatar ) } } + void SipHandler::onAvatarReceived( const QPixmap& avatar ) { @@ -633,6 +646,7 @@ SipHandler::factoryFromId( const QString& pluginId ) const return pluginId.split( "_" ).first(); } + SipPluginFactory* SipHandler::factoryFromPlugin( SipPlugin* p ) const { diff --git a/src/sip/jreen/jabber.cpp b/src/sip/jreen/jabber.cpp index 6df5e0d99..73ba775b7 100644 --- a/src/sip/jreen/jabber.cpp +++ b/src/sip/jreen/jabber.cpp @@ -144,8 +144,8 @@ JabberPlugin::~JabberPlugin() { delete m_avatarManager; delete m_roster; - delete m_client; delete m_xmlConsole; + delete m_client; delete m_ui; }