[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    playground/pim/krss
From:       Dmitry Ivanov <vonami () gmail ! com>
Date:       2009-06-12 12:34:34
Message-ID: 1244810074.747733.12091.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 980667 by divanov:

Pass TagProvider around by shared_ptr


 M  +1 -1      krssreader/mainwidget.cpp  
 M  +1 -1      krssreader/mainwidget.h  
 M  +2 -2      libkrss/feedjobs.cpp  
 M  +14 -10    libkrss/feedlistmodel.cpp  
 M  +3 -2      libkrss/feedlistmodel.h  
 M  +4 -2      libkrss/itemjobs.cpp  
 M  +4 -4      libkrss/standardactionmanager.cpp  
 M  +5 -1      libkrss/standardactionmanager.h  
 M  +10 -7     libkrss/tagprovider.cpp  
 M  +3 -4      libkrss/tagprovider.h  
 M  +4 -4      libkrss/tests/tagprovidertest.cpp  
 M  +2 -1      libkrss/tests/tagprovidertest.h  
 M  +2 -1      resources/libkrssresource/exportopmljob.cpp  
 M  +3 -2      resources/libkrssresource/importopmljob.cpp  
 M  +3 -2      resources/libkrssresource/importopmljob.h  
 M  +2 -1      resources/libkrssresource/tests/importopmljobtest.h  


--- trunk/playground/pim/krss/krssreader/mainwidget.cpp #980666:980667
@@ -182,7 +182,7 @@
 }
 
 MainWidget::MainWidget( KXmlGuiWindow *parent )
-    : QWidget( parent ), m_tagProvider( 0 ), m_actionCollection( \
parent->actionCollection() ) +    : QWidget( parent ), m_actionCollection( \
parent->actionCollection() )  {
     QHBoxLayout *mainLayout = new QHBoxLayout( this );
     setLayout( mainLayout );
--- trunk/playground/pim/krss/krssreader/mainwidget.h #980666:980667
@@ -82,7 +82,7 @@
     boost::shared_ptr<KRss::TreeNode> m_currentNode;
     KRss::FeedListView *m_feedListView;
     boost::shared_ptr<KRss::FeedList> m_feedList;
-    const KRss::TagProvider *m_tagProvider;
+    boost::shared_ptr<const KRss::TagProvider> m_tagProvider;
     KRss::StandardActionManager *m_actionManager;
     QPointer<KActionCollection> m_actionCollection;
 };
--- trunk/playground/pim/krss/libkrss/feedjobs.cpp #980666:980667
@@ -128,7 +128,7 @@
 
     const TagProviderRetrieveJob * const tjob = qobject_cast<const \
TagProviderRetrieveJob*>( job );  Q_ASSERT( tjob );
-    const TagProvider *tp = tjob->tagProvider();
+    const shared_ptr<const TagProvider> tp = tjob->tagProvider();
 
     const QList<TagId> newTags = m_feed->tags();
     kDebug() << "New tags:" << newTags;
@@ -222,7 +222,7 @@
 
     const TagProviderRetrieveJob * const tjob = qobject_cast<const \
TagProviderRetrieveJob*>( job );  Q_ASSERT( tjob );
-    const TagProvider *tp = tjob->tagProvider();
+    const shared_ptr<const TagProvider> tp = tjob->tagProvider();
 
     TagDeleteReferencesJob *djob = tp->tagDeleteReferencesJob();
     djob->setReferrer( m_feed.get() );
