diff --git a/src/libtomahawk/AclRegistry.cpp b/src/libtomahawk/AclRegistry.cpp index 3f9b40303..8171a664f 100644 --- a/src/libtomahawk/AclRegistry.cpp +++ b/src/libtomahawk/AclRegistry.cpp @@ -49,7 +49,6 @@ ACLRegistry::ACLRegistry( QObject* parent ) s_instance = this; qRegisterMetaType< ACLRegistry::ACL >( "ACLRegistry::ACL" ); qRegisterMetaType< ACLRegistry::User >( "ACLRegistry::User" ); - load(); } @@ -62,13 +61,14 @@ ACLRegistry::~ACLRegistry() ACLRegistry::ACL ACLRegistry::isAuthorizedUser( const QString& dbid, const QString &username, ACLRegistry::ACL globalType, bool skipEmission ) { + tDebug() << Q_FUNC_INFO; if ( QThread::currentThread() != TOMAHAWK_APPLICATION::instance()->thread() ) { if ( !skipEmission ) QMetaObject::invokeMethod( this, "isAuthorizedUser", Qt::QueuedConnection, Q_ARG( const QString&, dbid ), Q_ARG( const QString &, username ), Q_ARG( ACLRegistry::ACL, globalType ), Q_ARG( bool, skipEmission ) ); return ACLRegistry::NotFound; } - + tDebug() << Q_FUNC_INFO << "in right thread"; //FIXME: Remove when things are working // emit aclResult( dbid, username, ACLRegistry::Stream ); // return ACLRegistry::NotFound; @@ -133,6 +133,7 @@ ACLRegistry::isAuthorizedUser( const QString& dbid, const QString &username, ACL void ACLRegistry::getUserDecision( ACLRegistry::User user, const QString &username ) { + tDebug() << Q_FUNC_INFO; AclJobItem* job = new AclJobItem( user, username ); m_jobQueue.enqueue( job ); queueNextJob(); @@ -143,6 +144,7 @@ ACLRegistry::getUserDecision( ACLRegistry::User user, const QString &username ) void ACLRegistry::userDecision( ACLRegistry::User user ) { + tDebug() << Q_FUNC_INFO; m_cache.append( user ); save(); emit aclResult( user.knownDbids.first(), user.knownAccountIds.first(), user.acl ); @@ -197,11 +199,13 @@ ACLRegistry::queueNextJob() void ACLRegistry::load() { + tDebug() << Q_FUNC_INFO; QVariantList entryList = TomahawkSettings::instance()->aclEntries(); foreach ( QVariant entry, entryList ) { if ( !entry.isValid() || !entry.canConvert< ACLRegistry::User >() ) continue; + tDebug() << Q_FUNC_INFO << "loading entry"; ACLRegistry::User entryUser = entry.value< ACLRegistry::User >(); m_cache.append( entryUser ); } @@ -211,8 +215,12 @@ ACLRegistry::load() void ACLRegistry::save() { + tDebug() << Q_FUNC_INFO; QVariantList entryList; foreach ( ACLRegistry::User user, m_cache ) + { + tDebug() << Q_FUNC_INFO << "user is " << user.uuid << " with known name " << user.knownAccountIds.first(); entryList.append( QVariant::fromValue< ACLRegistry::User >( user ) ); + } TomahawkSettings::instance()->setAclEntries( entryList ); } \ No newline at end of file diff --git a/src/libtomahawk/AclRegistry.h b/src/libtomahawk/AclRegistry.h index 1530a843f..96e655e6f 100644 --- a/src/libtomahawk/AclRegistry.h +++ b/src/libtomahawk/AclRegistry.h @@ -55,15 +55,27 @@ public: User() : uuid( QUuid::createUuid().toString() ) + , knownDbids() + , knownAccountIds() , acl( ACLRegistry::NotFound ) {} - User( QString p_uuid, QStringList p_knownDbids, QStringList p_knownAccountIds, ACL p_acl ) + ~User() + {} + + User( QString p_uuid, QStringList p_knownDbids, QStringList p_knownAccountIds, ACLRegistry::ACL p_acl ) : uuid( p_uuid ) , knownDbids( p_knownDbids ) , knownAccountIds( p_knownAccountIds ) , acl( p_acl ) {} + + User( const User &other ) + : uuid( other.uuid ) + , knownDbids( other.knownDbids ) + , knownAccountIds( other.knownAccountIds ) + , acl( other.acl ) + {} }; ACLRegistry( QObject *parent = 0 ); diff --git a/src/libtomahawk/TomahawkSettings.cpp b/src/libtomahawk/TomahawkSettings.cpp index 66bea27b5..938558f6c 100644 --- a/src/libtomahawk/TomahawkSettings.cpp +++ b/src/libtomahawk/TomahawkSettings.cpp @@ -642,7 +642,10 @@ TomahawkSettings::aclEntries() const void TomahawkSettings::setAclEntries( const QVariantList &entries ) { + tDebug() << "Setting entries"; setValue( "acl/entries", entries ); + sync(); + tDebug() << "Done setting entries"; } diff --git a/src/libtomahawk/jobview/AclJobItem.cpp b/src/libtomahawk/jobview/AclJobItem.cpp index ea8d93f96..0aebf8137 100644 --- a/src/libtomahawk/jobview/AclJobItem.cpp +++ b/src/libtomahawk/jobview/AclJobItem.cpp @@ -112,7 +112,7 @@ AclJobDelegate::drawRoundedButton( QPainter* painter, const QRect& btnRect, bool bool AclJobDelegate::editorEvent( QEvent* event, QAbstractItemModel* model, const QStyleOptionViewItem& option, const QModelIndex& index ) { - tDebug( LOGVERBOSE ) << Q_FUNC_INFO; + //tDebug( LOGVERBOSE ) << Q_FUNC_INFO; if ( event->type() != QEvent::MouseButtonPress && event->type() != QEvent::MouseButtonRelease && event->type() != QEvent::MouseButtonDblClick && @@ -123,7 +123,7 @@ AclJobDelegate::editorEvent( QEvent* event, QAbstractItemModel* model, const QSt { QMouseEvent* me = static_cast< QMouseEvent* >( event ); m_savedHoverPos = me->pos(); - tDebug( LOGVERBOSE ) << Q_FUNC_INFO << "Setting position to " << m_savedHoverPos; + //tDebug( LOGVERBOSE ) << Q_FUNC_INFO << "Setting position to " << m_savedHoverPos; emit update( index ); return true; } diff --git a/src/libtomahawk/jobview/JobStatusDelegate.cpp b/src/libtomahawk/jobview/JobStatusDelegate.cpp index cf07b6b92..e78e53837 100644 --- a/src/libtomahawk/jobview/JobStatusDelegate.cpp +++ b/src/libtomahawk/jobview/JobStatusDelegate.cpp @@ -59,8 +59,11 @@ JobStatusDelegate::paint( QPainter* painter, const QStyleOptionViewItem& option, if ( allowMultiLine ) iconRect.moveTop( opt.rect.top() + opt.rect.height() / 2 - iconRect.height() / 2); QPixmap p = index.data( Qt::DecorationRole ).value< QPixmap >(); - p = p.scaledToHeight( iconRect.height(), Qt::SmoothTransformation ); - painter->drawPixmap( iconRect, p ); + if ( !p.isNull() ) + { + p = p.scaledToHeight( iconRect.height(), Qt::SmoothTransformation ); + painter->drawPixmap( iconRect, p ); + } // draw right column if there is one const QString rCol = index.data( JobStatusModel::RightColumnRole ).toString(); diff --git a/src/libtomahawk/jobview/JobStatusView.cpp b/src/libtomahawk/jobview/JobStatusView.cpp index a758ed28b..35bc801b8 100644 --- a/src/libtomahawk/jobview/JobStatusView.cpp +++ b/src/libtomahawk/jobview/JobStatusView.cpp @@ -107,6 +107,7 @@ JobStatusView::customDelegateJobInserted( int row, JobStatusItem* item ) item->createDelegate( m_view ); tDebug( LOGVERBOSE ) << Q_FUNC_INFO << "item delegate is " << item->customDelegate(); m_view->setItemDelegateForRow( row, item->customDelegate() ); + m_customDelegateRefCounter[ row ] = m_customDelegateRefCounter[ row ] + 1; AclJobDelegate* delegate = qobject_cast< AclJobDelegate* >( item->customDelegate() ); if ( delegate ) { @@ -120,7 +121,9 @@ JobStatusView::customDelegateJobInserted( int row, JobStatusItem* item ) void JobStatusView::customDelegateJobRemoved( int row ) { - m_view->setItemDelegateForRow( row, m_view->itemDelegate() ); + if ( m_customDelegateRefCounter[ row ] == 1 ) + m_view->setItemDelegateForRow( row, m_view->itemDelegate() ); + m_customDelegateRefCounter[ row ] = m_customDelegateRefCounter[ row ] - 1; } diff --git a/src/libtomahawk/jobview/JobStatusView.h b/src/libtomahawk/jobview/JobStatusView.h index 1a5edf665..43b5a398a 100644 --- a/src/libtomahawk/jobview/JobStatusView.h +++ b/src/libtomahawk/jobview/JobStatusView.h @@ -61,6 +61,7 @@ private: JobStatusModel* m_model; AnimatedSplitter* m_parent; mutable int m_cachedHeight; + QHash< int, int > m_customDelegateRefCounter; static JobStatusView* s_instance; };