--- trunk/playground/pim/krss/libkrss/feedlistmodel.cpp #980666:980667
@@ -37,8 +37,9 @@
 class FeedListModelPrivate
 {
 public:
-    FeedListModelPrivate( const shared_ptr<const FeedList>& feedList, const \
                TagProvider *provider,
-                                   FeedListModel * const qq );
+    FeedListModelPrivate( const shared_ptr<const FeedList>& feedList,
+                          const shared_ptr<const TagProvider>& tagProvider,
+                          FeedListModel * const qq );
 
     shared_ptr<TagNode> addTagNode( const Tag& tag );
     void addFeed( const Feed::Id& feedId );
@@ -62,7 +63,7 @@
     FeedListModel * const q;
 
     shared_ptr<const FeedList> m_feedList;
-    const TagProvider* m_tagProvider;
+    const shared_ptr<const TagProvider> m_tagProvider;
     Tag m_allFeedsTag;
 
     shared_ptr<RootNode> m_rootNode;
@@ -206,9 +207,10 @@
 
 
 // private implementation
-FeedListModelPrivate::FeedListModelPrivate( const shared_ptr<const FeedList>& \
feedList, const TagProvider *provider, +FeedListModelPrivate::FeedListModelPrivate( \
const shared_ptr<const FeedList>& feedList, +                                         \
const shared_ptr<const TagProvider>& tagProvider,  FeedListModel * const qq )
-    : q( qq ), m_feedList( feedList ), m_tagProvider( provider )
+    : q( qq ), m_feedList( feedList ), m_tagProvider( tagProvider )
 {
     // construct the root node
     m_rootNode = shared_ptr<RootNode>( new RootNode );
@@ -429,8 +431,10 @@
 }
 
 // public interface implementation
-FeedListModel::FeedListModel( const shared_ptr<const FeedList>& feedList, const \
                TagProvider *provider, QObject *parent )
-    : QAbstractItemModel( parent ), d( new FeedListModelPrivate( feedList, provider, \
this ) ) +FeedListModel::FeedListModel( const shared_ptr<const FeedList>& feedList,
+                              const shared_ptr<const TagProvider>& tagProvider,
+                              QObject *parent )
+    : QAbstractItemModel( parent ), d( new FeedListModelPrivate( feedList, \
tagProvider, this ) )  {
     if ( d->m_feedList ) {
         connect( d->m_feedList.get(), SIGNAL( feedAdded( const KRss::Feed::Id& ) ),
@@ -448,11 +452,11 @@
             d->addFeed( feedId );
     }
 
-    connect( d->m_tagProvider, SIGNAL( tagCreated( const KRss::Tag& ) ),
+    connect( d->m_tagProvider.get(), SIGNAL( tagCreated( const KRss::Tag& ) ),
              this, SLOT( slotTagCreated( const KRss::Tag& ) ) );
-    connect( d->m_tagProvider, SIGNAL( tagModified( const KRss::Tag& ) ),
+    connect( d->m_tagProvider.get(), SIGNAL( tagModified( const KRss::Tag& ) ),
              this, SLOT( slotTagModified( const KRss::Tag& ) ) );
-    connect( d->m_tagProvider, SIGNAL( tagDeleted( const KRss::TagId& ) ),
+    connect( d->m_tagProvider.get(), SIGNAL( tagDeleted( const KRss::TagId& ) ),
              this, SLOT( slotTagDeleted( const KRss::TagId& ) ) );
 }
 
--- trunk/playground/pim/krss/libkrss/feedlistmodel.h #980666:980667
@@ -43,8 +43,9 @@
 
 public:
 
-    FeedListModel( const boost::shared_ptr<const FeedList>& feedlist, const \
                TagProvider *provider,
-                            QObject *parent = 0 );
+    FeedListModel( const boost::shared_ptr<const FeedList>& feedlist,
+                   const boost::shared_ptr<const TagProvider>& tagProvider,
+                   QObject *parent = 0 );
     ~FeedListModel();
 
     boost::shared_ptr<const FeedList> feedList() const;
--- trunk/playground/pim/krss/libkrss/itemjobs.cpp #980666:980667
@@ -27,8 +27,10 @@
 #include <Akonadi/ItemDeleteJob>
 #include <KLocale>
 #include <KDebug>
+#include <boost/shared_ptr.hpp>
 
 using namespace KRss;
+using boost::shared_ptr;
 
 class KRss::ItemFetchJobPrivate
 {
@@ -210,7 +212,7 @@
 
     const TagProviderRetrieveJob * const tjob = qobject_cast<const \
TagProviderRetrieveJob*>( job );  Q_ASSERT( tjob );
-    const TagProvider * const tp = tjob->tagProvider();
+    const shared_ptr<const TagProvider> tp = tjob->tagProvider();
     TagModifyReferencesJob * const cjob = tp->tagModifyReferencesJob();
     cjob->setReferrer( m_itemToModify );
     cjob->setAddedTags( toAdd.toList() );
@@ -329,7 +331,7 @@
 
     const TagProviderRetrieveJob * const tjob = qobject_cast<const \
TagProviderRetrieveJob*>( job );  Q_ASSERT( tjob );
-    const TagProvider * const tp = tjob->tagProvider();
+    const shared_ptr<const TagProvider> tp = tjob->tagProvider();
     TagDeleteReferencesJob * const cjob = tp->tagDeleteReferencesJob();
     cjob->setReferrer( m_item );
     q->connect( cjob, SIGNAL( result( KJob* ) ), q, SLOT( slotReferencesDeleted( \
                KJob* ) ) );
--- trunk/playground/pim/krss/libkrss/standardactionmanager.cpp #980666:980667
@@ -85,7 +85,7 @@
 
     StandardActionManagerPrivate( KActionCollection *actionCollection, QWidget \
                *parent )
         : m_actionCollection( actionCollection ), m_parentWidget( parent ), \
                m_feedSelectionModel( 0 ),
-          m_itemSelectionModel( 0 ), m_tagProvider( 0 )
+          m_itemSelectionModel( 0 )
     {
     }
 
@@ -95,7 +95,7 @@
     QItemSelectionModel *m_itemSelectionModel;
     shared_ptr<const FeedList> m_feedList;
     QString m_subscriptionLabel;
-    const TagProvider *m_tagProvider;
+    shared_ptr<const TagProvider> m_tagProvider;
     QVector<KAction*> m_actions;
 };
 
@@ -142,9 +142,9 @@
     d->m_subscriptionLabel = subscriptionLabel;
 }
 
-void StandardActionManager::setTagProvider( const TagProvider *provider )
+void StandardActionManager::setTagProvider( const shared_ptr<const TagProvider>& \
provider )  {
-    Q_ASSERT( provider != 0 );
+    Q_ASSERT( provider );
     d->m_tagProvider = provider;
     updateActions();
 }
--- trunk/playground/pim/krss/libkrss/standardactionmanager.h #980666:980667
@@ -28,6 +28,10 @@
 class QItemSelectionModel;
 class QWidget;
 
+namespace boost {
+template <typename T> class shared_ptr;
+}
+
 namespace KRss {
 
 class TagProvider;
@@ -63,7 +67,7 @@
     void setFeedSelectionModel( QItemSelectionModel *selectionModel );
     void setItemSelectionModel( QItemSelectionModel *selectionModel );
     void setSubscriptionLabel( const QString &subscriptionLabel );
-    void setTagProvider( const TagProvider *provider );
+    void setTagProvider( const boost::shared_ptr<const TagProvider>& tagProvider );
     KAction* action( Type type );
     void createAllActions();
 
--- trunk/playground/pim/krss/libkrss/tagprovider.cpp #980666:980667
@@ -20,6 +20,8 @@
 
 #include <KLocale>
 #include <KDebug>
+#include <KGlobal>
+#include <boost/shared_ptr.hpp>
 
 #ifdef HAVE_NEPOMUK
 #include "nepomuktagprovider/nepomuktagprovider.h"
@@ -30,7 +32,11 @@
 #endif
 
 using namespace KRss;
+using boost::shared_ptr;
 
+// caches the loaded instance of TagProvider
+K_GLOBAL_STATIC( shared_ptr<TagProvider>, s_tagProvider );
+
 namespace KRss {
 
 class TagProviderRetrieveJobPrivate
@@ -44,7 +50,6 @@
     void tagProviderLoaded( KJob *job );
 
 public:
-    static TagProvider *m_provider;
     TagProviderRetrieveJob* const q;
 };
 
@@ -59,8 +64,6 @@
 {
 }
 
-TagProvider* TagProviderRetrieveJobPrivate::m_provider = 0;
-
 void TagProviderRetrieveJobPrivate::tagProviderLoaded( KJob *job )
 {
     if ( job->error() ) {
@@ -71,7 +74,7 @@
         return;
     }
 
-    m_provider = static_cast<TagProviderLoadJob*>( job )->tagProvider();
+    s_tagProvider->reset( static_cast<TagProviderLoadJob*>( job )->tagProvider() );
     q->emitResult();
 }
 
@@ -80,14 +83,14 @@
 {
 }
 
-TagProvider* TagProviderRetrieveJob::tagProvider() const
+shared_ptr<TagProvider> TagProviderRetrieveJob::tagProvider() const
 {
-    return TagProviderRetrieveJobPrivate::m_provider;
+    return *s_tagProvider;
 }
 
 void TagProviderRetrieveJob::start()
 {
-    if ( TagProviderRetrieveJobPrivate::m_provider ) {
+    if ( s_tagProvider->get() ) {
         // loaded before, so return the instance
         kDebug() << "Already loaded, returning the instance";
         emitResult();
--- trunk/playground/pim/krss/libkrss/tagprovider.h #980666:980667
@@ -24,6 +24,7 @@
 #include <QtCore/QObject>
 #include <QtCore/QList>
 #include <QtCore/QHash>
+#include <boost/shared_ptr.hpp>
 
 namespace KRss {
 
@@ -46,6 +47,7 @@
     Q_OBJECT
 public:
     explicit TagProvider( QObject *parent = 0 );
+    virtual ~TagProvider();
 
     virtual Tag tag( const TagId& id ) const = 0;
     virtual QHash<TagId, Tag> tags() const = 0;
@@ -64,9 +66,6 @@
     void tagModified( const KRss::Tag& tag );
     void tagDeleted( const KRss::TagId& id );
 
-protected:
-    virtual ~TagProvider();
-
 private:
     // these jobs use Tag*ReferencesJob to update
     // the tagprovider specific storage
@@ -90,7 +89,7 @@
     };
 
     explicit TagProviderRetrieveJob( QObject *parent = 0 );
-    TagProvider* tagProvider() const;
+    boost::shared_ptr<TagProvider> tagProvider() const;
     void start();
     QString errorString() const;
 
--- trunk/playground/pim/krss/libkrss/tests/tagprovidertest.cpp #980666:980667
@@ -51,7 +51,7 @@
     tag.setLabel( "Test tag" );
     tag.setDescription( "This is a test tag" );
 
-    QSignalSpy spyCreateTag( m_tagProvider, SIGNAL( tagCreated( const KRss::Tag& ) ) \
); +    QSignalSpy spyCreateTag( m_tagProvider.get(), SIGNAL( tagCreated( const \
KRss::Tag& ) ) );  QVERIFY( spyCreateTag.isValid() );
 
     TagCreateJob *job = m_tagProvider->tagCreateJob();
@@ -83,7 +83,7 @@
     tag.setLabel( "Test tag" );
     tag.setDescription( "This is a test tag" );
 
-    QSignalSpy spyCreateTag( m_tagProvider, SIGNAL( tagCreated( const KRss::Tag& ) ) \
); +    QSignalSpy spyCreateTag( m_tagProvider.get(), SIGNAL( tagCreated( const \
KRss::Tag& ) ) );  QVERIFY( spyCreateTag.isValid() );
 
     TagCreateJob *job = m_tagProvider->tagCreateJob();
@@ -102,7 +102,7 @@
     m_tag.setLabel( "Modified test tag" );
     m_tag.setDescription( "This was a test tag" );
 
-    QSignalSpy spyModifyTag( m_tagProvider, SIGNAL( tagModified( const KRss::Tag& ) \
) ); +    QSignalSpy spyModifyTag( m_tagProvider.get(), SIGNAL( tagModified( const \
KRss::Tag& ) ) );  QVERIFY( spyModifyTag.isValid() );
 
     TagModifyJob *job = m_tagProvider->tagModifyJob();
@@ -124,7 +124,7 @@
 
 void TagProviderTest::deleteEmptyTagTest()
 {
-    QSignalSpy spyDeleteTag( m_tagProvider, SIGNAL( tagDeleted( const KRss::TagId& ) \
) ); +    QSignalSpy spyDeleteTag( m_tagProvider.get(), SIGNAL( tagDeleted( const \
KRss::TagId& ) ) );  QVERIFY( spyDeleteTag.isValid() );
 
     TagDeleteJob *job = m_tagProvider->tagDeleteJob();
--- trunk/playground/pim/krss/libkrss/tests/tagprovidertest.h #980666:980667
@@ -21,6 +21,7 @@
 #include "tag.h"
 
 #include <QtCore/QObject>
+#include <boost/shared_ptr.hpp>
 
 namespace KRss {
 class TagProvider;
@@ -39,7 +40,7 @@
     //void deleteNonEmptyTagTest();
 
 private:
-    KRss::TagProvider *m_tagProvider;
+    boost::shared_ptr<KRss::TagProvider> m_tagProvider;
     KRss::Tag m_tag;
 };
 
--- trunk/playground/pim/krss/resources/libkrssresource/exportopmljob.cpp \
#980666:980667 @@ -27,6 +27,7 @@
 #include <QtCore/QXmlStreamWriter>
 
 using namespace KRssResource;
+using boost::shared_ptr;
 
 ExportOpmlJob::ExportOpmlJob( const KUrl& path, QObject *parent )
     : KJob( parent ), m_path( path )
@@ -106,7 +107,7 @@
     const KRss::TagProviderRetrieveJob * const rjob = qobject_cast<const \
KRss::TagProviderRetrieveJob*>( job );  assert( rjob );
 
-    const KRss::TagProvider * const tagProvider = rjob->tagProvider();
+    const shared_ptr<const KRss::TagProvider> tagProvider = rjob->tagProvider();
     const QList<Akonadi::Collection> feeds = \
FeedCollectionsCache::feedCollections();  
     QByteArray data;
--- trunk/playground/pim/krss/resources/libkrssresource/importopmljob.cpp \
#980666:980667 @@ -37,6 +37,7 @@
 #include <cassert>
 
 using namespace KRssResource;
+using boost::shared_ptr;
 
 ImportOpmlJob::ImportOpmlJob( const KUrl& path, QObject *parent )
     : KJob( parent ), m_backendJob( 0 ), m_path( path ), m_pendingJobs( 0 )
@@ -279,11 +280,11 @@
 }
 
 TagsCreateJob::TagsCreateJob( QObject *parent )
-    : KJob( parent ), m_tagProvider( 0 ), m_pendingJobs( 0 )
+    : KJob( parent ), m_pendingJobs( 0 )
 {
 }
 
-void TagsCreateJob::setTagProvider( const KRss::TagProvider *tagProvider )
+void TagsCreateJob::setTagProvider( const shared_ptr<const KRss::TagProvider>& \
tagProvider )  {
     m_tagProvider = tagProvider;
 }
--- trunk/playground/pim/krss/resources/libkrssresource/importopmljob.h \
#980666:980667 @@ -23,6 +23,7 @@
 #include "libkrssresource/opmlparser.h"
 
 #include <KJob>
+#include <boost/shared_ptr.hpp>
 
 namespace KRss {
 class TagProvider;
@@ -81,7 +82,7 @@
 public:
     explicit TagsCreateJob( QObject *parent = 0 );
 
-    void setTagProvider( const KRss::TagProvider *tagProvider );
+    void setTagProvider( const boost::shared_ptr<const KRss::TagProvider>& \
tagProvider );  void setTagLabels( const QList<QString>& tagLabels );
 
     QList<KRss::Tag> tags() const;
@@ -99,7 +100,7 @@
     void slotTagCreated( KJob *job );
 
 private:
-    const KRss::TagProvider *m_tagProvider;
+    boost::shared_ptr<const KRss::TagProvider> m_tagProvider;
     QList<QString> m_tagLabels;
     QVector<KRss::Tag> m_tags;
     int m_pendingJobs;
--- trunk/playground/pim/krss/resources/libkrssresource/tests/importopmljobtest.h \
#980666:980667 @@ -20,6 +20,7 @@
 
 #include <Akonadi/Collection>
 #include <QtCore/QObject>
+#include <boost/shared_ptr.hpp>
 
 namespace KRss {
 class TagProvider;
@@ -35,7 +36,7 @@
     void testBrokenOpml();
 
 private:
-    const KRss::TagProvider *m_tagProvider;
+    boost::shared_ptr<const KRss::TagProvider> m_tagProvider;
     Akonadi::Collection::Id m_freedesktopId;
 };
 


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic